Replaced (conditionally) OCCoAPToken with CAToken_t
authorYuliya Kamatkova <yuliya.kamatkova@intel.com>
Fri, 9 Jan 2015 22:44:43 +0000 (17:44 -0500)
committerSudarshan Prasad <sudarshan.prasad@intel.com>
Mon, 26 Jan 2015 22:53:59 +0000 (22:53 +0000)
Replaced old style CoAP tokens with CA tokens under #ifdef CA_INT.
Fixed token related warnings except occoap ones.

Change-Id: I413966570de9e43eab0a8c3311395d9c8e4d8de9
Signed-off-by: Yuliya Kamatkova <yuliya.kamatkova@intel.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/118
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Sashi Penta <sashi.kumar.penta@intel.com>
Reviewed-by: Sudarshan Prasad <sudarshan.prasad@intel.com>
17 files changed:
resource/csdk/connectivity/api/cacommon.h
resource/csdk/connectivity/src/caprotocolmessage.c
resource/csdk/connectivity/src/caprotocolmessage_singlethread.c
resource/csdk/connectivity/src/caremotehandler.c
resource/csdk/occoap/include/occoap.h
resource/csdk/occoap/include/occoaphelper.h
resource/csdk/occoap/src/occoap.c
resource/csdk/occoap/src/occoaphelper.c
resource/csdk/stack/include/internal/occlientcb.h
resource/csdk/stack/include/internal/ocobserve.h
resource/csdk/stack/include/internal/ocserverrequest.h
resource/csdk/stack/include/internal/ocstackinternal.h
resource/csdk/stack/src/occlientcb.c
resource/csdk/stack/src/ocobserve.c
resource/csdk/stack/src/ocresource.c
resource/csdk/stack/src/ocserverrequest.c
resource/csdk/stack/src/ocstack.c

index f912beb..e40d199 100644 (file)
@@ -57,6 +57,11 @@ extern "C"
 #define CA_MAX_URI_LENGTH 2048
 
 /**
+ * @brief Max token length
+ */
+#define CA_MAX_TOKEN_LEN (8)
+
+/**
  * @brief option types - the highest option number 63
  */
 #define CA_OPTION_IF_MATCH 1
index 5221549..32f09e7 100644 (file)
@@ -29,7 +29,6 @@
 \r
 #define TAG "CA"\r
 \r
-#define CA_MAX_TOKEN_LEN   (8)\r
 #define CA_FLAGS_BLOCK 0x01\r
 #define CA_BUFSIZE 128\r
 #define CA_COAP_MESSAGE_CON 0\r
index 3016200..5e29c08 100644 (file)
@@ -29,7 +29,6 @@
 
 #define TAG "CPM"
 
-#define CA_MAX_TOKEN_LEN   (8)
 #define CA_FLAGS_BLOCK 0x01
 #define CA_BUFSIZE 128
 #define CA_COAP_MESSAGE_CON 0
index 830aa68..b103fcb 100644 (file)
@@ -295,7 +295,7 @@ CARequestInfo_t *CACloneRequestInfo(const CARequestInfo_t *rep)
     if (rep->info.token != NULL)
     {
         // allocate token field
-        len = strlen(rep->info.token);
+        len = CA_MAX_TOKEN_LEN;
 
         temp = (char *) OICMalloc(sizeof(char) * (len + 1));
         if (temp == NULL)
@@ -307,7 +307,7 @@ CARequestInfo_t *CACloneRequestInfo(const CARequestInfo_t *rep)
             return NULL;
         }
         memset(temp, 0, sizeof(char) * (len + 1));
-        strncpy(temp, rep->info.token, len);
+        memcpy(temp, rep->info.token, len);
 
         // save the token
         clone->info.token = temp;
@@ -375,7 +375,7 @@ CAResponseInfo_t *CACloneResponseInfo(const CAResponseInfo_t *rep)
     if (rep->info.token != NULL)
     {
         // allocate token field
-        len = strlen(rep->info.token);
+        len = CA_MAX_TOKEN_LEN;
 
         temp = (char *) OICMalloc(sizeof(char) * (len + 1));
         if (temp == NULL)
@@ -387,7 +387,7 @@ CAResponseInfo_t *CACloneResponseInfo(const CAResponseInfo_t *rep)
             return NULL;
         }
         memset(temp, 0, sizeof(char) * (len + 1));
-        strncpy(temp, rep->info.token, len);
+        memcpy(temp, rep->info.token, len);
 
         // save the token
         clone->info.token = temp;
index 31ab9f0..568eb66 100644 (file)
@@ -67,8 +67,13 @@ OCStackResult OCInitCoAP(const char *address, uint16_t port, OCMode mode);
  *   0   - success
  *   TBD - TBD error
  */
+#ifdef CA_INT
+OCStackResult OCDoCoAPResource(OCMethod method, OCQualityOfService qos, CAToken_t * token,
+        const char *Uri, const char *payload, OCHeaderOption * options, uint8_t numOptions);
+#else
 OCStackResult OCDoCoAPResource(OCMethod method, OCQualityOfService qos, OCCoAPToken * token,
         const char *Uri, const char *payload, OCHeaderOption * options, uint8_t numOptions);
+#endif
 
 /**
  * Send a response to a request.
index 20ef714..0b35716 100644 (file)
@@ -60,10 +60,17 @@ uint8_t OCToCoAPQoS(OCQualityOfService qos, uint8_t * ipAddr);
 OCStackResult CoAPToOCResponseCode(uint8_t coapCode);
 
 // Internal function to generate a coap pdu based on passed parameters
+#ifdef CA_INT
+coap_pdu_t *
+GenerateCoAPPdu(uint8_t msgType, uint8_t code, unsigned short id,
+        CAToken_t * token, unsigned char * payloadJSON,
+        coap_list_t *options);
+#else
 coap_pdu_t *
 GenerateCoAPPdu(uint8_t msgType, uint8_t code, unsigned short id,
         OCCoAPToken * token, unsigned char * payloadJSON,
         coap_list_t *options);
+#endif
 
 // Internal function to send a coap pdu, it also handles NON and CON
 OCStackResult
@@ -88,13 +95,22 @@ OCStackResult ParseCoAPPdu(coap_pdu_t * pdu, unsigned char * uriBuf,
         uint16_t * size1, uint16_t * size2,
         unsigned char * payload);
 
-// Internal function to retrieve a Token from received coap pdu
+#ifdef CA_INT
+void RetrieveOCCoAPToken(const coap_pdu_t * pdu, CAToken_t * rcvdToken);
+#else
 void RetrieveOCCoAPToken(const coap_pdu_t * pdu, OCCoAPToken * rcvdToken);
+#endif
 
 // Internal function to create OCResponse struct at the client from a received coap pdu
+#ifdef CA_INT
+OCStackResult FormOCResponse(OCResponse * * responseLoc,  ClientCB * cbNode, uint32_t maxAge,
+        unsigned char * fullUri, unsigned char * rcvdUri, CAToken_t * rcvdToken,
+        OCClientResponse * clientResponse, unsigned char * bufRes);
+#else
 OCStackResult FormOCResponse(OCResponse * * responseLoc,  ClientCB * cbNode, uint32_t maxAge,
         unsigned char * fullUri, unsigned char * rcvdUri, OCCoAPToken * rcvdToken,
         OCClientResponse * clientResponse, unsigned char * bufRes);
+#endif
 
 // Internal function to create OCClientResponse struct at the client from a received coap pdu
 OCStackResult FormOCClientResponse(OCClientResponse * clientResponse,
index d546391..fe7c5f7 100644 (file)
@@ -82,7 +82,12 @@ static void HandleCoAPAckRst(struct coap_context_t * ctx, uint8_t msgType,
     uint32_t observationOption = OC_OBSERVE_NO_OPTION;
     // {{0}} to eliminate warning for known compiler bug 53119
     // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119
+
+#ifdef CA_INT
+    CAToken_t  sentToken = NULL;
+#else // CA_INT
     OCCoAPToken sentToken = {{0}};
+#endif // CA_INT
 
     result = ParseCoAPPdu(sentPdu, NULL, NULL, &observationOption, NULL, NULL, NULL,
             NULL, NULL, NULL, NULL, NULL);
@@ -98,19 +103,31 @@ static void HandleCoAPAckRst(struct coap_context_t * ctx, uint8_t msgType,
             result = OCStackFeedBack(&sentToken, OC_OBSERVER_NOT_INTERESTED);
             if(result == OC_STACK_OK)
             {
+#ifdef CA_INT
+                OC_LOG_V(DEBUG, TAG,
+                        "Received RST, removing all queues associated with Token %d bytes",
+                        CA_MAX_TOKEN_LEN);
+                OC_LOG_BUFFER(INFO, TAG, sentToken, CA_MAX_TOKEN_LEN);
+                coap_cancel_all_messages(ctx, &sentQueue->remote, (unsigned char *)sentToken,
+                        CA_MAX_TOKEN_LEN);
+#else
                 OC_LOG_V(DEBUG, TAG,
                         "Received RST, removing all queues associated with Token %d bytes",
                         sentToken.tokenLength);
                 OC_LOG_BUFFER(INFO, TAG, sentToken.token, sentToken.tokenLength);
                 coap_cancel_all_messages(ctx, &sentQueue->remote, sentToken.token,
                         sentToken.tokenLength);
+#endif
             }
         }
     }
     else if(observationOption != OC_OBSERVE_NO_OPTION && msgType == COAP_MESSAGE_ACK)
     {
+#ifdef CA_INT
+#else
         OC_LOG_V(DEBUG, TAG, "Received ACK, for Token %d bytes",sentToken.tokenLength);
         OC_LOG_BUFFER(INFO, TAG, sentToken.token, sentToken.tokenLength);
+#endif
         // now the observer is still interested
         if(myStackMode != OC_CLIENT)
         {
@@ -154,10 +171,13 @@ static void HandleCoAPRequests(struct coap_context_t *ctx,
 
     // fill OCCoAPToken structure
     RetrieveOCCoAPToken(rcvdPdu, &protocolRequest.requestToken);
+#ifdef CA_INT
+#else
     OC_LOG_V(INFO, TAG, " Token received %d bytes",
             protocolRequest.requestToken.tokenLength);
     OC_LOG_BUFFER(INFO, TAG, protocolRequest.requestToken.token,
             protocolRequest.requestToken.tokenLength);
+#endif
 
     // fill OCDevAddr
     memcpy(&protocolRequest.requesterAddr, (OCDevAddr *) &rcvdRequest->remote,
@@ -292,7 +312,11 @@ uint32_t GetTime(float afterSeconds)
 static void HandleCoAPResponses(struct coap_context_t *ctx,
         const coap_queue_t * rcvdResponse) {
     OCStackResult result = OC_STACK_OK;
+#ifdef CA_INT
+    CAToken_t  rcvdToken = NULL;
+#else // CA_INT
     OCCoAPToken rcvdToken = {{0}};
+#endif // CA_INT
     OCResponse * response = NULL;
     OCClientResponse * clientResponse = NULL;
     unsigned char bufRes[MAX_RESPONSE_LENGTH] = {0};
@@ -330,8 +354,11 @@ static void HandleCoAPResponses(struct coap_context_t *ctx,
 
     // fill OCCoAPToken structure
     RetrieveOCCoAPToken(recvPdu, &rcvdToken);
+#ifdef CA_INT
+#else
     OC_LOG_V(INFO, TAG,"Received a pdu with Token", rcvdToken.tokenLength);
     OC_LOG_BUFFER(INFO, TAG, rcvdToken.token, rcvdToken.tokenLength);
+#endif
 
     // fill OCClientResponse structure
     result = FormOCClientResponse(clientResponse, CoAPToOCResponseCode(recvPdu->hdr->code),
@@ -462,8 +489,13 @@ exit:
  *   0   - success
  *   TBD - TBD error
  */
+#ifdef CA_INT
+OCStackResult OCDoCoAPResource(OCMethod method, OCQualityOfService qos, CAToken_t * token,
+                     const char *Uri, const char *payload, OCHeaderOption * options, uint8_t numOptions)
+#else
 OCStackResult OCDoCoAPResource(OCMethod method, OCQualityOfService qos, OCCoAPToken * token,
                      const char *Uri, const char *payload, OCHeaderOption * options, uint8_t numOptions)
+#endif
 {
 
     OCStackResult ret = OC_STACK_ERROR;
index 1f544f7..d6622a2 100644 (file)
 #include "coap_time.h"
 #include "ocmalloc.h"
 
+#ifdef CA_INT
+#include "cacommon.h"
+#endif
+
 //-----------------------------------------------------------------------------
 // Macros
 //-----------------------------------------------------------------------------
@@ -344,19 +348,33 @@ OCStackResult ParseCoAPPdu(coap_pdu_t * pdu, unsigned char * uriBuf,
 }
 
 // Retrieve the token from the PDU
+#ifdef CA_INT
+void RetrieveOCCoAPToken(const coap_pdu_t * pdu, CAToken_t * rcvdToken)
+#else
 void RetrieveOCCoAPToken(const coap_pdu_t * pdu, OCCoAPToken * rcvdToken)
+#endif
 {
     if (pdu && rcvdToken)
     {
+#ifdef CA_INT
+        memcpy(*rcvdToken, pdu->hdr->token, CA_MAX_TOKEN_LEN);
+#else
         rcvdToken->tokenLength = pdu->hdr->token_length;
         memcpy(rcvdToken->token, pdu->hdr->token,
             rcvdToken->tokenLength);
+#endif
     }
 }
 
+#ifdef CA_INT
+OCStackResult FormOCResponse(OCResponse * * responseLoc,  ClientCB * cbNode, uint32_t maxAge,
+        unsigned char * fullUri, unsigned char * rcvdUri, CAToken_t * rcvdToken,
+        OCClientResponse * clientResponse, unsigned char * bufRes)
+#else
 OCStackResult FormOCResponse(OCResponse * * responseLoc,  ClientCB * cbNode, uint32_t maxAge,
         unsigned char * fullUri, unsigned char * rcvdUri, OCCoAPToken * rcvdToken,
         OCClientResponse * clientResponse, unsigned char * bufRes)
+#endif
 {
     OCResponse * response = (OCResponse *) OCMalloc(sizeof(OCResponse));
     if (!response)
@@ -537,10 +555,17 @@ SendCoAPPdu(coap_context_t * gCoAPCtx, coap_address_t* dst, coap_pdu_t * pdu,
 }
 
 //generate a coap message
+#ifdef CA_INT
+coap_pdu_t *
+GenerateCoAPPdu(uint8_t msgType, uint8_t code, unsigned short id,
+        CAToken_t * token, unsigned char * payloadJSON,
+        coap_list_t *options)
+#else
 coap_pdu_t *
 GenerateCoAPPdu(uint8_t msgType, uint8_t code, unsigned short id,
         OCCoAPToken * token, unsigned char * payloadJSON,
         coap_list_t *options)
+#endif
 {
     coap_pdu_t *pdu;
     coap_list_t *opt;
@@ -549,11 +574,19 @@ GenerateCoAPPdu(uint8_t msgType, uint8_t code, unsigned short id,
     {
         pdu = coap_pdu_init(msgType, code, id, COAP_MAX_PDU_SIZE);
         VERIFY_NON_NULL(pdu);
+#ifdef CA_INT
+        pdu->hdr->token_length = CA_MAX_TOKEN_LEN;
+        if (!coap_add_token(pdu, CA_MAX_TOKEN_LEN, *token))
+        {
+            OC_LOG(FATAL, TAG, PCF("coap_add_token failed"));
+        }
+#else
         pdu->hdr->token_length = token->tokenLength;
-         if (!coap_add_token(pdu, token->tokenLength, token->token))
-         {
+        if (!coap_add_token(pdu, token->tokenLength, token->token))
+        {
             OC_LOG(FATAL, TAG, PCF("coap_add_token failed"));
         }
+#endif
     }
     else
     {
@@ -659,7 +692,15 @@ OCStackResult HandleFailedCommunication(coap_context_t * ctx, coap_queue_t * que
     OCResponse * response = NULL;
     ClientCB * cbNode = NULL;
     OCClientResponse clientResponse;
+
+    #ifdef CA_INT
+    //token for the observe request
+    CAToken_t token;
+    #else // CA_INT
+    // CoAP token for the observe request
     OCCoAPToken token;
+    #endif // CA_INT
+
     OCStackResult result = OC_STACK_OK;
 
     RetrieveOCCoAPToken(queue->pdu, &token);
@@ -684,10 +725,17 @@ OCStackResult HandleFailedCommunication(coap_context_t * ctx, coap_queue_t * que
 
 observation:
     result = OCStackFeedBack(&token, OC_OBSERVER_FAILED_COMM);
+#ifdef CA_INT
+    if(result == OC_STACK_OK)
+    {
+        coap_cancel_all_messages(ctx, &queue->remote, (unsigned char *)token, CA_MAX_TOKEN_LEN);
+    }
+#else
     if(result == OC_STACK_OK)
     {
         coap_cancel_all_messages(ctx, &queue->remote, token.token, token.tokenLength);
     }
+#endif
     OCFree(response);
     return result;
 }
index 25d15c0..aeb4394 100644 (file)
 #define OC_CLIENT_CB
 
 #include <ocstack.h>
-#include <occoaptoken.h>
+
 #include <ocresource.h>
 #ifdef CA_INT
 #include "cacommon.h"
+#else
+#include "occoaptoken.h"
 #endif
 
 typedef struct OCPresence {
@@ -52,11 +54,11 @@ typedef struct ClientCB {
     // callback method to delete context data
     OCClientContextDeleter deleteCallback;
     //  when a response is recvd with this token, above callback will be invoked
-    #ifdef CA_INT
+#ifdef CA_INT
     CAToken_t token;
-    #else // CA_INT
+#else // CA_INT
     OCCoAPToken token;
-    #endif // CA_INT
+#endif // CA_INT
     // Invocation handle tied to original call to OCDoResource()
     OCDoHandle handle;
     // This is used to determine if all responses should be consumed or not.
index a78d6ec..0b2713e 100644 (file)
@@ -35,8 +35,13 @@ typedef struct ResourceObserver {
     unsigned char *resUri;
     // Query
     unsigned char *query;
+#ifdef CA_INT
+    //token for the observe request
+    CAToken_t token;
+#else // CA_INT
     // CoAP token for the observe request
     OCCoAPToken token;
+#endif // CA_INT
     // Resource handle
     OCResource *resource;
     // IP address & port of client registered for observe
@@ -46,7 +51,6 @@ typedef struct ResourceObserver {
     CAAddress_t addressInfo;
     /** Connectivity of the endpoint**/
     CAConnectivityType_t connectivityType;
-    char CAToken[CA_MAX_TOKEN_LEN+1];
 #endif
     // Quality of service of the request
     OCQualityOfService qos;
@@ -76,6 +80,22 @@ void DeleteObserverList();
 
 OCStackResult GenerateObserverId (OCObservationId *observationId);
 
+
+
+#ifdef CA_INT
+OCStackResult AddObserver (const char         *resUri,
+                           const char         *query,
+                           OCObservationId    obsId,
+                           CAToken_t          *token,
+                           OCDevAddr          *addr,
+                           OCResource         *resHandle,
+                           OCQualityOfService qos,
+                           CAAddress_t          *addressInfo,
+                           CAConnectivityType_t connectivityType);
+
+OCStackResult DeleteObserverUsingToken (CAToken_t * token);
+ResourceObserver* GetObserverUsingToken (const CAToken_t * token);
+#else
 OCStackResult AddObserver (const char         *resUri,
                            const char         *query,
                            OCObservationId    obsId,
@@ -84,31 +104,13 @@ OCStackResult AddObserver (const char         *resUri,
                            OCResource         *resHandle,
                            OCQualityOfService qos);
 
-#ifdef CA_INT
-OCStackResult DeleteObserverUsingToken (char * token);
-#else
 OCStackResult DeleteObserverUsingToken (OCCoAPToken * token);
-#endif
-
-#ifdef CA_INT
-ResourceObserver* GetObserverUsingToken (const char * token);
-#else
 ResourceObserver* GetObserverUsingToken (const OCCoAPToken * token);
 #endif
 
 ResourceObserver* GetObserverUsingId (const OCObservationId observeId);
 
 #ifdef CA_INT
-OCStackResult AddCAObserver (const char         *resUri,
-                           const char           *query,
-                           OCObservationId      obsId,
-                           OCCoAPToken          *token,
-                           OCDevAddr            *addr,
-                           OCResource           *resHandle,
-                           OCQualityOfService   qos,
-                           CAAddress_t          *addressInfo,
-                           CAConnectivityType_t connectivityType,
-                           char                 *CAtoken);
 
 OCStackResult
 CreateObserveHeaderOption (CAHeaderOption_t **caHdrOpt,
index 3b121ca..08a4c98 100644 (file)
@@ -55,13 +55,17 @@ typedef struct OCServerRequest {
     CAAddress_t addressInfo;
     /** Connectivity of the endpoint**/
     CAConnectivityType_t connectivityType;
-    char token[32];   // TODO-CA:  What is max CAToken_t length?  Get rid of magic number
 #endif
     //////////////////////////////////////////////////////////
     // IP address & port of client registered for observe   //These
     OCDevAddr requesterAddr;                                //Members
+#ifdef CA_INT
+    // token for the observe request
+    CAToken_t requestToken;
+#else
     // CoAP token for the observe request                   //Might
     OCCoAPToken requestToken;                               //Be
+#endif // CA_INT
     // The ID of CoAP pdu                                   //Kept in
     uint16_t coapID;                                        //CoAP
     uint8_t delayedResNeeded;
@@ -88,30 +92,34 @@ typedef struct OCServerResponse {
     OCRequestHandle requestHandle;
 } OCServerResponse;
 
+#ifdef CA_INT
+OCServerRequest * GetServerRequestUsingToken (const CAToken_t token);
+#else
 OCServerRequest * GetServerRequestUsingToken (const OCCoAPToken token);
+#endif // CA_INT
 
 OCServerRequest * GetServerRequestUsingHandle (const OCServerRequest * handle);
 
 OCServerResponse * GetServerResponseUsingHandle (const OCServerRequest * handle);
 
+#ifdef CA_INT
 OCStackResult AddServerRequest (OCServerRequest ** request, uint16_t coapID,
         uint8_t delayedResNeeded, uint8_t secured, uint8_t notificationFlag, OCMethod method,
         uint8_t numRcvdVendorSpecificHeaderOptions, uint32_t observationOption,
         OCQualityOfService qos, unsigned char * query,
         OCHeaderOption * rcvdVendorSpecificHeaderOptions,
-        unsigned char * reqJSONPayload, OCCoAPToken * requestToken,
-        OCDevAddr * requesterAddr, unsigned char * resourceUrl, size_t reqTotalSize);
-
-#ifdef CA_INT
-OCStackResult AddServerCARequest (OCServerRequest ** request, uint16_t coapID,
+        unsigned char * reqJSONPayload, CAToken_t * requestToken,
+        OCDevAddr * requesterAddr, unsigned char * resourceUrl, size_t reqTotalSize,
+        CAAddress_t *addressInfo, CAConnectivityType_t connectivityType);
+#else
+OCStackResult AddServerRequest (OCServerRequest ** request, uint16_t coapID,
         uint8_t delayedResNeeded, uint8_t secured, uint8_t notificationFlag, OCMethod method,
         uint8_t numRcvdVendorSpecificHeaderOptions, uint32_t observationOption,
         OCQualityOfService qos, unsigned char * query,
         OCHeaderOption * rcvdVendorSpecificHeaderOptions,
         unsigned char * reqJSONPayload, OCCoAPToken * requestToken,
-        OCDevAddr * requesterAddr, unsigned char * resourceUrl, size_t reqTotalSize,
-        CAAddress_t *addressInfo, CAConnectivityType_t connectivityType, char *token);
-#endif
+        OCDevAddr * requesterAddr, unsigned char * resourceUrl, size_t reqTotalSize);
+#endif // CA_INT
 
 OCStackResult AddServerResponse (OCServerResponse ** response, OCRequestHandle requestHandle);
 
index e48bfff..fd769a2 100644 (file)
 #include <stdbool.h>
 #include "ocstack.h"
 #include "ocstackconfig.h"
-#include "occoaptoken.h"
 #include "occlientcb.h"
 #include <logger.h>
 #include <ocrandom.h>
 
 #ifdef CA_INT
-    #include "cacommon.h"
-    #include "cainterface.h"
+#include "cacommon.h"
+#include "cainterface.h"
+#else
+#include "occoaptoken.h"
 #endif
 
 #ifdef __cplusplus
@@ -57,19 +58,19 @@ extern OCDeviceEntityHandler defaultDeviceHandler;
 #define OC_COAP_SCHEME "coap://"
 #define OC_OFFSET_SEQUENCE_NUMBER (4) // the first outgoing sequence number will be 5
 
-#ifdef CA_INT
-// TODO-CA: This has been defined in CA layer as well, but is not exposed externally.
-// Need to expose it from CA and remove the definition below.
-#define CA_MAX_TOKEN_LEN   (8)
-#endif //CA_INT
-
 typedef struct {
     // Observe option field
     uint32_t option;
     // IP address & port of client registered for observe
     OCDevAddr *subAddr;
-    // CoAP token for the observe request
+
+#ifdef CA_INT
+    CAToken_t *token;
+#else // CA_INT
+    // token for the observe request
     OCCoAPToken *token;
+#endif // CA_INT
+
     // The result of the observe request
     OCStackResult result;
 } OCObserveReq;
@@ -96,14 +97,20 @@ typedef struct {
     CAAddress_t addressInfo;
     /** Connectivity of the endpoint**/
     CAConnectivityType_t connectivityType;
-    char token[CA_MAX_TOKEN_LEN+1];
 #endif
     //////////////////////////////////////////////////////////
     // TODO: Consider moving these member to CoAP
     // IP address & port of client registered for observe
     OCDevAddr requesterAddr;
+
+#ifdef CA_INT
+    //token for the observe request
+    CAToken_t requestToken;
+#else // CA_INT
     // CoAP token for the observe request
     OCCoAPToken requestToken;
+#endif // CA_INT
+
     // The ID of CoAP pdu
     uint16_t coapID;
     uint8_t delayedResNeeded;
@@ -127,8 +134,14 @@ typedef struct
     OCStackResult result;
     // IP address & port of client registered for observe
     OCDevAddr *requesterAddr;
+
+#ifdef CA_INT
+    CAToken_t *requestToken;
+#else // CA_INT
     // CoAP token for the observe request
     OCCoAPToken *requestToken;
+#endif // CA_INT
+
     // The ID of CoAP pdu
     uint16_t coapID;
     // Flag indicating that response is to be delayed before sending
@@ -159,8 +172,15 @@ typedef struct {
     unsigned char * rcvdUri;
     // This is the received payload.
     unsigned char * bufRes;
+
+#ifdef CA_INT
     // This is the token received OTA.
+    CAToken_t * rcvdToken;
+#else // CA_INT
+   // This is the token received OTA.
     OCCoAPToken * rcvdToken;
+#endif // CA_INT
+
     // this structure will be passed to client
     OCClientResponse * clientResponse;
 } OCResponse;
@@ -171,7 +191,13 @@ typedef uint32_t ServerID;
 //-----------------------------------------------------------------------------
 // Internal function prototypes
 //-----------------------------------------------------------------------------
+
+#ifdef CA_INT
+OCStackResult OCStackFeedBack(CAToken_t * token, uint8_t status);
+#else // CA_INT
 OCStackResult OCStackFeedBack(OCCoAPToken * token, uint8_t status);
+#endif // CA_INT
+
 OCStackResult HandleStackRequests(OCServerProtocolRequest * protocolRequest);
 OCStackResult HandleStackResponses(OCResponse * response);
 #ifdef WITH_PRESENCE
index 6d2565e..5896d79 100644 (file)
 #include <string.h>
 
 #ifdef CA_INT
-    #include "cacommon.h"
-    #include "cainterface.h"
+#include "cacommon.h"
+#include "cainterface.h"
 #endif
 
 /// Module Name
 #define TAG PCF("occlientcb")
 
+#define VERIFY_NON_NULL(arg) { if (!arg) {OC_LOG(FATAL, TAG, #arg " is NULL"); goto exit;} }
+
 struct ClientCB *cbList = NULL;
 OCMulticastNode * mcPresenceNodes = NULL;
 
@@ -71,12 +73,13 @@ AddClientCB (ClientCB** clientCB, OCCallbackData* cbData,
             cbNode->callBack = cbData->cb;
             cbNode->context = cbData->context;
             cbNode->deleteCallback = cbData->cd;
-            #ifdef CA_INT
-            cbNode->token = (CAToken_t *)OCMalloc(CA_MAX_TOKEN_LEN);
-            memcpy(&(cbNode->token), token, CA_MAX_TOKEN_LEN);
-            #else // CA_INT
+#ifdef CA_INT
+            //Note: token memory is allocated in the caller OCDoResource
+            //but freed in DeleteClientCB
+            cbNode->token = *token;
+#else // CA_INT
             memcpy(&(cbNode->token), token, sizeof(OCCoAPToken));
-            #endif // CA_INT
+#endif // CA_INT
             cbNode->handle = *handle;
             cbNode->method = method;
             cbNode->sequenceNumber = 0;
@@ -116,11 +119,12 @@ void DeleteClientCB(ClientCB * cbNode) {
     if(cbNode) {
         LL_DELETE(cbList, cbNode);
         OC_LOG(INFO, TAG, PCF("deleting tokens"));
-        #ifdef CA_INT
+#ifdef CA_INT
         CADestroyToken (cbNode->token);
-        #else
+        OC_LOG_BUFFER(INFO, TAG, cbNode->token, CA_MAX_TOKEN_LEN);
+#else
         OC_LOG_BUFFER(INFO, TAG, cbNode->token.token, cbNode->token.tokenLength);
-        #endif // CA_INT
+#endif // CA_INT
         OCFree(cbNode->handle);
         OCFree(cbNode->requestUri);
         if(cbNode->deleteCallback)
@@ -161,19 +165,21 @@ ClientCB* GetClientCB(OCCoAPToken * token, OCDoHandle handle, const unsigned cha
     if(token) {
         LL_FOREACH(cbList, out) {
             OC_LOG(INFO, TAG, PCF("comparing tokens"));
-            #ifdef CA_INT
+#ifdef CA_INT
+            OC_LOG_BUFFER(INFO, TAG, *token, CA_MAX_TOKEN_LEN);
+            OC_LOG_BUFFER(INFO, TAG, out->token, CA_MAX_TOKEN_LEN);
             if(memcmp(out->token, *token, CA_MAX_TOKEN_LEN) == 0)
             {
                 return out;
             }
-            #else // CA_INT
+#else // CA_INT
             OC_LOG_BUFFER(INFO, TAG, token->token, token->tokenLength);
             OC_LOG_BUFFER(INFO, TAG, out->token.token, out->token.tokenLength);
             if((out->token.tokenLength == token->tokenLength) &&
                 (memcmp(out->token.token, token->token, token->tokenLength) == 0) ) {
                 return out;
             }
-            #endif // CA_INT
+#endif // CA_INT
         }
     }
     else if(handle) {
index 2b3ea19..7e17023 100644 (file)
@@ -109,13 +109,12 @@ OCStackResult SendAllObserverNotification (OCMethod method, OCResource *resPtr,
                 qos = DetermineObserverQoS(method, resourceObserver, qos);
 
 #ifdef CA_INT
-                result = AddServerCARequest(&request, 0, 0, 0, 1, OC_REST_GET,
+                result = AddServerRequest(&request, 0, 0, 0, 1, OC_REST_GET,
                         0, resPtr->sequenceNum, qos, resourceObserver->query,
                         NULL, NULL,
                         &resourceObserver->token, resourceObserver->addr,
                         resourceObserver->resUri, 0,
-                        &(resourceObserver->addressInfo), resourceObserver->connectivityType,
-                        resourceObserver->CAToken);
+                        &(resourceObserver->addressInfo), resourceObserver->connectivityType);
 #else
                 result = AddServerRequest(&request, 0, 0, 0, 1, OC_REST_GET,
                         0, resPtr->sequenceNum, qos, resourceObserver->query,
@@ -149,13 +148,12 @@ OCStackResult SendAllObserverNotification (OCMethod method, OCResource *resPtr,
                 //This is effectively the implementation for the presence entity handler.
                 OC_LOG(DEBUG, TAG, PCF("This notification is for Presence"));
 #ifdef CA_INT
-                result = AddServerCARequest(&request, 0, 0, 0, 1, OC_REST_GET,
+                result = AddServerRequest(&request, 0, 0, 0, 1, OC_REST_GET,
                         0, resPtr->sequenceNum, qos, resourceObserver->query,
                         NULL, NULL,
                         &resourceObserver->token, resourceObserver->addr,
                         resourceObserver->resUri, 0,
-                        &(resourceObserver->addressInfo), resourceObserver->connectivityType,
-                        resourceObserver->CAToken);
+                        &(resourceObserver->addressInfo), resourceObserver->connectivityType);
 
 #else
                 result = AddServerRequest(&request, 0, 0, 0, 1, OC_REST_GET,
@@ -225,12 +223,11 @@ OCStackResult SendListObserverNotification (OCResource * resource,
 
 
 #ifdef CA_INT
-                result = AddServerCARequest(&request, 0, 0, 0, 1, OC_REST_GET,
+                result = AddServerRequest(&request, 0, 0, 0, 1, OC_REST_GET,
                         0, resource->sequenceNum, qos, observation->query,
                         NULL, NULL, &observation->token,
                         observation->addr, observation->resUri, 0,
-                        &(observation->addressInfo), observation->connectivityType,
-                        observation->CAToken);
+                        &(observation->addressInfo), observation->connectivityType);
 #else
                 result = AddServerRequest(&request, 0, 0, 0, 1, OC_REST_GET,
                         0, resource->sequenceNum, qos, observation->query,
@@ -310,74 +307,16 @@ exit:
 }
 
 #ifdef CA_INT
-OCStackResult AddCAObserver (const char         *resUri,
-                           const char           *query,
-                           OCObservationId      obsId,
-                           OCCoAPToken          *token,
-                           OCDevAddr            *addr,
-                           OCResource           *resHandle,
-                           OCQualityOfService   qos,
+OCStackResult AddObserver (const char         *resUri,
+                           const char         *query,
+                           OCObservationId    obsId,
+                           CAToken_t          *token,
+                           OCDevAddr          *addr,
+                           OCResource         *resHandle,
+                           OCQualityOfService qos,
                            CAAddress_t          *addressInfo,
-                           CAConnectivityType_t connectivityType,
-                           char                 *CAtoken)
-{
-    ResourceObserver *obsNode = NULL;
-
-    obsNode = (ResourceObserver *) OCCalloc(1, sizeof(ResourceObserver));
-    if (obsNode)
-    {
-        obsNode->observeId = obsId;
-
-        obsNode->resUri = (unsigned char *)OCMalloc(strlen(resUri)+1);
-        VERIFY_NON_NULL (obsNode->resUri);
-        memcpy (obsNode->resUri, resUri, strlen(resUri)+1);
-
-        obsNode->qos = qos;
-        if(query)
-        {
-            obsNode->query = (unsigned char *)OCMalloc(strlen(query)+1);
-            VERIFY_NON_NULL (obsNode->query);
-            memcpy (obsNode->query, query, strlen(query)+1);
-        }
-
-        if(token)
-        {
-            obsNode->token.tokenLength = token->tokenLength;
-            memcpy (obsNode->token.token, token->token, token->tokenLength);
-        }
-
-        if(addr)
-        {
-            obsNode->addr = (OCDevAddr *)OCMalloc(sizeof(OCDevAddr));
-            VERIFY_NON_NULL (obsNode->addr);
-            memcpy (obsNode->addr, addr, sizeof(OCDevAddr));
-        }
-
-        obsNode->addressInfo = *addressInfo;
-        obsNode->connectivityType = connectivityType;
-        if(CAtoken)
-        {
-            strncpy(obsNode->CAToken, CAtoken, CA_MAX_TOKEN_LEN);
-        }
-
-        obsNode->resource = resHandle;
-
-        LL_APPEND (serverObsList, obsNode);
-        return OC_STACK_OK;
-    }
-
-exit:
-    if (obsNode)
-    {
-        OCFree(obsNode->resUri);
-        OCFree(obsNode->query);
-        OCFree(obsNode->addr);
-        OCFree(obsNode);
-    }
-    return OC_STACK_NO_MEMORY;
-}
-#endif //CA_INT
-
+                           CAConnectivityType_t connectivityType)
+#else
 OCStackResult AddObserver (const char         *resUri,
                            const char         *query,
                            OCObservationId    obsId,
@@ -385,6 +324,7 @@ OCStackResult AddObserver (const char         *resUri,
                            OCDevAddr          *addr,
                            OCResource         *resHandle,
                            OCQualityOfService qos)
+#endif // CA_INT
 {
     ResourceObserver *obsNode = NULL;
 
@@ -405,15 +345,24 @@ OCStackResult AddObserver (const char         *resUri,
             memcpy (obsNode->query, query, strlen(query)+1);
         }
 
+#ifdef CA_INT
+        obsNode->token = (CAToken_t)OCMalloc(CA_MAX_TOKEN_LEN+1);
+        VERIFY_NON_NULL (obsNode->token);
+        memset(obsNode->token, 0, CA_MAX_TOKEN_LEN + 1);
+        memcpy(obsNode->token, *token, CA_MAX_TOKEN_LEN);
+#else
         obsNode->token.tokenLength = token->tokenLength;
         memcpy (obsNode->token.token, token->token, token->tokenLength);
+#endif // CA_INT
 
         obsNode->addr = (OCDevAddr *)OCMalloc(sizeof(OCDevAddr));
         VERIFY_NON_NULL (obsNode->addr);
         memcpy (obsNode->addr, addr, sizeof(OCDevAddr));
-
+#ifdef CA_INT
+        obsNode->addressInfo = *addressInfo;
+        obsNode->connectivityType = connectivityType;
+#endif
         obsNode->resource = resHandle;
-
         LL_APPEND (serverObsList, obsNode);
         return OC_STACK_OK;
     }
@@ -448,7 +397,7 @@ ResourceObserver* GetObserverUsingId (const OCObservationId observeId)
 }
 
 #ifdef CA_INT
-ResourceObserver* GetObserverUsingToken (const char * token)
+ResourceObserver* GetObserverUsingToken (const CAToken_t * token)
 #else
 ResourceObserver* GetObserverUsingToken (const OCCoAPToken * token)
 #endif
@@ -459,13 +408,15 @@ ResourceObserver* GetObserverUsingToken (const OCCoAPToken * token)
     {
         LL_FOREACH (serverObsList, out)
         {
-            #ifdef CA_INT
-            if((strlen(token) == strlen(out->CAToken)) &&
-               (memcmp(out->CAToken, token, strlen(token)) == 0))
+#ifdef CA_INT
+            OC_LOG(INFO, TAG,PCF("comparing tokens"));
+            OC_LOG_BUFFER(INFO, TAG, token, CA_MAX_TOKEN_LEN);
+            OC_LOG_BUFFER(INFO, TAG, out->token, CA_MAX_TOKEN_LEN);
+            if((memcmp(out->token, *token, CA_MAX_TOKEN_LEN) == 0))
             {
                 return out;
             }
-            #else
+#else
             OC_LOG(INFO, TAG,PCF("comparing tokens"));
             OC_LOG_BUFFER(INFO, TAG, token->token, token->tokenLength);
             OC_LOG_BUFFER(INFO, TAG, out->token.token, out->token.tokenLength);
@@ -474,7 +425,7 @@ ResourceObserver* GetObserverUsingToken (const OCCoAPToken * token)
             {
                 return out;
             }
-            #endif // CA_INT
+#endif // CA_INT
         }
     }
     OC_LOG(INFO, TAG, PCF("Observer node not found!!"));
@@ -482,7 +433,7 @@ ResourceObserver* GetObserverUsingToken (const OCCoAPToken * token)
 }
 
 #ifdef CA_INT
-OCStackResult DeleteObserverUsingToken (char * token)
+OCStackResult DeleteObserverUsingToken (CAToken_t * token)
 #else
 OCStackResult DeleteObserverUsingToken (OCCoAPToken * token)
 #endif
@@ -493,7 +444,11 @@ OCStackResult DeleteObserverUsingToken (OCCoAPToken * token)
     if (obsNode)
     {
         OC_LOG_V(INFO, TAG, PCF("deleting tokens"));
+#ifdef CA_INT
+        OC_LOG_BUFFER(INFO, TAG, obsNode->token, CA_MAX_TOKEN_LEN);
+#else
         OC_LOG_BUFFER(INFO, TAG, obsNode->token.token, obsNode->token.tokenLength);
+#endif
         LL_DELETE (serverObsList, obsNode);
         OCFree(obsNode->resUri);
         OCFree(obsNode->query);
@@ -510,11 +465,7 @@ void DeleteObserverList()
     ResourceObserver *tmp = NULL;
     LL_FOREACH_SAFE (serverObsList, out, tmp)
     {
-        #ifdef CA_INT
-        DeleteObserverUsingToken (out->CAToken);
-        #else
         DeleteObserverUsingToken (&(out->token));
-        #endif
     }
     serverObsList = NULL;
 }
index 38d6856..6481d01 100644 (file)
@@ -682,12 +682,11 @@ HandleResourceWithEntityHandler (OCServerRequest *request,
         result = GenerateObserverId(&ehRequest.obsInfo.obsId);
         VERIFY_SUCCESS(result, OC_STACK_OK);
 #ifdef CA_INT
-        result = AddCAObserver ((const char*)(request->resourceUrl),
+        result = AddObserver ((const char*)(request->resourceUrl),
                 (const char *)(request->query),
                 ehRequest.obsInfo.obsId, &request->requestToken,
                 &request->requesterAddr, resource, request->qos,
-                &request->addressInfo, request->connectivityType,
-                request->token);
+                &request->addressInfo, request->connectivityType);
 #else
         result = AddObserver ((const char*)(request->resourceUrl),
                 (const char *)(request->query),
@@ -713,11 +712,9 @@ HandleResourceWithEntityHandler (OCServerRequest *request,
             !collectionResource)
     {
         OC_LOG(INFO, TAG, PCF("Deregistering observation requested"));
-        #ifdef CA_INT
-        resObs = GetObserverUsingToken (request->token);
-        #else
+
         resObs = GetObserverUsingToken (&request->requestToken);
-        #endif
+
         if (NULL == resObs)
         {
             // Stack does not contain this observation request
@@ -728,11 +725,8 @@ HandleResourceWithEntityHandler (OCServerRequest *request,
         ehRequest.obsInfo.obsId = resObs->observeId;
         ehFlag = (OCEntityHandlerFlag)(ehFlag | OC_OBSERVE_FLAG);
 
-        #ifdef CA_INT
-        resObs = GetObserverUsingToken (request->token);
-        #else
         result = DeleteObserverUsingToken (&request->requestToken);
-        #endif
+
         if(result == OC_STACK_OK)
         {
             OC_LOG(DEBUG, TAG, PCF("Removed observer successfully"));
index c6b1bd0..70bc75b 100644 (file)
@@ -24,8 +24,8 @@
 
 
 #ifdef CA_INT
-    #include "cacommon.h"
-    #include "cainterface.h"
+#include "cacommon.h"
+#include "cainterface.h"
 #endif
 
 // Module Name
 static struct OCServerRequest * serverRequestList = NULL;
 static struct OCServerResponse * serverResponseList = NULL;
 
+#ifdef CA_INT
+OCServerRequest * GetServerRequestUsingToken (const CAToken_t token)
+#else // CA_INT
 OCServerRequest * GetServerRequestUsingToken (const OCCoAPToken token)
+#endif // CA_INT
 {
     OCServerRequest * out = NULL;
     LL_FOREACH (serverRequestList, out)
     {
+#ifdef CA_INT
+        OC_LOG(INFO, TAG,PCF("comparing tokens"));
+        OC_LOG_BUFFER(INFO, TAG, token, CA_MAX_TOKEN_LEN);
+        OC_LOG_BUFFER(INFO, TAG, out->requestToken, CA_MAX_TOKEN_LEN);
+        if(memcmp(out->requestToken, token, CA_MAX_TOKEN_LEN) == 0)
+        {
+            return out;
+        }
+#else // CA_INT
         OC_LOG(INFO, TAG,PCF("comparing tokens"));
         OC_LOG_BUFFER(INFO, TAG, token.token, token.tokenLength);
         OC_LOG_BUFFER(INFO, TAG, out->requestToken.token, out->requestToken.tokenLength);
@@ -49,6 +62,7 @@ OCServerRequest * GetServerRequestUsingToken (const OCCoAPToken token)
         {
             return out;
         }
+#endif // CA_INT
     }
     OC_LOG(INFO, TAG, PCF("Server Request not found!!"));
     return NULL;
@@ -82,88 +96,24 @@ OCServerResponse * GetServerResponseUsingHandle (const OCServerRequest * handle)
     return NULL;
 }
 
+#ifdef CA_INT
 OCStackResult AddServerRequest (OCServerRequest ** request, uint16_t coapID,
         uint8_t delayedResNeeded, uint8_t secured, uint8_t notificationFlag, OCMethod method,
         uint8_t numRcvdVendorSpecificHeaderOptions, uint32_t observationOption,
         OCQualityOfService qos, unsigned char * query,
         OCHeaderOption * rcvdVendorSpecificHeaderOptions,
-        unsigned char * reqJSONPayload, OCCoAPToken * requestToken,
-        OCDevAddr * requesterAddr, unsigned char * resourceUrl, size_t reqTotalSize)
-{
-    OCServerRequest * serverRequest = NULL;
-
-    //Note: OCServerRequest includes 1 byte for the JSON Payload.  payloadSize is calculated
-    //as the required length of the string, so this will result in enough room for the
-    //null terminator as well.
-    serverRequest = (OCServerRequest *) OCCalloc(1, sizeof(OCServerRequest) + reqTotalSize - 1);
-    VERIFY_NON_NULL(serverRequest);
-
-    serverRequest->coapID = coapID;
-    serverRequest->delayedResNeeded = delayedResNeeded;
-    serverRequest->secured = secured;
-    serverRequest->notificationFlag = notificationFlag;
-
-    serverRequest->method = method;
-    serverRequest->numRcvdVendorSpecificHeaderOptions = numRcvdVendorSpecificHeaderOptions;
-    serverRequest->observationOption = observationOption;
-    serverRequest->observeResult = OC_STACK_ERROR;
-    serverRequest->qos = qos;
-    serverRequest->ehResponseHandler = HandleSingleResponse;
-    serverRequest->numResponses = 1;
-    if(query)
-    {
-        memcpy(serverRequest->query, query, strlen((const char *)query) + 1);
-    }
-    if(rcvdVendorSpecificHeaderOptions)
-    {
-        memcpy(serverRequest->rcvdVendorSpecificHeaderOptions, rcvdVendorSpecificHeaderOptions,
-            MAX_HEADER_OPTIONS * sizeof(OCHeaderOption));
-    }
-    if(reqJSONPayload)
-    {
-        // destination is at least 1 greater than the source, so a NULL always exists in the
-        // last character
-        strncpy((char*)serverRequest->reqJSONPayload,
-                (const char*)reqJSONPayload, reqTotalSize - 1);
-    }
-    serverRequest->requestComplete = 0;
-    if(requestToken)
-    {
-        memcpy(&serverRequest->requestToken, requestToken, sizeof(OCCoAPToken));
-    }
-    if(requesterAddr)
-    {
-        memcpy(&serverRequest->requesterAddr, requesterAddr, sizeof(OCDevAddr));
-    }
-    if(resourceUrl)
-    {
-        memcpy(serverRequest->resourceUrl, resourceUrl, strlen((const char *)resourceUrl) + 1);
-    }
-
-    *request = serverRequest;
-    OC_LOG(INFO, TAG, PCF("Server Request Added!!"));
-    LL_APPEND (serverRequestList, serverRequest);
-    return OC_STACK_OK;
-
-exit:
-    if (serverRequest)
-    {
-        OCFree(serverRequest);
-        serverRequest = NULL;
-    }
-    *request = NULL;
-    return OC_STACK_NO_MEMORY;
-}
-
-#ifdef CA_INT
-OCStackResult AddServerCARequest (OCServerRequest ** request, uint16_t coapID,
+        unsigned char * reqJSONPayload, CAToken_t * requestToken,
+        OCDevAddr * requesterAddr, unsigned char * resourceUrl, size_t reqTotalSize,
+        CAAddress_t *addressInfo, CAConnectivityType_t connectivityType)
+#else // CA_INT
+OCStackResult AddServerRequest (OCServerRequest ** request, uint16_t coapID,
         uint8_t delayedResNeeded, uint8_t secured, uint8_t notificationFlag, OCMethod method,
         uint8_t numRcvdVendorSpecificHeaderOptions, uint32_t observationOption,
         OCQualityOfService qos, unsigned char * query,
         OCHeaderOption * rcvdVendorSpecificHeaderOptions,
         unsigned char * reqJSONPayload, OCCoAPToken * requestToken,
-        OCDevAddr * requesterAddr, unsigned char * resourceUrl, size_t reqTotalSize,
-        CAAddress_t *addressInfo, CAConnectivityType_t connectivityType, char *token)
+        OCDevAddr * requesterAddr, unsigned char * resourceUrl, size_t reqTotalSize)
+#endif // CA_INT
 {
     OCServerRequest * serverRequest = NULL;
 
@@ -204,7 +154,14 @@ OCStackResult AddServerCARequest (OCServerRequest ** request, uint16_t coapID,
     serverRequest->requestComplete = 0;
     if(requestToken)
     {
+#ifdef CA_INT
+        serverRequest->requestToken = (CAToken_t)OCMalloc(CA_MAX_TOKEN_LEN+1);
+        VERIFY_NON_NULL (serverRequest->requestToken);
+        memset(serverRequest->requestToken, 0, CA_MAX_TOKEN_LEN + 1);
+        memcpy(serverRequest->requestToken, *requestToken, CA_MAX_TOKEN_LEN);
+#else // CA_INT
         memcpy(&serverRequest->requestToken, requestToken, sizeof(OCCoAPToken));
+#endif // CA_INT
     }
     if(requesterAddr)
     {
@@ -214,16 +171,13 @@ OCStackResult AddServerCARequest (OCServerRequest ** request, uint16_t coapID,
     {
         memcpy(serverRequest->resourceUrl, resourceUrl, strlen((const char *)resourceUrl) + 1);
     }
-
+#ifdef CA_INT
     if (addressInfo)
     {
         serverRequest->addressInfo = *addressInfo;
     }
     serverRequest->connectivityType = connectivityType;
-    if (token)
-    {
-        strncpy(serverRequest->token, token, CA_MAX_TOKEN_LEN);
-    }
+#endif
 
     *request = serverRequest;
     OC_LOG(INFO, TAG, PCF("Server Request Added!!"));
@@ -239,7 +193,6 @@ exit:
     *request = NULL;
     return OC_STACK_NO_MEMORY;
 }
-#endif
 
 OCStackResult AddServerResponse (OCServerResponse ** response, OCRequestHandle requestHandle)
 {
@@ -414,7 +367,14 @@ OCStackResult HandleSingleResponse(OCEntityHandlerResponse * ehResponse)
             break;
     }
 
-    responseInfo.info.token = serverRequest->token;
+    responseInfo.info.token = (CAToken_t)OCMalloc(CA_MAX_TOKEN_LEN+1);
+    if (!responseInfo.info.token)
+    {
+        OC_LOG(FATAL, TAG, "Response Info Token is NULL");
+        return result;
+    }
+    memset(responseInfo.info.token, 0, CA_MAX_TOKEN_LEN + 1);
+    memcpy(responseInfo.info.token, serverRequest->requestToken, CA_MAX_TOKEN_LEN);
 
     if(serverRequest->observeResult == OC_STACK_OK)
     {
index 0a7566e..9f66cf8 100644 (file)
@@ -41,6 +41,7 @@
     #include "cainterface.h"
 #endif
 
+
 //-----------------------------------------------------------------------------
 // Typedefs
 //-----------------------------------------------------------------------------
@@ -96,7 +97,11 @@ extern void DeinitOCSecurityInfo();
 
 // This internal function is called to update the stack with the status of
 // observers and communication failures
+#ifdef CA_INT
+OCStackResult OCStackFeedBack(CAToken_t * token, uint8_t status)
+#else // CA_INT
 OCStackResult OCStackFeedBack(OCCoAPToken * token, uint8_t status)
+#endif // CA_INT
 {
     OCStackResult result = OC_STACK_ERROR;
     ResourceObserver * observer = NULL;
@@ -106,11 +111,7 @@ OCStackResult OCStackFeedBack(OCCoAPToken * token, uint8_t status)
     {
     case OC_OBSERVER_NOT_INTERESTED:
         OC_LOG(DEBUG, TAG, PCF("observer is not interested in our notifications anymore"));
-        #ifdef CA_INT
-        observer = GetObserverUsingToken (token->token);
-        #else
         observer = GetObserverUsingToken (token);
-        #endif
         if(observer)
         {
             result = FormOCEntityHandlerRequest(&ehRequest, (OCRequestHandle) NULL,
@@ -123,11 +124,7 @@ OCStackResult OCStackFeedBack(OCCoAPToken * token, uint8_t status)
             observer->resource->entityHandler(OC_OBSERVE_FLAG, &ehRequest);
         }
         //observer is not observing anymore
-        #ifdef CA_INT
-        result = DeleteObserverUsingToken (token->token);
-        #else
         result = DeleteObserverUsingToken (token);
-        #endif
         if(result == OC_STACK_OK)
         {
             OC_LOG(DEBUG, TAG, PCF("Removed observer successfully"));
@@ -142,11 +139,7 @@ OCStackResult OCStackFeedBack(OCCoAPToken * token, uint8_t status)
         //observer is still interested
         OC_LOG(DEBUG, TAG, PCF("observer is interested in our \
                 notifications, reset the failedCount"));
-        #ifdef CA_INT
-        observer = GetObserverUsingToken (token->token);
-        #else
         observer = GetObserverUsingToken (token);
-        #endif
         if(observer)
         {
             observer->forceHighQos = 0;
@@ -161,11 +154,7 @@ OCStackResult OCStackFeedBack(OCCoAPToken * token, uint8_t status)
     case OC_OBSERVER_FAILED_COMM:
         //observer is not reachable
         OC_LOG(DEBUG, TAG, PCF("observer is unreachable"));
-        #ifdef CA_INT
-        observer = GetObserverUsingToken (token->token);
-        #else
         observer = GetObserverUsingToken (token);
-        #endif
         if(observer)
         {
             if(observer->failedCommCount >= MAX_OBSERVER_FAILED_COMM)
@@ -568,7 +557,7 @@ void HandleCAResponses(const CARemoteEndpoint_t* endPoint, const CAResponseInfo_
         return;
     }
 
-    ClientCB *cbNode = GetClientCB((CAToken_t *)&responseInfo->info.token, NULL, NULL);
+    ClientCB *cbNode = GetClientCB(&(responseInfo->info.token), NULL, NULL);
 
     if (cbNode)
     {
@@ -695,14 +684,18 @@ void HandleCARequests(const CARemoteEndpoint_t* endPoint, const CARequestInfo_t*
             }
     }
 
-    // copy token
-    OC_LOG_V(INFO, TAG, "HandleCARequests: CA token length = %d", strlen(requestInfo->info.token));
-    OC_LOG_BUFFER(INFO, TAG, requestInfo->info.token, strlen(requestInfo->info.token));
-    // TODO-CA: For CA integration currently copying CAToken to OCCoapToken:
-    // Need to remove OCCoapToken
-    memcpy (&(serverRequest.requestToken.token), requestInfo->info.token,
-            MAX_TOKEN_LENGTH);
-    serverRequest.requestToken.tokenLength = MAX_TOKEN_LENGTH;
+    OC_LOG_V(INFO, TAG, "HandleCARequests: CA token length = %d", CA_MAX_TOKEN_LEN);
+    OC_LOG_BUFFER(INFO, TAG, requestInfo->info.token, CA_MAX_TOKEN_LEN);
+
+    serverRequest.requestToken = (CAToken_t)OCMalloc(CA_MAX_TOKEN_LEN+1);
+    // Module Name
+    if (!serverRequest.requestToken)
+    {
+        OC_LOG(FATAL, TAG, "Server Request Token is NULL");
+        return;
+    }
+    memset(serverRequest.requestToken, 0, CA_MAX_TOKEN_LEN + 1);
+    memcpy(serverRequest.requestToken, requestInfo->info.token, CA_MAX_TOKEN_LEN);
 
     if (requestInfo->info.type == CA_MSG_CONFIRM)
     {
@@ -728,10 +721,6 @@ void HandleCARequests(const CARemoteEndpoint_t* endPoint, const CARequestInfo_t*
     // copy the address
     serverRequest.addressInfo      = endPoint->addressInfo;
     serverRequest.connectivityType = endPoint->connectivityType;
-    if (requestInfo->info.token)
-    {
-        strncpy(serverRequest.token, requestInfo->info.token, sizeof(serverRequest.token) - 1);
-    }
 
     // copy vendor specific header options
     // TODO-CA: CA is including non-vendor header options as well, like observe.
@@ -773,7 +762,7 @@ OCStackResult HandleStackRequests(OCServerProtocolRequest * protocolRequest)
     {
         OC_LOG(INFO, TAG, PCF("This is a new Server Request"));
 #ifdef CA_INT
-        result = AddServerCARequest(&request, protocolRequest->coapID,
+        result = AddServerRequest(&request, protocolRequest->coapID,
                 protocolRequest->delayedResNeeded, protocolRequest->secured, 0,
                 protocolRequest->method, protocolRequest->numRcvdVendorSpecificHeaderOptions,
                 protocolRequest->observationOption, protocolRequest->qos,
@@ -781,7 +770,7 @@ OCStackResult HandleStackRequests(OCServerProtocolRequest * protocolRequest)
                 protocolRequest->reqJSONPayload, &protocolRequest->requestToken,
                 &protocolRequest->requesterAddr, protocolRequest->resourceUrl,
                 protocolRequest->reqTotalSize,
-                &protocolRequest->addressInfo, protocolRequest->connectivityType, protocolRequest->token);
+                &protocolRequest->addressInfo, protocolRequest->connectivityType);
 #else
         result = AddServerRequest(&request, protocolRequest->coapID,
                 protocolRequest->delayedResNeeded, protocolRequest->secured, 0,
@@ -1467,7 +1456,6 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ
 #endif
 {
     OCStackResult result = OC_STACK_ERROR;
-    OCCoAPToken token;
     ClientCB *clientCB = NULL;
     unsigned char * requestUri = NULL;
     unsigned char * resourceType = NULL;
@@ -1477,13 +1465,15 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ
 #ifdef CA_INT
     CARemoteEndpoint_t* endpoint = NULL;
     CAResult_t caResult;
-    CAToken_t caToken = NULL;
+    CAToken_t token = NULL;
     CAInfo_t requestData;
     CARequestInfo_t requestInfo;
     CAGroupEndpoint_t grpEnd;
 
     // To track if memory is allocated for additional header options
     uint8_t hdrOptionMemAlloc = 0;
+#else
+OCCoAPToken token;
 #endif // CA_INT
 
     OC_LOG(INFO, TAG, PCF("Entering OCDoResource"));
@@ -1624,17 +1614,17 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ
     }
 
     // create token
-    caResult = CAGenerateToken(&caToken);
 
+    caResult = CAGenerateToken(&token);
     if (caResult != CA_STATUS_OK)
     {
         OC_LOG(ERROR, TAG, PCF("CAGenerateToken error"));
-        caToken = NULL;
+        CADestroyToken(token);
         goto exit;
     }
 
     requestData.type = qualityOfServiceToMessageType(qos);
-    requestData.token = caToken;
+    requestData.token = token;
     if ((method == OC_REST_OBSERVE) || (method == OC_REST_OBSERVE_ALL))
     {
         result = CreateObserveHeaderOption (&(requestData.options), options,
@@ -1693,7 +1683,7 @@ OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requ
         goto exit;
     }
 
-    if((result = AddClientCB(&clientCB, cbData, &caToken, handle, method,
+    if((result = AddClientCB(&clientCB, cbData, &token, handle, method,
                              requestUri, resourceType)) != OC_STACK_OK)
     {
         result = OC_STACK_NO_MEMORY;
@@ -2053,8 +2043,18 @@ OCStackResult OCProcessPresence()
                 {
                     OC_LOG(DEBUG, TAG, PCF("time to test server presence =========="));
 
+#ifdef CA_INT
+                    CAToken_t token = NULL;
+                    CAResult_t caResult = CAGenerateToken(&token);
+                    if (caResult != CA_STATUS_OK)
+                    {
+                        CADestroyToken(token);
+                        goto exit;
+                    }
+#else
                     OCCoAPToken token;
                     OCGenerateCoAPToken(&token);
+
                     result = OCDoCoAPResource(OC_REST_GET, OC_LOW_QOS,
                             &token, (const char *)cbNode->requestUri, NULL, NULL, 0);
 
@@ -2062,6 +2062,7 @@ OCStackResult OCProcessPresence()
                     {
                         goto exit;
                     }
+#endif // CA_INT
                     cbNode->presence->TTLlevel++;
                     OC_LOG_V(DEBUG, TAG, "----------------moving to TTL level %d", cbNode->presence->TTLlevel);
                 }
@@ -2129,23 +2130,32 @@ OCStackResult OCStartPresence(const uint32_t ttl)
     if(OC_PRESENCE_UNINITIALIZED == presenceState)
     {
         OCDevAddr multiCastAddr;
-        OCCoAPToken token;
-
         presenceState = OC_PRESENCE_INITIALIZED;
-        OCGenerateCoAPToken(&token);
+
         OCBuildIPv4Address(224, 0, 1, 187, 5683, &multiCastAddr);
+
 #ifdef CA_INT
         CAAddress_t addressInfo;
         strncpy(addressInfo.IP.ipAddress, "224.0.1.187", CA_IPADDR_SIZE);
         addressInfo.IP.port = 5683;
 
+        //TODO make sure there is no memory leak here since another copy
+        //of token is being created inside AddObserver
         CAToken_t caToken = NULL;
-       CAGenerateToken(&caToken);
+        CAResult_t caResult = CAGenerateToken(&caToken);
+        if (caResult != CA_STATUS_OK)
+        {
+            OC_LOG(ERROR, TAG, PCF("CAGenerateToken error"));
+            CADestroyToken(caToken);
+            return OC_STACK_ERROR;
+        }
 
-        AddCAObserver(OC_PRESENCE_URI, NULL, 0, &token,
+        AddObserver(OC_PRESENCE_URI, NULL, 0, &caToken,
                 &multiCastAddr, (OCResource *)presenceResource.handle, OC_LOW_QOS,
-                &addressInfo, CA_WIFI, caToken);
+                &addressInfo, CA_WIFI);
 #else
+        OCCoAPToken token;
+        OCGenerateCoAPToken(&token);
         //add the presence observer
         AddObserver(OC_PRESENCE_URI, NULL, 0, &token, &multiCastAddr,
             (OCResource *)presenceResource.handle, OC_LOW_QOS);