Пример #1
0
static void transport_func(GIOChannel *io, GError *err, gpointer user_data)
{
    struct callback_data *callback = user_data;
    struct obc_session *session = callback->session;
    struct obc_driver *driver = session->driver;
    struct obc_transport *transport = session->transport;
    GObex *obex;
    GObexTransportType type;
    int tx_mtu = -1;
    int rx_mtu = -1;

    DBG("");

    if (err != NULL) {
        error("%s", err->message);
        goto done;
    }

    g_io_channel_set_close_on_unref(io, FALSE);

    if (transport->getpacketopt &&
            transport->getpacketopt(io, &tx_mtu, &rx_mtu) == 0)
        type = G_OBEX_TRANSPORT_PACKET;
    else
        type = G_OBEX_TRANSPORT_STREAM;

    obex = g_obex_new(io, type, tx_mtu, rx_mtu);
    if (obex == NULL)
        goto done;

    g_io_channel_set_close_on_unref(io, TRUE);

    if (driver->target != NULL)
        g_obex_connect(obex, connect_cb, callback, &err,
                       G_OBEX_HDR_TARGET, driver->target, driver->target_len,
                       G_OBEX_HDR_INVALID);
    else
        g_obex_connect(obex, connect_cb, callback, &err,
                       G_OBEX_HDR_INVALID);

    if (err != NULL) {
        error("%s", err->message);
        g_obex_unref(obex);
        goto done;
    }

    session->obex = obex;
    sessions = g_slist_prepend(sessions, session);

    g_obex_set_disconnect_function(obex, session_disconnected, session);

    return;
done:
    callback->func(callback->session, NULL, err, callback->data);
    obc_session_unref(callback->session);
    g_free(callback);
}
Пример #2
0
static void transport_func(GIOChannel *io, GError *err, gpointer user_data)
{
	struct callback_data *callback = user_data;
	struct obc_session *session = callback->session;
	struct obc_driver *driver = session->driver;
	struct obc_transport *transport = session->transport;
	GObex *obex;
	GObexApparam *apparam;
	GObexTransportType type;
	int tx_mtu = -1;
	int rx_mtu = -1;

	DBG("");

	if (err != NULL) {
		error("%s", err->message);
		goto done;
	}

	g_io_channel_set_close_on_unref(io, FALSE);

	if (transport->getpacketopt &&
			transport->getpacketopt(io, &tx_mtu, &rx_mtu) == 0)
		type = G_OBEX_TRANSPORT_PACKET;
	else
		type = G_OBEX_TRANSPORT_STREAM;

	obex = g_obex_new(io, type, tx_mtu, rx_mtu);
	if (obex == NULL)
		goto done;

	g_io_channel_set_close_on_unref(io, TRUE);

	apparam = NULL;

	if (driver->supported_features)
		apparam = driver->supported_features(session);

	if (apparam) {
		uint8_t buf[1024];
		ssize_t len;

		len = g_obex_apparam_encode(apparam, buf, sizeof(buf));
		if (driver->target)
			g_obex_connect(obex, connect_cb, callback, &err,
					G_OBEX_HDR_TARGET,
					driver->target, driver->target_len,
					G_OBEX_HDR_APPARAM,
					buf, len,
					G_OBEX_HDR_INVALID);
		else
			g_obex_connect(obex, connect_cb, callback, &err,
					G_OBEX_HDR_APPARAM, buf, len,
					G_OBEX_HDR_INVALID);
		g_obex_apparam_free(apparam);
	} else if (driver->target)
		g_obex_connect(obex, connect_cb, callback, &err,
			G_OBEX_HDR_TARGET, driver->target, driver->target_len,
			G_OBEX_HDR_INVALID);
	else
		g_obex_connect(obex, connect_cb, callback, &err,
							G_OBEX_HDR_INVALID);

	if (err != NULL) {
		error("%s", err->message);
		g_obex_unref(obex);
		goto done;
	}

	session->obex = obex;
	sessions = g_slist_prepend(sessions, session);

	g_obex_set_disconnect_function(obex, session_disconnected, session);

	return;
done:
	callback_destroy(callback, err);
}
Пример #3
0
static void cmd_connect(int argc, char **argv)
{
	g_obex_connect(obex, conn_complete, NULL, NULL, G_OBEX_HDR_INVALID);
}