From 3f00f6f4c6eae3a4495c59dcee240b49ee0ac069 Mon Sep 17 00:00:00 2001 From: "vimala.v" Date: Mon, 21 Sep 2015 19:10:41 +0530 Subject: [PATCH] Prevent fixes in Routing Manager and CA. Change-Id: I770c3bea4bbff8ddaf9d17f7fcb79274d2e85a34 Signed-off-by: vimala.v Reviewed-on: https://gerrit.iotivity.org/gerrit/2867 Tested-by: jenkins-iotivity Reviewed-by: Jaehong Jo Reviewed-by: Patrick Lankswert --- .../src/ip_adapter/android/caipnwmonitor.c | 8 ++- .../src/ip_adapter/tizen/caipnwmonitor.c | 1 + resource/csdk/routing/src/routingmanager.c | 66 +++++++++++++++++----- resource/csdk/routing/src/routingmessageparser.c | 4 +- resource/csdk/routing/src/routingtablemanager.c | 5 +- resource/csdk/stack/src/ocstack.c | 6 ++ 6 files changed, 69 insertions(+), 21 deletions(-) diff --git a/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c index 4fbeeeb..544f561 100755 --- a/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c @@ -378,5 +378,11 @@ Java_org_iotivity_ca_CaIpInterface_caIpStateDisabled(JNIEnv *env, jclass class) (void)class; OIC_LOG(DEBUG, TAG, "caIpStateDisabled"); - CAIPGetInterfaceInformation(0); + u_arraylist_t *iflist = CAIPGetInterfaceInformation(0); + if (!iflist) + { + OIC_LOG_V(ERROR, TAG, "get interface info failed"); + return; + } + u_arraylist_destroy(iflist); } diff --git a/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c index 47e11b4..88427f3 100644 --- a/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c @@ -368,6 +368,7 @@ void CAWIFIConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, OIC_LOG_V(ERROR, TAG, "get interface info failed"); return; } + u_arraylist_destroy(iflist); } OIC_LOG(DEBUG, TAG, "OUT"); diff --git a/resource/csdk/routing/src/routingmanager.c b/resource/csdk/routing/src/routingmanager.c index 7eadb23..6453309 100644 --- a/resource/csdk/routing/src/routingmanager.c +++ b/resource/csdk/routing/src/routingmanager.c @@ -316,11 +316,16 @@ OCStackResult RMHandleRequestPayload(OCDevAddr devAddr, const uint8_t *reqPayloa result = RMPConstructObserveResPayload(g_GatewayID, g_sequenceNumber, updatedTableList, false, &updatedPayload); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); + if (OC_STACK_OK != result) + { + OC_LOG_V(ERROR, TAG, "RMPConstructObserveResPayload failed[%d]", result); + RMPFreePayload(updatedPayload); + goto exit; + } result = RMSendNotificationToAll(updatedPayload); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); RMPFreePayload(updatedPayload); + RM_VERIFY_SUCCESS(result, OC_STACK_OK); exit: u_linklist_free(&updatedTableList); @@ -411,6 +416,7 @@ OCStackResult RMHandleResponsePayload(const OCDevAddr *devAddr, const OCRepPaylo result = RMPConstructObserveResPayload(g_GatewayID, g_sequenceNumber, updatedTableList, false, &updatedPayload); + RM_VERIFY_SUCCESS(result, OC_STACK_OK); goto sendNotification; } } @@ -470,15 +476,21 @@ OCStackResult RMHandleResponsePayload(const OCDevAddr *devAddr, const OCRepPaylo result = RMPConstructObserveResPayload(g_GatewayID, g_sequenceNumber, alternativeRouteList, false, &removeTablePayload); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); + if (OC_STACK_OK != result) + { + OC_LOG_V(ERROR, TAG, "RMPConstructObserveResPayload failed[%d]", result); + RMPFreePayload(removeTablePayload); + goto exit; + } result = RMSendNotificationToAll(removeTablePayload); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); RMPFreePayload(removeTablePayload); + RM_VERIFY_SUCCESS(result, OC_STACK_OK); } if ( 0 >= u_linklist_length(updatedTableList)) { - OC_LOG_V(DEBUG, TAG, "No updation is needed, Length is %d", u_linklist_length(updatedTableList)); + OC_LOG_V(DEBUG, TAG, "No updation is needed, Length is %d", + u_linklist_length(updatedTableList)); goto exit; } @@ -499,11 +511,11 @@ OCStackResult RMHandleResponsePayload(const OCDevAddr *devAddr, const OCRepPaylo sendNotification: result = RMSendNotificationToAll(updatedPayload); RM_VERIFY_SUCCESS(result, OC_STACK_OK); - RMPFreePayload(updatedPayload); exit: + RMPFreePayload(updatedPayload); + RTMFreeGatewayRouteTable(&gatewayTableList); u_linklist_free(&updatedTableList); - u_linklist_free(&gatewayTableList); u_linklist_free(&alternativeRouteList); OC_LOG(DEBUG, TAG, "RMHandleResponsePayload OUT"); return OC_STACK_OK; @@ -532,7 +544,6 @@ OCStackResult RMHandleGETRequest(const OCServerRequest *request, const OCResourc } RMPFreePayload(payload); - // Send a observe request result = RMSendObserveRequest(&(request->devAddr), NULL); if (OC_STACK_OK != result) @@ -569,11 +580,16 @@ OCStackResult RMHandleOBSERVERequest(OCServerRequest *request, const OCResource result = RMPConstructObserveResPayload(g_GatewayID, g_sequenceNumber, g_routingGatewayTable, true, &payload); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); + if (OC_STACK_OK != result) + { + OC_LOG_V(ERROR, TAG, "RMPConstructObserveResPayload failed[%d]", result); + RMPFreePayload(payload); + goto exit; + } result = RMSendResponse(request, resource, payload); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); RMPFreePayload(payload); + RM_VERIFY_SUCCESS(result, OC_STACK_OK); exit: OC_LOG(DEBUG, TAG, "RMHandleOBSERVERequest OUT"); return result; @@ -603,14 +619,20 @@ OCStackResult RMHandleDELETERequest(const OCServerRequest *request, const OCReso g_sequenceNumber++; result = RMPConstructRemovalPayload(g_GatewayID, g_sequenceNumber, removedGatewayNodes, false, &resPayloads); - RTMFreeGatewayRouteTable(&removedGatewayNodes); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); + if (OC_STACK_OK != result) + { + OC_LOG_V(ERROR, TAG, "RMPConstructRemovalPayload failed[%d]", result); + RMPFreePayload(resPayloads); + goto exit; + } result = RMSendNotificationToAll(resPayloads); + RMPFreePayload(resPayloads); RM_VERIFY_SUCCESS(result, OC_STACK_OK); RTMPrintTable(g_routingGatewayTable, g_routingEndpointTable); } exit: + RTMFreeGatewayRouteTable(&removedGatewayNodes); OC_LOG(DEBUG, TAG, "RMHandleDELETERequest OUT"); return result; } @@ -692,11 +714,16 @@ void RMProcess() OCRepPayload *payload = NULL; result = RMPConstructObserveResPayload(g_GatewayID, g_sequenceNumber, NULL, false, &payload); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); - + if (OC_STACK_OK != result) + { + OC_LOG_V(ERROR, TAG, "RMPConstructObserveResPayload failed[%d]", result); + RMPFreePayload(payload); + goto exit; + } OC_LOG(DEBUG, TAG, "Sending the alive notification to all"); // Send notification for every 15s to all the neighbours. result = RMSendNotificationToAll(payload); + RMPFreePayload(payload); RM_VERIFY_SUCCESS(result, OC_STACK_OK); } @@ -713,13 +740,20 @@ void RMProcess() result = RMPConstructRemovalPayload(g_GatewayID, g_sequenceNumber, removedEntries, false, &resPayloads); RTMFreeGatewayRouteTable(&removedEntries); - RM_VERIFY_SUCCESS(result, OC_STACK_OK); + if (OC_STACK_OK != result) + { + OC_LOG_V(ERROR, TAG, "RMPConstructRemovalPayload failed[%d]", result); + RMPFreePayload(resPayloads); + goto exit; + } result = RMSendNotificationToAll(resPayloads); + RMPFreePayload(resPayloads); RM_VERIFY_SUCCESS(result, OC_STACK_OK); RTMPrintTable(g_routingGatewayTable, g_routingEndpointTable); } g_refreshTableTime = currentTime; g_isValidated = false; + u_linklist_free(&removedEntries); goto exit; } @@ -787,6 +821,7 @@ void RMSendDeleteToNeighbourNodes() if (OC_STACK_OK != result) { OC_LOG_V(DEBUG, TAG, "RMPConstructGatewayPayload failed[%d]", result); + RMPFreePayload(payload); u_linklist_free(&neighbourNodes); return; } @@ -804,6 +839,7 @@ void RMSendDeleteToNeighbourNodes() RMSendDeleteRequest(&devAddr, payload); } } + RMPFreePayload(payload); u_linklist_get_next(&iterTable); } diff --git a/resource/csdk/routing/src/routingmessageparser.c b/resource/csdk/routing/src/routingmessageparser.c index 2e7572d..323b3aa 100644 --- a/resource/csdk/routing/src/routingmessageparser.c +++ b/resource/csdk/routing/src/routingmessageparser.c @@ -274,7 +274,7 @@ OCStackResult RMPParseResponsePayload(const OCRepPayload *payload, uint32_t *gat if (NULL == gatewayTable) { - OC_LOG(DEBUG, TAG, "Parsed Request Payload"); + OC_LOG(DEBUG, TAG, "gatewayTable is NULL"); return OC_STACK_OK; } @@ -317,8 +317,8 @@ OCStackResult RMPParseResponsePayload(const OCRepPayload *payload, uint32_t *gat if (NULL == entry->nextHop) { OC_LOG(DEBUG, TAG, "nextHop Calloc failed"); - OICFree(entry); OICFree(entry->destination); + OICFree(entry); return OC_STACK_ERROR; } diff --git a/resource/csdk/routing/src/routingtablemanager.c b/resource/csdk/routing/src/routingtablemanager.c index 5f5d9a4..3e12b5e 100644 --- a/resource/csdk/routing/src/routingtablemanager.c +++ b/resource/csdk/routing/src/routingtablemanager.c @@ -931,9 +931,9 @@ void RTMGetObserverList(OCObservationId **obsList, uint8_t *obsListLen, while (NULL != iterTable) { RTMGatewayEntry_t *entry = u_linklist_get_data(iterTable); - for (uint32_t i = 0; i < u_arraylist_length(entry->destination->destIntfAddr); i++) + if (0 < u_arraylist_length(entry->destination->destIntfAddr)) { - RTMDestIntfInfo_t *destCheck = u_arraylist_get(entry->destination->destIntfAddr, i); + RTMDestIntfInfo_t *destCheck = u_arraylist_get(entry->destination->destIntfAddr, 0); if (NULL == destCheck) { OC_LOG(ERROR, TAG, "destCheck is null"); @@ -950,7 +950,6 @@ void RTMGetObserverList(OCObservationId **obsList, uint8_t *obsListLen, *obsList = (OCObservationId *) OICRealloc((void *)*obsList, (sizeof(OCObservationId) * (len + 1))); } - break; } u_linklist_get_next(&iterTable); } diff --git a/resource/csdk/stack/src/ocstack.c b/resource/csdk/stack/src/ocstack.c index d2b13c9..e8f89e4 100644 --- a/resource/csdk/stack/src/ocstack.c +++ b/resource/csdk/stack/src/ocstack.c @@ -1173,6 +1173,12 @@ void HandleCAResponses(const CAEndpoint_t* endPoint, const CAResponseInfo_t* res { type = PAYLOAD_TYPE_PLATFORM; } +#ifdef ROUTING_GATEWAY + else if (strcmp(cbNode->requestUri, OC_RSRVD_GATEWAY_URI) == 0) + { + type = PAYLOAD_TYPE_REPRESENTATION; + } +#endif else { OC_LOG_V(ERROR, TAG, "Unknown Payload type in Discovery: %d %s", -- 2.7.4