CAResult_t CAEDRGetInterfaceInformation(CAEndpoint_t **info) { OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN"); // Input validation VERIFY_NON_NULL(info, EDR_ADAPTER_TAG, "LocalConnectivity info is null"); // Get the bluetooth adapter local address char *localAddress = NULL; int err = bt_adapter_get_address(&localAddress); if (BT_ERROR_NONE != err) { OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Getting local adapter address failed!, error num [%x]", err); return CA_STATUS_FAILED; } // Create network info *info = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_RFCOMM_BTEDR, localAddress, 0); if (NULL == *info) { OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create LocalConnectivity instance!"); OICFree(localAddress); return CA_MEMORY_ALLOC_FAILED; } OICFree(localAddress); OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT"); return CA_STATUS_OK; }
void CARANotifyNetworkChange(const char *address, CANetworkStatus_t status) { OIC_LOG(DEBUG, RA_ADAPTER_TAG, "CARANotifyNetworkChange IN"); CAEndpoint_t *localEndpoint = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_REMOTE_ACCESS, address, 0); if (!localEndpoint) { OIC_LOG(ERROR, RA_ADAPTER_TAG, "localEndpoint creation failed!"); return; } CANetworkChangeCallback networkChangeCallback = g_networkChangeCallback; if (networkChangeCallback) { networkChangeCallback(localEndpoint, status); } else { OIC_LOG(ERROR, RA_ADAPTER_TAG, "g_networkChangeCallback is NULL"); } CAFreeEndpoint(localEndpoint); OIC_LOG(DEBUG, RA_ADAPTER_TAG, "CARANotifyNetworkChange OUT"); }
CAResult_t CAGetRAInterfaceInformation(CAEndpoint_t **info, uint32_t *size) { VERIFY_NON_NULL(info, RA_ADAPTER_TAG, "info is NULL"); VERIFY_NON_NULL(size, RA_ADAPTER_TAG, "size is NULL"); ca_mutex_lock (g_raadapterMutex); if (CA_INTERFACE_UP != g_xmppData.connection_status) { OIC_LOG(ERROR, RA_ADAPTER_TAG, "Failed to get interface info, RA not Connected"); ca_mutex_unlock (g_raadapterMutex); return CA_ADAPTER_NOT_ENABLED; } ca_mutex_unlock (g_raadapterMutex); CAEndpoint_t *localEndpoint = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_REMOTE_ACCESS, g_xmppData.jabberID, 0); *size = 1; *info = localEndpoint; return CA_STATUS_OK; }
/** * implement for BT-EDR adapter common method */ CAResult_t CAEDRGetInterfaceInformation(CAEndpoint_t **info) { OIC_LOG(DEBUG, TAG, "IN - CAEDRGetInterfaceInformation"); if (!info) { OIC_LOG(ERROR, TAG, "endpoint info is null"); return CA_STATUS_FAILED; } int32_t netInfoSize = 1; char *macAddress = NULL; CAResult_t ret = CAEDRGetInterfaceInfo(&macAddress); OIC_LOG_V(ERROR, TAG, "address : %s", macAddress); if (NULL == macAddress) { OIC_LOG(ERROR, TAG, "mac address is null"); return CA_STATUS_FAILED; } if (CA_STATUS_OK != ret) { OIC_LOG_V(ERROR, TAG, "Failed to get interface info [%d]", ret); OICFree(macAddress); return ret; } // Create local endpoint using util function CAEndpoint_t *endpoint = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_RFCOMM_BTEDR, macAddress, 0); if (NULL == endpoint) { OIC_LOG(ERROR, TAG, "Failed to create Local Endpoint!"); OICFree(macAddress); return CA_STATUS_FAILED; } // copy unicast server information CAEndpoint_t *netInfo = (CAEndpoint_t *)OICMalloc(sizeof(CAEndpoint_t) * netInfoSize); if (NULL == netInfo) { OIC_LOG(ERROR, TAG, "Invalid input.."); OICFree(macAddress); CAFreeEndpoint(endpoint); return CA_MEMORY_ALLOC_FAILED; } *netInfo = *endpoint; *info = netInfo; OICFree(macAddress); CAFreeEndpoint(endpoint); OIC_LOG(DEBUG, TAG, "OUT - CAEDRGetInterfaceInformation"); return CA_STATUS_OK; }
CAResult_t CACreateEndpoint(CATransportFlags_t flags, CATransportAdapter_t adapter, const char *addr, uint16_t port, CAEndpoint_t **object) { if (!object) { OIC_LOG(ERROR, TAG, "Invalid Parameter"); return CA_STATUS_INVALID_PARAM; } CAEndpoint_t *endpoint = CACreateEndpointObject(flags, adapter, addr, port); if (!endpoint) { return CA_STATUS_FAILED; } *object = endpoint; return CA_STATUS_OK; }
void CARAXmppMessageReceivedCB(void * const param, xmpp_error_code_t result, const void *const sender, const void *const msg, size_t messageOctets) { if (g_networkPacketCallback) { VERIFY_NON_NULL_VOID(sender, RA_ADAPTER_TAG, "sender is NULL"); VERIFY_NON_NULL_VOID(msg, RA_ADAPTER_TAG, "message is NULL"); OIC_LOG_V (ERROR, RA_ADAPTER_TAG, "Message received from %s", sender); OIC_LOG_V (ERROR, RA_ADAPTER_TAG, "Message reception result %d", result); CAEndpoint_t *endPoint = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_REMOTE_ACCESS, sender, 0); if (!endPoint) { OIC_LOG(ERROR, RA_ADAPTER_TAG, "EndPoint creation failed!"); return; } void *buf = OICMalloc(messageOctets); if (!buf) { OIC_LOG(ERROR, RA_ADAPTER_TAG, "Memory alloc of message failed!"); CAFreeEndpoint(endPoint); return; } memcpy(buf, msg, messageOctets); CANetworkPacketReceivedCallback networkPacketCallback = g_networkPacketCallback; if (networkPacketCallback) { g_networkPacketCallback(endPoint, buf, messageOctets); } CAFreeEndpoint (endPoint); } else { OIC_LOG_V (ERROR, RA_ADAPTER_TAG, "No callback for RA received message found"); } }
void CAAdapterDataReceiverHandler(void *context) { OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN_CAAdapterDataReceiverHandler"); CAEDRData *message = (CAEDRData *) context; if (NULL == message || NULL == message->remoteEndpoint) { OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to get message!"); return; } CAEndpoint_t *remoteEndpoint = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_RFCOMM_BTEDR, message->remoteEndpoint->addr, 0); OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "Sending data up !"); g_networkPacketReceivedCallback(remoteEndpoint, message->data, message->dataLen); CAFreeEndpoint(remoteEndpoint); OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT_CAAdapterDataReceiverHandler"); }
CAResult_t CAAdapterSendData(const char *remoteAddress, const char *serviceUUID, const uint8_t *data, uint32_t dataLength, uint32_t *sentLength) { OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN - CAAdapterSendData"); if (false == g_adapterState) { OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Bluetooth adapter is disabled!"); *sentLength = 0; return CA_ADAPTER_NOT_ENABLED; } // Input validation VERIFY_NON_NULL(serviceUUID, EDR_ADAPTER_TAG, "service UUID is null"); VERIFY_NON_NULL(data, EDR_ADAPTER_TAG, "Data is null"); VERIFY_NON_NULL(sentLength, EDR_ADAPTER_TAG, "Sent data length holder is null"); // Create remote endpoint CAEndpoint_t *remoteEndpoint = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_RFCOMM_BTEDR, remoteAddress, 0); if (NULL == remoteEndpoint) { OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create remote endpoint !"); return CA_MEMORY_ALLOC_FAILED; } // Add message to data queue CAEDRData *edrData = CACreateEDRData(remoteEndpoint, data, dataLength); CAQueueingThreadAddData(g_sendQueueHandle, edrData, sizeof (CAEDRData)); *sentLength = dataLength; // Free remote endpoint CAFreeEndpoint(remoteEndpoint); OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT - CAAdapterSendData"); return CA_STATUS_OK; }
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"); // Create remote endpoint CAEndpoint_t *remoteEndpoint = CACreateEndpointObject(0, CA_ADAPTER_RFCOMM_BTEDR, remoteAddress, 0); if (!remoteEndpoint) { OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create remote endpoint !"); return; } g_errorCallback(remoteEndpoint, data, dataLength, result); // Free remote endpoint CAFreeEndpoint(remoteEndpoint); OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT"); }
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!"); *sentLength = 0; return; } // Input validation VERIFY_NON_NULL_VOID(data, EDR_ADAPTER_TAG, "Data is null"); VERIFY_NON_NULL_VOID(sentLength, EDR_ADAPTER_TAG, "Sent data length holder is null"); // Create remote endpoint CAEndpoint_t *remoteEndpoint = CACreateEndpointObject(CA_DEFAULT_FLAGS, CA_ADAPTER_RFCOMM_BTEDR, remoteAddress, 0); if (NULL == remoteEndpoint) { OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to create remote endpoint !"); return; } // Add message to data queue CAEDRData *edrData = CACreateEDRData(remoteEndpoint, data, dataLength); CAQueueingThreadAddData(g_recvQueueHandle, edrData, sizeof(CAEDRData)); *sentLength = dataLength; // Free remote endpoint CAFreeEndpoint(remoteEndpoint); OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT"); }