From 2024762cded3e80b3ed9633d0c0258d02155e865 Mon Sep 17 00:00:00 2001 From: omkar Date: Wed, 24 Dec 2014 22:50:34 -0800 Subject: [PATCH] Enabling Multiple Interfaces in CStack. The stack is initialized with WIFI & ETHERNET Discovery Messages are sent over WIFI and ETHERNET CA_LE is not supported Signed-off-by: omkar Change-Id: Id7ec568f2d2effb45727c75958288de4690c9343 --- .../samples/linux/SimpleClientServer/occlient.cpp | 9 ++++-- .../linux/SimpleClientServer/occlientbasicops.cpp | 2 +- .../linux/SimpleClientServer/occlientcoll.cpp | 2 +- .../linux/SimpleClientServer/occlientslow.cpp | 2 +- resource/csdk/stack/src/ocstack.c | 33 +++++++++++++++++++--- 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/occlient.cpp b/resource/csdk/stack/samples/linux/SimpleClientServer/occlient.cpp index 22ebc4a..70f4019 100644 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/occlient.cpp +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/occlient.cpp @@ -360,8 +360,11 @@ OCStackApplicationResult discoveryReqCB(void* ctx, OCDoHandle handle, break; } } - +#ifdef CA_INT + return OC_STACK_KEEP_TRANSACTION; +#else return (UNICAST_DISCOVERY) ? OC_STACK_DELETE_TRANSACTION : OC_STACK_KEEP_TRANSACTION ; +#endif } @@ -582,7 +585,7 @@ int InitDeviceDiscovery() } #ifdef CA_INT - ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI | OC_LE), + ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI), OC_LOW_QOS, &cbData, NULL, 0); #else ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, OC_LOW_QOS, &cbData, NULL, 0); @@ -620,7 +623,7 @@ int InitDiscovery() cbData.context = (void*)DEFAULT_CONTEXT_VALUE; cbData.cd = NULL; #ifdef CA_INT - ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI | OC_LE), + ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI), OC_LOW_QOS, &cbData, NULL, 0); #else ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, OC_LOW_QOS, &cbData, NULL, 0); diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientbasicops.cpp b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientbasicops.cpp index e0abee0..59d4420 100644 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientbasicops.cpp +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientbasicops.cpp @@ -289,7 +289,7 @@ int InitDiscovery() cbData.cd = NULL; #ifdef CA_INT // TODO-CA: The adapter type is set to all but should be configurable - add as API param - ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI | OC_LE), + ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI), OC_LOW_QOS, &cbData, NULL, 0); #else ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, OC_LOW_QOS, &cbData, NULL, 0); diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp index d025407..dadf129 100644 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientcoll.cpp @@ -341,7 +341,7 @@ int InitDiscovery() cbData.cd = NULL; #ifdef CA_INT // TODO-CA: The adapter type is set to all but should be configurable - add as API param - ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI | OC_LE), + ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI), OC_LOW_QOS, &cbData, NULL, 0); #else diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp index 4a374df..b980443 100644 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/occlientslow.cpp @@ -198,7 +198,7 @@ int InitDiscovery() cbData.cd = NULL; #ifdef CA_INT // TODO-CA: The adapter type is set to all but should be configurable - add as API param - ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI | OC_LE), + ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, (OC_ETHERNET | OC_WIFI), OC_LOW_QOS, &cbData, NULL, 0); #else ret = OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, OC_LOW_QOS, &cbData, NULL, 0); diff --git a/resource/csdk/stack/src/ocstack.c b/resource/csdk/stack/src/ocstack.c index 3a29b30..30b66da 100644 --- a/resource/csdk/stack/src/ocstack.c +++ b/resource/csdk/stack/src/ocstack.c @@ -958,10 +958,12 @@ OCStackResult OCInit(const char *ipAddr, uint16_t port, OCMode mode) { OC_LOG_V(INFO, TAG, "IP Address = %s", ipAddr); } + + OCSeedRandom(); #ifdef CA_INT CAInitialize(); //It is ok to select network to CA_WIFI for now - CAResult_t caResult = CASelectNetwork(CA_WIFI); + CAResult_t caResult = CASelectNetwork(CA_WIFI|CA_ETHERNET); if(caResult == CA_STATUS_OK) { OC_LOG(INFO, TAG, PCF("CASelectNetwork to WIFI")); @@ -1190,6 +1192,8 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ CAToken_t caToken = NULL; CAInfo_t requestData; CARequestInfo_t requestInfo; + CAGroupEndpoint_t grpEnd; + // To track if memory is allocated for additional header options uint8_t hdrOptionMemAlloc = 0; #endif // CA_INT @@ -1286,6 +1290,7 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ #ifdef CA_INT memset(&requestData, 0, sizeof(CAInfo_t)); memset(&requestInfo, 0, sizeof(CARequestInfo_t)); + memset(&grpEnd, 0, sizeof(CAGroupEndpoint_t)); switch (method) { case OC_REST_GET: @@ -1321,11 +1326,18 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ goto exit; } + //High QoS is not supported + if(qos == OC_HIGH_QOS) + { + result = OC_STACK_INVALID_PARAM; + goto exit; + } // TODO-CA: Handle multi-cast scenario // Create remote end point - caResult = CACreateRemoteEndpoint(newUri, CA_WIFI, &endpoint); + caResult = CACreateRemoteEndpoint(newUri, conType, &endpoint); // TODO-CA: Connectivity type should be passed to API - endpoint->connectivityType = CA_WIFI; + endpoint->connectivityType = conType; + if (caResult != CA_STATUS_OK) { OC_LOG(ERROR, TAG, PCF("CACreateRemoteEndpoint error")); @@ -1366,7 +1378,20 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ requestInfo.info = requestData; // send request - caResult = CASendRequest(endpoint, &requestInfo); + //TODO-CA Change This logic. Currently hardcoded to WIFI & ETHERNET + //Need to support other adapter types. + if(conType == (CA_WIFI | CA_ETHERNET)) + { + //TODO-CA remove hardcoded resource uri. Instead, extract it from newUri + grpEnd.connectivityType = conType; + grpEnd.resourceUri = "/oc/core"; + + caResult = CASendRequestToAll(&grpEnd, &requestInfo); + } + else + { + caResult = CASendRequest(endpoint, &requestInfo); + } if (caResult != CA_STATUS_OK) { OC_LOG(ERROR, TAG, PCF("CASendRequest")); -- 2.7.4