InProcClientWrapper::InProcClientWrapper( std::weak_ptr<std::recursive_mutex> csdkLock, PlatformConfig cfg) : m_threadRun(false), m_csdkLock(csdkLock), m_cfg { cfg } { // if the config type is server, we ought to never get called. If the config type // is both, we count on the server to run the thread and do the initialize if(m_cfg.mode == ModeType::Client) { OCTransportFlags serverFlags = static_cast<OCTransportFlags>(m_cfg.serverConnectivity & CT_MASK_FLAGS); OCTransportFlags clientFlags = static_cast<OCTransportFlags>(m_cfg.clientConnectivity & CT_MASK_FLAGS); OCStackResult result = OCInit1(OC_CLIENT, serverFlags, clientFlags); if(OC_STACK_OK != result) { throw InitializeException(OC::InitException::STACK_INIT_ERROR, result); } m_threadRun = true; m_listeningThread = std::thread(&InProcClientWrapper::listeningFunc, this); } }
InProcServerWrapper::InProcServerWrapper( std::weak_ptr<std::recursive_mutex> csdkLock, PlatformConfig cfg) : m_csdkLock(csdkLock) { OCMode initType; if(cfg.mode == ModeType::Server) { initType = OC_SERVER; } else if (cfg.mode == ModeType::Both) { initType = OC_CLIENT_SERVER; } else if (cfg.mode == ModeType::Gateway) { initType = OC_GATEWAY; } else { throw InitializeException(OC::InitException::NOT_CONFIGURED_AS_SERVER, OC_STACK_INVALID_PARAM); } OCTransportFlags serverFlags = static_cast<OCTransportFlags>(cfg.serverConnectivity & CT_MASK_FLAGS); OCTransportFlags clientFlags = static_cast<OCTransportFlags>(cfg.clientConnectivity & CT_MASK_FLAGS); OCStackResult result = OCInit1(initType, serverFlags, clientFlags); if(OC_STACK_OK != result) { throw InitializeException(OC::InitException::STACK_INIT_ERROR, result); } m_threadRun = true; m_processThread = std::thread(&InProcServerWrapper::processFunc, this); }
int main(int argc, char* argv[]) { int opt; while ((opt = getopt(argc, argv, "u:t:c:")) != -1) { switch(opt) { case 'u': UnicastDiscovery = atoi(optarg); break; case 't': TestCase = atoi(optarg); break; case 'c': Connectivity = atoi(optarg); break; default: PrintUsage(); return -1; } } if ((UnicastDiscovery != 0 && UnicastDiscovery != 1) || (TestCase < TEST_DISCOVER_REQ || TestCase >= MAX_TESTS) || (Connectivity < CT_ADAPTER_DEFAULT || Connectivity >= MAX_CT)) { PrintUsage(); return -1; } if (OCInit1(OC_CLIENT, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK) { OIC_LOG(ERROR, TAG, "OCStack init error"); return 0; } #ifdef ROUTING_GATEWAY /* * Before invoking Discover resource, we process the gateway requests * and form the routing table. */ for (int index = 0; index < MAX_NUM_GATEWAY_REQUEST; index++) { if (OC_STACK_OK != OCProcess()) { OIC_LOG(ERROR, TAG, "OCStack process error"); return 0; } usleep(SLEEP_DURATION); } #endif if (Connectivity == CT_ADAPTER_DEFAULT || Connectivity == CT_IP) { ConnType = CT_ADAPTER_IP; } else { OIC_LOG(INFO, TAG, "Default Connectivity type selected..."); PrintUsage(); } discoveryAddr[0] = '\0'; if (UnicastDiscovery) { OIC_LOG(INFO, TAG, "Enter IP address of server with optional port number"); OIC_LOG(INFO, TAG, "IPv4: 192.168.0.15:45454\n"); OIC_LOG(INFO, TAG, "IPv6: [fe80::20c:29ff:fe1b:9c5]:45454\n"); if (fgets(discoveryAddr, sizeof (discoveryAddr), stdin)) { //Strip newline char from ipv4addr StripNewLineChar(discoveryAddr); } else { OIC_LOG(ERROR, TAG, "!! Bad input for IP address. !!"); return OC_STACK_INVALID_PARAM; } } if (UnicastDiscovery == 0 && TestCase == TEST_DISCOVER_DEV_REQ) { InitDeviceDiscovery(OC_LOW_QOS); } else if (UnicastDiscovery == 0 && TestCase == TEST_DISCOVER_PLATFORM_REQ) { InitPlatformDiscovery(OC_LOW_QOS); } else { InitDiscovery(OC_LOW_QOS); } // Break from loop with Ctrl+C OIC_LOG(INFO, TAG, "Entering occlient main loop..."); signal(SIGINT, handleSigInt); while (!gQuitFlag) { if (OCProcess() != OC_STACK_OK) { OIC_LOG(ERROR, TAG, "OCStack process error"); return 0; } #ifndef ROUTING_GATEAWAY sleep(1); #endif } OIC_LOG(INFO, TAG, "Exiting occlient main loop..."); if (OCStop() != OC_STACK_OK) { OIC_LOG(ERROR, TAG, "OCStack stop error"); } return 0; }
int main(int argc, char* argv[]) { int opt; resourceList = NULL; while ((opt = getopt(argc, argv, "u:t:c:")) != -1) { switch(opt) { case 'u': UnicastDiscovery = atoi(optarg); break; case 't': TestCase = atoi(optarg); break; case 'c': Connectivity = atoi(optarg); break; default: PrintUsage(); return -1; } } if ((UnicastDiscovery != 0 && UnicastDiscovery != 1) || (TestCase < TEST_DISCOVER_REQ || TestCase >= MAX_TESTS) || (Connectivity < CT_ADAPTER_DEFAULT || Connectivity >= MAX_CT)) { PrintUsage(); return -1; } /* Initialize OCStack*/ if (OCInit1(OC_CLIENT, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack init error"); return 0; } if(Connectivity == CT_ADAPTER_DEFAULT || Connectivity == CT_IP) { ConnType = CT_ADAPTER_IP;//CT_DEFAULT; } else { OC_LOG(INFO, TAG, "Default Connectivity type selected"); PrintUsage(); } InitDiscovery(); // Break from loop with Ctrl+C signal(SIGINT, handleSigInt); while (!gQuitFlag) { if (OCProcess() != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack process error"); return 0; } sleep(2); } freeResourceList(); OC_LOG(INFO, TAG, "Exiting occlient main loop..."); if (OCStop() != OC_STACK_OK) { OC_LOG(ERROR, TAG, "OCStack stop error"); } return 0; }