From 88e4d0af74c00654e24709b3784756c5523c66bd Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Tue, 17 Feb 2009 13:09:25 -0300 Subject: Cleanup old BtIO code. --- common/glib-helper.c | 873 --------------------------------------------------- common/glib-helper.h | 55 ---- 2 files changed, 928 deletions(-) diff --git a/common/glib-helper.c b/common/glib-helper.c index b833d569..29d72e56 100644 --- a/common/glib-helper.c +++ b/common/glib-helper.c @@ -57,10 +57,6 @@ struct cached_sdp_session { static GSList *cached_sdp_sessions = NULL; -typedef int (*resolver_t) (int fd, char *src, char *dst); -typedef BtIOReturn (*connect_t) (BtIO *io, BtIOFunc func); -typedef BtIOReturn (*listen_t) (BtIO *io, BtIOFunc func); - struct hci_cmd_data { bt_hci_result_t cb; uint16_t handle; @@ -68,9 +64,6 @@ struct hci_cmd_data { gpointer caller_data; }; -static BtIOReturn bt_io_connect(BtIO *io, const char *uuid, BtIOFunc func); -static BtIOReturn bt_io_listen(BtIO *io, const char *uuid, BtIOFunc func); - static gboolean cached_session_expired(gpointer user_data) { struct cached_sdp_session *cached = user_data; @@ -146,29 +139,6 @@ int set_nonblocking(int fd) return 0; } -struct io_context { - int fd; - GIOChannel *io; - BtIOFunc func; - bt_io_callback_t cb; - resolver_t resolver; - gpointer user_data; -}; - -struct bt_io { - char src[18]; - char dst[18]; - guint32 flags; - guint8 channel; - guint16 psm; - guint16 mtu; - BtIOTransport type; - connect_t connect; - listen_t listen; - struct io_context *io_ctxt; - int refcount; -}; - struct search_context { bdaddr_t src; bdaddr_t dst; @@ -622,494 +592,6 @@ GSList *bt_string2list(const gchar *str) return l; } -static inline int resolve_names(int fd, struct sockaddr *host, - struct sockaddr *peer, socklen_t len) -{ - int err; - socklen_t namelen; - - namelen = len; - memset(host, 0, len); - err = getsockname(fd, host, &namelen); - if (err < 0) - return err; - - namelen = len; - memset(peer, 0, len); - err = getpeername(fd, peer, &namelen); - if (err < 0) - return err; - - return 0; -} - -static int rfcomm_resolver(int fd, char *src, char *dst) -{ - struct sockaddr_rc host, peer; - socklen_t len; - int err; - - len = sizeof(host); - err = resolve_names(fd, (struct sockaddr *) &host, - (struct sockaddr *) &peer, len); - if (err < 0) - return err; - - ba2str(&host.rc_bdaddr, src); - ba2str(&peer.rc_bdaddr, dst); - - return 0; -} - -static int l2cap_resolver(int fd, char *src, char *dst) -{ - struct sockaddr_l2 host, peer; - socklen_t len; - int err; - - len = sizeof(host); - err = resolve_names(fd, (struct sockaddr *) &host, - (struct sockaddr *) &peer, len); - if (err < 0) - return err; - - ba2str(&host.l2_bdaddr, src); - ba2str(&peer.l2_bdaddr, dst); - - return 0; -} - -static int sco_resolver(int fd, char *src, char *dst) -{ - struct sockaddr_sco host, peer; - socklen_t len; - int err; - - len = sizeof(host); - err = resolve_names(fd, (struct sockaddr *) &host, - (struct sockaddr *) &peer, len); - if (err < 0) - return err; - - ba2str(&host.sco_bdaddr, src); - ba2str(&peer.sco_bdaddr, dst); - - return 0; -} - -static gboolean listen_cb(GIOChannel *chan, GIOCondition cond, - gpointer user_data) -{ - BtIO *io = user_data; - struct io_context *io_ctxt = io->io_ctxt; - int fd, err = 0; - GIOChannel *gio; - struct sockaddr addr; - socklen_t len; - bdaddr_t src, dst; - - if (cond & G_IO_NVAL) - return FALSE; - - if (cond & (G_IO_HUP | G_IO_ERR)) { - g_io_channel_close(chan); - g_io_channel_unref(chan); - g_free(io_ctxt); - return FALSE; - } - - len = sizeof(addr); - memset(&addr, 0, len); - fd = accept(io_ctxt->fd, &addr, &len); - if (fd < 0) - goto drop; - - if (io_ctxt->resolver) { - err = io_ctxt->resolver(fd, io->src, io->dst); - if (err < 0) { - close(fd); - goto drop; - } - } - - gio = g_io_channel_unix_new(fd); - if (!gio) - err = -ENOMEM; - - if (io_ctxt->func) - io_ctxt->func(io, err, gio, io_ctxt->user_data); - if (io_ctxt->cb) { - str2ba(io->src, &src); - str2ba(io->dst, &dst); - io_ctxt->cb(gio, err, &src, &dst, io_ctxt->user_data); - } - - return TRUE; - -drop: - if (io_ctxt->func) - io_ctxt->func(io, -errno, NULL, io_ctxt->user_data); - if (io_ctxt->cb) - io_ctxt->cb(NULL, err, NULL, NULL, io_ctxt->user_data); - - return TRUE; -} - -static int transport_listen(BtIO *io) -{ - struct io_context *io_ctxt = io->io_ctxt; - int err; - - err = listen(io_ctxt->fd, 5); - if (err < 0) - return -errno; - - io_ctxt->io = g_io_channel_unix_new(io_ctxt->fd); - if (!io_ctxt->io) - return -ENOMEM; - - g_io_add_watch(io_ctxt->io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL, - (GIOFunc) listen_cb, io); - - return 0; -} - -static gboolean connect_cb(GIOChannel *gio, GIOCondition cond, - gpointer user_data) -{ - BtIO *io = user_data; - struct io_context *io_ctxt = io->io_ctxt; - int err = 0, ret; - socklen_t len; - bdaddr_t src, dst; - - if (cond & G_IO_NVAL) - return FALSE; - - len = sizeof(ret); - if (getsockopt(io_ctxt->fd, SOL_SOCKET, SO_ERROR, &ret, &len) < 0) { - err = -errno; - goto done; - } - - if (ret != 0) { - err = -ret; - goto done; - } - - if (io_ctxt->resolver) { - err = io_ctxt->resolver(io_ctxt->fd, io->src, io->dst); - if (err < 0) - goto done; - } - - io_ctxt->io = NULL; - -done: - if (io_ctxt->func) - io_ctxt->func(io, err, gio, io_ctxt->user_data); - if (io_ctxt->cb) { - str2ba(io->src, &src); - str2ba(io->dst, &dst); - io_ctxt->cb(gio, err, &src, &dst, io_ctxt->user_data); - } - if (io_ctxt->io) { - g_io_channel_close(io_ctxt->io); - g_io_channel_unref(io_ctxt->io); - } - g_free(io_ctxt); - - return FALSE; -} - -static int transport_connect(BtIO *io, struct sockaddr *addr, - socklen_t addrlen) -{ - struct io_context *io_ctxt = io->io_ctxt; - int err; - - io_ctxt->io = g_io_channel_unix_new(io_ctxt->fd); - if (!io_ctxt->io) - return -ENOMEM; - - err = g_io_channel_set_flags(io_ctxt->io, G_IO_FLAG_NONBLOCK, NULL); - if (err != G_IO_STATUS_NORMAL) - return -EPERM; - - err = connect(io_ctxt->fd, addr, addrlen); - if (err < 0 && !(errno == EAGAIN || errno == EINPROGRESS)) - return -errno; - - g_io_add_watch(io_ctxt->io, G_IO_OUT | G_IO_ERR | G_IO_HUP | G_IO_NVAL, - (GIOFunc) connect_cb, io); - - return 0; -} - -static int sco_bind(struct io_context *io_ctxt, const char *address, - uint16_t mtu, struct sockaddr_sco *addr) -{ - int err; - struct sco_options sco_opt; - - io_ctxt->fd = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO); - if (io_ctxt->fd < 0) - return -errno; - - memset(addr, 0, sizeof(*addr)); - addr->sco_family = AF_BLUETOOTH; - str2ba(address, &addr->sco_bdaddr); - - err = bind(io_ctxt->fd, (struct sockaddr *) addr, sizeof(*addr)); - if (err < 0) { - close(io_ctxt->fd); - return -errno; - } - - if (mtu) { - socklen_t olen = sizeof(sco_opt); - memset(&sco_opt, 0, olen); - getsockopt(io_ctxt->fd, SOL_SCO, SCO_OPTIONS, &sco_opt, &olen); - sco_opt.mtu = mtu; - setsockopt(io_ctxt->fd, SOL_SCO, SCO_OPTIONS, &sco_opt, - sizeof(sco_opt)); - } - - return 0; -} - -static BtIOReturn sco_connect(BtIO *io, BtIOFunc func) -{ - struct io_context *io_ctxt = io->io_ctxt; - struct sockaddr_sco addr; - int err; - - io_ctxt->func = func; - - err = sco_bind(io_ctxt, io->src, 0, &addr); - if (err < 0) - return BT_IO_FAILED; - - memset(&addr, 0, sizeof(addr)); - addr.sco_family = AF_BLUETOOTH; - str2ba(io->dst, &addr.sco_bdaddr); - - err = transport_connect(io, (struct sockaddr *) &addr, - sizeof(addr)); - if (err < 0) { - close(io_ctxt->fd); - return BT_IO_FAILED; - } - - return BT_IO_SUCCESS; -} - -static int l2cap_bind(struct io_context *io_ctxt, const char *address, - uint16_t psm, uint16_t mtu, uint32_t flags, - struct sockaddr_l2 *addr) -{ - int err; - struct l2cap_options l2o; - - io_ctxt->fd = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP); - if (io_ctxt->fd < 0) - return -errno; - - memset(addr, 0, sizeof(*addr)); - addr->l2_family = AF_BLUETOOTH; - str2ba(address, &addr->l2_bdaddr); - addr->l2_psm = htobs(psm); - - err = bind(io_ctxt->fd, (struct sockaddr *) addr, sizeof(*addr)); - if (err < 0) { - close(io_ctxt->fd); - return -errno; - } - - if (mtu) { - socklen_t olen = sizeof(l2o); - memset(&l2o, 0, olen); - getsockopt(io_ctxt->fd, SOL_L2CAP, L2CAP_OPTIONS, &l2o, &olen); - l2o.imtu = l2o.omtu = mtu; - setsockopt(io_ctxt->fd, SOL_L2CAP, L2CAP_OPTIONS, &l2o, sizeof(l2o)); - } - - if (flags) { - int opt = flags; - err = setsockopt(io_ctxt->fd, SOL_L2CAP, L2CAP_LM, &opt, - sizeof(opt)); - if (err < 0) { - close(io_ctxt->fd); - return -errno; - } - } - - return 0; -} - -static BtIOReturn l2cap_listen(BtIO *io, BtIOFunc func) -{ - struct io_context *io_ctxt = io->io_ctxt; - struct sockaddr_l2 addr; - int err; - - io_ctxt->func = func; - - err = l2cap_bind(io_ctxt, io->src, io->psm, io->mtu, io->flags, &addr); - if (err < 0) - return BT_IO_FAILED; - - err = transport_listen(io); - if (err < 0) { - close(io_ctxt->fd); - return BT_IO_FAILED; - } - - return BT_IO_SUCCESS; -} - -static BtIOReturn l2cap_connect(BtIO *io, BtIOFunc func) -{ - struct io_context *io_ctxt = io->io_ctxt; - struct sockaddr_l2 l2a; - int err; - - io_ctxt->func = func; - - err = l2cap_bind(io_ctxt, io->src, 0, io->mtu, 0, &l2a); - if (err < 0) - return BT_IO_FAILED; - - memset(&l2a, 0, sizeof(l2a)); - l2a.l2_family = AF_BLUETOOTH; - str2ba(io->dst, &l2a.l2_bdaddr); - l2a.l2_psm = htobs(io->psm); - - err = transport_connect(io, (struct sockaddr *) &l2a, - sizeof(l2a)); - if (err < 0) { - close(io_ctxt->fd); - return BT_IO_FAILED; - } - - return BT_IO_SUCCESS; -} - -static BtIOReturn rfcomm_bind(struct io_context *io_ctxt, const char *address, - uint8_t channel, uint32_t flags, - struct sockaddr_rc *addr) -{ - int err; - - io_ctxt->fd = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); - if (io_ctxt->fd < 0) - return BT_IO_FAILED; - - - memset(addr, 0, sizeof(*addr)); - addr->rc_family = AF_BLUETOOTH; - str2ba(address, &addr->rc_bdaddr); - addr->rc_channel = channel; - - err = bind(io_ctxt->fd, (struct sockaddr *) addr, sizeof(*addr)); - if (err < 0) { - close(io_ctxt->fd); - return BT_IO_FAILED; - } - - if (flags) { - int opt = flags; - err = setsockopt(io_ctxt->fd, SOL_RFCOMM, RFCOMM_LM, &opt, - sizeof(opt)); - if (err < 0) { - close(io_ctxt->fd); - return BT_IO_FAILED; - } - } - - return BT_IO_SUCCESS; -} - -static BtIOReturn rfcomm_listen(BtIO *io, BtIOFunc func) -{ - struct io_context *io_ctxt = io->io_ctxt; - struct sockaddr_rc addr; - socklen_t sa_len; - int err; - - io_ctxt->func = func; - - err = rfcomm_bind(io_ctxt, io->src, io->channel, io->flags, &addr); - if (err < 0) - return BT_IO_FAILED; - - err = transport_listen(io); - if (err < 0) { - close(io_ctxt->fd); - return BT_IO_FAILED; - } - - sa_len = sizeof(struct sockaddr_rc); - memset(&addr, 0, sizeof(addr)); - if (getsockname(io_ctxt->fd, (struct sockaddr *) &addr, &sa_len) < 0) { - err = -errno; - close(io_ctxt->fd); - return BT_IO_FAILED; - } - - io->channel = addr.rc_channel; - - return BT_IO_SUCCESS; -} - -static BtIOReturn rfcomm_connect(BtIO *io, BtIOFunc func) -{ - struct io_context *io_ctxt = io->io_ctxt; - struct sockaddr_rc addr; - int err; - - io_ctxt->func = func; - - err = rfcomm_bind(io_ctxt, io->src, 0, 0, &addr); - if (err < 0) - return BT_IO_FAILED; - - memset(&addr, 0, sizeof(addr)); - addr.rc_family = AF_BLUETOOTH; - str2ba(io->dst, &addr.rc_bdaddr); - addr.rc_channel = io->channel; - - err = transport_connect(io, (struct sockaddr *) &addr, - sizeof(addr)); - if (err < 0) { - close(io_ctxt->fd); - return BT_IO_FAILED; - } - - return BT_IO_SUCCESS; -} - -static BtIOReturn sco_listen(BtIO *io, BtIOFunc func) -{ - struct io_context *io_ctxt = io->io_ctxt; - struct sockaddr_sco addr; - int err; - - io_ctxt->func = func; - - err = sco_bind(io_ctxt, io->src, io->mtu, &addr); - if (err < 0) - return BT_IO_FAILED; - - err = transport_listen(io); - if (err < 0) { - close(io_ctxt->fd); - return BT_IO_FAILED; - } - - return BT_IO_SUCCESS; -} - static gboolean hci_event_watch(GIOChannel *io, GIOCondition cond, gpointer user_data) { @@ -1288,358 +770,3 @@ failed: return -err; } - -static int create_io_context(struct io_context **io_ctxt, BtIOFunc func, - gpointer cb, gpointer resolver, gpointer user_data) -{ - *io_ctxt = g_try_malloc0(sizeof(struct search_context)); - if (!*io_ctxt) - return -ENOMEM; - - (*io_ctxt)->cb = cb; - (*io_ctxt)->func = func; - (*io_ctxt)->resolver = resolver; - (*io_ctxt)->user_data = user_data; - - return 0; -} - -static void io_context_cleanup(struct io_context *io_ctxt) -{ - if (io_ctxt->io) { - g_io_channel_close(io_ctxt->io); - g_io_channel_unref(io_ctxt->io); - } - g_free(io_ctxt); -} - -static GIOChannel *rfcomm_listen_internal(const bdaddr_t *src, uint8_t *channel, - uint32_t flags, bt_io_callback_t cb, void *user_data) -{ - BtIO *io; - BtIOReturn err; - - io = bt_io_create(BT_IO_TRANS_RFCOMM, user_data, NULL); - if (!io) - return NULL; - - ba2str(src, io->src); - io->channel = *channel; - io->flags = flags; - io->io_ctxt->cb = cb; - err = bt_io_listen(io, NULL, NULL); - if (err != BT_IO_SUCCESS) { - bt_io_unref(io); - return NULL; - } - - *channel = io->channel; - - return io->io_ctxt->io; -} - -GIOChannel *bt_rfcomm_listen_allocate(const bdaddr_t *src, uint8_t *channel, - uint32_t flags, bt_io_callback_t cb, void *user_data) -{ - if (!channel) - return NULL; - - *channel = 0; - - return rfcomm_listen_internal(src, channel, flags, cb, user_data); -} - -GIOChannel *bt_rfcomm_listen(const bdaddr_t *src, uint8_t channel, - uint32_t flags, bt_io_callback_t cb, void *user_data) -{ - if (channel < 1 || channel > 30) - return NULL; - - return rfcomm_listen_internal(src, &channel, flags, cb, user_data); - -} - -int bt_rfcomm_connect(const bdaddr_t *src, const bdaddr_t *dst, - uint8_t channel, bt_io_callback_t cb, void *user_data) -{ - BtIO *io; - BtIOReturn err; - - io = bt_io_create(BT_IO_TRANS_RFCOMM, user_data, NULL); - if (!io) - return -1; - - ba2str(src, io->src); - ba2str(dst, io->dst); - io->channel = channel; - io->io_ctxt->cb = cb; - err = bt_io_connect(io, NULL, NULL); - if (err != BT_IO_SUCCESS) { - bt_io_unref(io); - return -1; - } - - return 0; -} - -GIOChannel *bt_l2cap_listen(const bdaddr_t *src, uint16_t psm, uint16_t mtu, - uint32_t flags, bt_io_callback_t cb, void *user_data) -{ - BtIO *io; - BtIOReturn err; - - io = bt_io_create(BT_IO_TRANS_L2CAP, user_data, NULL); - if (!io) - return NULL; - - ba2str(src, io->src); - io->psm = psm; - io->mtu = mtu; - io->flags = flags; - io->io_ctxt->cb = cb; - err = bt_io_listen(io, NULL, NULL); - if (err != BT_IO_SUCCESS) { - bt_io_unref(io); - return NULL; - } - - return io->io_ctxt->io; -} - -int bt_l2cap_connect(const bdaddr_t *src, const bdaddr_t *dst, - uint16_t psm, uint16_t mtu, bt_io_callback_t cb, - void *user_data) -{ - BtIO *io; - BtIOReturn err; - - io = bt_io_create(BT_IO_TRANS_L2CAP, user_data, NULL); - if (!io) - return -1; - - ba2str(src, io->src); - ba2str(dst, io->dst); - io->psm = psm; - io->mtu = mtu; - io->io_ctxt->cb = cb; - err = bt_io_connect(io, NULL, NULL); - if (err != BT_IO_SUCCESS) { - bt_io_unref(io); - return -1; - } - - return 0; -} - -GIOChannel *bt_sco_listen(const bdaddr_t *src, uint16_t mtu, - bt_io_callback_t cb, void *user_data) -{ - BtIO *io; - BtIOReturn err; - - io = bt_io_create(BT_IO_TRANS_SCO, user_data, NULL); - if (!io) - return NULL; - - ba2str(src, io->src); - io->io_ctxt->cb = cb; - err = bt_io_listen(io, NULL, NULL); - if (err != BT_IO_SUCCESS) { - bt_io_unref(io); - return NULL; - } - - return io->io_ctxt->io; -} - - -int bt_sco_connect(const bdaddr_t *src, const bdaddr_t *dst, - bt_io_callback_t cb, void *user_data) -{ - BtIO *io; - BtIOReturn err; - - io = bt_io_create(BT_IO_TRANS_SCO, user_data, NULL); - if (!io) - return -1; - - ba2str(src, io->src); - ba2str(dst, io->dst); - io->io_ctxt->cb = cb; - err = bt_io_connect(io, NULL, NULL); - if (err != BT_IO_SUCCESS) { - bt_io_unref(io); - return -1; - } - - return 0; -} - -/* Experiemental bt_io API */ - -BtIO *bt_io_create(BtIOTransport type, gpointer user_data, GDestroyNotify notify) -{ - BtIO *io; - int err; - - io = g_new0(BtIO, 1); - if (!io) - return NULL; - - io->refcount = 1; - - switch (type) { - case BT_IO_TRANS_L2CAP: - err = create_io_context(&io->io_ctxt, NULL, NULL, - l2cap_resolver, user_data); - io->connect = l2cap_connect; - io->listen = l2cap_listen; - break; - case BT_IO_TRANS_RFCOMM: - err = create_io_context(&io->io_ctxt, NULL, NULL, - rfcomm_resolver, user_data); - io->connect = rfcomm_connect; - io->listen = rfcomm_listen; - break; - case BT_IO_TRANS_SCO: - err = create_io_context(&io->io_ctxt, NULL, NULL, - sco_resolver, user_data); - io->connect = sco_connect; - io->listen = sco_listen; - break; - default: - return NULL; - } - - if (err < 0) { - bt_io_unref(io); - return NULL; - } - - return io; -} - -BtIO *bt_io_ref(BtIO *io) -{ - io->refcount++; - - return io; -} - -void bt_io_unref(BtIO *io) -{ - io->refcount--; - - if (io->refcount) - return; - - io_context_cleanup(io->io_ctxt); - g_free(io); -} - -gboolean bt_io_set_source(BtIO *io, const char *address) -{ - if (strlen(address) != sizeof(io->src)) - return FALSE; - - memcpy(io->src, address, sizeof(io->src)); - - return TRUE; -} - -const char *bt_io_get_source(BtIO *io) -{ - return io->src; -} - -gboolean bt_io_set_destination(BtIO *io, const char *address) -{ - if (strlen(address) != sizeof(io->dst)) - return FALSE; - - memcpy(io->dst, address, sizeof(io->dst)); - - return TRUE; -} - -const char *bt_io_get_destination(BtIO *io) -{ - return io->dst; -} - -gboolean bt_io_set_flags(BtIO *io, guint32 flags) -{ - io->flags = flags; - - return TRUE; -} - -guint32 bt_io_get_flags(BtIO *io) -{ - return io->flags; -} - -gboolean bt_io_set_channel(BtIO *io, guint8 channel) -{ - if (io->type != BT_IO_TRANS_RFCOMM) - return FALSE; - - io->channel = channel; - - return TRUE; -} - -guint8 bt_io_get_channel(BtIO *io) -{ - return io->channel; -} - -gboolean bt_io_set_psm(BtIO *io, guint16 psm) -{ - if (io->type != BT_IO_TRANS_L2CAP) - return FALSE; - - io->psm = psm; - - return TRUE; -} - -guint16 bt_io_get_psm(BtIO *io) -{ - return io->psm; -} - -gboolean bt_io_set_mtu(BtIO *io, guint16 mtu) -{ - io->mtu = mtu; - - return TRUE; -} - -guint16 bt_io_get_mtu(BtIO *io) -{ - return io->mtu; -} - -static BtIOReturn bt_io_connect(BtIO *io, const char *uuid, BtIOFunc func) -{ - if (!io->connect) - return BT_IO_FAILED; - - return io->connect(io, func); -} - -static BtIOReturn bt_io_listen(BtIO *io, const char *uuid, BtIOFunc func) -{ - if (!io->listen) - return BT_IO_FAILED; - - return io->listen(io, func); -} - -BtIOReturn bt_io_shutdown(BtIO *io) -{ - io_context_cleanup(io->io_ctxt); - - return BT_IO_SUCCESS; -} diff --git a/common/glib-helper.h b/common/glib-helper.h index 087f1644..751f3a7d 100644 --- a/common/glib-helper.h +++ b/common/glib-helper.h @@ -23,8 +23,6 @@ int set_nonblocking(int fd); -typedef void (*bt_io_callback_t) (GIOChannel *io, int err, const bdaddr_t *src, - const bdaddr_t *dst, gpointer user_data); typedef void (*bt_callback_t) (sdp_list_t *recs, int err, gpointer user_data); typedef void (*bt_destroy_t) (gpointer user_data); typedef void (*bt_hci_result_t) (uint8_t status, gpointer user_data); @@ -44,58 +42,5 @@ int bt_string2uuid(uuid_t *uuid, const char *string); gchar *bt_list2string(GSList *list); GSList *bt_string2list(const gchar *str); -GIOChannel *bt_rfcomm_listen(const bdaddr_t *src, uint8_t channel, - uint32_t flags, bt_io_callback_t cb, void *user_data); -GIOChannel *bt_rfcomm_listen_allocate(const bdaddr_t *src, uint8_t *channel, - uint32_t flags, bt_io_callback_t cb, void *user_data); -int bt_rfcomm_connect(const bdaddr_t *src, const bdaddr_t *dst, - uint8_t channel, bt_io_callback_t cb, void *user_data); - -GIOChannel *bt_l2cap_listen(const bdaddr_t *src, uint16_t psm, uint16_t mtu, - uint32_t flags, bt_io_callback_t cb, void *user_data); -int bt_l2cap_connect(const bdaddr_t *src, const bdaddr_t *dst, - uint16_t psm, uint16_t mtu, bt_io_callback_t cb, - void *user_data); -int bt_sco_connect(const bdaddr_t *src, const bdaddr_t *dst, - bt_io_callback_t cb, void *user_data); -GIOChannel *bt_sco_listen(const bdaddr_t *src, uint16_t mtu, - bt_io_callback_t cb, void *user_data); - int bt_acl_encrypt(const bdaddr_t *src, const bdaddr_t *dst, bt_hci_result_t cb, gpointer user_data); - -/* Experiemental bt_io API */ - -typedef struct bt_io BtIO; - -typedef enum { - BT_IO_TRANS_AUTO, - BT_IO_TRANS_L2CAP, - BT_IO_TRANS_RFCOMM, - BT_IO_TRANS_SCO, -} BtIOTransport; - -typedef enum { - BT_IO_SUCCESS, - BT_IO_FAILED, -} BtIOReturn; - -typedef void (*BtIOFunc) (BtIO *io, BtIOReturn err, GIOChannel *chan, - gpointer user_data); - -BtIO *bt_io_create(BtIOTransport type, gpointer user_data, GDestroyNotify notify); -BtIO *bt_io_ref(BtIO *io); -void bt_io_unref(BtIO *io); -gboolean bt_io_set_source(BtIO *io, const char *address); -const char *bt_io_get_source(BtIO *io); -gboolean bt_io_set_destination(BtIO *io, const char *address); -const char *bt_io_get_destination(BtIO *io); -gboolean bt_io_set_flags(BtIO *io, guint32 flags); -guint32 bt_io_get_flags(BtIO *io); -gboolean bt_io_set_channel(BtIO *io, guint8 channel); -guint8 bt_io_get_channel(BtIO *io); -gboolean bt_io_set_psm(BtIO *io, guint16 psm); -guint16 bt_io_get_psm(BtIO *io); -gboolean bt_io_set_mtu(BtIO *io, guint16 mtu); -guint16 bt_io_get_mtu(BtIO *io); -BtIOReturn bt_io_shutdown(BtIO *io); -- cgit