static void sco_connect(const char *src, const char *dst, int disconn, int voice) { struct io_data *data; GError *err = NULL; printf("Connecting SCO to %s\n", dst); data = io_data_new(NULL, -1, disconn, -1); if (src) data->io = bt_io_connect(connect_cb, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE, src, BT_IO_OPT_DEST, dst, BT_IO_OPT_VOICE, voice, BT_IO_OPT_INVALID); else data->io = bt_io_connect(connect_cb, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_DEST, dst, BT_IO_OPT_VOICE, voice, BT_IO_OPT_INVALID); if (!data->io) { printf("Connecting to %s failed: %s\n", dst, err->message); g_error_free(err); exit(EXIT_FAILURE); } }
static void rfcomm_connect(const char *src, const char *dst, uint8_t ch, int disconn, int sec) { struct io_data *data; GError *err = NULL; printf("Connecting to %s RFCOMM channel %u\n", dst, ch); data = io_data_new(NULL, -1, disconn, -1); if (src) data->io = bt_io_connect(connect_cb, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE, src, BT_IO_OPT_DEST, dst, BT_IO_OPT_CHANNEL, ch, BT_IO_OPT_SEC_LEVEL, sec, BT_IO_OPT_INVALID); else data->io = bt_io_connect(connect_cb, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_DEST, dst, BT_IO_OPT_CHANNEL, ch, BT_IO_OPT_SEC_LEVEL, sec, BT_IO_OPT_INVALID); if (!data->io) { printf("Connecting to %s failed: %s\n", dst, err->message); g_error_free(err); exit(EXIT_FAILURE); } }
static void sco_listen(const char *src, gint disconn) { struct io_data *data; GIOChannel *sco_srv; GError *err = NULL; printf("Listening for SCO connections\n"); data = io_data_new(NULL, BT_IO_SCO, -1, disconn, -1); if (src) sco_srv = bt_io_listen(BT_IO_SCO, connect_cb, NULL, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE, src, BT_IO_OPT_INVALID); else sco_srv = bt_io_listen(BT_IO_SCO, connect_cb, NULL, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_INVALID); if (!sco_srv) { printf("Listening failed: %s\n", err->message); g_error_free(err); exit(EXIT_FAILURE); } g_io_channel_unref(sco_srv); }
static void l2cap_listen(const char *src, uint8_t addr_type, uint16_t psm, uint16_t cid, int defer, int reject, int disconn, int accept, int sec, gboolean master) { struct io_data *data; BtIOConnect conn; BtIOConfirm cfm; GIOChannel *l2_srv; GError *err = NULL; if (defer) { conn = NULL; cfm = confirm_cb; } else { conn = connect_cb; cfm = NULL; } if (cid) printf("Listening on L2CAP CID 0x%04x (%u)\n", cid, cid); else printf("Listening on L2CAP PSM 0x%04x (%u)\n", psm, psm); data = io_data_new(NULL, reject, disconn, accept); if (src) l2_srv = bt_io_listen(conn, cfm, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE, src, BT_IO_OPT_SOURCE_TYPE, addr_type, BT_IO_OPT_PSM, psm, BT_IO_OPT_CID, cid, BT_IO_OPT_SEC_LEVEL, sec, BT_IO_OPT_MASTER, master, BT_IO_OPT_INVALID); else l2_srv = bt_io_listen(conn, cfm, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE_TYPE, addr_type, BT_IO_OPT_PSM, psm, BT_IO_OPT_CID, cid, BT_IO_OPT_SEC_LEVEL, sec, BT_IO_OPT_MASTER, master, BT_IO_OPT_INVALID); if (!l2_srv) { printf("Listening failed: %s\n", err->message); g_error_free(err); exit(EXIT_FAILURE); } g_io_channel_unref(l2_srv); }
static void rfcomm_listen(const char *src, uint8_t ch, gboolean defer, gint reject, gint disconn, gint accept, gint sec, gboolean master) { struct io_data *data; BtIOConnect conn; BtIOConfirm cfm; GIOChannel *rc_srv; GError *err = NULL; if (defer) { conn = NULL; cfm = confirm_cb; } else { conn = connect_cb; cfm = NULL; } data = io_data_new(NULL, BT_IO_RFCOMM, reject, disconn, accept); if (src) rc_srv = bt_io_listen(BT_IO_RFCOMM, conn, cfm, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE, src, BT_IO_OPT_CHANNEL, ch, BT_IO_OPT_SEC_LEVEL, sec, BT_IO_OPT_MASTER, master, BT_IO_OPT_INVALID); else rc_srv = bt_io_listen(BT_IO_RFCOMM, conn, cfm, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_CHANNEL, ch, BT_IO_OPT_SEC_LEVEL, sec, BT_IO_OPT_MASTER, master, BT_IO_OPT_INVALID); if (!rc_srv) { printf("Listening failed: %s\n", err->message); g_error_free(err); exit(EXIT_FAILURE); } bt_io_get(rc_srv, BT_IO_RFCOMM, &err, BT_IO_OPT_CHANNEL, &ch, BT_IO_OPT_INVALID); printf("Listening on RFCOMM channel %u\n", ch); g_io_channel_unref(rc_srv); }
static void l2cap_connect(const char *src, const char *dst, uint8_t addr_type, uint16_t psm, uint16_t cid, int disconn, int sec, int prio) { struct io_data *data; GError *err = NULL; uint8_t src_type; printf("Connecting to %s L2CAP PSM %u\n", dst, psm); data = io_data_new(NULL, -1, disconn, -1); if (addr_type != BDADDR_BREDR) src_type = BDADDR_LE_PUBLIC; else src_type = BDADDR_BREDR; if (src) data->io = bt_io_connect(connect_cb, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE, src, BT_IO_OPT_SOURCE_TYPE, src_type, BT_IO_OPT_DEST, dst, BT_IO_OPT_DEST_TYPE, addr_type, BT_IO_OPT_PSM, psm, BT_IO_OPT_CID, cid, BT_IO_OPT_SEC_LEVEL, sec, BT_IO_OPT_PRIORITY, prio, BT_IO_OPT_INVALID); else data->io = bt_io_connect(connect_cb, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE_TYPE, src_type, BT_IO_OPT_DEST, dst, BT_IO_OPT_DEST_TYPE, addr_type, BT_IO_OPT_PSM, psm, BT_IO_OPT_CID, cid, BT_IO_OPT_SEC_LEVEL, sec, BT_IO_OPT_PRIORITY, prio, BT_IO_OPT_INVALID); if (!data->io) { printf("Connecting to %s failed: %s\n", dst, err->message); g_error_free(err); exit(EXIT_FAILURE); } }
static void sco_listen(const char *src, gboolean defer, int reject, int disconn, int accept, int voice) { struct io_data *data; BtIOConnect conn; BtIOConfirm cfm; GIOChannel *sco_srv; GError *err = NULL; printf("Listening for SCO connections\n"); if (defer) { conn = NULL; cfm = confirm_cb; } else { conn = connect_cb; cfm = NULL; } data = io_data_new(NULL, reject, disconn, accept); data->voice = voice; if (src) sco_srv = bt_io_listen(conn, cfm, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_SOURCE, src, BT_IO_OPT_VOICE, voice, BT_IO_OPT_INVALID); else sco_srv = bt_io_listen(conn, cfm, data, (GDestroyNotify) io_data_unref, &err, BT_IO_OPT_VOICE, voice, BT_IO_OPT_INVALID); if (!sco_srv) { printf("Listening failed: %s\n", err->message); g_error_free(err); exit(EXIT_FAILURE); } g_io_channel_unref(sco_srv); }