From 7301ba05bc1abeaea79de3e49a861ca3ad9f8bfd Mon Sep 17 00:00:00 2001 From: jnashok Date: Mon, 14 Sep 2015 15:30:47 +0900 Subject: [PATCH] Fixed wrong update of ip information interface name is assigned instead of ip address port is assigned with 0 instead of correct port number This patch fixes both Change-Id: Id88e02d37bfb7a83c59100b997a021782f67099a Signed-off-by: jnashok Reviewed-on: https://gerrit.iotivity.org/gerrit/2501 Tested-by: jenkins-iotivity Reviewed-by: Patrick Lankswert --- .../csdk/connectivity/samples/linux/sample_main.c | 13 ++--- .../src/ip_adapter/arduino/caipserver_eth.cpp | 13 +++-- .../src/ip_adapter/arduino/caipserver_wifi.cpp | 11 ++-- .../csdk/connectivity/src/ip_adapter/caipserver.c | 60 +++++++++++++++++++--- 4 files changed, 77 insertions(+), 20 deletions(-) diff --git a/resource/csdk/connectivity/samples/linux/sample_main.c b/resource/csdk/connectivity/samples/linux/sample_main.c index 2e040c9..2043828 100644 --- a/resource/csdk/connectivity/samples/linux/sample_main.c +++ b/resource/csdk/connectivity/samples/linux/sample_main.c @@ -988,13 +988,14 @@ void get_network_info() if (CA_ADAPTER_IP == tempInfo[index].adapter) { printf("Port: %d\n", tempInfo[index].port); - } - printf("Secured: %s\n\n", (tempInfo[index].flags & CA_SECURE) ? "true" : "false"); + printf("Secured: %s flag : %x\n\n", (tempInfo[index].flags & CA_SECURE) ? "true" : + "false", tempInfo[index].flags); - if (tempInfo[index].flags & CA_SECURE) - { - g_local_secure_port = tempInfo[index].port; - printf("Secured: in global %d\n\n", g_local_secure_port); + if (tempInfo[index].flags & CA_SECURE) + { + g_local_secure_port = tempInfo[index].port; + printf("Secured: in global %d\n\n", g_local_secure_port); + } } } diff --git a/resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_eth.cpp b/resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_eth.cpp index 74a51f6..5f46dd3 100644 --- a/resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_eth.cpp +++ b/resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_eth.cpp @@ -102,6 +102,8 @@ CAResult_t CAIPStartUnicastServer(const char *localAddress, uint16_t *port, g_unicastSocket = serverFD; CAIPSetUnicastSocket(g_unicastSocket); CAIPSetUnicastPort(g_unicastPort); + caglobals.ip.u4.port = *port; + OIC_LOG_V(DEBUG, TAG, "g_unicastPort: %u", g_unicastPort); OIC_LOG_V(DEBUG, TAG, "g_unicastSocket: %d", g_unicastSocket); OIC_LOG(DEBUG, TAG, "OUT"); @@ -127,6 +129,7 @@ CAResult_t CAIPStartMulticastServer(const char *localAddress, const char *multic g_multicastSocket = serverFD; g_isMulticastServerStarted = true; + OIC_LOG_V(DEBUG, TAG, "gMulticastPort: %d", multicastPort); OIC_LOG_V(DEBUG, TAG, "g_multicastSocket: %d", g_multicastSocket); OIC_LOG(DEBUG, TAG, "OUT"); @@ -140,7 +143,8 @@ CAResult_t CAIPStartServer() CAResult_t ret = CAIPStartUnicastServer("0.0.0.0", &unicastPort, false); if (CA_STATUS_OK != ret) { - OIC_LOG_V(DEBUG, TAG, "Start unicast serv failed[%d]", ret); + OIC_LOG_V(ERROR, TAG, "Start unicast server failed[%d]", ret); + return ret; } ret = CAIPStartMulticastServer("0.0.0.0", "224.0.1.187", 5683); if (CA_STATUS_OK != ret) @@ -155,6 +159,7 @@ CAResult_t CAIPStopUnicastServer() OIC_LOG(DEBUG, TAG, "IN"); close(g_unicastSocket); g_unicastSocket = 0; + caglobals.ip.u4.port = 0; OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; } @@ -328,11 +333,13 @@ CAResult_t CAGetIPInterfaceInformation(CAEndpoint_t **info, uint32_t *size) { CAInterface_t *ifitem = (CAInterface_t *)u_arraylist_get(iflist, i); - OICStrcpy(eps[j].addr, CA_INTERFACE_NAME_SIZE, ifitem->name); + unsigned char *addr= (unsigned char *) &(ifitem->ipv4addr); + snprintf(eps[j].addr, MAX_ADDR_STR_SIZE_CA, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); + eps[j].flags = CA_IPV4; eps[j].adapter = CA_ADAPTER_IP; eps[j].interface = 0; - eps[j].port = 0; + eps[j].port = caglobals.ip.u4.port; j++; } diff --git a/resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_wifi.cpp b/resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_wifi.cpp index d537adc..ce2b57d 100644 --- a/resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_wifi.cpp +++ b/resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_wifi.cpp @@ -110,6 +110,7 @@ CAResult_t CAIPStartUnicastServer(const char *localAddress, uint16_t *port, Udp.begin((uint16_t ) *port); gServerRunning = true; g_unicastPort = *port; + caglobals.ip.u4.port = *port; OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; } @@ -130,7 +131,8 @@ CAResult_t CAIPStartServer() CAResult_t ret = CAIPStartUnicastServer("0.0.0.0", &unicastPort, false); if (CA_STATUS_OK != ret) { - OIC_LOG_V(DEBUG, TAG, "Start unicast serv failed[%d]", ret); + OIC_LOG_V(ERROR, TAG, "Start unicast server failed[%d]", ret); + return ret; } ret = CAIPStartMulticastServer("0.0.0.0", "224.0.1.187", 5683); if (CA_STATUS_OK != ret) @@ -146,6 +148,7 @@ CAResult_t CAIPStopUnicastServer() Udp.stop(); gServerRunning = false; + caglobals.ip.u4.port = 0; OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; } @@ -273,11 +276,13 @@ CAResult_t CAGetIPInterfaceInformation(CAEndpoint_t **info, uint32_t *size) { CAInterface_t *ifitem = (CAInterface_t *)u_arraylist_get(iflist, i); - OICStrcpy(eps[j].addr, CA_INTERFACE_NAME_SIZE, ifitem->name); + unsigned char *addr= (unsigned char *) &(ifitem->ipv4addr); + snprintf(eps[j].addr, MAX_ADDR_STR_SIZE_CA, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); + eps[j].flags = CA_IPV4; eps[j].adapter = CA_ADAPTER_IP; eps[j].interface = 0; - eps[j].port = 0; + eps[j].port = caglobals.ip.u4.port; j++; } diff --git a/resource/csdk/connectivity/src/ip_adapter/caipserver.c b/resource/csdk/connectivity/src/ip_adapter/caipserver.c index e9bfd57..a463c83 100644 --- a/resource/csdk/connectivity/src/ip_adapter/caipserver.c +++ b/resource/csdk/connectivity/src/ip_adapter/caipserver.c @@ -460,11 +460,15 @@ CAResult_t CAIPStartServer(const ca_thread_pool_t threadPool) OIC_LOG_V(DEBUG, TAG, "socket summary: u6=%d, u6s=%d, u4=%d, u4s=%d, m6=%d, m6s=%d, m4=%d, m4s=%d", - caglobals.ip.u6.fd, caglobals.ip.u6s.fd, - caglobals.ip.u4.fd, caglobals.ip.u4s.fd, - caglobals.ip.m6.fd, caglobals.ip.m6s.fd, - caglobals.ip.m4.fd, caglobals.ip.m4s.fd); + caglobals.ip.u6.fd, caglobals.ip.u6s.fd, caglobals.ip.u4.fd, caglobals.ip.u4s.fd, + caglobals.ip.m6.fd, caglobals.ip.m6s.fd, caglobals.ip.m4.fd, caglobals.ip.m4s.fd); + OIC_LOG_V(DEBUG, TAG, + "port summary: u6 port=%d, u6s port=%d, u4 port=%d, u4s port=%d, m6 port=%d," + "m6s port=%d, m4 port=%d, m4s port=%d", + caglobals.ip.u6.port, caglobals.ip.u6s.port, caglobals.ip.u4.port, + caglobals.ip.u4s.port, caglobals.ip.m6.port, caglobals.ip.m6s.port, + caglobals.ip.m4.port, caglobals.ip.m4s.port); // create pipe for fast shutdown CAInitializePipe(); CHECKFD(caglobals.ip.shutdownFds[0]); @@ -897,8 +901,14 @@ CAResult_t CAGetIPInterfaceInformation(CAEndpoint_t **info, uint32_t *size) } uint32_t len = u_arraylist_length(iflist); + uint32_t length = len; + +#ifdef __WITH_DTLS__ + //If DTLS is supported, each interface can support secure port as well + length = len * 2; +#endif - CAEndpoint_t *eps = (CAEndpoint_t *)OICCalloc(len, sizeof (CAEndpoint_t)); + CAEndpoint_t *eps = (CAEndpoint_t *)OICCalloc(length, sizeof (CAEndpoint_t)); if (!eps) { OIC_LOG(ERROR, TAG, "Malloc Failed"); @@ -914,11 +924,45 @@ CAResult_t CAGetIPInterfaceInformation(CAEndpoint_t **info, uint32_t *size) continue; } - OICStrcpy(eps[j].addr, CA_INTERFACE_NAME_SIZE, ifitem->name); - eps[j].flags = ifitem->family == AF_INET6 ? CA_IPV6 : CA_IPV4; eps[j].adapter = CA_ADAPTER_IP; eps[j].interface = 0; - eps[j].port = 0; + + if (ifitem->family == AF_INET6) + { + eps[j].flags = CA_IPV6; + eps[j].port = caglobals.ip.u6.port; + } + else + { + eps[j].flags = CA_IPV4; + eps[j].port = caglobals.ip.u4.port; + + unsigned char *addr= (unsigned char *) &(ifitem->ipv4addr); + snprintf(eps[j].addr, MAX_ADDR_STR_SIZE_CA, "%d.%d.%d.%d", + addr[0], addr[1], addr[2], addr[3]); + } + +#ifdef __WITH_DTLS__ + j++; + + eps[j].adapter = CA_ADAPTER_IP; + eps[j].interface = 0; + + if (ifitem->family == AF_INET6) + { + eps[j].flags = CA_IPV6 | CA_SECURE; + eps[j].port = caglobals.ip.u6s.port; + } + else + { + eps[j].flags = CA_IPV4 | CA_SECURE; + eps[j].port = caglobals.ip.u4s.port; + + unsigned char *addr= (unsigned char *) &(ifitem->ipv4addr); + snprintf(eps[j].addr, MAX_ADDR_STR_SIZE_CA, "%d.%d.%d.%d", + addr[0], addr[1], addr[2], addr[3]); + } +#endif j++; } -- 2.7.4