X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Fsrc%2Focclientcb.c;h=048fd05be0c352b45d497f05e6474cc5cfc83593;hb=36522229240eaee694a9ce5a174a9aa4c141c3ec;hp=0bb05f1e0936bd6e9644ac6ab8e8f942fc130590;hpb=581455203b5b1c613e373f48593efd54ad252563;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/src/occlientcb.c b/resource/csdk/stack/src/occlientcb.c index 0bb05f1..048fd05 100644 --- a/resource/csdk/stack/src/occlientcb.c +++ b/resource/csdk/stack/src/occlientcb.c @@ -20,7 +20,6 @@ #include "occlientcb.h" -#include "occoap.h" #include "utlist.h" #include "logger.h" #include "ocmalloc.h" @@ -32,23 +31,26 @@ /// 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; +static OCMulticastNode * mcPresenceNodes = NULL; OCStackResult AddClientCB (ClientCB** clientCB, OCCallbackData* cbData, - CAToken_t * token, OCDoHandle *handle, OCMethod method, - unsigned char * requestUri, unsigned char * resourceTypeName) + CAToken_t * token, uint8_t tokenLength, + OCDoHandle *handle, OCMethod method, + char * requestUri, char * resourceTypeName) { + if(!clientCB || !cbData || !handle || !requestUri || tokenLength > CA_MAX_TOKEN_LEN) + { + return OC_STACK_INVALID_PARAM; + } ClientCB *cbNode = NULL; #ifdef WITH_PRESENCE if(method == OC_REST_PRESENCE) { // Retrieve the presence callback structure for this specific requestUri. - cbNode = GetClientCB(NULL, NULL, requestUri); + cbNode = GetClientCB(NULL, 0, NULL, requestUri); } #endif // WITH_PRESENCE @@ -68,6 +70,7 @@ AddClientCB (ClientCB** clientCB, OCCallbackData* cbData, //Note: token memory is allocated in the caller OCDoResource //but freed in DeleteClientCB cbNode->token = *token; + cbNode->tokenLength = tokenLength; cbNode->handle = *handle; cbNode->method = method; cbNode->sequenceNumber = 0; @@ -85,16 +88,30 @@ AddClientCB (ClientCB** clientCB, OCCallbackData* cbData, // Ensure that the handle the SDK hands back up to the application layer for the // OCDoResource call matches the found ClientCB Node. *clientCB = cbNode; - OCFree(requestUri); + + if (cbData->cd) + { + cbData->cd(cbData->context); + } + + OCFree(*token); OCFree(*handle); + OCFree(requestUri); *handle = cbNode->handle; } #ifdef WITH_PRESENCE if(method == OC_REST_PRESENCE && resourceTypeName) - { // Amend the found or created node by adding a new resourceType to it. - return InsertResourceTypeFilter(cbNode, (const char *)resourceTypeName); + { + // Amend the found or created node by adding a new resourceType to it. + return InsertResourceTypeFilter(cbNode, resourceTypeName); } + else + { + OCFree(resourceTypeName); + } + #else + OCFree(resourceTypeName); #endif return OC_STACK_OK; @@ -103,12 +120,13 @@ AddClientCB (ClientCB** clientCB, OCCallbackData* cbData, return OC_STACK_NO_MEMORY; } -void DeleteClientCB(ClientCB * cbNode) { +void DeleteClientCB(ClientCB * cbNode) +{ if(cbNode) { LL_DELETE(cbList, cbNode); OC_LOG(INFO, TAG, PCF("deleting tokens")); + OC_LOG_BUFFER(INFO, TAG, (const uint8_t *)cbNode->token, cbNode->tokenLength); CADestroyToken (cbNode->token); - OC_LOG_BUFFER(INFO, TAG, (const uint8_t *)cbNode->token, CA_MAX_TOKEN_LEN); OCFree(cbNode->handle); OCFree(cbNode->requestUri); if(cbNode->deleteCallback) @@ -139,30 +157,42 @@ void DeleteClientCB(ClientCB * cbNode) { } } -ClientCB* GetClientCB(const CAToken_t * token, OCDoHandle handle, const unsigned char * requestUri) +ClientCB* GetClientCB(const CAToken_t * token, uint8_t tokenLength, + OCDoHandle handle, const char * requestUri) { + ClientCB* out = NULL; - if(token) { - LL_FOREACH(cbList, out) { + + if(token && *token && + tokenLength <= CA_MAX_TOKEN_LEN && tokenLength > 0) + { + LL_FOREACH(cbList, out) + { OC_LOG(INFO, TAG, PCF("comparing tokens")); - OC_LOG_BUFFER(INFO, TAG, (const uint8_t *)*token, CA_MAX_TOKEN_LEN); - OC_LOG_BUFFER(INFO, TAG, (const uint8_t *)out->token, CA_MAX_TOKEN_LEN); - if(memcmp(out->token, *token, CA_MAX_TOKEN_LEN) == 0) + OC_LOG_BUFFER(INFO, TAG, (const uint8_t *)*token, tokenLength); + OC_LOG_BUFFER(INFO, TAG, (const uint8_t *)out->token, tokenLength); + if(memcmp(out->token, *token, tokenLength) == 0) { return out; } } } - else if(handle) { - LL_FOREACH(cbList, out) { - if(out->handle == handle) { + else if(handle) + { + LL_FOREACH(cbList, out) + { + if(out->handle == handle) + { return out; } } } - else if(requestUri) { - LL_FOREACH(cbList, out) { - if(out->requestUri && strcmp((char *)out->requestUri, (char *)requestUri) == 0) { + else if(requestUri) + { + LL_FOREACH(cbList, out) + { + if(out->requestUri && strcmp(out->requestUri, requestUri ) == 0) + { return out; } } @@ -172,7 +202,7 @@ ClientCB* GetClientCB(const CAToken_t * token, OCDoHandle handle, const unsigned } #ifdef WITH_PRESENCE -OCStackResult InsertResourceTypeFilter(ClientCB * cbNode, const char * resourceTypeName) +OCStackResult InsertResourceTypeFilter(ClientCB * cbNode, char * resourceTypeName) { OCResourceType * newResourceType = NULL; if(cbNode && resourceTypeName) @@ -185,7 +215,7 @@ OCStackResult InsertResourceTypeFilter(ClientCB * cbNode, const char * resourceT } newResourceType->next = NULL; - newResourceType->resourcetypename = (char *) resourceTypeName; + newResourceType->resourcetypename = resourceTypeName; LL_APPEND(cbNode->filterResourceType, newResourceType); return OC_STACK_OK; @@ -218,8 +248,13 @@ void FindAndDeleteClientCB(ClientCB * cbNode) { } } -OCStackResult AddMCPresenceNode(OCMulticastNode** outnode, unsigned char* uri, uint32_t nonce) +OCStackResult AddMCPresenceNode(OCMulticastNode** outnode, char* uri, uint32_t nonce) { + if(!outnode) + { + return OC_STACK_INVALID_PARAM; + } + OCMulticastNode *node; node = (OCMulticastNode*) OCMalloc(sizeof(OCMulticastNode)); @@ -235,12 +270,12 @@ OCStackResult AddMCPresenceNode(OCMulticastNode** outnode, unsigned char* uri, u return OC_STACK_NO_MEMORY; } -OCMulticastNode* GetMCPresenceNode(const unsigned char * uri) { +OCMulticastNode* GetMCPresenceNode(const char * uri) { OCMulticastNode* out = NULL; if(uri) { LL_FOREACH(mcPresenceNodes, out) { - if(out->uri && strcmp((char *)out->uri, (char *)uri) == 0) { + if(out->uri && strcmp(out->uri, uri) == 0) { return out; } } @@ -248,3 +283,4 @@ OCMulticastNode* GetMCPresenceNode(const unsigned char * uri) { OC_LOG(INFO, TAG, PCF("MulticastNode Not found !!")); return NULL; } +