diff --git a/android/socket.c b/android/socket.c
index 656222e..561a1d5 100644
--- a/android/socket.c
+++ b/android/socket.c
static void handle_connect(const void *buf, uint16_t len)
{
const struct hal_cmd_sock_connect *cmd = buf;
+ static const uint8_t zero_uuid[16] = { 0 };
struct rfcomm_sock *rfsock;
uuid_t uuid;
int hal_fd = -1;
android2bdaddr(cmd->bdaddr, &rfsock->dst);
- memset(&uuid, 0, sizeof(uuid));
- uuid.type = SDP_UUID128;
- memcpy(&uuid.value.uuid128, cmd->uuid, sizeof(uint128_t));
+ if (!memcmp(cmd->uuid, zero_uuid, sizeof(zero_uuid))) {
+ if (!do_connect(rfsock, cmd->channel))
+ goto failed;
+ } else {
+ memset(&uuid, 0, sizeof(uuid));
+ uuid.type = SDP_UUID128;
+ memcpy(&uuid.value.uuid128, cmd->uuid, sizeof(uint128_t));
- rfsock->profile = get_profile_by_uuid(cmd->uuid);
+ rfsock->profile = get_profile_by_uuid(cmd->uuid);
- if (bt_search_service(&adapter_addr, &rfsock->dst, &uuid,
+ if (bt_search_service(&adapter_addr, &rfsock->dst, &uuid,
sdp_search_cb, rfsock, NULL) < 0) {
- error("Failed to search SDP records");
- cleanup_rfsock(rfsock);
- goto failed;
+ error("Failed to search SDP records");
+ goto failed;
+ }
}
ipc_send_rsp_full(HAL_SERVICE_ID_SOCK, HAL_OP_SOCK_CONNECT, 0, NULL,
ipc_send_rsp(HAL_SERVICE_ID_SOCK, HAL_OP_SOCK_CONNECT,
HAL_STATUS_FAILED);
+ if (rfsock)
+ cleanup_rfsock(rfsock);
+
if (hal_fd >= 0)
close(hal_fd);
}