+ 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);
+
+ (*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;
+ }