CoAP over TCP transmission over BT
authorhyuna0213.jo <hyuna0213.jo@samsung.com>
Thu, 21 Jan 2016 06:11:12 +0000 (15:11 +0900)
committerJon A. Cruz <jonc@osg.samsung.com>
Thu, 18 Feb 2016 06:52:13 +0000 (06:52 +0000)
currently, CoAP/UDP message format is used over BT-RFCOMM.
but BT-RFCOMM data transmission requires dedicated session
between devices and guarantees reliable data transmission
by its MAC & PHY layer. So, CoAP/TCP message format might
be more efficient for Bluetooth

Change-Id: I0b7752a1146efd1abbe74eb613c72346b99039e9
Signed-off-by: hyuna0213.jo <hyuna0213.jo@samsung.com>
Signed-off-by: jihwan.seo <jihwan.seo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/4447
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jon A. Cruz <jonc@osg.samsung.com>
12 files changed:
resource/csdk/connectivity/inc/caedrinterface.h
resource/csdk/connectivity/lib/libcoap-4.1.1/SConscript
resource/csdk/connectivity/lib/libcoap-4.1.1/pdu.c
resource/csdk/connectivity/lib/libcoap-4.1.1/pdu.h
resource/csdk/connectivity/src/bt_edr_adapter/android/caedrclient.c
resource/csdk/connectivity/src/bt_edr_adapter/android/caedrserver.c
resource/csdk/connectivity/src/bt_edr_adapter/android/caedrserver.h
resource/csdk/connectivity/src/bt_edr_adapter/android/caedrutils.c
resource/csdk/connectivity/src/bt_edr_adapter/android/caedrutils.h
resource/csdk/connectivity/src/bt_edr_adapter/caedradapter.c
resource/csdk/connectivity/src/camessagehandler.c
resource/csdk/connectivity/src/caprotocolmessage.c

index 6944270..0087cbb 100644 (file)
@@ -45,11 +45,14 @@ typedef enum
     STATE_CONNECTED     /**< State is Connected. */
 } CAConnectedState_t;
 
-typedef struct connected_state
+typedef struct connected_device
 {
     uint8_t address[CA_MACADDR_SIZE];
     CAConnectedState_t state;
-} state_t;
+    uint8_t *recvData;
+    size_t recvDataLen;
+    size_t totalDataLen;
+} CAConnectedDeviceInfo_t;
 
 /**
  * Enum for defining different server types.
index c538721..bf892ec 100644 (file)
@@ -76,4 +76,4 @@ libcoap_src = [
 
 libcoap = libcoap_env.StaticLibrary('libcoap', libcoap_src, OBJPREFIX='libcoap_')
 
-libcoap_env.InstallTarget([libcoap], 'libcoap')
\ No newline at end of file
+libcoap_env.InstallTarget([libcoap], 'libcoap')
index 3086b22..0e174fa 100644 (file)
@@ -243,6 +243,23 @@ void coap_delete_pdu(coap_pdu_t *pdu)
 }
 
 #ifdef WITH_TCP
+size_t coap_get_total_message_length(const unsigned char *data, size_t size)
+{
+    if (!data || !size)
+    {
+        debug("received data length is null\n");
+        return 0;
+    }
+
+    coap_transport_type transport = coap_get_tcp_header_type_from_initbyte(
+            ((unsigned char *)data)[0] >> 4);
+    size_t optPaylaodLen = coap_get_length_from_header((unsigned char *)data,
+                                                        transport);
+    size_t headerLen = coap_get_tcp_header_length((unsigned char *)data);
+
+    return headerLen + optPaylaodLen;
+}
+
 coap_transport_type coap_get_tcp_header_type_from_size(unsigned int size)
 {
     if (COAP_TCP_LENGTH_FIELD_8_BIT < size && COAP_TCP_LENGTH_FIELD_16_BIT >= size)
index 1e19c85..6f8f175 100644 (file)
@@ -395,6 +395,15 @@ int coap_pdu_parse(unsigned char *data, size_t length, coap_pdu_t *pdu,
 
 #ifdef WITH_TCP
 /**
+ * Get total message length from header.
+ *
+ * @param data   The raw data to parse as CoAP PDU.
+ * @param size   payload size of pdu.
+ * @return Total message length.
+ */
+size_t coap_get_total_message_length(const unsigned char *data, size_t size);
+
+/**
  * Get transport type of coap header for coap over tcp through payload size.
  *
  * @param size   payload size of pdu.
index 4e19927..a729e2c 100644 (file)
@@ -204,20 +204,16 @@ CAResult_t CAEDRClientSendUnicastData(const char *remoteAddress, const uint8_t *
 {
     VERIFY_NON_NULL(remoteAddress, TAG, "remoteAddress is null");
     VERIFY_NON_NULL(data, TAG, "data is null");
-    OIC_LOG(DEBUG, TAG, "IN");
 
     CAResult_t result = CAEDRSendUnicastMessage(remoteAddress, data, dataLength);
-    OIC_LOG(DEBUG, TAG, "OUT");
     return result;
 }
 
 CAResult_t CAEDRClientSendMulticastData(const uint8_t *data, uint32_t dataLength)
 {
     VERIFY_NON_NULL(data, TAG, "data is null");
-    OIC_LOG(DEBUG, TAG, "IN");
 
     CAResult_t result = CAEDRSendMulticastMessage(data, dataLength);
-    OIC_LOG(DEBUG, TAG, "OUT");
     return result;
 }
 
@@ -239,7 +235,8 @@ void CAEDRClientDisconnectAll()
 
 CAResult_t CAEDRGetAdapterEnableState(bool *state)
 {
-    OIC_LOG(DEBUG, TAG, "IN");
+    VERIFY_NON_NULL(state, TAG, "state is null");
+
     if (!g_jvm)
     {
         OIC_LOG(ERROR, TAG, "g_jvm is null");
@@ -260,22 +257,19 @@ CAResult_t CAEDRGetAdapterEnableState(bool *state)
         }
         isAttached = true;
     }
+
+    *state = false;
     jboolean ret = CAEDRNativeIsEnableBTAdapter(env);
     if (ret)
     {
         *state = true;
     }
-    else
-    {
-        *state = false;
-    }
 
     if (isAttached)
     {
         (*g_jvm)->DetachCurrentThread(g_jvm);
     }
 
-    OIC_LOG(DEBUG, TAG, "OUT");
     return CA_STATUS_OK;
 }
 
@@ -289,11 +283,11 @@ void CAEDRJniInitContext()
 CAResult_t CAEDRCreateJNIInterfaceObject(jobject context)
 {
     JNIEnv* env;
-    OIC_LOG(DEBUG, TAG, "[EDRCore] CAEDRCreateJNIInterfaceObject");
+    OIC_LOG(DEBUG, TAG, "CAEDRCreateJNIInterfaceObject");
 
     if ((*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6) != JNI_OK)
     {
-        OIC_LOG(ERROR, TAG, "[EDRCore] Could not get JNIEnv pointer");
+        OIC_LOG(ERROR, TAG, "Could not get JNIEnv pointer");
         return CA_STATUS_FAILED;
     }
 
@@ -301,7 +295,7 @@ CAResult_t CAEDRCreateJNIInterfaceObject(jobject context)
     jclass contextClass = (*env)->FindClass(env, CLASSPATH_CONTEXT);
     if (!contextClass)
     {
-        OIC_LOG(ERROR, TAG, "[EDRCore] Could not get context object class");
+        OIC_LOG(ERROR, TAG, "Could not get context object class");
         return CA_STATUS_FAILED;
     }
 
@@ -310,7 +304,7 @@ CAResult_t CAEDRCreateJNIInterfaceObject(jobject context)
                                                                 METHODID_CONTEXTNONPARAM);
     if (!getApplicationContextMethod)
     {
-        OIC_LOG(ERROR, TAG, "[EDRCore] Could not get getApplicationContext method");
+        OIC_LOG(ERROR, TAG, "Could not get getApplicationContext method");
         return CA_STATUS_FAILED;
     }
 
@@ -318,7 +312,7 @@ CAResult_t CAEDRCreateJNIInterfaceObject(jobject context)
     jclass EDRJniInterface = (*env)->FindClass(env, CLASSPATH_BT_INTERFACE);
     if (!EDRJniInterface)
     {
-        OIC_LOG(ERROR, TAG, "[EDRCore] Could not get CaEdrInterface class");
+        OIC_LOG(ERROR, TAG, "Could not get CaEdrInterface class");
         return CA_STATUS_FAILED;
     }
 
@@ -326,21 +320,18 @@ CAResult_t CAEDRCreateJNIInterfaceObject(jobject context)
                                                                   "(Landroid/content/Context;)V");
     if (!EDRInterfaceConstructorMethod)
     {
-        OIC_LOG(ERROR, TAG, "[EDRCore] Could not get CaEdrInterface constructor method");
+        OIC_LOG(ERROR, TAG, "Could not get CaEdrInterface constructor method");
         return CA_STATUS_FAILED;
     }
 
     (*env)->NewObject(env, EDRJniInterface, EDRInterfaceConstructorMethod, context);
-    OIC_LOG(DEBUG, TAG, "[EDRCore] NewObject Success");
+    OIC_LOG(DEBUG, TAG, "NewObject Success");
 
     return CA_STATUS_OK;
-
 }
 
 static void CAEDRDestroyMutex()
 {
-    OIC_LOG(DEBUG, TAG, "IN");
-
     if (g_mutexUnicastServer)
     {
         ca_mutex_free(g_mutexUnicastServer);
@@ -364,13 +355,10 @@ static void CAEDRDestroyMutex()
         ca_mutex_free(g_mutexObjectList);
         g_mutexObjectList = NULL;
     }
-    OIC_LOG(DEBUG, TAG, "OUT");
 }
 
 static CAResult_t CAEDRCreateMutex()
 {
-    OIC_LOG(DEBUG, TAG, "IN");
-
     g_mutexUnicastServer = ca_mutex_new();
     if (!g_mutexUnicastServer)
     {
@@ -405,7 +393,6 @@ static CAResult_t CAEDRCreateMutex()
         return CA_STATUS_FAILED;
     }
 
-    OIC_LOG(DEBUG, TAG, "OUT");
     return CA_STATUS_OK;
 }
 
@@ -444,6 +431,7 @@ void CAEDRInitialize(ca_thread_pool_t handle)
         OIC_LOG_V(DEBUG, TAG, "My BT Address is %s", localAddress);
         (*env)->ReleaseStringUTFChars(env, jni_address, localAddress);
     }
+    (*env)->DeleteLocalRef(env, jni_address);
 
     ca_mutex_lock(g_mutexStateList);
     CAEDRNativeCreateDeviceStateList();
@@ -599,7 +587,6 @@ CAResult_t CAEDRSendUnicastMessage(const char* address, const uint8_t* data, uin
 CAResult_t CAEDRSendMulticastMessage(const uint8_t* data, uint32_t dataLen)
 {
     VERIFY_NON_NULL(data, TAG, "data is null");
-    OIC_LOG_V(DEBUG, TAG, "CAEDRSendMulticastMessage(%s)", data);
 
     bool isAttached = false;
     JNIEnv* env;
@@ -690,7 +677,6 @@ CAResult_t CAEDRSendUnicastMessageImpl(const char* address, const uint8_t* data,
 {
     VERIFY_NON_NULL(address, TAG, "address is null");
     VERIFY_NON_NULL(data, TAG, "data is null");
-    OIC_LOG_V(DEBUG, TAG, "CAEDRSendUnicastMessageImpl, address: %s, data: %s", address, data);
 
     bool isAttached = false;
     JNIEnv* env;
@@ -707,13 +693,13 @@ CAResult_t CAEDRSendUnicastMessageImpl(const char* address, const uint8_t* data,
         isAttached = true;
     }
 
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] set byteArray for data");
+    OIC_LOG(DEBUG, TAG, "set byteArray for data");
 
     // get bonded device list
     jobjectArray jni_arrayPairedDevices = CAEDRNativeGetBondedDevices(env);
     if (!jni_arrayPairedDevices)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_arrayPairedDevices is empty");
+        OIC_LOG(ERROR, TAG, "jni_arrayPairedDevices is empty");
         if (isAttached)
         {
             (*g_jvm)->DetachCurrentThread(g_jvm);
@@ -730,7 +716,7 @@ CAResult_t CAEDRSendUnicastMessageImpl(const char* address, const uint8_t* data,
     jsize length = (*env)->GetArrayLength(env, jni_arrayPairedDevices);
     for (jsize i = 0; i < length; i++)
     {
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] start to check device");
+        OIC_LOG(DEBUG, TAG, "start to check device");
         // get name, address from BT device
         jobject j_obj_device = (*env)->GetObjectArrayElement(env, jni_arrayPairedDevices, i);
         jstring j_str_name = (*env)->CallObjectMethod(env, j_obj_device, j_mid_getName);
@@ -738,7 +724,7 @@ CAResult_t CAEDRSendUnicastMessageImpl(const char* address, const uint8_t* data,
         if (j_str_name)
         {
             const char * name = (*env)->GetStringUTFChars(env, j_str_name, NULL);
-            OIC_LOG_V(DEBUG, TAG, "[EDR][Native] getBondedDevices: ~~device name is %s", name);
+            OIC_LOG_V(DEBUG, TAG, "device name is %s", name);
             (*env)->ReleaseStringUTFChars(env, j_str_name, name);
             (*env)->DeleteLocalRef(env, j_str_name);
         }
@@ -748,7 +734,7 @@ CAResult_t CAEDRSendUnicastMessageImpl(const char* address, const uint8_t* data,
         (*env)->DeleteLocalRef(env, j_obj_device);
         if (!remoteAddress)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null");
+            OIC_LOG(ERROR, TAG, "remoteAddress is null");
             if (isAttached)
             {
                 (*g_jvm)->DetachCurrentThread(g_jvm);
@@ -759,8 +745,7 @@ CAResult_t CAEDRSendUnicastMessageImpl(const char* address, const uint8_t* data,
             (*env)->DeleteLocalRef(env, jni_cid_BTDevice);
             return CA_STATUS_INVALID_PARAM;
         }
-        OIC_LOG_V(DEBUG, TAG,
-                  "[EDR][Native] getBondedDevices: ~~device address is %s", remoteAddress);
+        OIC_LOG_V(DEBUG, TAG, "device address is %s", remoteAddress);
 
         // find address
         if (!strcmp(remoteAddress, address))
@@ -793,14 +778,14 @@ CAResult_t CAEDRSendUnicastMessageImpl(const char* address, const uint8_t* data,
 
 CAResult_t CAEDRSendMulticastMessageImpl(JNIEnv *env, const uint8_t* data, uint32_t dataLen)
 {
+    VERIFY_NON_NULL(env, TAG, "env is null");
     VERIFY_NON_NULL(data, TAG, "data is null");
-    OIC_LOG_V(DEBUG, TAG, "CASendMulticastMessageImpl, send to, data: %s, %d", data, dataLen);
 
     // get bonded device list
     jobjectArray jni_arrayPairedDevices = CAEDRNativeGetBondedDevices(env);
     if (!jni_arrayPairedDevices)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_arrayPairedDevices is empty");
+        OIC_LOG(ERROR, TAG, "jni_arrayPairedDevices is empty");
         return CA_STATUS_INVALID_PARAM;
     }
     // Get information from array of devices
@@ -816,32 +801,31 @@ CAResult_t CAEDRSendMulticastMessageImpl(JNIEnv *env, const uint8_t* data, uint3
         // get name, address from BT device
         jobject j_obj_device = (*env)->GetObjectArrayElement(env, jni_arrayPairedDevices, i);
         jstring j_str_name = (*env)->CallObjectMethod(env, j_obj_device, j_mid_getName);
+        jstring j_str_address = (*env)->CallObjectMethod(env, j_obj_device, j_mid_getAddress);
 
-        if (j_str_name)
+        if (j_str_name && j_str_address)
         {
             const char * name = (*env)->GetStringUTFChars(env, j_str_name, NULL);
-            OIC_LOG_V(DEBUG, TAG, "[EDR][Native] getBondedDevices: ~~device name is %s", name);
+            const char * remoteAddress = (*env)->GetStringUTFChars(env, j_str_address, NULL);
+            if (name && remoteAddress)
+            {
+                OIC_LOG_V(DEBUG, TAG, "device name is %s, address is %s", name, remoteAddress);
+
+                CAResult_t res = CAEDRNativeSendData(env, remoteAddress, data, dataLen);
+                if (CA_STATUS_OK != res)
+                {
+                    OIC_LOG_V(ERROR, TAG, "Failed to send multicast message to : %s",
+                              remoteAddress);
+                    g_edrErrorHandler(remoteAddress, data, dataLen, res);
+                }
+            }
             (*env)->ReleaseStringUTFChars(env, j_str_name, name);
-            (*env)->DeleteLocalRef(env, j_str_name);
+            (*env)->ReleaseStringUTFChars(env, j_str_address, remoteAddress);
         }
 
-        jstring j_str_address = (*env)->CallObjectMethod(env, j_obj_device, j_mid_getAddress);
-        const char * remoteAddress = (*env)->GetStringUTFChars(env, j_str_address, NULL);
         (*env)->DeleteLocalRef(env, j_obj_device);
-        OIC_LOG_V(DEBUG, TAG,
-                  "[EDR][Native] getBondedDevices: ~~device address is %s", remoteAddress);
-
-        // find address
-        CAResult_t res = CAEDRNativeSendData(env, remoteAddress, data, dataLen);
-        (*env)->ReleaseStringUTFChars(env, j_str_address, remoteAddress);
+        (*env)->DeleteLocalRef(env, j_str_name);
         (*env)->DeleteLocalRef(env, j_str_address);
-        if (CA_STATUS_OK != res)
-        {
-            OIC_LOG_V(ERROR, TAG, "CASendMulticastMessageImpl, failed to send message to : %s",
-                      remoteAddress);
-            g_edrErrorHandler(remoteAddress, data, dataLen, res);
-            continue;
-        }
     }
 
     (*env)->DeleteLocalRef(env, jni_arrayPairedDevices);
@@ -850,15 +834,12 @@ CAResult_t CAEDRSendMulticastMessageImpl(JNIEnv *env, const uint8_t* data, uint3
     return CA_STATUS_OK;
 }
 
-/**
- * EDR Method
- */
 CAResult_t CAEDRNativeSendData(JNIEnv *env, const char *address, const uint8_t *data,
                                uint32_t dataLength)
 {
+    VERIFY_NON_NULL(env, TAG, "env is null");
     VERIFY_NON_NULL(address, TAG, "address is null");
     VERIFY_NON_NULL(data, TAG, "data is null");
-    OIC_LOG_V(DEBUG, TAG, "[EDR][Native] btSendData logic start : %s, %d", data, dataLength);
 
     if (!CAEDRNativeIsEnableBTAdapter(env))
     {
@@ -869,7 +850,7 @@ CAResult_t CAEDRNativeSendData(JNIEnv *env, const char *address, const uint8_t *
     if (STATE_DISCONNECTED == CAEDRIsConnectedDevice(address))
     {
         // connect before send data
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] connect before send data");
+        OIC_LOG(DEBUG, TAG, "connect before send data");
 
         CAResult_t res = CAEDRNativeConnect(env, address);
         if (CA_STATUS_OK != res)
@@ -885,7 +866,7 @@ CAResult_t CAEDRNativeSendData(JNIEnv *env, const char *address, const uint8_t *
             jclass jni_cid_BTsocket = (*env)->FindClass(env, CLASSPATH_BT_SOCKET);
             if (!jni_cid_BTsocket)
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btSendData: jni_cid_BTsocket is null");
+                OIC_LOG(ERROR, TAG, "jni_cid_BTsocket is null");
                 return CA_STATUS_FAILED;
             }
 
@@ -894,17 +875,17 @@ CAResult_t CAEDRNativeSendData(JNIEnv *env, const char *address, const uint8_t *
                                                                     METHODID_OUTPUTNONPARAM);
             if (!jni_mid_getOutputStream)
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btSendData: jni_mid_getOutputStream is null");
+                OIC_LOG(ERROR, TAG, "jni_mid_getOutputStream is null");
                 (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
                 return CA_STATUS_FAILED;
             }
 
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] btSendData: Get MethodID for i/o stream");
+            OIC_LOG(DEBUG, TAG, "Get MethodID for i/o stream");
 
             jobject jni_obj_socket = CAEDRNativeGetDeviceSocketBaseAddr(env, address);
             if (!jni_obj_socket)
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btSendData: jni_socket is not available");
+                OIC_LOG(ERROR, TAG, "jni_socket is not available");
                 (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
                 return CA_STATUS_FAILED;
             }
@@ -913,17 +894,17 @@ CAResult_t CAEDRNativeSendData(JNIEnv *env, const char *address, const uint8_t *
                                                                     jni_mid_getOutputStream);
             if (!jni_obj_outputStream)
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btSendData: jni_obj_outputStream is null");
+                OIC_LOG(ERROR, TAG, "jni_obj_outputStream is null");
                 (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
                 return CA_STATUS_FAILED;
             }
 
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] btSendData: ready outputStream..");
+            OIC_LOG(DEBUG, TAG, "ready outputStream..");
 
             jclass jni_cid_OutputStream = (*env)->FindClass(env, CLASSPATH_OUTPUT);
             if (!jni_cid_OutputStream)
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btSendData: jni_cid_OutputStream is null");
+                OIC_LOG(ERROR, TAG, "jni_cid_OutputStream is null");
                 (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
                 (*env)->DeleteLocalRef(env, jni_obj_outputStream);
                 return CA_STATUS_FAILED;
@@ -933,7 +914,7 @@ CAResult_t CAEDRNativeSendData(JNIEnv *env, const char *address, const uint8_t *
                                                           "([BII)V");
             if (!jni_mid_write)
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btSendData: jni_mid_write is null");
+                OIC_LOG(ERROR, TAG, "jni_mid_write is null");
                 (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
                 (*env)->DeleteLocalRef(env, jni_obj_outputStream);
                 (*env)->DeleteLocalRef(env, jni_cid_OutputStream);
@@ -953,25 +934,26 @@ CAResult_t CAEDRNativeSendData(JNIEnv *env, const char *address, const uint8_t *
 
             if ((*env)->ExceptionCheck(env))
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btSendData: Write Error!!!");
+                OIC_LOG(ERROR, TAG, "Failed to write data in outputStram");
                 (*env)->ExceptionDescribe(env);
                 (*env)->ExceptionClear(env);
                 return CA_STATUS_FAILED;
             }
 
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] btSendData: Write Success");
+            OIC_LOG_V(INFO, TAG, "EDR sendTo is successful: %ld bytes, to %s",
+                      dataLength, address);
         }
         else
         {
             (*env)->ExceptionDescribe(env);
             (*env)->ExceptionClear(env);
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btSendData: error!!");
+            OIC_LOG(ERROR, TAG, "error!!");
             return CA_STATUS_FAILED;
         }
     }
     else
     {
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] btSendData: BT connection is not completed!!");
+        OIC_LOG(DEBUG, TAG, "BT connection is not completed!!");
     }
 
     return CA_STATUS_OK;
@@ -980,7 +962,7 @@ CAResult_t CAEDRNativeSendData(JNIEnv *env, const char *address, const uint8_t *
 CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
 {
     VERIFY_NON_NULL(address, TAG, "address is null");
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] btConnect..");
+    OIC_LOG(DEBUG, TAG, "btConnect..");
 
     if (!CAEDRNativeIsEnableBTAdapter(env))
     {
@@ -991,7 +973,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
     if (!jni_cid_BTAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_cid_BTAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
         return CA_STATUS_FAILED;
     }
 
@@ -1001,7 +983,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
                                                                     METHODID_OBJECTNONPARAM);
     if (!jni_mid_getDefaultAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_mid_getDefaultAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
         return CA_STATUS_FAILED;
     }
@@ -1010,7 +992,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
                                                                jni_mid_getDefaultAdapter);
     if (!jni_obj_BTAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_obj_BTAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
         return CA_STATUS_FAILED;
     }
@@ -1022,7 +1004,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
     if (!jni_mid_getRemoteDevice)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_mid_getRemoteDevice is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_getRemoteDevice is null");
         (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
         return CA_STATUS_FAILED;
     }
@@ -1034,7 +1016,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
     if (!jni_obj_remoteBTDevice)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_obj_remoteBTDevice is null");
+        OIC_LOG(ERROR, TAG, "jni_obj_remoteBTDevice is null");
         return CA_STATUS_FAILED;
     }
 
@@ -1042,7 +1024,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     jclass jni_cid_BluetoothDevice = (*env)->FindClass(env, CLASSPATH_BT_DEVICE);
     if (!jni_cid_BluetoothDevice)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_cid_BluetoothDevice is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BluetoothDevice is null");
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         return CA_STATUS_FAILED;
     }
@@ -1053,7 +1035,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     (*env)->DeleteLocalRef(env, jni_cid_BluetoothDevice);
     if (!jni_mid_createSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_mid_createSocket is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_createSocket is null");
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         return CA_STATUS_FAILED;
     }
@@ -1062,7 +1044,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     jclass jni_cid_uuid = (*env)->FindClass(env, CLASSPATH_BT_UUID);
     if (!jni_cid_uuid)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_cid_uuid is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_uuid is null");
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         return CA_STATUS_FAILED;
     }
@@ -1071,7 +1053,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
             env, jni_cid_uuid, "fromString", "(Ljava/lang/String;)Ljava/util/UUID;");
     if (!jni_mid_fromString)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_mid_fromString is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_fromString is null");
         (*env)->DeleteLocalRef(env, jni_cid_uuid);
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         return CA_STATUS_FAILED;
@@ -1080,7 +1062,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     jstring jni_uuid = (*env)->NewStringUTF(env, OIC_EDR_SERVICE_ID);
     if (!jni_uuid)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_uuid is null");
+        OIC_LOG(ERROR, TAG, "jni_uuid is null");
         (*env)->DeleteLocalRef(env, jni_cid_uuid);
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         return CA_STATUS_FAILED;
@@ -1091,7 +1073,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     (*env)->DeleteLocalRef(env, jni_uuid);
     if (!jni_obj_uuid)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_obj_uuid is null");
+        OIC_LOG(ERROR, TAG, "jni_obj_uuid is null");
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         return CA_STATUS_FAILED;
     }
@@ -1102,7 +1084,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
     if (!jni_obj_BTSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_obj_BTSocket is null");
+        OIC_LOG(ERROR, TAG, "jni_obj_BTSocket is null");
         return CA_STATUS_FAILED;
     }
 
@@ -1110,7 +1092,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     jclass jni_cid_BTSocket = (*env)->FindClass(env, CLASSPATH_BT_SOCKET);
     if (!jni_cid_BTSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_cid_BTSocket is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTSocket is null");
         (*env)->DeleteLocalRef(env, jni_obj_BTSocket);
         return CA_STATUS_FAILED;
     }
@@ -1119,17 +1101,17 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
     if (!jni_mid_connect)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_mid_connect is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_connect is null");
         (*env)->DeleteLocalRef(env, jni_obj_BTSocket);
         return CA_STATUS_FAILED;
     }
 
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] btConnect: initiating connection...");
+    OIC_LOG(DEBUG, TAG, "initiating connection...");
     (*env)->CallVoidMethod(env, jni_obj_BTSocket, jni_mid_connect);
 
     if ((*env)->ExceptionCheck(env))
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: Connect is Failed!!!");
+        OIC_LOG(ERROR, TAG, "Connect is Failed!!!");
         (*env)->ExceptionDescribe(env);
         (*env)->ExceptionClear(env);
         return CA_STATUS_FAILED;
@@ -1139,7 +1121,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     jobject jni_socket = (*env)->NewGlobalRef(env, jni_obj_BTSocket);
     if (!jni_socket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btConnect: jni_socket is null");
+        OIC_LOG(ERROR, TAG, "jni_socket is null");
         (*env)->DeleteLocalRef(env, jni_obj_BTSocket);
         return CA_STATUS_FAILED;
     }
@@ -1154,7 +1136,7 @@ CAResult_t CAEDRNativeConnect(JNIEnv *env, const char *address)
     CAEDRUpdateDeviceState(STATE_CONNECTED, address);
     ca_mutex_unlock(g_mutexStateList);
 
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] btConnect: connected");
+    OIC_LOG(DEBUG, TAG, "connected");
 
     return CA_STATUS_OK;
 }
@@ -1166,21 +1148,21 @@ void CAEDRNativeSocketClose(JNIEnv *env, const char *address)
     jclass jni_cid_BTSocket = (*env)->FindClass(env, "android/bluetooth/BluetoothSocket");
     if (!jni_cid_BTSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] close: jni_cid_BTSocket is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTSocket is null");
         return;
     }
 
     jmethodID jni_mid_close = (*env)->GetMethodID(env, jni_cid_BTSocket, "close", "()V");
     if (!jni_mid_close)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] close: jni_mid_close is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_close is null");
         return;
     }
 
     jobject jni_obj_socket = CAEDRNativeGetDeviceSocketBaseAddr(env, address);
     if (!jni_obj_socket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] close: jni_obj_socket is not available");
+        OIC_LOG(ERROR, TAG, "jni_obj_socket is not available");
         return;
     }
 
@@ -1188,7 +1170,7 @@ void CAEDRNativeSocketClose(JNIEnv *env, const char *address)
 
     if ((*env)->ExceptionCheck(env))
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] close: close is Failed!!!");
+        OIC_LOG(ERROR, TAG, "close is Failed!!!");
         (*env)->ExceptionDescribe(env);
         (*env)->ExceptionClear(env);
         return;
@@ -1202,14 +1184,12 @@ void CAEDRNativeSocketClose(JNIEnv *env, const char *address)
     CAEDRUpdateDeviceState(STATE_DISCONNECTED, address);
     ca_mutex_unlock(g_mutexStateList);
 
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] close: disconnected");
+    OIC_LOG(DEBUG, TAG, "disconnected");
 }
 
 void CAEDRInitializeClient(ca_thread_pool_t handle)
 {
-    OIC_LOG(DEBUG, TAG, "IN");
     CAEDRInitialize(handle);
-    OIC_LOG(DEBUG, TAG, "OUT");
 }
 
 void CAEDRSetErrorHandler(CAEDRErrorHandleCallback errorHandleCallback)
index a330d40..1a9cf1f 100644 (file)
@@ -35,7 +35,7 @@
 #include "oic_string.h"
 
 //#define DEBUG_MODE
-#define TAG PCF("OIC_CA_EDR_SERVER")
+#define TAG PCF("CA_EDR_SERVER")
 #define MAX_PDU_BUFFER (1024)
 
 static const char METHODID_OBJECTNONPARAM[] = "()Landroid/bluetooth/BluetoothAdapter;";
@@ -47,9 +47,10 @@ static ca_thread_pool_t g_threadPoolHandle = NULL;
 static JavaVM *g_jvm;
 
 /**
- * Mutex to synchronize socket list update.
+ * Maximum CoAP over TCP header length
+ * to know the total data length.
  */
-static ca_mutex g_mutexSocketListManager;
+#define EDR_MAX_HEADER_LEN  6
 
 /**
  * server socket instance.
@@ -103,13 +104,6 @@ static ca_mutex g_mutexStateList = NULL;
  */
 static ca_mutex g_mutexObjectList = NULL;
 
-typedef struct send_data
-{
-    char* address;
-    char* data;
-    uint32_t id;
-} data_t;
-
 /**
  * Thread context information for unicast, multicast and secured unicast server.
  */
@@ -154,10 +148,6 @@ static void CAReceiveHandler(void *data)
 
     CAAdapterReceiveThreadContext_t *ctx = (CAAdapterReceiveThreadContext_t *) data;
 
-    ca_mutex_lock(g_mutexUnicastServer);
-    g_stopUnicast = false;
-    ca_mutex_unlock(g_mutexUnicastServer);
-
     while (true != *(ctx->stopFlag))
     {
         // if new socket object is added in socket list after below logic is ran.
@@ -184,13 +174,9 @@ static void CAReceiveHandler(void *data)
 
 static void CAAcceptHandler(void *data)
 {
-    if (!data)
-    {
-        OIC_LOG(ERROR, TAG, "[EDR] CAAcceptHandler: data is null");
-        return;
-    }
+    OIC_LOG(DEBUG, TAG, "AcceptThread start");
 
-    OIC_LOG(DEBUG, TAG, "[EDR] AcceptThread start");
+    VERIFY_NON_NULL_VOID(data, TAG, "CAAcceptHandler: data is null");
 
     bool isAttached = false;
     JNIEnv* env;
@@ -211,7 +197,7 @@ static void CAAcceptHandler(void *data)
     jobject jni_obj_BTServerSocket = CAEDRNativeListen(env);
     if (!jni_obj_BTServerSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR] AcceptThread: jni_obj_BTServerSocket is null");
+        OIC_LOG(ERROR, TAG, "AcceptThread: jni_obj_BTServerSocket is null");
 
         if (isAttached)
         {
@@ -234,7 +220,7 @@ static void CAAcceptHandler(void *data)
 
     while (true != *(ctx->stopFlag))
     {
-        OIC_LOG(DEBUG, TAG, "[EDR] AcceptThread running");
+        OIC_LOG(DEBUG, TAG, "AcceptThread running");
 
         // when BT state is changed with Off. its thread will be stopped
         if (!CAEDRNativeIsEnableBTAdapter(env))
@@ -260,32 +246,34 @@ static void CAAcceptHandler(void *data)
 
     OICFree(ctx);
 
-    OIC_LOG(DEBUG, TAG, "[EDR] AcceptThread finish");
+    OIC_LOG(DEBUG, TAG, "AcceptThread finish");
 
     return;
 }
 
-/**
- * implement for adapter common method.
- */
 CAResult_t CAEDRServerStart(ca_thread_pool_t handle)
 {
-    OIC_LOG(DEBUG, TAG, "IN");
-    CAEDRServerInitialize(handle);
-    CAResult_t res = CAEDRStartUnicastServer(false);
+    CAResult_t res = CAEDRServerInitialize(handle);
+    if (CA_STATUS_OK != res)
+    {
+        OIC_LOG(ERROR, TAG, "CAEDRServerInitialize failed");
+        CAEDRServerStop();
+        return CA_STATUS_FAILED;
+    }
+
+    res = CAEDRStartUnicastServer(false);
     if (CA_STATUS_OK != res)
     {
         OIC_LOG(ERROR, TAG, "CAEDRStartUnicastServer failed");
+        CAEDRServerStop();
         return CA_STATUS_FAILED;
     }
 
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
+    return res;
 }
 
 CAResult_t CAEDRServerStop()
 {
-    OIC_LOG(DEBUG, TAG, "IN");
     CAEDRStopUnicastServer();
     CAEDRStopMulticastServer();
 
@@ -295,7 +283,7 @@ CAResult_t CAEDRServerStop()
 
     if (!g_jvm)
     {
-        OIC_LOG(DEBUG, TAG, "CAEDRServerStop - g_jvm is null");
+        OIC_LOG(DEBUG, TAG, "g_jvm is null");
         return CA_STATUS_FAILED;
     }
 
@@ -304,7 +292,7 @@ CAResult_t CAEDRServerStop()
     jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6);
     if (JNI_OK != res)
     {
-        OIC_LOG(DEBUG, TAG, "CAEDRServerStop - Could not get JNIEnv pointer");
+        OIC_LOG(DEBUG, TAG, "Could not get JNIEnv pointer");
         res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL);
 
         if (JNI_OK != res)
@@ -322,7 +310,6 @@ CAResult_t CAEDRServerStop()
         (*g_jvm)->DetachCurrentThread(g_jvm);
     }
 
-    OIC_LOG(DEBUG, TAG, "OUT");
     return CA_STATUS_OK;
 }
 
@@ -331,13 +318,8 @@ void CAEDRSetPacketReceivedCallback(CAEDRDataReceivedCallback packetReceivedCall
     g_edrPacketReceivedCallback = packetReceivedCallback;
 }
 
-/**
- * Destroy Mutex.
- */
 static void CAEDRServerDestroyMutex()
 {
-    OIC_LOG(DEBUG, TAG, "IN");
-
     if (g_mutexUnicastServer)
     {
         ca_mutex_free(g_mutexUnicastServer);
@@ -350,12 +332,6 @@ static void CAEDRServerDestroyMutex()
         g_mutexMulticastServer = NULL;
     }
 
-    if (g_mutexSocketListManager)
-    {
-        ca_mutex_free(g_mutexSocketListManager);
-        g_mutexSocketListManager = NULL;
-    }
-
     if (g_mutexAcceptServer)
     {
         ca_mutex_free(g_mutexAcceptServer);
@@ -379,17 +355,10 @@ static void CAEDRServerDestroyMutex()
         ca_mutex_free(g_mutexObjectList);
         g_mutexObjectList = NULL;
     }
-
-    OIC_LOG(DEBUG, TAG, "OUT");
 }
 
-/*
- * Create Mutex
- */
 static CAResult_t CAEDRServerCreateMutex()
 {
-    OIC_LOG(DEBUG, TAG, "IN");
-
     g_mutexUnicastServer = ca_mutex_new();
     if (!g_mutexUnicastServer)
     {
@@ -406,15 +375,6 @@ static CAResult_t CAEDRServerCreateMutex()
         return CA_STATUS_FAILED;
     }
 
-    g_mutexSocketListManager = ca_mutex_new();
-    if (!g_mutexSocketListManager)
-    {
-        OIC_LOG(ERROR, TAG, "Failed to created mutex!");
-
-        CAEDRServerDestroyMutex();
-        return CA_STATUS_FAILED;
-    }
-
     g_mutexAcceptServer = ca_mutex_new();
     if (!g_mutexAcceptServer)
     {
@@ -451,7 +411,6 @@ static CAResult_t CAEDRServerCreateMutex()
         return CA_STATUS_FAILED;
     }
 
-    OIC_LOG(DEBUG, TAG, "OUT");
     return CA_STATUS_OK;
 }
 
@@ -461,36 +420,48 @@ void CAEDRServerJniInit()
     g_jvm = CANativeJNIGetJavaVM();
 }
 
-void CAEDRServerInitialize(ca_thread_pool_t handle)
+CAResult_t CAEDRServerInitialize(ca_thread_pool_t handle)
 {
     OIC_LOG(DEBUG, TAG, "CAEDRServerInitialize");
 
     g_threadPoolHandle = handle;
 
-    CAEDRServerStartAcceptThread();
+    CAResult_t res = CAEDRServerStartAcceptThread();
+    if (CA_STATUS_OK != res)
+    {
+        OIC_LOG(ERROR, TAG, "CAEDRServerCreateMutex failed");
+        return res;
+    }
 
     OIC_LOG(DEBUG, TAG, "OUT");
+
+    return res;
 }
 
-void CAEDRServerStartAcceptThread()
+CAResult_t CAEDRServerStartAcceptThread()
 {
     CAEDRServerJniInit();
 
     // init mutex
-    CAEDRServerCreateMutex();
+    CAResult_t ret = CAEDRServerCreateMutex();
+    if (CA_STATUS_OK != ret)
+    {
+        OIC_LOG(ERROR, TAG, "CAEDRServerCreateMutex failed");
+        return ret;
+    }
 
     bool isAttached = false;
     JNIEnv* env;
     jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6);
     if (JNI_OK != res)
     {
-        OIC_LOG(DEBUG, TAG, "CAEDRServerInitialize - Could not get JNIEnv pointer");
+        OIC_LOG(DEBUG, TAG, "Could not get JNIEnv pointer");
         res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL);
 
         if (JNI_OK != res)
         {
             OIC_LOG(ERROR, TAG, "AttachCurrentThread failed");
-            return;
+            return CA_STATUS_FAILED;
         }
         isAttached = true;
     }
@@ -521,7 +492,7 @@ void CAEDRServerStartAcceptThread()
     if (!ctx)
     {
         OIC_LOG(ERROR, TAG, "Out of memory!");
-        return;
+        return CA_MEMORY_ALLOC_FAILED;
     }
 
     ctx->stopFlag = &g_stopAccept;
@@ -529,10 +500,10 @@ void CAEDRServerStartAcceptThread()
     {
         OIC_LOG(ERROR, TAG, "Failed to create read thread!");
         OICFree((void *) ctx);
-        return;
+        return CA_STATUS_FAILED;
     }
 
-    OIC_LOG(DEBUG, TAG, "OUT");
+    return CA_STATUS_OK;
 }
 
 void CAEDRServerTerminate()
@@ -548,7 +519,7 @@ void CAEDRServerTerminate()
     jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6);
     if (JNI_OK != res)
     {
-        OIC_LOG(DEBUG, TAG, "CAEDRServerTerminate - Could not get JNIEnv pointer");
+        OIC_LOG(DEBUG, TAG, "Could not get JNIEnv pointer");
         res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL);
 
         if (JNI_OK != res)
@@ -685,215 +656,224 @@ CAResult_t CAEDRNativeReadData(JNIEnv *env, uint32_t id, CAAdapterServerType_t t
         return CA_STATUS_INVALID_PARAM;
     }
 
-    if (!((*env)->ExceptionCheck(env)))
+    if ((*env)->ExceptionCheck(env))
     {
-        // check whether this socket object is connected or not.
-        jobject jni_obj_socket = CAEDRNativeGetDeviceSocket(id);
-        if (!jni_obj_socket)
-        {
-            return CA_STATUS_INVALID_PARAM;
-        }
-
-        jstring jni_str_address = CAEDRNativeGetAddressFromDeviceSocket(env, jni_obj_socket);
-        if (!jni_str_address)
-        {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: jni_str_address is null");
-            return CA_STATUS_FAILED;
-        }
-        const char* address = (*env)->GetStringUTFChars(env, jni_str_address, NULL);
+        (*env)->ExceptionDescribe(env);
+        (*env)->ExceptionClear(env);
+        OIC_LOG(ERROR, TAG, "env error!!");
+        return CA_STATUS_FAILED;
+    }
 
-        // check it whether is still connected or not through google api
-        jboolean ret = CAEDRIsConnectedForSocket(env, jni_obj_socket);
-        if (!ret)
-        {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: it is not connected yet.");
+    // check whether this socket object is connected or not.
+    jobject jni_obj_socket = CAEDRNativeGetDeviceSocket(id);
+    if (!jni_obj_socket)
+    {
+        return CA_STATUS_INVALID_PARAM;
+    }
 
-            // remove socket to list
-            CAEDRNativeRemoveDeviceSocket(env, jni_obj_socket);
-            CAEDRNativeRemoveDevice(address);
-            (*env)->ReleaseStringUTFChars(env, jni_str_address, address);
+    jstring jni_str_address = CAEDRNativeGetAddressFromDeviceSocket(env, jni_obj_socket);
+    if (!jni_str_address)
+    {
+        OIC_LOG(ERROR, TAG, "jni_str_address is null");
+        return CA_STATUS_FAILED;
+    }
+    const char* address = (*env)->GetStringUTFChars(env, jni_str_address, NULL);
 
-            (*env)->DeleteLocalRef(env, jni_str_address);
+    // check it whether is still connected or not through google api
+    jboolean ret = CAEDRIsConnectedForSocket(env, jni_obj_socket);
+    if (!ret)
+    {
+        OIC_LOG(ERROR, TAG, "it is not connected yet.");
 
-            return CA_STATUS_FAILED;
-        }
+        // remove socket to list
+        CAEDRNativeRemoveDeviceSocket(env, jni_obj_socket);
+        (*env)->ReleaseStringUTFChars(env, jni_str_address, address);
+        (*env)->DeleteLocalRef(env, jni_str_address);
 
-        // start to read through InputStream
-        jclass jni_cid_BTsocket = (*env)->FindClass(env, "android/bluetooth/BluetoothSocket");
-        if (!jni_cid_BTsocket)
-        {
-            (*env)->DeleteLocalRef(env, jni_str_address);
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: jni_cid_BTsocket is null");
-            return CA_STATUS_FAILED;
-        }
-        jmethodID jni_mid_getInputStream = (*env)->GetMethodID(env, jni_cid_BTsocket,
-                                                               "getInputStream",
-                                                               "()Ljava/io/InputStream;");
+        return CA_STATUS_FAILED;
+    }
 
-        jobject jni_obj_inputStream = (*env)->CallObjectMethod(env, jni_obj_socket,
-                                                               jni_mid_getInputStream);
-        if (!jni_obj_inputStream)
-        {
-            (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-            (*env)->DeleteLocalRef(env, jni_str_address);
+    // start to read through InputStream
+    jclass jni_cid_BTsocket = (*env)->FindClass(env, "android/bluetooth/BluetoothSocket");
+    if (!jni_cid_BTsocket)
+    {
+        OIC_LOG(ERROR, TAG, "jni_cid_BTsocket is null");
+        (*env)->DeleteLocalRef(env, jni_str_address);
+        return CA_STATUS_FAILED;
+    }
+    jmethodID jni_mid_getInputStream = (*env)->GetMethodID(env, jni_cid_BTsocket,
+                                                           "getInputStream",
+                                                           "()Ljava/io/InputStream;");
 
-            OIC_LOG(ERROR, TAG, "[EDR] btReadData: jni_obj_inputStream is null");
-            return CA_STATUS_FAILED;
-        }
+    jobject jni_obj_inputStream = (*env)->CallObjectMethod(env, jni_obj_socket,
+                                                           jni_mid_getInputStream);
+    if (!jni_obj_inputStream)
+    {
+        OIC_LOG(ERROR, TAG, "jni_obj_inputStream is null");
+        (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
+        (*env)->DeleteLocalRef(env, jni_str_address);
+        return CA_STATUS_FAILED;
+    }
 
-        jclass jni_cid_InputStream = (*env)->FindClass(env, "java/io/InputStream");
-        if (!jni_cid_InputStream)
-        {
-            (*env)->DeleteLocalRef(env, jni_obj_inputStream);
-            (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-            (*env)->DeleteLocalRef(env, jni_str_address);
+    jclass jni_cid_InputStream = (*env)->FindClass(env, "java/io/InputStream");
+    if (!jni_cid_InputStream)
+    {
+        OIC_LOG(ERROR, TAG, "jni_cid_InputStream is null");
+        goto exit;
+    }
 
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: jni_cid_InputStream is null");
-            return CA_STATUS_FAILED;
-        }
+    jmethodID jni_mid_available = (*env)->GetMethodID(env, jni_cid_InputStream,
+                                                      "available", "()I");
+    if (!jni_mid_available)
+    {
+        OIC_LOG(ERROR, TAG, "jni_mid_available is null");
+        goto exit;
+    }
 
-        jmethodID jni_mid_available = (*env)->GetMethodID(env, jni_cid_InputStream,
-                                                          "available", "()I");
-        if (!jni_mid_available) {
-            (*env)->DeleteLocalRef(env, jni_obj_inputStream);
-            (*env)->DeleteLocalRef(env, jni_cid_InputStream);
-            (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-            (*env)->DeleteLocalRef(env, jni_str_address);
+    jint available = (*env)->CallIntMethod(env, jni_obj_inputStream, jni_mid_available);
 
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: jni_mid_available is null");
-            return CA_STATUS_FAILED;
+    CAConnectedDeviceInfo_t *deviceInfo = NULL;
+    if (0 < available)
+    {
+        OIC_LOG_V(DEBUG, TAG, "get InputStream..%d, %s", id, address);
+        jmethodID jni_mid_read = (*env)->GetMethodID(env, jni_cid_InputStream,
+                                                     "read", "([BII)I");
+        if (!jni_mid_read)
+        {
+            OIC_LOG(ERROR, TAG, "jni_mid_read is null");
+            goto exit;
         }
 
-        jint available = (*env)->CallIntMethod(env, jni_obj_inputStream, jni_mid_available);
-
-        jbyteArray jbuf = NULL;
-        jint length = -1;
-        if (0 < available)
+        deviceInfo = (CAConnectedDeviceInfo_t *) CAEDRGetDeviceInfoFromAddress(address);
+        if (!deviceInfo)
         {
-            OIC_LOG_V(DEBUG, TAG, "[EDR][Native] btReadData: get InputStream..%d, %s", id, address);
-            jmethodID jni_mid_read = (*env)->GetMethodID(env, jni_cid_InputStream,
-                                                         "read", "([BII)I");
-            if (!jni_mid_read) {
-                (*env)->DeleteLocalRef(env, jni_obj_inputStream);
-                (*env)->DeleteLocalRef(env, jni_cid_InputStream);
-                (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-                (*env)->DeleteLocalRef(env, jni_str_address);
-
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: jni_mid_read is null");
-                return CA_STATUS_FAILED;
-            }
-
-            jbuf = (*env)->NewByteArray(env, MAX_PDU_BUFFER);
-            length = (*env)->CallIntMethod(env, jni_obj_inputStream, jni_mid_read, jbuf, (jint) 0,
-                                           MAX_PDU_BUFFER);
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] btReadData: read something from InputStream");
+            OIC_LOG(ERROR, TAG, "failed to get device info from list");
+            goto exit;
         }
 
-        (*env)->DeleteLocalRef(env, jni_obj_inputStream);
-
-        if (-1 == length)
+        jint bufSize = (deviceInfo->totalDataLen == 0) ?
+                EDR_MAX_HEADER_LEN : deviceInfo->totalDataLen;
+        if (!deviceInfo->recvData)
         {
-            (*env)->DeleteLocalRef(env, jni_cid_InputStream);
-            if (jbuf)
+            deviceInfo->recvData = OICCalloc(1, bufSize);
+            if (!deviceInfo->recvData)
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] read buffer is empty...");
-                (*env)->DeleteLocalRef(env, jbuf);
+                OIC_LOG(ERROR, TAG, "out of memory");
+                goto exit;
             }
-            (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-            (*env)->DeleteLocalRef(env, jni_str_address);
-
-            return CA_STATUS_FAILED;
         }
 
-        if ((*env)->ExceptionCheck(env))
+        jbyteArray jbuf = (*env)->NewByteArray(env, (jint) bufSize - deviceInfo->recvDataLen);
+        jint recvLen = (*env)->CallIntMethod(env, jni_obj_inputStream, jni_mid_read,
+                                             jbuf, (jint) 0,
+                                             (jint) bufSize - deviceInfo->recvDataLen);
+        if (-1 == recvLen)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: read Error!!!");
-            (*env)->ExceptionDescribe(env);
-            (*env)->ExceptionClear(env);
-
-            // update state to disconnect
-            // the socket will be close next read thread routine
-            ca_mutex_lock(g_mutexStateList);
-            CAEDRUpdateDeviceState(STATE_DISCONNECTED, address);
-            ca_mutex_unlock(g_mutexStateList);
-            (*env)->ReleaseStringUTFChars(env, jni_str_address, address);
-
             (*env)->DeleteLocalRef(env, jbuf);
-            (*env)->DeleteLocalRef(env, jni_cid_InputStream);
-            (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-            (*env)->DeleteLocalRef(env, jni_str_address);
-
-            return CA_STATUS_FAILED;
+            goto exit;
         }
 
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] btReadData: reading");
         jbyte* buf = (*env)->GetByteArrayElements(env, jbuf, NULL);
-        if (NULL == buf)
+        if (!buf)
         {
-            (*env)->DeleteLocalRef(env, jni_cid_InputStream);
             (*env)->DeleteLocalRef(env, jbuf);
-            (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-            (*env)->DeleteLocalRef(env, jni_str_address);
-
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: buf is null");
-            return CA_STATUS_FAILED;
+            goto exit;
         }
+        memcpy(deviceInfo->recvData + deviceInfo->recvDataLen, (const char*) buf, recvLen);
+        deviceInfo->recvDataLen += recvLen;
 
-        OIC_LOG_V(DEBUG, TAG, "[EDR][Native] btReadData: read %s, %d", buf, length);
+        OIC_LOG(DEBUG, TAG, "read something from InputStream");
 
-        char responseData[MAX_PDU_BUFFER] = { 0 };
-        memcpy(responseData, (const char*) buf, length);
-
-        switch (type)
+        if (!deviceInfo->totalDataLen)
         {
-            case CA_UNICAST_SERVER:
-            case CA_MULTICAST_SERVER:
-                // Notify data to upper layer
-                if (g_edrPacketReceivedCallback)
+            coap_transport_type transport = coap_get_tcp_header_type_from_initbyte(
+                    ((unsigned char *) deviceInfo->recvData)[0] >> 4);
+            size_t headerLen = coap_get_tcp_header_length_for_transport(transport);
+            if (deviceInfo->recvData && deviceInfo->recvDataLen >= headerLen)
+            {
+                deviceInfo->totalDataLen = coap_get_total_message_length(deviceInfo->recvData,
+                                                                         deviceInfo->recvDataLen);
+                OIC_LOG_V(DEBUG, TAG, "total data length [%d] bytes", deviceInfo->totalDataLen);
+
+                uint8_t *newBuf = OICRealloc(deviceInfo->recvData, deviceInfo->totalDataLen);
+                if (!newBuf)
                 {
-                    uint32_t sentLength = 0;
-                    OIC_LOG_V(DEBUG, TAG,"[EDR][Native] data will be sent to callback routine: \
-                              %s, %d", responseData, length);
-                    g_edrPacketReceivedCallback(address, (void*) responseData, length, &sentLength);
+                    OIC_LOG(ERROR, TAG, "out of memory");
+                    (*env)->ReleaseByteArrayElements(env, jbuf, buf, 0);
+                    (*env)->DeleteLocalRef(env, jbuf);
+                    goto exit;
                 }
-                break;
+                deviceInfo->recvData = newBuf;
+            }
+        }
+
+        if (deviceInfo->totalDataLen == deviceInfo->recvDataLen)
+        {
+            if ((*env)->ExceptionCheck(env))
+            {
+                OIC_LOG(ERROR, TAG, "read Error!!!");
+                (*env)->ExceptionDescribe(env);
+                (*env)->ExceptionClear(env);
+
+                // update state to disconnect
+                // the socket will be close next read thread routine
+                ca_mutex_lock(g_mutexStateList);
+                CAEDRUpdateDeviceState(STATE_DISCONNECTED, address);
+                ca_mutex_unlock(g_mutexStateList);
 
-            default:
-                // Should never occur
-                OIC_LOG(ERROR, TAG, "Invalid server type");
-                return CA_STATUS_FAILED;
+                (*env)->ReleaseByteArrayElements(env, jbuf, buf, 0);
+                (*env)->DeleteLocalRef(env, jbuf);
+                goto exit;
+            }
+
+            if (g_edrPacketReceivedCallback)
+            {
+                OIC_LOG_V(DEBUG, TAG,"data will be sent to callback routine: \
+                          %s, %d", deviceInfo->recvData, deviceInfo->recvDataLen);
+
+                uint32_t sentLength = 0;
+                g_edrPacketReceivedCallback(address, (void*) deviceInfo->recvData,
+                                            deviceInfo->recvDataLen, &sentLength);
+
+                OICFree(deviceInfo->recvData);
+                deviceInfo->recvData = NULL;
+                deviceInfo->recvDataLen = 0;
+                deviceInfo->totalDataLen = 0;
+            }
         }
         (*env)->ReleaseByteArrayElements(env, jbuf, buf, 0);
-        (*env)->ReleaseStringUTFChars(env, jni_str_address, address);
-
-        (*env)->DeleteLocalRef(env, jni_cid_InputStream);
         (*env)->DeleteLocalRef(env, jbuf);
-        (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-        (*env)->DeleteLocalRef(env, jni_str_address);
-    }
-    else
-    {
-        (*env)->ExceptionDescribe(env);
-        (*env)->ExceptionClear(env);
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btReadData: env error!!");
-        return CA_STATUS_FAILED;
     }
+    (*env)->DeleteLocalRef(env, jni_obj_inputStream);
+    (*env)->DeleteLocalRef(env, jni_cid_InputStream);
+    (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
+    (*env)->ReleaseStringUTFChars(env, jni_str_address, address);
+    (*env)->DeleteLocalRef(env, jni_str_address);
 
     return CA_STATUS_OK;
+
+exit:
+    (*env)->DeleteLocalRef(env, jni_obj_inputStream);
+    (*env)->DeleteLocalRef(env, jni_cid_InputStream);
+    (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
+    (*env)->ReleaseStringUTFChars(env, jni_str_address, address);
+    (*env)->DeleteLocalRef(env, jni_str_address);
+
+    return CA_STATUS_FAILED;
 }
 
 jboolean CAEDRIsConnectedForSocket(JNIEnv *env, jobject socket)
 {
     if (!socket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] CAEDRIsConnectedForSocket - socket is null");
+        OIC_LOG(ERROR, TAG, "socket is null");
         return JNI_FALSE;
     }
 
     jclass jni_cid_BTsocket = (*env)->FindClass(env, "android/bluetooth/BluetoothSocket");
     if (!jni_cid_BTsocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] CAEDRIsConnectedForSocket - jni_cid_BTsocket is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTsocket is null");
         return JNI_FALSE;
     }
 
@@ -901,10 +881,8 @@ jboolean CAEDRIsConnectedForSocket(JNIEnv *env, jobject socket)
                                                         "()Z");
     if (!jni_mid_isConnected)
     {
+        OIC_LOG(ERROR, TAG, "jni_mid_isConnected is null.");
         (*env)->DeleteLocalRef(env, jni_cid_BTsocket);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] CAEDRIsConnectedForSocket \
-                - jni_mid_isConnected is null.");
         return JNI_FALSE;
     }
 
@@ -920,7 +898,7 @@ void CANativeStartListenTask(JNIEnv *env)
     jobject jni_obj_BTServerSocket = CAEDRNativeListen(env);
     if (!jni_obj_BTServerSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR] AcceptThread: jni_obj_BTServerSocket is null");
+        OIC_LOG(ERROR, TAG, "jni_obj_BTServerSocket is null");
         return;
     }
 
@@ -931,18 +909,18 @@ void CANativeStartListenTask(JNIEnv *env)
 
 jobject CAEDRNativeListen(JNIEnv *env)
 {
+    OIC_LOG(DEBUG, TAG, "CAEDRNativeListen - IN");
+
     if (!CAEDRNativeIsEnableBTAdapter(env))
     {
         OIC_LOG(ERROR, TAG, "BT adpater is not enable");
         return NULL;
     }
 
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] btListen");
-
     jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
     if (!jni_cid_BTAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_cid_BTAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
         return NULL;
     }
 
@@ -952,7 +930,7 @@ jobject CAEDRNativeListen(JNIEnv *env)
                                                                     METHODID_OBJECTNONPARAM);
     if (!jni_mid_getDefaultAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_mid_getDefaultAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null");
         return NULL;
     }
 
@@ -960,7 +938,7 @@ jobject CAEDRNativeListen(JNIEnv *env)
                                                                jni_mid_getDefaultAdapter);
     if (!jni_obj_BTAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_obj_BTAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null");
         return NULL;
     }
 
@@ -970,7 +948,7 @@ jobject CAEDRNativeListen(JNIEnv *env)
             "(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;");
     if (!jni_mid_listen)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_mid_listen is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_listen is null");
         return NULL;
     }
     // listenUsingInsecureRfcommWithServiceRecord  / listenUsingRfcommWithServiceRecord
@@ -978,7 +956,7 @@ jobject CAEDRNativeListen(JNIEnv *env)
     jclass jni_cid_uuid = (*env)->FindClass(env, CLASSPATH_BT_UUID);
     if (!jni_cid_uuid)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_mid_listen is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_listen is null");
         return NULL;
     }
 
@@ -986,21 +964,21 @@ jobject CAEDRNativeListen(JNIEnv *env)
             env, jni_cid_uuid, "fromString", "(Ljava/lang/String;)Ljava/util/UUID;");
     if (!jni_mid_fromString)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_mid_fromString is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_fromString is null");
         return NULL;
     }
 
     jstring jni_uuid = (*env)->NewStringUTF(env, OIC_EDR_SERVICE_ID);
     if (!jni_uuid)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_uuid is null");
+        OIC_LOG(ERROR, TAG, "jni_uuid is null");
         return NULL;
     }
     jobject jni_obj_uuid = (*env)->CallStaticObjectMethod(env, jni_cid_uuid, jni_mid_fromString,
                                                           jni_uuid);
     if (!jni_obj_uuid)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_obj_uuid is null");
+        OIC_LOG(ERROR, TAG, "jni_obj_uuid is null");
         return NULL;
     }
 
@@ -1008,31 +986,35 @@ jobject CAEDRNativeListen(JNIEnv *env)
     jstring jni_name = (*env)->NewStringUTF(env, "BluetoothTestSecure");
     if (!jni_name)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_name is null");
+        OIC_LOG(ERROR, TAG, "jni_name is null");
         return NULL;
     }
     jobject jni_obj_BTServerSocket = (*env)->CallObjectMethod(env, jni_obj_BTAdapter, jni_mid_listen,
                                                              jni_name, jni_obj_uuid);
     if (!jni_obj_BTServerSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] btListen: jni_obj_BTServerSocket is null");
+        OIC_LOG(ERROR, TAG, "jni_obj_BTServerSocket is null");
         return NULL;
     }
 
     g_serverSocketObject = (*env)->NewGlobalRef(env, jni_obj_BTServerSocket);
 
+    OIC_LOG(DEBUG, TAG, "CAEDRNativeListen - OUT");
+
     return jni_obj_BTServerSocket;
 }
 
 void CAEDRNativeAccept(JNIEnv *env, jobject serverSocketObject)
 {
+    OIC_LOG(DEBUG, TAG, "CAEDRNativeAccept - IN");
+
     if (NULL != serverSocketObject)
     {
         jclass jni_cid_BTServerSocket = (*env)->FindClass(
                 env, "android/bluetooth/BluetoothServerSocket");
         if (!jni_cid_BTServerSocket)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btAccept: jni_cid_BTServerSocket is null");
+            OIC_LOG(ERROR, TAG, "jni_cid_BTServerSocket is null");
             return;
         }
 
@@ -1040,21 +1022,21 @@ void CAEDRNativeAccept(JNIEnv *env, jobject serverSocketObject)
                                                        "()Landroid/bluetooth/BluetoothSocket;");
         if (!jni_mid_accept)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btAccept: jni_mid_accept is null");
+            OIC_LOG(ERROR, TAG, "jni_mid_accept is null");
             return;
         }
 
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] btAccept: initiating accept...");
+        OIC_LOG(DEBUG, TAG, "initiating accept...");
 
         jobject jni_obj_BTSocket = (*env)->CallObjectMethod(env, serverSocketObject,
                                                             jni_mid_accept);
         if (!jni_obj_BTSocket)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btAccept: jni_obj_BTSocket is null");
+            OIC_LOG(ERROR, TAG, "jni_obj_BTSocket is null");
 
             if ((*env)->ExceptionCheck(env))
             {
-                OIC_LOG(ERROR, TAG, "[EDR][Native] btAccept: socket might closed or timeout!!!");
+                OIC_LOG(ERROR, TAG, "socket might closed or timeout!!!");
                 (*env)->ExceptionDescribe(env);
                 (*env)->ExceptionClear(env);
                 return;
@@ -1065,12 +1047,12 @@ void CAEDRNativeAccept(JNIEnv *env, jobject serverSocketObject)
         jstring j_str_address = CAEDRNativeGetAddressFromDeviceSocket(env, jni_obj_BTSocket);
         if (!j_str_address)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] btAccept: j_str_address is null");
+            OIC_LOG(ERROR, TAG, "j_str_address is null");
             return;
         }
 
         const char* address = (*env)->GetStringUTFChars(env, j_str_address, NULL);
-        OIC_LOG_V(DEBUG, TAG, "[EDR][Native] btAccept: address is %s", address);
+        OIC_LOG_V(DEBUG, TAG, "address is %s", address);
 
         // set socket to list
         jobject jni_socket = (*env)->NewGlobalRef(env, jni_obj_BTSocket);
@@ -1078,18 +1060,22 @@ void CAEDRNativeAccept(JNIEnv *env, jobject serverSocketObject)
         CAEDRNativeAddDeviceSocketToList(env, jni_socket);
         ca_mutex_unlock(g_mutexObjectList);
 
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] btAccept: Accepted!!");
+        OIC_LOG(DEBUG, TAG, "Accepted!!");
 
         // update state
         ca_mutex_lock(g_mutexStateList);
         CAEDRUpdateDeviceState(STATE_CONNECTED, address);
         ca_mutex_unlock(g_mutexStateList);
+
         (*env)->ReleaseStringUTFChars(env, j_str_address, address);
+        (*env)->DeleteLocalRef(env, j_str_address);
     }
     else
     {
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] btAccept: serverSocket is close previously");
+        OIC_LOG(DEBUG, TAG, "serverSocket is close previously");
     }
+
+    OIC_LOG(DEBUG, TAG, "CAEDRNativeAccept - OUT");
 }
 
 /**
@@ -1099,26 +1085,26 @@ void CAEDRNatvieCloseServerTask(JNIEnv* env)
 {
     if (g_serverSocket)
     {
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] Accept Resource will be close");
+        OIC_LOG(DEBUG, TAG, "Accept Resource will be close");
 
         jclass jni_cid_BTServerSocket = (*env)->FindClass(
                 env, "android/bluetooth/BluetoothServerSocket");
         if (!jni_cid_BTServerSocket)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] jni_cid_BTServerSocket is null");
+            OIC_LOG(ERROR, TAG, "jni_cid_BTServerSocket is null");
             return;
         }
 
         jmethodID jni_mid_accept = (*env)->GetMethodID(env, jni_cid_BTServerSocket, "close", "()V");
         if (!jni_mid_accept)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] jni_mid_accept is null");
+            OIC_LOG(ERROR, TAG, "jni_mid_accept is null");
             return;
         }
         (*env)->CallVoidMethod(env, g_serverSocket, jni_mid_accept);
         (*env)->DeleteGlobalRef(env, g_serverSocket);
         g_serverSocket = NULL;
 
-        OIC_LOG(DEBUG, TAG, "[EDR][Native] close accept obj");
+        OIC_LOG(DEBUG, TAG, "close accept obj");
     }
 }
index 5324d80..2e7bddb 100644 (file)
@@ -46,13 +46,15 @@ void CAEDRServerJniInit();
 /**
  * Initialize server for EDR.
  * @param[in]   handle           thread pool handle object.
+ * @return ::CA_STATUS_OK or Appropriate error code.
  */
-void CAEDRServerInitialize(ca_thread_pool_t handle);
+CAResult_t CAEDRServerInitialize(ca_thread_pool_t handle);
 
 /**
  * Start Accept Thread.
+ * @return ::CA_STATUS_OK or Appropriate error code.
  */
-void CAEDRServerStartAcceptThread();
+CAResult_t CAEDRServerStartAcceptThread();
 
 /**
  * Start unicast server.
index 566b39a..5b682c7 100644 (file)
@@ -45,14 +45,14 @@ jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSock
 {
     if (!bluetoothSocketObj)
     {
-        OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: bluetoothSocketObj is null");
+        OIC_LOG(ERROR, TAG, "bluetoothSocketObj is null");
         return NULL;
     }
 
     jclass jni_cid_BTSocket = (*env)->FindClass(env, CLASSPATH_BT_SOCKET);
     if (!jni_cid_BTSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: jni_cid_BTSocket is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTSocket is null");
         return NULL;
     }
 
@@ -60,9 +60,8 @@ jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSock
             env, jni_cid_BTSocket, "getRemoteDevice", "()Landroid/bluetooth/BluetoothDevice;");
     if (!jni_mid_getRemoteDevice)
     {
+        OIC_LOG(ERROR, TAG, "jni_mid_getRemoteDevice is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
-
-        OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: jni_mid_getRemoteDevice is null");
         return NULL;
     }
 
@@ -70,41 +69,37 @@ jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSock
                                                               jni_mid_getRemoteDevice);
     if (!jni_obj_remoteBTDevice)
     {
+        OIC_LOG(ERROR, TAG, "jni_obj_remoteBTDevice is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
-
-        OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: jni_obj_remoteBTDevice is null");
         return NULL;
     }
 
     jclass jni_cid_BTDevice = (*env)->FindClass(env, CLASSPATH_BT_DEVICE);
     if (!jni_cid_BTDevice)
     {
+        OIC_LOG(ERROR, TAG, "jni_cid_BTDevice is null");
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
-
-        OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: jni_cid_BTDevice is null");
         return NULL;
     }
     jmethodID j_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTDevice, "getAddress",
                                                      METHODID_STRINGNONPARAM);
     if (!j_mid_getAddress)
     {
+        OIC_LOG(ERROR, TAG, "j_mid_getAddress is null");
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         (*env)->DeleteLocalRef(env, jni_cid_BTDevice);
         (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
-
-        OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: j_mid_getAddress is null");
         return NULL;
     }
 
     jstring j_str_address = (*env)->CallObjectMethod(env, jni_obj_remoteBTDevice, j_mid_getAddress);
     if (!j_str_address)
     {
+        OIC_LOG(ERROR, TAG, "j_str_address is null");
         (*env)->DeleteLocalRef(env, jni_obj_remoteBTDevice);
         (*env)->DeleteLocalRef(env, jni_cid_BTDevice);
         (*env)->DeleteLocalRef(env, jni_cid_BTSocket);
-
-        OIC_LOG(ERROR, TAG, "[EDR] getRemoteAddress: j_str_address is null");
         return NULL;
     }
 
@@ -120,7 +115,7 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env)
     jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
     if (!jni_cid_BTAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_cid_BTAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
         return NULL;
     }
 
@@ -129,9 +124,8 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env)
                                                                     METHODID_OBJECTNONPARAM);
     if (!jni_mid_getDefaultAdapter)
     {
+        OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_mid_getDefaultAdapter is null");
         return NULL;
     }
 
@@ -139,9 +133,8 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env)
                                                        METHODID_STRINGNONPARAM);
     if (!jni_mid_getAddress)
     {
+        OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_mid_getAddress is null");
         return NULL;
     }
 
@@ -149,9 +142,8 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env)
                                                                jni_mid_getDefaultAdapter);
     if (!jni_obj_BTAdapter)
     {
+        OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_obj_BTAdapter is null");
         return NULL;
     }
 
@@ -159,10 +151,9 @@ jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env)
                                                                 jni_mid_getAddress);
     if (!jni_str_address)
     {
+        OIC_LOG(ERROR, TAG, "jni_str_address is null");
         (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getAddress: jni_str_address is null");
         return NULL;
     }
 
@@ -177,7 +168,7 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
     jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
     if (!jni_cid_BTAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_cid_BTAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
         return NULL;
     }
 
@@ -186,9 +177,8 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
                                                                     METHODID_OBJECTNONPARAM);
     if (!jni_mid_getDefaultAdapter)
     {
+        OIC_LOG(ERROR, TAG, "default adapter is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: default adapter is null");
         return NULL;
     }
 
@@ -196,9 +186,8 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
                                                                jni_mid_getDefaultAdapter);
     if (!jni_obj_BTAdapter)
     {
+        OIC_LOG(ERROR, TAG, "bluetooth adapter is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: bluetooth adapter is null");
         return NULL;
     }
 
@@ -208,10 +197,9 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
                                                              "()Ljava/util/Set;");
     if (!jni_mid_getBondedDevices)
     {
+        OIC_LOG(ERROR, TAG, "jni_mid_getBondedDevicesr is null");
         (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_mid_getBondedDevicesr is null");
         return NULL;
     }
 
@@ -219,10 +207,9 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
                                                                 jni_mid_getBondedDevices);
     if (!jni_obj_setPairedDevices)
     {
+        OIC_LOG(ERROR, TAG, "ni_obj_setPairedDevices is null");
         (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_obj_setPairedDevices is null");
         return NULL;
     }
 
@@ -231,36 +218,24 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
     jclass jni_cid_Set = (*env)->FindClass(env, "java/util/Set");
     if (!jni_cid_Set)
     {
-        (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
-        (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-        (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_cid_Set is null");
-        return NULL;
+        OIC_LOG(ERROR, TAG, "jni_cid_Set is null");
+        goto exit;
     }
     jmethodID jni_mid_toArray = (*env)->GetMethodID(env, jni_cid_Set, "toArray",
                                                     "()[Ljava/lang/Object;");
 
     if (!jni_mid_toArray)
     {
-        (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
-        (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-        (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_mid_toArray is null");
-        return NULL;
+        OIC_LOG(ERROR, TAG, "jni_mid_toArray is null");
+        goto exit;
     }
 
     jobjectArray jni_arrayPairedDevices = (jobjectArray)(
             (*env)->CallObjectMethod(env, jni_obj_setPairedDevices, jni_mid_toArray));
     if (!jni_arrayPairedDevices)
     {
-        (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
-        (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-        (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBondedDevices: jni_arrayPairedDevices is null");
-        return NULL;
+        OIC_LOG(ERROR, TAG, "jni_arrayPairedDevices is null");
+        goto exit;
     }
 
     (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
@@ -268,6 +243,12 @@ jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
     (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
 
     return jni_arrayPairedDevices;
+
+exit:
+    (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
+    (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
+    (*env)->DeleteLocalRef(env, jni_obj_setPairedDevices);
+    return NULL;
 }
 
 jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env)
@@ -275,7 +256,7 @@ jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env)
     jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
     if (!jni_cid_BTAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] getBTStateOnInfo: jni_cid_BTAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null");
         return ERROR_CODE;
     }
 
@@ -284,12 +265,12 @@ jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env)
     {
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
 
-        OIC_LOG(ERROR, TAG, "[EDR][Native] get_field_state is 0");
+        OIC_LOG(ERROR, TAG, "get_field_state is 0");
         return ERROR_CODE;
     }
     jint jni_int_val = (*env)->GetStaticIntField(env, jni_cid_BTAdapter, jni_fid_stateon);
 
-    OIC_LOG_V(DEBUG, TAG, "[EDR][Native] bluetooth state integer value : %d", jni_int_val);
+    OIC_LOG_V(DEBUG, TAG, "bluetooth state integer value : %d", jni_int_val);
 
     (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
 
@@ -301,7 +282,7 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env)
     jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
     if (!jni_cid_BTAdapter)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_cid_BTAdapter: jni_cid_BTAdapter is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter: jni_cid_BTAdapter is null");
         return JNI_FALSE;
     }
 
@@ -310,9 +291,8 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env)
                                                                     METHODID_OBJECTNONPARAM);
     if (!jni_mid_getDefaultAdapter)
     {
+        OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_mid_getDefaultAdapter is null");
         return JNI_FALSE;
     }
 
@@ -320,9 +300,8 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env)
                                                                jni_mid_getDefaultAdapter);
     if (!jni_obj_BTAdapter)
     {
+        OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_obj_BTAdapter is null");
         return JNI_FALSE;
     }
 
@@ -330,10 +309,9 @@ jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env)
     jmethodID jni_mid_isEnable = (*env)->GetMethodID(env, jni_cid_BTAdapter, "isEnabled", "()Z");
     if (!jni_mid_isEnable)
     {
+        OIC_LOG(ERROR, TAG, "jni_mid_isEnable is null");
         (*env)->DeleteLocalRef(env, jni_cid_BTAdapter);
         (*env)->DeleteLocalRef(env, jni_obj_BTAdapter);
-
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_mid_isEnable is null");
         return JNI_FALSE;
     }
 
@@ -349,13 +327,13 @@ jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
 {
     if (!bluetoothDevice)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] bluetoothDevice is null");
+        OIC_LOG(ERROR, TAG, "bluetoothDevice is null");
         return NULL;
     }
     jclass jni_cid_device_list = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice");
     if (!jni_cid_device_list)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_cid_device_list is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_device_list is null");
         return NULL;
     }
 
@@ -363,7 +341,7 @@ jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
                                                        METHODID_STRINGNONPARAM);
     if (!jni_mid_getAddress)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_mid_getAddress is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null");
         return NULL;
     }
 
@@ -371,7 +349,7 @@ jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
                                                             jni_mid_getAddress);
     if (!jni_address)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_address is null");
+        OIC_LOG(ERROR, TAG, "jni_address is null");
         return NULL;
     }
     return jni_address;
@@ -382,7 +360,7 @@ jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
  */
 void CAEDRNativeCreateDeviceStateList()
 {
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeCreateDeviceStateList");
+    OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceStateList");
 
     // create new object array
     if (NULL == g_deviceStateList)
@@ -397,72 +375,69 @@ void CAEDRUpdateDeviceState(CAConnectedState_t state, const char *address)
 {
     if (!address)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] address is null");
+        OIC_LOG(ERROR, TAG, "address is null");
         return;
     }
-    state_t *newstate = (state_t*) OICCalloc(1, sizeof(state_t));
-    if (!newstate)
+    CAConnectedDeviceInfo_t *deviceInfo =
+            (CAConnectedDeviceInfo_t *) OICCalloc(1, sizeof(CAConnectedDeviceInfo_t));
+    if (!deviceInfo)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] newstate is null");
+        OIC_LOG(ERROR, TAG, "deviceInfo is null");
         return;
     }
-    OICStrcpy((char*) newstate->address, sizeof(newstate->address), address);
-    newstate->state = state;
+    OICStrcpy((char*) deviceInfo->address, sizeof(deviceInfo->address), address);
+    deviceInfo->state = state;
 
-    CAEDRNativeAddDeviceStateToList(newstate);
+    CAEDRNativeAddDeviceStateToList(deviceInfo);
 }
 
-void CAEDRNativeAddDeviceStateToList(state_t *state)
+void CAEDRNativeAddDeviceStateToList(CAConnectedDeviceInfo_t *deviceInfo)
 {
-    if (!state)
+    if (!deviceInfo)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] device is null");
+        OIC_LOG(ERROR, TAG, "device is null");
         return;
     }
 
     if (!g_deviceStateList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdevice_list is null");
+        OIC_LOG(ERROR, TAG, "gdevice_list is null");
         return;
     }
 
-    if (CAEDRNativeIsDeviceInList((const char*) state->address))
+    if (CAEDRNativeIsDeviceInList((const char*) deviceInfo->address))
     {
         // delete previous state for update new state
-        CAEDRNativeRemoveDevice((const char*) state->address);
+        CAEDRNativeRemoveDevice((const char*) deviceInfo->address);
     }
-    u_arraylist_add(g_deviceStateList, state); // update new state
-    OIC_LOG_V(DEBUG, TAG, "Set State Info to List : %d", state->state);
+    u_arraylist_add(g_deviceStateList, deviceInfo); // update new state
+    OIC_LOG_V(DEBUG, TAG, "Set State Info to List : %d", deviceInfo->state);
 }
 
 bool CAEDRNativeIsDeviceInList(const char* remoteAddress)
 {
-
     if (!remoteAddress)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null");
+        OIC_LOG(ERROR, TAG, "remoteAddress is null");
         return false;
     }
-    jint index;
+
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
-        state_t* state = (state_t*) u_arraylist_get(g_deviceStateList, index);
-        if (!state)
+        CAConnectedDeviceInfo_t* deviceInfo =
+                (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
+        if (!deviceInfo)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] state_t object is null");
+            OIC_LOG(ERROR, TAG, "deviceInfo object is null");
             return false;
         }
 
-        if (!strcmp(remoteAddress, (const char*) state->address))
+        if (!strcmp(remoteAddress, (const char*) deviceInfo->address))
         {
             OIC_LOG(DEBUG, TAG, "the device is already set");
             return true;
         }
-        else
-        {
-            continue;
-        }
     }
 
     OIC_LOG(DEBUG, TAG, "there are no the device in list.");
@@ -475,7 +450,7 @@ void CAEDRNativeRemoveAllDeviceState()
 
     if (!g_deviceStateList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
         return;
     }
 
@@ -483,13 +458,14 @@ void CAEDRNativeRemoveAllDeviceState()
     jint length = u_arraylist_length(g_deviceStateList);
     for (index = 0; index < length; index++)
     {
-        state_t* state = (state_t*) u_arraylist_get(g_deviceStateList, index);
-        if (!state)
+        CAConnectedDeviceInfo_t* deviceInfo =
+                (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
+        if (!deviceInfo)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] jarrayObj is null");
+            OIC_LOG(DEBUG, TAG, "jarrayObj is null");
             continue;
         }
-        OICFree(state);
+        OICFree(deviceInfo);
     }
 
     OICFree(g_deviceStateList);
@@ -503,30 +479,30 @@ void CAEDRNativeRemoveDevice(const char *remoteAddress)
 
     if (!g_deviceStateList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
         return;
     }
     if (!remoteAddress)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null");
+        OIC_LOG(ERROR, TAG, "remoteAddress is null");
         return;
     }
 
-    jint index;
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
-        state_t* state = (state_t*) u_arraylist_get(g_deviceStateList, index);
-        if (!state)
+        CAConnectedDeviceInfo_t* deviceInfo =
+                (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
+        if (!deviceInfo)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] state_t object is null");
+            OIC_LOG(DEBUG, TAG, "deviceInfo object is null");
             continue;
         }
 
-        if (!strcmp((const char*) state->address, remoteAddress))
+        if (!strcmp((const char*) deviceInfo->address, remoteAddress))
         {
-            OIC_LOG_V(DEBUG, TAG, "[EDR][Native] remove state : %s", remoteAddress);
-            OICFree(state);
+            OIC_LOG_V(DEBUG, TAG, "remove state : %s", remoteAddress);
+            OICFree(deviceInfo);
 
             u_arraylist_remove(g_deviceStateList, index);
             break;
@@ -541,30 +517,30 @@ CAConnectedState_t CAEDRIsConnectedDevice(const char *remoteAddress)
 
     if (!remoteAddress)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null");
+        OIC_LOG(ERROR, TAG, "remoteAddress is null");
         return STATE_DISCONNECTED;
     }
 
     if (!g_deviceStateList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
         return STATE_DISCONNECTED;
     }
 
-    jint index;
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
-        state_t* state = (state_t*) u_arraylist_get(g_deviceStateList, index);
-        if (!state)
+        CAConnectedDeviceInfo_t* deviceInfo =
+                (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
+        if (!deviceInfo)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] state_t object is null");
+            OIC_LOG(DEBUG, TAG, "deviceInfo object is null");
             continue;
         }
 
-        if (!strcmp((const char*) state->address, remoteAddress))
+        if (!strcmp((const char*) deviceInfo->address, remoteAddress))
         {
-            return state->state;
+            return deviceInfo->state;
         }
     }
     return STATE_DISCONNECTED;
@@ -575,7 +551,7 @@ CAConnectedState_t CAEDRIsConnectedDevice(const char *remoteAddress)
  */
 void CAEDRNativeCreateDeviceSocketList()
 {
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeCreateDeviceSocketList");
+    OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceSocketList");
 
     // create new object array
     if (NULL == g_deviceObjectList)
@@ -588,24 +564,24 @@ void CAEDRNativeCreateDeviceSocketList()
 
 void CAEDRNativeAddDeviceSocketToList(JNIEnv *env, jobject deviceSocket)
 {
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] CANativeAddDeviceobjToList");
+    OIC_LOG(DEBUG, TAG, "CANativeAddDeviceobjToList");
 
     if (!deviceSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] Device is null");
+        OIC_LOG(ERROR, TAG, "Device is null");
         return;
     }
 
     if (!g_deviceObjectList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
         return;
     }
 
     jstring jni_remoteAddress = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket);
     if (!jni_remoteAddress)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jni_remoteAddress is null");
+        OIC_LOG(ERROR, TAG, "jni_remoteAddress is null");
         return;
     }
 
@@ -623,36 +599,36 @@ void CAEDRNativeAddDeviceSocketToList(JNIEnv *env, jobject deviceSocket)
 
 bool CAEDRNativeIsDeviceSocketInList(JNIEnv *env, const char* remoteAddress)
 {
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] CANativeIsDeviceObjInList");
+    OIC_LOG(DEBUG, TAG, "CANativeIsDeviceObjInList");
 
     if (!remoteAddress)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] remoteAddress is null");
+        OIC_LOG(ERROR, TAG, "remoteAddress is null");
         return false;
     }
-    jint index;
+
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
 
         jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
         if (!jarrayObj)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] jarrayObj is null");
+            OIC_LOG(DEBUG, TAG, "jarrayObj is null");
             return false;
         }
 
         jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
         if (!jni_setAddress)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_setAddress is null");
+            OIC_LOG(DEBUG, TAG, "jni_setAddress is null");
             return false;
         }
 
         const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
         if (!setAddress)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] setAddress is null");
+            OIC_LOG(DEBUG, TAG, "setAddress is null");
             return false;
         }
 
@@ -675,36 +651,35 @@ bool CAEDRNativeIsDeviceSocketInList(JNIEnv *env, const char* remoteAddress)
 
 void CAEDRNativeSocketCloseToAll(JNIEnv *env)
 {
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeSocketCloseToAll");
+    OIC_LOG(DEBUG, TAG, "CAEDRNativeSocketCloseToAll");
 
     if (!g_deviceObjectList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
         return;
     }
 
     jclass jni_cid_BTSocket = (*env)->FindClass(env, CLASSPATH_BT_SOCKET);
     if (!jni_cid_BTSocket)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] close: jni_cid_BTSocket is null");
+        OIC_LOG(ERROR, TAG, "jni_cid_BTSocket is null");
         return;
     }
 
     jmethodID jni_mid_close = (*env)->GetMethodID(env, jni_cid_BTSocket, "close", "()V");
     if (!jni_mid_close)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] close: jni_mid_close is null");
+        OIC_LOG(ERROR, TAG, "jni_mid_close is null");
         return;
     }
 
-    jint index;
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
         jobject jni_obj_socket = (jobject) u_arraylist_get(g_deviceObjectList, index);
         if (!jni_obj_socket)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] socket obj is null");
+            OIC_LOG(ERROR, TAG, "socket obj is null");
             return;
         }
 
@@ -712,7 +687,7 @@ void CAEDRNativeSocketCloseToAll(JNIEnv *env)
 
         if ((*env)->ExceptionCheck(env))
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] close: close is Failed!!!");
+            OIC_LOG(ERROR, TAG, "close is Failed!!!");
             (*env)->ExceptionDescribe(env);
             (*env)->ExceptionClear(env);
             return;
@@ -726,18 +701,17 @@ void CAEDRNativeRemoveAllDeviceSocket(JNIEnv *env)
 
     if (!g_deviceObjectList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
         return;
     }
 
-    jint index;
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
         jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
         if (!jarrayObj)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] jarrayObj is null");
+            OIC_LOG(ERROR, TAG, "jarrayObj is null");
             return;
         }
         (*env)->DeleteGlobalRef(env, jarrayObj);
@@ -754,32 +728,31 @@ void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket)
 
     if (!g_deviceObjectList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
         return;
     }
 
-    jint index;
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
         jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
         if (!jarrayObj)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] jarrayObj is null");
+            OIC_LOG(DEBUG, TAG, "jarrayObj is null");
             continue;
         }
 
         jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
         if (!jni_setAddress)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_setAddress is null");
+            OIC_LOG(DEBUG, TAG, "jni_setAddress is null");
             continue;
         }
 
         jstring jni_remoteAddress = CAEDRNativeGetAddressFromDeviceSocket(env, deviceSocket);
         if (!jni_remoteAddress)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_remoteAddress is null");
+            OIC_LOG(DEBUG, TAG, "jni_remoteAddress is null");
             continue;
         }
 
@@ -788,7 +761,7 @@ void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket)
 
         if (!strcmp(setAddress, remoteAddress))
         {
-            OIC_LOG_V(DEBUG, TAG, "[EDR][Native] remove object : %s", remoteAddress);
+            OIC_LOG_V(DEBUG, TAG, "remove object : %s", remoteAddress);
             (*env)->DeleteGlobalRef(env, jarrayObj);
             (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
             (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress);
@@ -800,7 +773,7 @@ void CAEDRNativeRemoveDeviceSocket(JNIEnv *env, jobject deviceSocket)
         (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress);
     }
 
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] there are no target object");
+    OIC_LOG(DEBUG, TAG, "there are no target object");
     return;
 }
 
@@ -810,25 +783,24 @@ void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring address)
 
     if (!g_deviceObjectList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
         return;
     }
 
-    jint index;
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
         jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
         if (!jarrayObj)
         {
-            OIC_LOG(DEBUG, TAG, "[EDR][Native] jarrayObj is null");
+            OIC_LOG(DEBUG, TAG, "jarrayObj is null");
             continue;
         }
 
         jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
         if (!jni_setAddress)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] jni_setAddress is null");
+            OIC_LOG(ERROR, TAG, "jni_setAddress is null");
             continue;
         }
         const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
@@ -836,7 +808,7 @@ void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring address)
 
         if (!strcmp(setAddress, remoteAddress))
         {
-            OIC_LOG_V(ERROR, TAG, "[EDR][Native] remove object : %s", remoteAddress);
+            OIC_LOG_V(ERROR, TAG, "remove object : %s", remoteAddress);
             (*env)->DeleteGlobalRef(env, jarrayObj);
             (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
             (*env)->ReleaseStringUTFChars(env, address, remoteAddress);
@@ -848,7 +820,7 @@ void CAEDRNativeRemoveDeviceSocketBaseAddr(JNIEnv *env, jstring address)
         (*env)->ReleaseStringUTFChars(env, address, remoteAddress);
     }
 
-    OIC_LOG(DEBUG, TAG, "[EDR][Native] there are no target object");
+    OIC_LOG(DEBUG, TAG, "there are no target object");
     return;
 }
 
@@ -856,14 +828,14 @@ jobject CAEDRNativeGetDeviceSocket(uint32_t idx)
 {
     if (!g_deviceObjectList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
         return NULL;
     }
 
     jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, idx);
     if (!jarrayObj)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] jarrayObj is not available");
+        OIC_LOG(ERROR, TAG, "jarrayObj is not available");
         return NULL;
     }
     return jarrayObj;
@@ -875,32 +847,31 @@ jobject CAEDRNativeGetDeviceSocketBaseAddr(JNIEnv *env, const char* remoteAddres
 
     if (!g_deviceObjectList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
         return NULL;
     }
 
-    jint index;
     jint length = u_arraylist_length(g_deviceStateList);
-    for (index = 0; index < length; index++)
+    for (jint index = 0; index < length; index++)
     {
         jobject jarrayObj = (jobject) u_arraylist_get(g_deviceObjectList, index);
         if (!jarrayObj)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] jarrayObj is null");
+            OIC_LOG(ERROR, TAG, "jarrayObj is null");
             continue;
         }
 
         jstring jni_setAddress = CAEDRNativeGetAddressFromDeviceSocket(env, jarrayObj);
         if (!jni_setAddress)
         {
-            OIC_LOG(ERROR, TAG, "[EDR][Native] jni_setAddress is null");
+            OIC_LOG(ERROR, TAG, "jni_setAddress is null");
             continue;
         }
         const char* setAddress = (*env)->GetStringUTFChars(env, jni_setAddress, NULL);
 
         if (!strcmp(setAddress, remoteAddress))
         {
-            OIC_LOG_V(ERROR, TAG, "[EDR][Native] remove object : %s", remoteAddress);
+            OIC_LOG_V(ERROR, TAG, "remove object : %s", remoteAddress);
             (*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
             (*env)->DeleteLocalRef(env, jni_setAddress);
             return jarrayObj;
@@ -916,7 +887,7 @@ uint32_t CAEDRGetSocketListLength()
 {
     if (!g_deviceObjectList)
     {
-        OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+        OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
         return 0;
     }
 
@@ -924,3 +895,37 @@ uint32_t CAEDRGetSocketListLength()
 
     return length;
 }
+
+CAConnectedDeviceInfo_t *CAEDRGetDeviceInfoFromAddress(const char *remoteAddress)
+{
+    OIC_LOG(DEBUG, TAG, "CAEDRGetDeviceInfoFromAddress");
+
+    if (!g_deviceStateList)
+    {
+        OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
+        return NULL;
+    }
+    if (!remoteAddress)
+    {
+        OIC_LOG(ERROR, TAG, "remoteAddress is null");
+        return NULL;
+    }
+
+    jint length = u_arraylist_length(g_deviceStateList);
+    for (jint index = 0; index < length; index++)
+    {
+        CAConnectedDeviceInfo_t* deviceInfo =
+                (CAConnectedDeviceInfo_t*) u_arraylist_get(g_deviceStateList, index);
+        if (!deviceInfo)
+        {
+            OIC_LOG(DEBUG, TAG, "deviceInfo object is null");
+            continue;
+        }
+
+        if (!strcmp((const char*) deviceInfo->address, remoteAddress))
+        {
+            return deviceInfo;
+        }
+    }
+    return NULL;
+}
index ec12615..85b4a52 100644 (file)
@@ -96,7 +96,7 @@ void CAEDRUpdateDeviceState(CAConnectedState_t state, const char *address);
  * Add device object to the list.
  * @param[in]  state            connection state object.
  */
-void CAEDRNativeAddDeviceStateToList(state_t *state);
+void CAEDRNativeAddDeviceStateToList(CAConnectedDeviceInfo_t *state);
 
 /**
  * Check whether the device exist in the list or not.
@@ -190,6 +190,13 @@ jobject CAEDRNativeGetDeviceSocketBaseAddr(JNIEnv *env, const char* remoteAddres
  */
 uint32_t CAEDRGetSocketListLength();
 
+/**
+ * Get device information from list.
+ * @param[in]   remoteAddress   remote address.
+ * @return  Device information object or NULL.
+ */
+CAConnectedDeviceInfo_t *CAEDRGetDeviceInfoFromAddress(const char *remoteAddress);
+
 #ifdef __cplusplus
 } /* extern "C" */
 #endif
index 3159040..03207c9 100644 (file)
@@ -33,6 +33,7 @@
 #include "caqueueingthread.h"
 #include "oic_malloc.h"
 #include "caremotehandler.h"
+#include "pdu.h"
 
 /**
  * @var EDR_ADAPTER_TAG
@@ -95,25 +96,6 @@ static CAEndpoint_t *g_localConnectivity = NULL;
  */
 static bool g_serverState = false;
 
-/**
- * Stores information of all the senders.
- *
- * This structure will be used to track and defragment all incoming
- * data packet.
- */
-typedef struct
-{
-    uint32_t recvDataLen;
-    uint32_t totalDataLen;
-    uint8_t *defragData;
-    CAEndpoint_t *remoteEndpoint;
-} CAEDRSenderInfo_t;
-
-/**
- * Sender information.
- */
-static u_arraylist_t *g_senderInfo = NULL;
-
 static CAResult_t CAStartServer();
 static CAResult_t CAEDRInitializeQueueHandlers();
 CAResult_t CAEDRInitializeSendHandler();
@@ -126,13 +108,10 @@ void CAAdapterRecvData(const char *remoteAddress, const uint8_t *data, uint32_t
                        uint32_t *sentLength);
 void CAEDRNotifyNetworkStatus(CANetworkStatus_t status);
 void CAEDROnNetworkStatusChanged(void *context);
-CAResult_t CAAdapterSendData(const char *remoteAddress, const char *serviceUUID, const uint8_t *data,
-                             uint32_t dataLength, uint32_t *sentLength);
-CAEDRNetworkEvent *CAEDRCreateNetworkEvent(CAEndpoint_t *connectivity,
-                                           CANetworkStatus_t status);
-
-CAResult_t CAEDRClientSendData(const char *remoteAddress,
-                               const uint8_t *data,
+CAResult_t CAAdapterSendData(const char *remoteAddress, const char *serviceUUID,
+                             const uint8_t *data, uint32_t dataLength, uint32_t *sentLength);
+CAEDRNetworkEvent *CAEDRCreateNetworkEvent(CAEndpoint_t *connectivity, CANetworkStatus_t status);
+CAResult_t CAEDRClientSendData(const char *remoteAddress, const uint8_t *data,
                                uint32_t dataLength);
 
 /**
@@ -159,15 +138,11 @@ static void CAEDRDataDestroyer(void *data, uint32_t size);
 static void CAEDRErrorHandler(const char *remoteAddress, const uint8_t *data,
                               uint32_t dataLength, CAResult_t result);
 
-static void CAEDRClearSenderInfo();
-
 CAResult_t CAInitializeEDR(CARegisterConnectivityCallback registerCallback,
                            CANetworkPacketReceivedCallback packetReceivedCallback,
                            CANetworkChangeCallback networkStateChangeCallback,
                            CAErrorHandleCallback errorCallback, ca_thread_pool_t handle)
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     // Input validation
     VERIFY_NON_NULL(registerCallback, EDR_ADAPTER_TAG, "register callback is NULL");
     VERIFY_NON_NULL(packetReceivedCallback, EDR_ADAPTER_TAG, "data receive callback is NULL");
@@ -215,8 +190,6 @@ CAResult_t CAInitializeEDR(CARegisterConnectivityCallback registerCallback,
 
 CAResult_t CAStartEDR()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     //Start Monitoring EDR Network
     CAResult_t ret = CAEDRStartNetworkMonitor();
     if (CA_STATUS_OK != ret)
@@ -260,36 +233,27 @@ CAResult_t CAStartEDR()
         OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "CAAdapterStartQueue failed!, error number [%d] ", ret);
     }
 
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return ret;
 }
 
 CAResult_t CAStartEDRListeningServer()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     return CAStartServer();
 }
 
 CAResult_t CAStopEDRListeningServer()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     return CAEDRServerStop();
 }
 
 CAResult_t CAStartEDRDiscoveryServer()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     return CAStartServer();
 }
 
 int32_t CASendEDRUnicastData(const CAEndpoint_t *remoteEndpoint, const void *data,
                              uint32_t dataLength)
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     // Input validation
     VERIFY_NON_NULL_RET(remoteEndpoint, EDR_ADAPTER_TAG, "Remote endpoint is null", -1);
     VERIFY_NON_NULL_RET(data, EDR_ADAPTER_TAG, "Data is null", -1);
@@ -317,7 +281,6 @@ int32_t CASendEDRUnicastData(const CAEndpoint_t *remoteEndpoint, const void *dat
         return -1;
     }
 
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return sentLength;
 }
 
@@ -350,8 +313,6 @@ int32_t CASendEDRMulticastData(const CAEndpoint_t *endpoint, const void *data, u
 
 CAResult_t CAGetEDRInterfaceInformation(CAEndpoint_t **info, uint32_t *size)
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     VERIFY_NON_NULL(info, EDR_ADAPTER_TAG, "LocalConnectivity info is null");
 
     CAResult_t err = CA_STATUS_OK;
@@ -364,21 +325,16 @@ CAResult_t CAGetEDRInterfaceInformation(CAEndpoint_t **info, uint32_t *size)
     }
 
     *size = 1;
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return err;
 }
 
 CAResult_t CAReadEDRData()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     return CAEDRManagerReadData();
 }
 
 CAResult_t CAStopEDR()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     // Stop RFComm server if it is running
     CAEDRServerStop();
 
@@ -394,14 +350,11 @@ CAResult_t CAStopEDR()
     // Stop Send and receive Queue
     CAAdapterStopQueue();
 
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return CA_STATUS_OK;
 }
 
 void CATerminateEDR()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     // Terminate EDR Network Monitor
     CAEDRTerminateNetworkMonitor();
 
@@ -423,16 +376,10 @@ void CATerminateEDR()
     // Free LocalConnectivity information
     CAFreeEndpoint(g_localConnectivity);
     g_localConnectivity = NULL;
-
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }
 
 CAResult_t CAStartServer()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
-    CAResult_t err = CA_STATUS_OK;
-
     if (false == g_adapterState)
     {
         OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "Bluetooth adapter is disabled!");
@@ -441,6 +388,7 @@ CAResult_t CAStartServer()
         return CA_STATUS_OK;
     }
 
+    CAResult_t err = CA_STATUS_OK;
     if (CA_STATUS_OK != (err = CAEDRServerStart(g_edrThreadPool)))
     {
         OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Failed to start RFCOMM server!, error num [%d]",
@@ -448,14 +396,11 @@ CAResult_t CAStartServer()
         return err;
     }
 
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return err;
 }
 
 CAResult_t CAEDRInitializeQueueHandlers()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     if (CA_STATUS_OK == CAEDRInitializeSendHandler()
         && CA_STATUS_OK == CAEDRInitializeReceiveHandler())
     {
@@ -463,13 +408,11 @@ CAResult_t CAEDRInitializeQueueHandlers()
         return CA_STATUS_OK;
     }
 
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return CA_STATUS_FAILED;
 }
 
 CAResult_t CAEDRInitializeSendHandler()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
     // Check if the message queue is already initialized
     if (g_sendQueueHandle)
     {
@@ -495,7 +438,6 @@ CAResult_t CAEDRInitializeSendHandler()
 
 CAResult_t CAEDRInitializeReceiveHandler()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
     // Check if the message queue is already initialized
     if (g_recvQueueHandle)
     {
@@ -510,34 +452,22 @@ CAResult_t CAEDRInitializeReceiveHandler()
         return CA_MEMORY_ALLOC_FAILED;
     }
 
-    g_senderInfo = u_arraylist_create();
-    if (!g_senderInfo)
-    {
-        OIC_LOG(ERROR, EDR_ADAPTER_TAG, "ClientInfo memory allcation failed!");
-        OICFree(g_recvQueueHandle);
-        g_recvQueueHandle = NULL;
-        return CA_MEMORY_ALLOC_FAILED;
-    }
 
     if (CA_STATUS_OK != CAQueueingThreadInitialize(g_recvQueueHandle, g_edrThreadPool,
                                                    CAAdapterDataReceiverHandler,
                                                    CAEDRDataDestroyer))
     {
         OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to Initialize send queue thread");
-        u_arraylist_free(&g_senderInfo);
         OICFree(g_recvQueueHandle);
         g_recvQueueHandle = NULL;
         return CA_STATUS_FAILED;
     }
 
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
     return CA_STATUS_OK;
 }
 
 void CAAdapterTerminateQueues()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     if (g_sendQueueHandle)
     {
         CAQueueingThreadDestroy(g_sendQueueHandle);
@@ -548,10 +478,6 @@ void CAAdapterTerminateQueues()
         CAQueueingThreadDestroy(g_recvQueueHandle);
         g_recvQueueHandle = NULL;
     }
-
-    CAEDRClearSenderInfo();
-
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }
 
 void CAAdapterDataSendHandler(void *context)
@@ -559,24 +485,19 @@ void CAAdapterDataSendHandler(void *context)
     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN - CAAdapterDataSendHandler");
 
     CAEDRData *message = (CAEDRData *) context;
-    if (NULL == message)
+    if (!message)
     {
         OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to get message!");
         return;
     }
 
-    const char *remoteAddress = NULL;
-
-    if (NULL == message->remoteEndpoint)
+    if (!message->remoteEndpoint)
     {
         OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "remoteEndpoint is not available");
         return;
     }
-    else
-    {
-        remoteAddress = message->remoteEndpoint->addr;
-    }
 
+    const char *remoteAddress = message->remoteEndpoint->addr;
     if(!remoteAddress)
     {
         OIC_LOG(ERROR, EDR_ADAPTER_TAG, "EDR Send Message error");
@@ -584,38 +505,8 @@ void CAAdapterDataSendHandler(void *context)
         return;
     }
 
-    uint32_t dataSegmentLength = message->dataLen + CA_HEADER_LENGTH;
-
-    uint8_t *header = (uint8_t *) OICCalloc(CA_HEADER_LENGTH, sizeof(uint8_t));
-    VERIFY_NON_NULL_VOID(header, EDR_ADAPTER_TAG, "Memory allocation failed");
-
-    uint8_t* dataSegment = (uint8_t *) OICCalloc(dataSegmentLength, sizeof(uint8_t));
-    if (NULL == dataSegment)
-    {
-        CAEDRErrorHandler(remoteAddress, message->data, message->dataLen, CA_SEND_FAILED);
-        OICFree(header);
-        return;
-    }
-
-    CAResult_t result = CAGenerateHeader(header, CA_HEADER_LENGTH, message->dataLen);
-    if (CA_STATUS_OK != result)
-    {
-        OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Generate header failed");
-        OICFree(header);
-        OICFree(dataSegment);
-        CAEDRErrorHandler(remoteAddress, message->data, message->dataLen, result);
-        return;
-    }
-
-    memcpy(dataSegment, header, CA_HEADER_LENGTH);
-    OICFree(header);
-
-    memcpy(dataSegment + CA_HEADER_LENGTH, message->data, message->dataLen);
-
-    result = CAEDRClientSendData(remoteAddress, dataSegment, dataSegmentLength);
-    OICFree(dataSegment);
-
-    if (CA_STATUS_OK != result)
+    CAResult_t result = CAEDRClientSendData(remoteAddress, message->data, message->dataLen);
+    if(CA_STATUS_OK != result)
     {
         OIC_LOG(ERROR, EDR_ADAPTER_TAG, "CAEDRClientSendData API failed");
         CAEDRErrorHandler(remoteAddress, message->data, message->dataLen, result);
@@ -625,11 +516,9 @@ void CAAdapterDataSendHandler(void *context)
     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }
 
-CAResult_t CAEDRClientSendData(const char *remoteAddress,
-                               const uint8_t *data,
+CAResult_t CAEDRClientSendData(const char *remoteAddress, const uint8_t *data,
                                uint32_t dataLength)
 {
-
     CAResult_t result = CA_SEND_FAILED;
 
     // Send the first segment with the header.
@@ -656,65 +545,6 @@ CAResult_t CAEDRClientSendData(const char *remoteAddress,
     return result;
 }
 
-static void CAEDRClearSenderInfo()
-{
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
-    uint32_t listIndex = 0;
-    uint32_t listLength = u_arraylist_length(g_senderInfo);
-    for (listIndex = 0; listIndex < listLength; listIndex++)
-    {
-        CAEDRSenderInfo_t *info = (CAEDRSenderInfo_t *) u_arraylist_get(g_senderInfo, listIndex);
-        if (!info)
-        {
-            continue;
-        }
-
-        OICFree(info->defragData);
-        CAFreeEndpoint(info->remoteEndpoint);
-        OICFree(info);
-    }
-    u_arraylist_free(&g_senderInfo);
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
-}
-
-static CAResult_t CAEDRGetSenderInfo(const char *edrAddress,
-                                     CAEDRSenderInfo_t **senderInfo,
-                                     uint32_t *senderIndex)
-{
-    VERIFY_NON_NULL_RET(edrAddress,
-                        EDR_ADAPTER_TAG,
-                        "NULL edr address argument",
-                        CA_STATUS_INVALID_PARAM);
-    VERIFY_NON_NULL_RET(senderIndex,
-                        EDR_ADAPTER_TAG,
-                        "NULL index argument",
-                        CA_STATUS_INVALID_PARAM);
-
-    const uint32_t listLength = u_arraylist_length(g_senderInfo);
-    const uint32_t addrLength = strlen(edrAddress);
-    for (uint32_t index = 0; index < listLength; index++)
-    {
-        CAEDRSenderInfo_t *info = (CAEDRSenderInfo_t *) u_arraylist_get(g_senderInfo, index);
-        if (!info || !(info->remoteEndpoint))
-        {
-            continue;
-        }
-
-        if (!strncmp(info->remoteEndpoint->addr, edrAddress, addrLength))
-        {
-            *senderIndex = index;
-            if (senderInfo)
-            {
-                *senderInfo = info;
-            }
-            return CA_STATUS_OK;
-        }
-    }
-
-    return CA_STATUS_FAILED;
-}
-
 void CAAdapterDataReceiverHandler(void *context)
 {
     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN_CAAdapterDataReceiverHandler");
@@ -731,138 +561,22 @@ void CAAdapterDataReceiverHandler(void *context)
         OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to get message!");
         return;
     }
-    uint32_t dataLen = 0;
-
-    CAEDRSenderInfo_t *senderInfo = NULL;
-    uint32_t senderIndex = 0;
-
-    while (dataLen < message->dataLen)
-    {
-        if(CA_STATUS_OK != CAEDRGetSenderInfo(message->remoteEndpoint->addr,
-                                              &senderInfo, &senderIndex))
-        {
-            OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "This is a new client [%s]",
-                                                message->remoteEndpoint->addr);
-        }
-
-        if (!senderInfo)
-        {
-            CAEDRSenderInfo_t *newSender = OICMalloc(sizeof(CAEDRSenderInfo_t));
-            if (!newSender)
-            {
-                return;
-            }
-            newSender->recvDataLen = 0;
-            newSender->totalDataLen = 0;
-            newSender->defragData = NULL;
-            newSender->remoteEndpoint = NULL;
-
-            OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "Parsing the header");
-            newSender->totalDataLen = CAParseHeader(message->data + dataLen,
-                                                    message->dataLen - dataLen);
-            if(!(newSender->totalDataLen))
-            {
-                OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Total Data Length is parsed as 0!!!");
-                OICFree(newSender);
-                return;
-            }
-
-            OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "Total data to be accumulated [%u] bytes",
-                                                newSender->totalDataLen);
-            OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "data received in the first packet [%u] bytes",
-                                                message->dataLen);
 
-            newSender->defragData = OICCalloc(newSender->totalDataLen,
-                                              sizeof(*newSender->defragData));
-
-            if (NULL == newSender->defragData)
-            {
-                OICFree(newSender);
-                return;
-            }
+    CAEndpoint_t *remoteEndpoint = CACreateEndpointObject(CA_DEFAULT_FLAGS,
+                                                          CA_ADAPTER_RFCOMM_BTEDR,
+                                                          message->remoteEndpoint->addr,
+                                                          0);
 
-            newSender->remoteEndpoint = CACloneEndpoint(message->remoteEndpoint);
-            if (NULL == newSender->remoteEndpoint)
-            {
-                OIC_LOG(ERROR, EDR_ADAPTER_TAG, "remoteEndpoint is NULL!");
-                OICFree(newSender->defragData);
-                OICFree(newSender);
-                return;
-            }
+    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "Sending data up !");
+    g_networkPacketReceivedCallback(remoteEndpoint, message->data, message->dataLen);
 
-            if (message->dataLen - CA_HEADER_LENGTH - dataLen <= newSender->totalDataLen)
-            {
-                memcpy(newSender->defragData, message->data + dataLen + CA_HEADER_LENGTH,
-                       message->dataLen - dataLen - CA_HEADER_LENGTH);
-                newSender->recvDataLen += message->dataLen - dataLen - CA_HEADER_LENGTH;
-                u_arraylist_add(g_senderInfo,(void *)newSender);
-                dataLen = message->dataLen;
-            }
-            else
-            {
-                memcpy(newSender->defragData, message->data + dataLen + CA_HEADER_LENGTH,
-                       newSender->totalDataLen);
-                newSender->recvDataLen = newSender->totalDataLen;
-                u_arraylist_add(g_senderInfo,(void *)newSender);
-                dataLen += newSender->totalDataLen + CA_HEADER_LENGTH;
-            }
-            //Getting newSender index position in g_senderInfo array list
-            if (CA_STATUS_OK !=
-                CAEDRGetSenderInfo(newSender->remoteEndpoint->addr, NULL, &senderIndex))
-            {
-                OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Existing sender index not found!!");
-                OICFree(newSender->defragData);
-                CAFreeEndpoint(newSender->remoteEndpoint);
-                OICFree(newSender);
-                return;
-            }
-            senderInfo = newSender;
-        }
-        else
-        {
-            if (senderInfo->recvDataLen + message->dataLen - dataLen <= senderInfo->totalDataLen)
-            {
-                OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "Copying the data of length [%d]",
-                          message->dataLen - dataLen);
-                memcpy(senderInfo->defragData + senderInfo->recvDataLen, message->data + dataLen,
-                       message->dataLen - dataLen);
-                senderInfo->recvDataLen += message->dataLen - dataLen;
-                OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "totalDatalength  [%d] recveived Datalen [%d]",
-                          senderInfo->totalDataLen, senderInfo->recvDataLen);
-                dataLen = message->dataLen;
-            }
-            else
-            {
-                OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "Copying the data of length [%d]",
-                          senderInfo->totalDataLen - senderInfo->recvDataLen);
-                memcpy(senderInfo->defragData + senderInfo->recvDataLen, message->data + dataLen,
-                       senderInfo->totalDataLen - senderInfo->recvDataLen);
-                dataLen += senderInfo->totalDataLen - senderInfo->recvDataLen;
-                senderInfo->recvDataLen = senderInfo->totalDataLen;
-                OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "totalDatalength  [%d] recveived Datalen [%d]",
-                          senderInfo->totalDataLen, senderInfo->recvDataLen);
-            }
-        }
+    CAFreeEndpoint(remoteEndpoint);
 
-        if (senderInfo->totalDataLen == senderInfo->recvDataLen)
-        {
-            OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "Sending data up !");
-
-            CASecureEndpoint_t sep = {.endpoint = *(senderInfo->remoteEndpoint)};
-            g_networkPacketReceivedCallback(&sep, senderInfo->defragData, senderInfo->recvDataLen);
-            u_arraylist_remove(g_senderInfo, senderIndex);
-            senderInfo->remoteEndpoint = NULL;
-            senderInfo->defragData = NULL;
-            OICFree(senderInfo);
-            senderInfo = NULL;
-        }
-    }
     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT_CAAdapterDataReceiverHandler");
 }
 
 CAResult_t CAAdapterStartQueue()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
     // Start send queue thread
     if (CA_STATUS_OK != CAQueueingThreadStart(g_sendQueueHandle))
     {
@@ -882,27 +596,24 @@ CAResult_t CAAdapterStartQueue()
         CAEDRClientDisconnectAll();
         return CA_STATUS_FAILED;
     }
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
+
     return CA_STATUS_OK;
 }
 
 CAResult_t CAAdapterStopQueue()
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
     //Stop send queue thread
     CAQueueingThreadStop(g_sendQueueHandle);
 
     //Stop receive queue thread
     CAQueueingThreadStop(g_recvQueueHandle);
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
+
     return CA_STATUS_OK;
 }
 
 void CAAdapterRecvData(const char *remoteAddress, const uint8_t *data, uint32_t dataLength,
                        uint32_t *sentLength)
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     if (false == g_adapterState)
     {
         OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Bluetooth adapter is disabled!");
@@ -931,15 +642,11 @@ void CAAdapterRecvData(const char *remoteAddress, const uint8_t *data, uint32_t
 
     // Free remote endpoint
     CAFreeEndpoint(remoteEndpoint);
-
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }
 
 void CAEDRErrorHandler(const char *remoteAddress, const uint8_t *data,
                        uint32_t dataLength, CAResult_t result)
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     // Input validation
     VERIFY_NON_NULL_VOID(data, EDR_ADAPTER_TAG, "Data is null");
 
@@ -956,8 +663,6 @@ void CAEDRErrorHandler(const char *remoteAddress, const uint8_t *data,
 
     // Free remote endpoint
     CAFreeEndpoint(remoteEndpoint);
-
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }
 
 CAResult_t CAAdapterSendData(const char *remoteAddress, const char *serviceUUID, const uint8_t *data,
@@ -1000,8 +705,6 @@ CAResult_t CAAdapterSendData(const char *remoteAddress, const char *serviceUUID,
 
 void CAEDRNotifyNetworkStatus(CANetworkStatus_t status)
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     // Create localconnectivity
     if (NULL == g_localConnectivity)
     {
@@ -1020,7 +723,7 @@ void CAEDRNotifyNetworkStatus(CANetworkStatus_t status)
                 return;
             }
 
-            if (false== adapterState)
+            if (false == adapterState)
             {
                 OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Bluetooth adapter is disabled!");
                 g_adapterState = false;
@@ -1057,14 +760,10 @@ void CAEDRNotifyNetworkStatus(CANetworkStatus_t status)
             }
         }
     }
-
-    OIC_LOG_V(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }
 
 void CAEDROnNetworkStatusChanged(void *context)
 {
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
     if (NULL == context)
     {
         OIC_LOG(ERROR, EDR_ADAPTER_TAG, "context is NULL!");
@@ -1081,8 +780,6 @@ void CAEDROnNetworkStatusChanged(void *context)
 
     // Free the created Network event
     CAEDRFreeNetworkEvent(networkEvent);
-
-    OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
 }
 
 CAEDRNetworkEvent *CAEDRCreateNetworkEvent(CAEndpoint_t *connectivity,
@@ -1114,9 +811,9 @@ void CAEDRFreeNetworkEvent(CAEDRNetworkEvent *event)
 }
 
 CAEDRData *CACreateEDRData(const CAEndpoint_t *remoteEndpoint,
-                                        const uint8_t *data, uint32_t dataLength)
+                           const uint8_t *data, uint32_t dataLength)
 {
-    CAEDRData *edrData = (CAEDRData *)OICMalloc(sizeof (CAEDRData));
+    CAEDRData *edrData = (CAEDRData *) OICCalloc(1, sizeof(*edrData));
     if (!edrData)
     {
         OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Memory allocation failed!");
@@ -1151,8 +848,7 @@ void CAEDRDataDestroyer(void *data, uint32_t size)
 {
     if ((size_t)size < sizeof(CAEDRData))
     {
-        OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Destroy data too small %p %d",
-                  data, size);
+        OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Destroy data too small %p %d", data, size);
     }
     CAEDRData *edrdata = (CAEDRData *) data;
 
index 1be8168..c55d429 100644 (file)
@@ -1223,8 +1223,6 @@ void CALogPDUInfo(coap_pdu_t *pdu, const CAEndpoint_t *endpoint)
         OIC_LOG_BUFFER(DEBUG, TAG,  (const uint8_t *) pdu->hdr, pdu->length);
     }
     else
-#else
-    (void) endpoint;
 #endif
     {
         OIC_LOG_V(DEBUG, TAG, "PDU Maker - type : %d", pdu->hdr->coap_hdr_udp_t.type);
index 2d2a2f2..a605d78 100644 (file)
@@ -183,8 +183,6 @@ coap_pdu_t *CAParsePDU(const char *data, uint32_t length, uint32_t *outCode,
         transport = coap_get_tcp_header_type_from_initbyte(((unsigned char *)data)[0] >> 4);
     }
     else
-#else
-    (void) endpoint;
 #endif
     {
         transport = coap_udp;
@@ -695,8 +693,6 @@ CAResult_t CAGetInfoFromPDU(const coap_pdu_t *pdu, const CAEndpoint_t *endpoint,
         transport = coap_get_tcp_header_type_from_initbyte(((unsigned char *)pdu->hdr)[0] >> 4);
     }
     else
-#else
-    (void) endpoint;
 #endif
     {
         transport = coap_udp;