Show
Ignore:
Timestamp:
10/20/05 15:05:40 (17 years ago)
Author:
andreu
Message:

second RENETCOL CVS Integration

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/remote_output.c

    r2 r8  
    3131printHostDef(RemoteHostPtr rHPtr) 
    3232{ 
     33  char buf[256]; 
    3334  fprintf(stderr, " socket : %d\n", rHPtr->sockId); 
    34   fprintf(stderr, " address : %s:%u\n",  
    35           inet_ntoa(rHPtr->hostAddressPtr->sin_addr),  
    36           ntohs(rHPtr->hostAddressPtr->sin_port)); 
     35  switch (rHPtr->hostAddressPtr->ss_family){ 
     36  case AF_INET: 
     37    fprintf(stderr, " address : %s\n",  
     38            inet_ntop(rHPtr->hostAddressPtr->ss_family, 
     39                      &((struct sockaddr_in *)rHPtr->hostAddressPtr)->sin_addr, 
     40                      buf, 256)); 
     41    break; 
     42  case AF_INET6: 
     43    fprintf(stderr, " address : %s\n", 
     44            inet_ntop(rHPtr->hostAddressPtr->ss_family, 
     45                      &((struct sockaddr_in6 *)rHPtr->hostAddressPtr)->sin6_addr, 
     46                      buf, 256)); 
     47    break; 
     48  } 
    3749} 
    3850 
     
    4355freeRemoteHost(RemoteHostPtr rHPtr) 
    4456{ 
    45   if (rHPtr->msgIpv4){ 
    46     free(rHPtr->msgIpv4); 
    47     rHPtr->msgIpv4 = NULL; 
    48   } 
    49   if (rHPtr->msgIpv6){ 
    50     free(rHPtr->msgIpv6); 
    51     rHPtr->msgIpv6 = NULL; 
    52   } 
    53   if (rHPtr->msgXcast){ 
    54     free(rHPtr->msgXcast); 
    55     rHPtr->msgXcast = NULL; 
     57  if (rHPtr->hostAddressPtr){ 
     58    free(rHPtr->hostAddressPtr); 
     59    rHPtr->hostAddressPtr = NULL; 
    5660  } 
    5761  free(rHPtr); 
     
    99103 */ 
    100104int  
    101 create_socket(char *remote_address, int remote_port, struct sockaddr_in *addr) 
     105create_socket(char *remote_address, char *remote_port, struct sockaddr_storage *addr) 
    102106{ 
    103107  int s; 
    104   s = socket(AF_INET, SOCK_DGRAM, 0); 
     108  struct addrinfo index, *res=NULL; 
     109  int code; 
     110 
     111  memset(&index, 0, sizeof index); 
     112  index.ai_family = AF_UNSPEC; 
     113  index.ai_socktype = SOCK_DGRAM; 
     114  index.ai_protocol = IPPROTO_UDP;   
     115  code = getaddrinfo(remote_address, remote_port, &index, &res); 
     116  if (code!=0) { 
     117    syslog(LOG_ERR, "Error, %s : %s", gai_strerror(code), remote_address); 
     118    return 0; 
     119  } 
     120  s = socket(res->ai_family, res->ai_socktype, res->ai_protocol); 
    105121  if (s < 0) 
    106122    { 
    107       perror("opening datagram socket"); 
    108       exit(1); 
     123      syslog(LOG_ERR,"Error during opening datagram socket %s",  
     124             strerror(errno)); 
     125      return 0; 
    109126    } 
    110   memset(addr, 0, sizeof(struct sockaddr_in)); 
    111   addr->sin_addr.s_addr = inet_addr(remote_address); /* FIXME obsolete */ 
    112   addr->sin_family = AF_INET; 
    113   addr->sin_port = htons(remote_port); 
     127  switch (res->ai_family){ 
     128  case AF_INET6: 
     129    addr->ss_family = AF_INET6; 
     130    ((struct sockaddr_in6 *)addr)->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; 
     131    ((struct sockaddr_in6 *)addr)->sin6_port =  
     132      htons((unsigned short)atoi(remote_port)); 
     133    break; 
     134  case AF_INET: 
     135    ((struct sockaddr_in *)addr)->sin_addr = ((struct sockaddr_in *)res->ai_addr)->sin_addr; 
     136    addr->ss_family = AF_INET; 
     137    ((struct sockaddr_in *)addr)->sin_port =  
     138      htons((unsigned short)atoi(remote_port)); 
     139    break; 
     140  case AF_UNSPEC: 
     141    break; 
     142  } 
     143  freeaddrinfo(res); 
    114144  return s; 
    115145} 
     
    120150int  
    121151sendMessage(int socket_number, unsigned char *msg, int msgSize, 
    122             struct sockaddr_in *addr) 
     152            struct sockaddr_storage *addr) 
    123153{ 
    124154  int s; 
     155  socklen_t addrlen = sizeof(struct sockaddr_storage); 
    125156  if ((s=sendto(socket_number, msg, (size_t)msgSize, 0,  
    126                 (struct sockaddr *)addr, 
    127                 sizeof(struct sockaddr_in))) < 0) 
     157                (struct sockaddr *)addr, addrlen)) < 0) 
    128158    { 
    129       fprintf(stderr, "Error ******** : %d bytes sent\n", s); 
    130       perror("sending packet"); 
     159      syslog(LOG_ERR, "Error: %d bytes sent, %s", 
     160             s, strerror(errno)); 
    131161      exit(1); 
    132162    }