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

 $subject

 This can and should go in soon, before any other IPv6 work.


- ML

diff -Nurd -X.diff_ignore freeciv/server/meta.c freeciv/server/meta.c
--- freeciv/server/meta.c       2008-06-16 04:25:57.000000000 +0300
+++ freeciv/server/meta.c       2008-06-22 08:33:07.000000000 +0300
@@ -428,7 +428,7 @@
   metaserver_path = mystrdup(path);
 
   if (!net_lookup_service(metaname, metaport, &meta_addr)) {
-    freelog(LOG_ERROR, _("Metaserver: bad address: [%s:%d]."),
+    freelog(LOG_ERROR, _("Metaserver: bad address: <%s %d>."),
             metaname, metaport);
     metaserver_failed();
     return FALSE;
diff -Nurd -X.diff_ignore freeciv/server/srv_main.c freeciv/server/srv_main.c
--- freeciv/server/srv_main.c   2008-06-16 04:25:57.000000000 +0300
+++ freeciv/server/srv_main.c   2008-06-22 08:34:43.000000000 +0300
@@ -1955,7 +1955,7 @@
   maybe_automatic_meta_message(default_meta_message_string());
 
   if(!(srvarg.metaserver_no_send)) {
-    freelog(LOG_NORMAL, _("Sending info to metaserver [%s]"),
+    freelog(LOG_NORMAL, _("Sending info to metaserver <%s>"),
            meta_addr_port());
     /* Open socket for meta server */
     if (!server_open_meta()
diff -Nurd -X.diff_ignore freeciv/utility/netintf.c freeciv/utility/netintf.c
--- freeciv/utility/netintf.c   2008-03-09 01:19:13.000000000 +0200
+++ freeciv/utility/netintf.c   2008-06-22 08:33:07.000000000 +0300
@@ -342,6 +342,8 @@
 const char *my_lookup_httpd(char *server, int *port, const char *url)
 {
   const char *purl, *str, *ppath, *pport;
+  const char *str2;
+  int chars_between = 0;
 
   if ((purl = getenv("http_proxy"))) {
     if (strncmp(purl, "http://";, strlen("http://";)) != 0) {
@@ -356,18 +358,30 @@
   }
 
   str += strlen("http://";);
-  
-  pport = strchr(str, ':');
-  ppath = strchr(str, '/');
+
+  if (*str == '[') {
+    /* Literal IPv6 address (RFC 2732) */
+    str++;
+    str2 = strchr(str, ']') + 1;
+    if (!str2) {
+      str2 = str + strlen(str);
+    }
+    chars_between = 1;
+  } else {
+    str2 = str;
+  }
+
+  pport = strchr(str2, ':');
+  ppath = strchr(str2, '/');
 
   /* snarf server. */
   server[0] = '\0';
 
   if (pport) {
-    strncat(server, str, MIN(MAX_LEN_ADDR, pport-str));
+    strncat(server, str, MIN(MAX_LEN_ADDR, pport-str-chars_between));
   } else {
     if (ppath) {
-      strncat(server, str, MIN(MAX_LEN_ADDR, ppath-str));
+      strncat(server, str, MIN(MAX_LEN_ADDR, ppath-str-chars_between));
     } else {
       strncat(server, str, MAX_LEN_ADDR);
     }
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to