mirror of https://github.com/labapart/gattlib
bluez: Remove GATT server specific functions
parent
236b3f43d5
commit
f2fea05138
|
@ -74,26 +74,6 @@ struct connect {
|
|||
GSource* source;
|
||||
};
|
||||
|
||||
struct accept {
|
||||
BtIOConnect connect;
|
||||
gpointer user_data;
|
||||
GDestroyNotify destroy;
|
||||
};
|
||||
|
||||
struct server {
|
||||
BtIOConnect connect;
|
||||
BtIOConfirm confirm;
|
||||
gpointer user_data;
|
||||
GDestroyNotify destroy;
|
||||
};
|
||||
|
||||
static void server_remove(struct server *server)
|
||||
{
|
||||
if (server->destroy)
|
||||
server->destroy(server->user_data);
|
||||
g_free(server);
|
||||
}
|
||||
|
||||
static void connect_remove(struct connect *conn)
|
||||
{
|
||||
g_source_destroy(conn->source);
|
||||
|
@ -103,13 +83,6 @@ static void connect_remove(struct connect *conn)
|
|||
g_free(conn);
|
||||
}
|
||||
|
||||
static void accept_remove(struct accept *accept)
|
||||
{
|
||||
if (accept->destroy)
|
||||
accept->destroy(accept->user_data);
|
||||
g_free(accept);
|
||||
}
|
||||
|
||||
static gboolean check_nval(GIOChannel *io)
|
||||
{
|
||||
struct pollfd fds;
|
||||
|
@ -124,27 +97,6 @@ static gboolean check_nval(GIOChannel *io)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean accept_cb(GIOChannel *io, GIOCondition cond,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct accept *accept = user_data;
|
||||
GError *err = NULL;
|
||||
|
||||
/* If the user aborted this accept attempt */
|
||||
if ((cond & G_IO_NVAL) || check_nval(io))
|
||||
return FALSE;
|
||||
|
||||
if (cond & (G_IO_HUP | G_IO_ERR))
|
||||
g_set_error(&err, BT_IO_ERROR, BT_IO_ERROR_DISCONNECTED,
|
||||
"HUP or ERR on socket");
|
||||
|
||||
accept->connect(io, err, accept->user_data);
|
||||
|
||||
g_clear_error(&err);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean connect_cb(GIOChannel *io, GIOCondition cond,
|
||||
gpointer user_data)
|
||||
{
|
||||
|
@ -180,56 +132,6 @@ static gboolean connect_cb(GIOChannel *io, GIOCondition cond,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean server_cb(GIOChannel *io, GIOCondition cond,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct server *server = user_data;
|
||||
int srv_sock, cli_sock;
|
||||
GIOChannel *cli_io;
|
||||
|
||||
/* If the user closed the server */
|
||||
if ((cond & G_IO_NVAL) || check_nval(io))
|
||||
return FALSE;
|
||||
|
||||
srv_sock = g_io_channel_unix_get_fd(io);
|
||||
|
||||
cli_sock = accept(srv_sock, NULL, NULL);
|
||||
if (cli_sock < 0)
|
||||
return TRUE;
|
||||
|
||||
cli_io = g_io_channel_unix_new(cli_sock);
|
||||
|
||||
g_io_channel_set_close_on_unref(cli_io, TRUE);
|
||||
g_io_channel_set_flags(cli_io, G_IO_FLAG_NONBLOCK, NULL);
|
||||
|
||||
if (server->confirm)
|
||||
server->confirm(cli_io, server->user_data);
|
||||
else
|
||||
server->connect(cli_io, NULL, server->user_data);
|
||||
|
||||
g_io_channel_unref(cli_io);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void server_add(GIOChannel *io, BtIOConnect connect,
|
||||
BtIOConfirm confirm, gpointer user_data,
|
||||
GDestroyNotify destroy)
|
||||
{
|
||||
struct server *server;
|
||||
GIOCondition cond;
|
||||
|
||||
server = g_new0(struct server, 1);
|
||||
server->connect = connect;
|
||||
server->confirm = confirm;
|
||||
server->user_data = user_data;
|
||||
server->destroy = destroy;
|
||||
|
||||
cond = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
|
||||
g_io_add_watch_full(io, G_PRIORITY_DEFAULT, cond, server_cb, server,
|
||||
(GDestroyNotify) server_remove);
|
||||
}
|
||||
|
||||
static void connect_add(GIOChannel *io, BtIOConnect connect,
|
||||
gpointer user_data, GDestroyNotify destroy)
|
||||
{
|
||||
|
@ -246,22 +148,6 @@ static void connect_add(GIOChannel *io, BtIOConnect connect,
|
|||
(GDestroyNotify) connect_remove);
|
||||
}
|
||||
|
||||
static void accept_add(GIOChannel *io, BtIOConnect connect, gpointer user_data,
|
||||
GDestroyNotify destroy)
|
||||
{
|
||||
struct accept *accept;
|
||||
GIOCondition cond;
|
||||
|
||||
accept = g_new0(struct accept, 1);
|
||||
accept->connect = connect;
|
||||
accept->user_data = user_data;
|
||||
accept->destroy = destroy;
|
||||
|
||||
cond = G_IO_OUT | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
|
||||
g_io_add_watch_full(io, G_PRIORITY_DEFAULT, cond, accept_cb, accept,
|
||||
(GDestroyNotify) accept_remove);
|
||||
}
|
||||
|
||||
static int l2cap_bind(int sock, const bdaddr_t *src, uint16_t psm,
|
||||
uint16_t cid, GError **err)
|
||||
{
|
||||
|
@ -1189,36 +1075,6 @@ static gboolean get_valist(GIOChannel *io, BtIOType type, GError **err,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean bt_io_accept(GIOChannel *io, BtIOConnect connect, gpointer user_data,
|
||||
GDestroyNotify destroy, GError **err)
|
||||
{
|
||||
int sock;
|
||||
char c;
|
||||
struct pollfd pfd;
|
||||
|
||||
sock = g_io_channel_unix_get_fd(io);
|
||||
|
||||
memset(&pfd, 0, sizeof(pfd));
|
||||
pfd.fd = sock;
|
||||
pfd.events = POLLOUT;
|
||||
|
||||
if (poll(&pfd, 1, 0) < 0) {
|
||||
ERROR_FAILED(err, "poll", errno);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!(pfd.revents & POLLOUT)) {
|
||||
if (read(sock, &c, 1) < 0) {
|
||||
ERROR_FAILED(err, "read", errno);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
accept_add(io, connect, user_data, destroy);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean bt_io_set(GIOChannel *io, BtIOType type, GError **err,
|
||||
BtIOOption opt1, ...)
|
||||
{
|
||||
|
@ -1413,51 +1269,6 @@ GIOChannel *bt_io_connect(BtIOType type, BtIOConnect connect,
|
|||
return io;
|
||||
}
|
||||
|
||||
GIOChannel *bt_io_listen(BtIOType type, BtIOConnect connect,
|
||||
BtIOConfirm confirm, gpointer user_data,
|
||||
GDestroyNotify destroy, GError **err,
|
||||
BtIOOption opt1, ...)
|
||||
{
|
||||
GIOChannel *io;
|
||||
va_list args;
|
||||
struct set_opts opts;
|
||||
int sock;
|
||||
gboolean ret;
|
||||
|
||||
if (type == BT_IO_L2RAW) {
|
||||
g_set_error(err, BT_IO_ERROR, BT_IO_ERROR_INVALID_ARGS,
|
||||
"Server L2CAP RAW sockets not supported");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
va_start(args, opt1);
|
||||
ret = parse_set_opts(&opts, err, opt1, args);
|
||||
va_end(args);
|
||||
|
||||
if (ret == FALSE)
|
||||
return NULL;
|
||||
|
||||
io = create_io(type, TRUE, &opts, err);
|
||||
if (io == NULL)
|
||||
return NULL;
|
||||
|
||||
sock = g_io_channel_unix_get_fd(io);
|
||||
|
||||
if (confirm)
|
||||
setsockopt(sock, SOL_BLUETOOTH, BT_DEFER_SETUP, &opts.defer,
|
||||
sizeof(opts.defer));
|
||||
|
||||
if (listen(sock, 5) < 0) {
|
||||
ERROR_FAILED(err, "listen", errno);
|
||||
g_io_channel_unref(io);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
server_add(io, connect, confirm, user_data, destroy);
|
||||
|
||||
return io;
|
||||
}
|
||||
|
||||
GQuark bt_io_error_quark(void)
|
||||
{
|
||||
return g_quark_from_static_string("bt-io-error-quark");
|
||||
|
|
|
@ -84,9 +84,6 @@ typedef void (*BtIOConfirm)(GIOChannel *io, gpointer user_data);
|
|||
|
||||
typedef void (*BtIOConnect)(GIOChannel *io, GError *err, gpointer user_data);
|
||||
|
||||
gboolean bt_io_accept(GIOChannel *io, BtIOConnect connect, gpointer user_data,
|
||||
GDestroyNotify destroy, GError **err);
|
||||
|
||||
gboolean bt_io_set(GIOChannel *io, BtIOType type, GError **err,
|
||||
BtIOOption opt1, ...);
|
||||
|
||||
|
@ -97,9 +94,4 @@ GIOChannel *bt_io_connect(BtIOType type, BtIOConnect connect,
|
|||
gpointer user_data, GDestroyNotify destroy,
|
||||
GError **err, BtIOOption opt1, ...);
|
||||
|
||||
GIOChannel *bt_io_listen(BtIOType type, BtIOConnect connect,
|
||||
BtIOConfirm confirm, gpointer user_data,
|
||||
GDestroyNotify destroy, GError **err,
|
||||
BtIOOption opt1, ...);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue