CAResult_t CAStartIPListeningServer() { CAResult_t ret = CAIPStartListenServer(); if (CA_STATUS_OK != ret) { OIC_LOG_V(ERROR, TAG, "Failed to start listening server![%d]", ret); return ret; } return CA_STATUS_OK; }
CAResult_t CAIPStartServer(const ca_thread_pool_t threadPool) { CAResult_t res = CA_STATUS_OK; if (caglobals.ip.started) { return res; } if (!IPv4MulticastAddress.s_addr) { (void)inet_pton(AF_INET, IPv4_MULTICAST, &IPv4MulticastAddress); (void)inet_pton(AF_INET6, IPv6_MULTICAST_INT, &IPv6MulticastAddressInt); (void)inet_pton(AF_INET6, IPv6_MULTICAST_LNK, &IPv6MulticastAddressLnk); (void)inet_pton(AF_INET6, IPv6_MULTICAST_RLM, &IPv6MulticastAddressRlm); (void)inet_pton(AF_INET6, IPv6_MULTICAST_ADM, &IPv6MulticastAddressAdm); (void)inet_pton(AF_INET6, IPv6_MULTICAST_SIT, &IPv6MulticastAddressSit); (void)inet_pton(AF_INET6, IPv6_MULTICAST_ORG, &IPv6MulticastAddressOrg); (void)inet_pton(AF_INET6, IPv6_MULTICAST_GLB, &IPv6MulticastAddressGlb); } if (!caglobals.ip.ipv6enabled && !caglobals.ip.ipv4enabled) { caglobals.ip.ipv4enabled = true; // only needed to run CA tests } if (caglobals.ip.ipv6enabled) { NEWSOCKET(AF_INET6, u6) NEWSOCKET(AF_INET6, u6s) NEWSOCKET(AF_INET6, m6) NEWSOCKET(AF_INET6, m6s) OIC_LOG_V(INFO, TAG, "IPv6 unicast port: %u", caglobals.ip.u6.port); } if (caglobals.ip.ipv4enabled) { NEWSOCKET(AF_INET, u4) NEWSOCKET(AF_INET, u4s) NEWSOCKET(AF_INET, m4) NEWSOCKET(AF_INET, m4s) OIC_LOG_V(INFO, TAG, "IPv4 unicast port: %u", caglobals.ip.u4.port); } 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); 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]); CHECKFD(caglobals.ip.shutdownFds[1]); // create source of network interface change notifications CAInitializeNetlink(); caglobals.ip.selectTimeout = CAGetPollingInterval(caglobals.ip.selectTimeout); res = CAIPStartListenServer(); if (CA_STATUS_OK != res) { OIC_LOG_V(ERROR, TAG, "Failed to start listening server![%d]", res); return res; } caglobals.ip.terminate = false; res = ca_thread_pool_add_task(threadPool, CAReceiveHandler, NULL); if (CA_STATUS_OK != res) { OIC_LOG(ERROR, TAG, "thread_pool_add_task failed"); return res; } OIC_LOG(DEBUG, TAG, "CAReceiveHandler thread started successfully."); caglobals.ip.started = true; return CA_STATUS_OK; }