Răsfoiți Sursa

consul support ipv6

hewei.it 4 ani în urmă
părinte
comite
0b6e86d208
2 a modificat fișierele cu 20 adăugiri și 7 ștergeri
  1. 18 5
      consul/consul.cpp
  2. 2 2
      consul/consul.h

+ 18 - 5
consul/consul.cpp

@@ -138,17 +138,30 @@ int discover_services(consul_node_t* node, const char* service_name, std::vector
         if (!jname.is_string()) {
             continue;
         }
-        auto jip = jservice["ServiceAddress"];
-        if (!jip.is_string()) {
-            continue;
-        }
         auto jport = jservice["ServicePort"];
         if (!jport.is_number_integer()) {
             continue;
         }
 
+        string ip;
+        auto jip = jservice["Address"];
+        if (jip.is_string()) {
+            ip = jip;
+        }
+        if (ip.empty()) {
+            jip = jservice["ServiceAddress"];
+            if (jip.is_string()) {
+                ip = jip;
+            }
+        }
+        if (ip.empty()) {
+            jip = jservice["ServiceAddress6"];
+            if (jip.is_string()) {
+                ip = jip;
+            }
+        }
+
         string name = jname;
-        string ip = jip;
         int    port = jport;
 
         strncpy(service.name, name.c_str(), sizeof(service.name));

+ 2 - 2
consul/consul.h

@@ -8,7 +8,7 @@
 
 typedef struct consul_node_s {
     // node
-    char ip[32];
+    char ip[64];
     int  port;
 
     consul_node_s() {
@@ -20,7 +20,7 @@ typedef struct consul_node_s {
 typedef struct consul_service_s {
     // service
     char name[64];
-    char ip[32];
+    char ip[64];
     int  port;
 
     consul_service_s() {