diff --git a/android/pan.c b/android/pan.c
index d010e09..0d6adaf 100644
--- a/android/pan.c
+++ b/android/pan.c
static struct {
uint32_t record_id;
GIOChannel *io;
+ bool bridge;
} nap_dev = {
.record_id = 0,
.io = NULL,
+ .bridge = false,
};
+
static int set_forward_delay(void)
{
int fd, ret;
DBG("%s", BNEP_BRIDGE);
+ if (nap_dev.bridge)
+ return 0;
+
sk = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
if (sk < 0)
return -EOPNOTSUPP;
close(sk);
+ nap_dev.bridge = err == 0;
+
return err;
}
DBG("%s", BNEP_BRIDGE);
+ if (!nap_dev.bridge)
+ return 0;
+
sk = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);
if (sk < 0)
return -EOPNOTSUPP;
if (err < 0)
return -EOPNOTSUPP;
+ nap_dev.bridge = false;
+
return 0;
}
{
devices = g_slist_remove(devices, dev);
- if (g_slist_length(devices) == 0)
+ if (g_slist_length(devices) == 0) {
local_role = HAL_PAN_ROLE_NONE;
+ nap_remove_bridge();
+ }
pan_device_free(dev);
}
goto failed;
}
+ if (nap_create_bridge() < 0)
+ goto failed;
+
if (bnep_server_add(sk, dst_role, BNEP_BRIDGE, dev->iface,
&dev->dst) < 0) {
+ nap_remove_bridge();
error("server_connadd failed");
rsp = BNEP_CONN_NOT_ALLOWED;
goto failed;
static int register_nap_server(void)
{
GError *gerr = NULL;
- int err;
DBG("");
- err = nap_create_bridge();
- if (err < 0)
- return err;
-
nap_dev.io = bt_io_listen(NULL, nap_confirm_cb, NULL, NULL, &gerr,
BT_IO_OPT_SOURCE_BDADDR, &adapter_addr,
BT_IO_OPT_PSM, BNEP_PSM,