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>
#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
\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
#define TAG "CPM"
-#define CA_MAX_TOKEN_LEN (8)
#define CA_FLAGS_BLOCK 0x01
#define CA_BUFSIZE 128
#define CA_COAP_MESSAGE_CON 0
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)
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;
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)
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;
* 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.
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
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,
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);
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)
{
// 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,
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};
// 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),
* 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;
#include "coap_time.h"
#include "ocmalloc.h"
+#ifdef CA_INT
+#include "cacommon.h"
+#endif
+
//-----------------------------------------------------------------------------
// Macros
//-----------------------------------------------------------------------------
}
// 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)
}
//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;
{
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
{
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);
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;
}
#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 {
// 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.
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
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;
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,
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,
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;
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);
#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
#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;
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;
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
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;
//-----------------------------------------------------------------------------
// 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
#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;
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;
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)
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) {
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,
//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,
#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,
}
#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,
OCDevAddr *addr,
OCResource *resHandle,
OCQualityOfService qos)
+#endif // CA_INT
{
ResourceObserver *obsNode = NULL;
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;
}
}
#ifdef CA_INT
-ResourceObserver* GetObserverUsingToken (const char * token)
+ResourceObserver* GetObserverUsingToken (const CAToken_t * token)
#else
ResourceObserver* GetObserverUsingToken (const OCCoAPToken * token)
#endif
{
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);
{
return out;
}
- #endif // CA_INT
+#endif // CA_INT
}
}
OC_LOG(INFO, TAG, PCF("Observer node not found!!"));
}
#ifdef CA_INT
-OCStackResult DeleteObserverUsingToken (char * token)
+OCStackResult DeleteObserverUsingToken (CAToken_t * token)
#else
OCStackResult DeleteObserverUsingToken (OCCoAPToken * token)
#endif
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);
ResourceObserver *tmp = NULL;
LL_FOREACH_SAFE (serverObsList, out, tmp)
{
- #ifdef CA_INT
- DeleteObserverUsingToken (out->CAToken);
- #else
DeleteObserverUsingToken (&(out->token));
- #endif
}
serverObsList = NULL;
}
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),
!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
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"));
#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);
{
return out;
}
+#endif // CA_INT
}
OC_LOG(INFO, TAG, PCF("Server Request not found!!"));
return NULL;
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;
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)
{
{
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!!"));
*request = NULL;
return OC_STACK_NO_MEMORY;
}
-#endif
OCStackResult AddServerResponse (OCServerResponse ** response, OCRequestHandle requestHandle)
{
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)
{
#include "cainterface.h"
#endif
+
//-----------------------------------------------------------------------------
// Typedefs
//-----------------------------------------------------------------------------
// 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;
{
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,
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"));
//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;
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)
return;
}
- ClientCB *cbNode = GetClientCB((CAToken_t *)&responseInfo->info.token, NULL, NULL);
+ ClientCB *cbNode = GetClientCB(&(responseInfo->info.token), NULL, NULL);
if (cbNode)
{
}
}
- // 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)
{
// 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.
{
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,
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,
#endif
{
OCStackResult result = OC_STACK_ERROR;
- OCCoAPToken token;
ClientCB *clientCB = NULL;
unsigned char * requestUri = NULL;
unsigned char * resourceType = NULL;
#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"));
}
// 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,
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;
{
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);
{
goto exit;
}
+#endif // CA_INT
cbNode->presence->TTLlevel++;
OC_LOG_V(DEBUG, TAG, "----------------moving to TTL level %d", cbNode->presence->TTLlevel);
}
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);