<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40362 >

 This patch adds separate field for sockaddr_in6 (IPv6) to my_sockaddr
union. Fields are renamed so that naming is consistent and no variable
has same name as the structure it's instance of.


 - ML

diff -Nurd -X.diff_ignore freeciv/client/clinet.c freeciv/client/clinet.c
--- freeciv/client/clinet.c     2008-03-08 16:33:11.000000000 +0200
+++ freeciv/client/clinet.c     2008-07-06 17:08:55.000000000 +0300
@@ -204,7 +204,7 @@
     return -1;
   }
 
-  if (my_connect(client.conn.sock, &server_addr.sockaddr,
+  if (my_connect(client.conn.sock, &server_addr.saddr,
       sizeof(server_addr)) == -1) {
     (void) mystrlcpy(errbuf, mystrerror(), errbufsize);
     my_closesocket(client.conn.sock);
diff -Nurd -X.diff_ignore freeciv/client/servers.c freeciv/client/servers.c
--- freeciv/client/servers.c    2008-06-24 01:37:58.000000000 +0300
+++ freeciv/client/servers.c    2008-07-06 17:10:07.000000000 +0300
@@ -421,7 +421,7 @@
 
   my_nonblock(s);
   
-  if (my_connect(s, (struct sockaddr *) &addr.sockaddr, sizeof(addr)) == -1) {
+  if (my_connect(s, (struct sockaddr *) &addr.saddr, sizeof(addr)) == -1) {
     if (errno == EINPROGRESS) {
       /* With non-blocking sockets this is the expected result. */
       scan->meta.state = META_CONNECTING;
@@ -559,9 +559,9 @@
   /* Set the UDP Multicast group IP address. */
   group = get_multicast_group();
   memset(&addr, 0, sizeof(addr));
-  addr.sockaddr_in.sin_family = AF_INET;
-  addr.sockaddr_in.sin_addr.s_addr = inet_addr(get_multicast_group());
-  addr.sockaddr_in.sin_port = htons(SERVER_LAN_PORT);
+  addr.saddr_in4.sin_family = AF_INET;
+  addr.saddr_in4.sin_addr.s_addr = inet_addr(get_multicast_group());
+  addr.saddr_in4.sin_port = htons(SERVER_LAN_PORT);
 
 /* this setsockopt call fails on Windows 98, so we stick with the default
  * value of 1 on Windows, which should be fine in most cases */
@@ -586,7 +586,7 @@
   size = dio_output_used(&dout);
  
 
-  if (sendto(sock, buffer, size, 0, &addr.sockaddr,
+  if (sendto(sock, buffer, size, 0, &addr.saddr,
       sizeof(addr)) < 0) {
     /* This can happen when there's no network connection - it should
      * give an in-game message. */
@@ -612,11 +612,11 @@
   }
                                                                                
   memset(&addr, 0, sizeof(addr));
-  addr.sockaddr_in.sin_family = AF_INET;
-  addr.sockaddr_in.sin_addr.s_addr = htonl(INADDR_ANY); 
-  addr.sockaddr_in.sin_port = htons(SERVER_LAN_PORT + 1);
+  addr.saddr_in4.sin_family = AF_INET;
+  addr.saddr_in4.sin_addr.s_addr = htonl(INADDR_ANY); 
+  addr.saddr_in4.sin_port = htons(SERVER_LAN_PORT + 1);
 
-  if (bind(scan->sock, &addr.sockaddr, sizeof(addr)) < 0) {
+  if (bind(scan->sock, &addr.saddr, sizeof(addr)) < 0) {
     (scan->error_func)(scan, mystrerror());
     return FALSE;
   }
@@ -664,7 +664,7 @@
     /* Try to receive a packet from a server.  No select loop is needed;
      * we just keep on reading until recvfrom returns -1. */
     if (recvfrom(scan->sock, msgbuf, sizeof(msgbuf), 0,
-                &fromend.sockaddr, &fromlen) < 0) {
+                &fromend.saddr, &fromlen) < 0) {
       break;
     }
 
@@ -680,9 +680,9 @@
     dio_get_string(&din, message, sizeof(message));
 
     if (!mystrcasecmp("none", servername)) {
-      from = gethostbyaddr((char *) &fromend.sockaddr_in.sin_addr,
-                          sizeof(fromend.sockaddr_in.sin_addr), AF_INET);
-      sz_strlcpy(servername, inet_ntoa(fromend.sockaddr_in.sin_addr));
+      from = gethostbyaddr((char *) &fromend.saddr_in4.sin_addr,
+                          sizeof(fromend.saddr_in4.sin_addr), AF_INET);
+      sz_strlcpy(servername, inet_ntoa(fromend.saddr_in4.sin_addr));
     }
 
     /* UDP can send duplicate or delayed packets. */
diff -Nurd -X.diff_ignore freeciv/server/sernet.c freeciv/server/sernet.c
--- freeciv/server/sernet.c     2008-06-28 17:48:44.000000000 +0300
+++ freeciv/server/sernet.c     2008-07-06 17:08:07.000000000 +0300
@@ -825,19 +825,19 @@
 
   fromlen = sizeof(fromend);
 
-  if ((new_sock = accept(sockfd, &fromend.sockaddr, &fromlen)) == -1) {
+  if ((new_sock = accept(sockfd, &fromend.saddr, &fromlen)) == -1) {
     freelog(LOG_ERROR, "accept failed: %s", mystrerror());
     return -1;
   }
 
   from =
-      gethostbyaddr((char *) &fromend.sockaddr_in.sin_addr,
-                   sizeof(fromend.sockaddr_in.sin_addr), AF_INET);
+      gethostbyaddr((char *) &fromend.saddr_in4.sin_addr,
+                   sizeof(fromend.saddr_in4.sin_addr), AF_INET);
 
   return server_make_connection(new_sock,
                                (from ? from->h_name
-                                : inet_ntoa(fromend.sockaddr_in.sin_addr)),
-                               inet_ntoa(fromend.sockaddr_in.sin_addr));
+                                 : inet_ntoa(fromend.saddr_in4.sin_addr)),
+                               inet_ntoa(fromend.saddr_in4.sin_addr));
 }
 
 /********************************************************************
@@ -923,7 +923,7 @@
     exit(EXIT_FAILURE);
   }
 
-  if(bind(sock, &src.sockaddr, sizeof (src)) == -1) {
+  if(bind(sock, &src.saddr, sizeof (src)) == -1) {
     freelog(LOG_FATAL, "bind failed: %s", mystrerror());
     exit(EXIT_FAILURE);
   }
@@ -948,11 +948,11 @@
   group = get_multicast_group();
 
   memset(&addr, 0, sizeof(addr));
-  addr.sockaddr_in.sin_family = AF_INET;
-  addr.sockaddr_in.sin_addr.s_addr = htonl(INADDR_ANY);
-  addr.sockaddr_in.sin_port = htons(SERVER_LAN_PORT);
+  addr.saddr_in4.sin_family = AF_INET;
+  addr.saddr_in4.sin_addr.s_addr = htonl(INADDR_ANY);
+  addr.saddr_in4.sin_port = htons(SERVER_LAN_PORT);
 
-  if (bind(socklan, &addr.sockaddr, sizeof(addr)) < 0) {
+  if (bind(socklan, &addr.saddr, sizeof(addr)) < 0) {
     freelog(LOG_ERROR, "bind failed: %s", mystrerror());
   }
 
@@ -1160,9 +1160,9 @@
   /* Set the UDP Multicast group IP address of the packet. */
   group = get_multicast_group();
   memset(&addr, 0, sizeof(addr));
-  addr.sockaddr_in.sin_family = AF_INET;
-  addr.sockaddr_in.sin_addr.s_addr = inet_addr(group);
-  addr.sockaddr_in.sin_port = htons(SERVER_LAN_PORT + 1);
+  addr.saddr_in4.sin_family = AF_INET;
+  addr.saddr_in4.sin_addr.s_addr = inet_addr(group);
+  addr.saddr_in4.sin_port = htons(SERVER_LAN_PORT + 1);
 
 /* this setsockopt call fails on Windows 98, so we stick with the default
  * value of 1 on Windows, which should be fine in most cases */
@@ -1224,7 +1224,7 @@
   size = dio_output_used(&dout);
 
   /* Sending packet to client with the information gathered above. */
-  if (sendto(socksend, buffer,  size, 0, &addr.sockaddr,
+  if (sendto(socksend, buffer,  size, 0, &addr.saddr,
       sizeof(addr)) < 0) {
     freelog(LOG_ERROR, "sendto failed: %s", mystrerror());
     return;
diff -Nurd -X.diff_ignore freeciv/utility/netintf.c freeciv/utility/netintf.c
--- freeciv/utility/netintf.c   2008-06-25 12:21:38.000000000 +0300
+++ freeciv/utility/netintf.c   2008-07-06 17:05:52.000000000 +0300
@@ -246,7 +246,7 @@
 bool net_lookup_service(const char *name, int port, union my_sockaddr *addr)
 {
   struct hostent *hp;
-  struct sockaddr_in *sock = &addr->sockaddr_in;
+  struct sockaddr_in *sock = &addr->saddr_in4;
 
   sock->sin_family = AF_INET;
   sock->sin_port = htons(port);
@@ -456,7 +456,7 @@
 
   for (port = starting_port;; port++) {
     union my_sockaddr tmp;
-    struct sockaddr_in *sock = &tmp.sockaddr_in;
+    struct sockaddr_in *sock = &tmp.saddr_in4;
 
     memset(&tmp, 0, sizeof(tmp));
 
@@ -464,7 +464,7 @@
     sock->sin_port = htons(port);
     sock->sin_addr.s_addr = htonl(INADDR_ANY);
 
-    if (bind(s, &tmp.sockaddr, sizeof(tmp.sockaddr)) == 0) {
+    if (bind(s, &tmp.saddr, sizeof(tmp.saddr)) == 0) {
       break;
     }
   }
diff -Nurd -X.diff_ignore freeciv/utility/netintf.h freeciv/utility/netintf.h
--- freeciv/utility/netintf.h   2007-10-29 21:10:29.000000000 +0200
+++ freeciv/utility/netintf.h   2008-07-06 17:04:35.000000000 +0300
@@ -68,8 +68,11 @@
 #endif
 
 union my_sockaddr {
-  struct sockaddr sockaddr;
-  struct sockaddr_in sockaddr_in;
+  struct sockaddr saddr;
+  struct sockaddr_in saddr_in4;
+#ifdef IPV6_SUPPORT
+  struct sockaddr_in6 saddr_in6;
+#endif
 };
 
 int my_connect(int sockfd, const struct sockaddr *serv_addr, socklen_t 
addrlen);
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to