X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fsrc%2Fip_adapter%2Fcaipadapter.c;h=3df9ca6921f94396050d3b4c3d60a27ae57e13e4;hb=3c093548382bb2542c87a67e6e5fa32552c29cb3;hp=6f92929db13f5dcd04d745164b8abcea0cebb192;hpb=edcfc3d2329da7b914771c0dcff5f42c9b74fd93;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/src/ip_adapter/caipadapter.c b/resource/csdk/connectivity/src/ip_adapter/caipadapter.c index 6f92929..3df9ca6 100644 --- a/resource/csdk/connectivity/src/ip_adapter/caipadapter.c +++ b/resource/csdk/connectivity/src/ip_adapter/caipadapter.c @@ -31,7 +31,7 @@ #ifdef __WITH_DTLS__ #include "ca_adapter_net_ssl.h" #endif -#include "camutex.h" +#include "octhread.h" #include "uarraylist.h" #include "caremotehandler.h" #include "logger.h" @@ -76,8 +76,8 @@ static CAAdapterChangeCallback g_networkChangeCallback = NULL; */ static CAErrorHandleCallback g_errorCallback = NULL; -static void CAIPPacketReceivedCB(const CASecureEndpoint_t *endpoint, - const void *data, size_t dataLength); +static CAResult_t CAIPPacketReceivedCB(const CASecureEndpoint_t *endpoint, + const void *data, size_t dataLength); #ifdef __WITH_DTLS__ static ssize_t CAIPPacketSendCB(CAEndpoint_t *endpoint, const void *data, size_t dataLength); @@ -148,6 +148,22 @@ void CAIPAdapterHandler(CATransportAdapter_t adapter, CANetworkStatus_t status) { OIC_LOG(ERROR, TAG, "g_networkChangeCallback is NULL"); } + + if (CA_INTERFACE_DOWN == status) + { + OIC_LOG(DEBUG, TAG, "Network status for IP is down"); + + CAResult_t res = CAQueueingThreadClearData(g_sendQueueHandle); + if (res != CA_STATUS_OK) + { + OIC_LOG_V(ERROR, TAG, "CAQueueingThreadClearData failed[%d]", res); + } + +#ifdef __WITH_DTLS__ + OIC_LOG(DEBUG, TAG, "close all ssl session"); + CAcloseSslConnectionAll(CA_ADAPTER_IP); +#endif + } } #ifdef __WITH_DTLS__ @@ -162,18 +178,24 @@ static ssize_t CAIPPacketSendCB(CAEndpoint_t *endpoint, const void *data, size_t #endif -void CAIPPacketReceivedCB(const CASecureEndpoint_t *sep, const void *data, - size_t dataLength) +CAResult_t CAIPPacketReceivedCB(const CASecureEndpoint_t *sep, const void *data, + size_t dataLength) { - VERIFY_NON_NULL_VOID(sep, TAG, "sep is NULL"); - VERIFY_NON_NULL_VOID(data, TAG, "data is NULL"); + VERIFY_NON_NULL(sep, TAG, "sep is NULL"); + VERIFY_NON_NULL(data, TAG, "data is NULL"); OIC_LOG_V(DEBUG, TAG, "Address: %s, port:%d", sep->endpoint.addr, sep->endpoint.port); + CAResult_t res = CA_STATUS_OK; if (g_networkPacketCallback) { - g_networkPacketCallback(sep, data, dataLength); + res = g_networkPacketCallback(sep, data, dataLength); + if (CA_STATUS_OK != res) + { + OIC_LOG(ERROR, TAG, "Error parsing CoAP data"); + } } + return res; } void CAIPErrorHandler(const CAEndpoint_t *endpoint, const void *data, @@ -216,7 +238,10 @@ static void CAInitializeIPGlobals() { flags |= caglobals.serverFlags; } +//TODO Enable once TizenRT supports IPv6 +#ifndef __TIZENRT__ caglobals.ip.ipv6enabled = flags & CA_IPV6; +#endif caglobals.ip.ipv4enabled = flags & CA_IPV4; caglobals.ip.dualstack = caglobals.ip.ipv6enabled && caglobals.ip.ipv4enabled; } @@ -245,14 +270,7 @@ CAResult_t CAInitializeIP(CARegisterConnectivityCallback registerCallback, CAIPSetPacketReceiveCallback(CAIPPacketReceivedCB); #ifdef __WITH_DTLS__ - if (CA_STATUS_OK != CAinitSslAdapter()) - { - OIC_LOG(ERROR, TAG, "Failed to init SSL adapter"); - } - else - { - CAsetSslAdapterCallbacks(CAIPPacketReceivedCB, CAIPPacketSendCB, CA_ADAPTER_IP); - } + CAsetSslAdapterCallbacks(CAIPPacketReceivedCB, CAIPPacketSendCB, CA_ADAPTER_IP); #endif static const CAConnectivityHandler_t ipHandler = @@ -302,7 +320,11 @@ CAResult_t CAStartIP() } // Start send queue thread +#ifndef __TIZENRT__ if (CA_STATUS_OK != CAQueueingThreadStart(g_sendQueueHandle)) +#else + if (CA_STATUS_OK != CAQueueingThreadStart(g_sendQueueHandle, "IoT_IPSendQueue")) +#endif { OIC_LOG(ERROR, TAG, "Failed to Start Send Data Thread"); return CA_STATUS_FAILED; @@ -406,10 +428,6 @@ CAResult_t CAReadIPData() CAResult_t CAStopIP() { -#ifdef __WITH_DTLS__ - CAdeinitSslAdapter(); -#endif - #ifndef SINGLE_THREAD if (g_sendQueueHandle && g_sendQueueHandle->threadMutex) { @@ -434,7 +452,6 @@ void CATerminateIP() CAIPSetPacketReceiveCallback(NULL); #ifndef SINGLE_THREAD - CADeInitializeIPGlobals(); CAIPDeinitializeQueueHandles(); #endif } @@ -462,13 +479,13 @@ void CAIPSendDataThread(void *threadData) #ifdef __WITH_DTLS__ if (ipData->remoteEndpoint && ipData->remoteEndpoint->flags & CA_SECURE) { - OIC_LOG(DEBUG, TAG, "DTLS encrypt called"); + OIC_LOG(INFO, TAG, "DTLS encrypt called"); CAResult_t result = CAencryptSsl(ipData->remoteEndpoint, ipData->data, ipData->dataLen); if (CA_STATUS_OK != result) { OIC_LOG(ERROR, TAG, "CAencryptSsl failed!"); } - OIC_LOG_V(DEBUG, TAG, "CAencryptSsl returned with result[%d]", result); + OIC_LOG_V(INFO, TAG, "CAencryptSsl returned with result[%d]", result); } else {