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>
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.
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')
}
#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)
#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.
{
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;
}
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");
}
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;
}
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;
}
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;
}
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;
}
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;
}
"(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);
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)
{
return CA_STATUS_FAILED;
}
- OIC_LOG(DEBUG, TAG, "OUT");
return CA_STATUS_OK;
}
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();
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;
{
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;
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);
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);
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);
}
(*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);
(*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))
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
// 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);
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))
{
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)
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;
}
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;
}
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;
"([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);
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;
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))
{
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;
}
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;
}
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;
}
(*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;
}
(*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;
}
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;
}
(*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;
}
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;
}
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;
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;
(*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;
}
(*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;
}
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;
}
(*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;
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;
}
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;
}
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;
}
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;
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)
#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;";
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.
*/
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.
*/
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.
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;
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)
{
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))
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();
if (!g_jvm)
{
- OIC_LOG(DEBUG, TAG, "CAEDRServerStop - g_jvm is null");
+ OIC_LOG(DEBUG, TAG, "g_jvm is null");
return CA_STATUS_FAILED;
}
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)
(*g_jvm)->DetachCurrentThread(g_jvm);
}
- OIC_LOG(DEBUG, TAG, "OUT");
return CA_STATUS_OK;
}
g_edrPacketReceivedCallback = packetReceivedCallback;
}
-/**
- * Destroy Mutex.
- */
static void CAEDRServerDestroyMutex()
{
- OIC_LOG(DEBUG, TAG, "IN");
-
if (g_mutexUnicastServer)
{
ca_mutex_free(g_mutexUnicastServer);
g_mutexMulticastServer = NULL;
}
- if (g_mutexSocketListManager)
- {
- ca_mutex_free(g_mutexSocketListManager);
- g_mutexSocketListManager = NULL;
- }
-
if (g_mutexAcceptServer)
{
ca_mutex_free(g_mutexAcceptServer);
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)
{
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)
{
return CA_STATUS_FAILED;
}
- OIC_LOG(DEBUG, TAG, "OUT");
return CA_STATUS_OK;
}
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;
}
if (!ctx)
{
OIC_LOG(ERROR, TAG, "Out of memory!");
- return;
+ return CA_MEMORY_ALLOC_FAILED;
}
ctx->stopFlag = &g_stopAccept;
{
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()
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)
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;
}
"()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;
}
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;
}
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;
}
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;
}
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;
}
"(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
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;
}
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;
}
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;
}
"()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;
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);
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");
}
/**
{
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");
}
}
/**
* 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.
{
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
"()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;
}
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;
}
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);
(*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)
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;
}
{
(*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);
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;
}
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;
}
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;
}
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;
}
{
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;
}
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;
}
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;
*/
void CAEDRNativeCreateDeviceStateList()
{
- OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeCreateDeviceStateList");
+ OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceStateList");
// create new object array
if (NULL == g_deviceStateList)
{
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.");
if (!g_deviceStateList)
{
- OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceStateList is null");
+ OIC_LOG(ERROR, TAG, "gdeviceStateList is null");
return;
}
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);
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;
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;
*/
void CAEDRNativeCreateDeviceSocketList()
{
- OIC_LOG(DEBUG, TAG, "[EDR][Native] CAEDRNativeCreateDeviceSocketList");
+ OIC_LOG(DEBUG, TAG, "CAEDRNativeCreateDeviceSocketList");
// create new object array
if (NULL == g_deviceObjectList)
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;
}
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;
}
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;
}
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;
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);
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;
}
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);
(*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;
}
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);
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);
(*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;
}
{
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;
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;
{
if (!g_deviceObjectList)
{
- OIC_LOG(ERROR, TAG, "[EDR][Native] gdeviceObjectList is null");
+ OIC_LOG(ERROR, TAG, "gdeviceObjectList is null");
return 0;
}
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;
+}
* 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.
*/
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
#include "caqueueingthread.h"
#include "oic_malloc.h"
#include "caremotehandler.h"
+#include "pdu.h"
/**
* @var EDR_ADAPTER_TAG
*/
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();
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);
/**
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");
CAResult_t CAStartEDR()
{
- OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
//Start Monitoring EDR Network
CAResult_t ret = CAEDRStartNetworkMonitor();
if (CA_STATUS_OK != ret)
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);
return -1;
}
- OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
return sentLength;
}
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;
}
*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();
// 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();
// 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!");
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]",
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())
{
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)
{
CAResult_t CAEDRInitializeReceiveHandler()
{
- OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
// Check if the message queue is already initialized
if (g_recvQueueHandle)
{
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);
CAQueueingThreadDestroy(g_recvQueueHandle);
g_recvQueueHandle = NULL;
}
-
- CAEDRClearSenderInfo();
-
- OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
}
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");
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);
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.
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");
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))
{
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!");
// 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");
// 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,
void CAEDRNotifyNetworkStatus(CANetworkStatus_t status)
{
- OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
-
// Create localconnectivity
if (NULL == g_localConnectivity)
{
return;
}
- if (false== adapterState)
+ if (false == adapterState)
{
OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Bluetooth adapter is disabled!");
g_adapterState = false;
}
}
}
-
- 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!");
// Free the created Network event
CAEDRFreeNetworkEvent(networkEvent);
-
- OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
}
CAEDRNetworkEvent *CAEDRCreateNetworkEvent(CAEndpoint_t *connectivity,
}
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!");
{
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;
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);
transport = coap_get_tcp_header_type_from_initbyte(((unsigned char *)data)[0] >> 4);
}
else
-#else
- (void) endpoint;
#endif
{
transport = coap_udp;
transport = coap_get_tcp_header_type_from_initbyte(((unsigned char *)pdu->hdr)[0] >> 4);
}
else
-#else
- (void) endpoint;
#endif
{
transport = coap_udp;