diff options
| -rw-r--r-- | common/glib-helper.c | 873 | ||||
| -rw-r--r-- | common/glib-helper.h | 55 | 
2 files changed, 0 insertions, 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); | 
