Пример #1
0
int bnep_connect(struct bnep *session, bnep_connect_cb conn_cb, void *data)
{
	GError *gerr = NULL;
	int err;

	if (!session || !conn_cb)
		return -EINVAL;

	session->attempts = 0;
	session->conn_cb = conn_cb;
	session->conn_data = data;

	bt_io_get(session->io, &gerr, BT_IO_OPT_DEST_BDADDR, &session->dst_addr,
							BT_IO_OPT_INVALID);
	if (gerr) {
		error("%s", gerr->message);
		g_error_free(gerr);
		return -EINVAL;
	}

	err = bnep_setup_conn_req(session);
	if (err < 0)
		return err;

	session->setup_to = g_timeout_add_seconds(CON_SETUP_TO,
						bnep_conn_req_to, session);
	return 0;
}
Пример #2
0
int bnep_connect(int sk, uint16_t src, uint16_t dst, bnep_connect_cb conn_cb,
								void *data)
{
	struct bnep_conn *bc;
	int err;

	if (!conn_cb)
		return -EINVAL;

	bc = g_new0(struct bnep_conn, 1);
	bc->io = g_io_channel_unix_new(sk);
	bc->attempts = 0;
	bc->src = src;
	bc->dst = dst;
	bc->conn_cb = conn_cb;
	bc->data = data;

	err = bnep_setup_conn_req(bc);
	if (err < 0)
		return err;

	bc->setup_to = g_timeout_add_seconds(CON_SETUP_TO,
							bnep_conn_req_to, bc);
	g_io_add_watch(bc->io, G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
							bnep_setup_cb, bc);
	return 0;
}
Пример #3
0
static gboolean bnep_conn_req_to(gpointer user_data)
{
	struct bnep *session = user_data;

	if (session->attempts == CON_SETUP_RETRIES) {
		error("Too many bnep connection attempts");
	} else {
		error("bnep connection setup TO, retrying...");
		if (bnep_setup_conn_req(session) == 0)
			return TRUE;
	}

	session->conn_cb(NULL, -ETIMEDOUT, session->conn_data);

	return FALSE;
}
Пример #4
0
static gboolean bnep_conn_req_to(gpointer user_data)
{
	struct bnep_conn *bc = user_data;

	if (bc->attempts == CON_SETUP_RETRIES) {
		error("Too many bnep connection attempts");
	} else {
		error("bnep connection setup TO, retrying...");
		if (bnep_setup_conn_req(bc) == 0)
			return TRUE;
	}

	bc->conn_cb(NULL, NULL, -ETIMEDOUT, bc->data);
	free_bnep_connect(bc);

	return FALSE;
}