Esempio n. 1
0
guint obc_session_queue(struct obc_session *session,
				struct obc_transfer *transfer,
				session_callback_t func, void *user_data,
				GError **err)
{
	struct pending_request *p;

	if (session->obex == NULL) {
		obc_transfer_unregister(transfer);
		g_set_error(err, OBEX_IO_ERROR, -ENOTCONN,
						"Session not connected");
		return 0;
	}

	if (!obc_transfer_register(transfer, session->conn, session->owner,
									err)) {
		obc_transfer_unregister(transfer);
		return 0;
	}

	obc_transfer_set_callback(transfer, transfer_complete, session);

	p = pending_request_new(session, transfer, func, user_data);
	g_queue_push_tail(session->queue, p);

	if (session->queue_complete_id == 0)
		session->queue_complete_id = g_idle_add(
					session_queue_complete, session);

	return p->id;
}
Esempio n. 2
0
static void pending_request_free(struct pending_request *p)
{
	if (p->transfer)
		obc_transfer_unregister(p->transfer);

	if (p->session)
		obc_session_unref(p->session);

	g_free(p);
}
Esempio n. 3
0
static void pending_request_free(struct pending_request *p)
{
	if (p->req_id > 0)
		g_obex_cancel_req(p->session->obex, p->req_id, TRUE);

	if (p->destroy)
		p->destroy(p->data);

	if (p->transfer)
		obc_transfer_unregister(p->transfer);

	if (p->session)
		obc_session_unref(p->session);

	g_free(p);
}
Esempio n. 4
0
File: pbap.c Progetto: Sork007/obexd
static void pull_vcard_listing_callback(struct obc_session *session,
					GError *err, void *user_data)
{
	struct obc_transfer *transfer = obc_session_get_transfer(session);
	struct pbap_data *pbap = user_data;
	GMarkupParseContext *ctxt;
	DBusMessage *reply;
	DBusMessageIter iter, array;
	const char *buf;
	int size;

	if (pbap->msg == NULL)
		goto complete;

	if (err) {
		reply = g_dbus_create_error(pbap->msg,
						"org.openobex.Error.Failed",
						"%s", err->message);
		goto send;
	}

	reply = dbus_message_new_method_return(pbap->msg);

	buf = obc_transfer_get_buffer(transfer, &size);
	if (size == 0)
		buf = "";

	dbus_message_iter_init_append(reply, &iter);
	dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
			DBUS_STRUCT_BEGIN_CHAR_AS_STRING
			DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_STRING_AS_STRING
			DBUS_STRUCT_END_CHAR_AS_STRING, &array);
	ctxt = g_markup_parse_context_new(&listing_parser, 0, &array, NULL);
	g_markup_parse_context_parse(ctxt, buf, strlen(buf) - 1, NULL);
	g_markup_parse_context_free(ctxt);
	dbus_message_iter_close_container(&iter, &array);

	obc_transfer_clear_buffer(transfer);

send:
	g_dbus_send_message(conn, reply);
	dbus_message_unref(pbap->msg);
	pbap->msg = NULL;
complete:
	obc_transfer_unregister(transfer);
}
Esempio n. 5
0
static void session_terminate_transfer(struct obc_session *session,
					struct obc_transfer *transfer,
					GError *gerr)
{
	struct session_callback *callback = session->callback;

	if (callback) {
		callback->func(session, gerr, callback->data);
		return;
	}

	obc_session_ref(session);

	obc_transfer_unregister(transfer);

	if (session->pending)
		session_request(session, session_prepare_put,
				session->pending->data);

	obc_session_unref(session);
}
Esempio n. 6
0
File: pbap.c Progetto: Sork007/obexd
static void pull_phonebook_callback(struct obc_session *session,
					GError *err, void *user_data)
{
	struct obc_transfer *transfer = obc_session_get_transfer(session);
	struct pbap_data *pbap = user_data;
	DBusMessage *reply;
	const char *buf;
	int size;

	if (pbap->msg == NULL)
		goto done;

	if (err) {
		reply = g_dbus_create_error(pbap->msg,
						"org.openobex.Error.Failed",
						"%s", err->message);
		goto send;
	}

	reply = dbus_message_new_method_return(pbap->msg);

	buf = obc_transfer_get_buffer(transfer, &size);
	if (size == 0)
		buf = "";

	dbus_message_append_args(reply,
			DBUS_TYPE_STRING, &buf,
			DBUS_TYPE_INVALID);

	obc_transfer_clear_buffer(transfer);

send:
	g_dbus_send_message(conn, reply);
	dbus_message_unref(pbap->msg);
	pbap->msg = NULL;

done:
	obc_transfer_unregister(transfer);
}
Esempio n. 7
0
File: pbap.c Progetto: Sork007/obexd
static void phonebook_size_callback(struct obc_session *session,
					GError *err, void *user_data)
{
	struct obc_transfer *transfer = obc_session_get_transfer(session);
	struct pbap_data *pbap = user_data;
	DBusMessage *reply;
	guint16 phone_book_size;
	guint8 new_missed_calls;

	if (pbap->msg == NULL)
		goto done;

	if (err) {
		reply = g_dbus_create_error(pbap->msg,
						"org.openobex.Error.Failed",
						"%s", err->message);
		goto send;
	}

	reply = dbus_message_new_method_return(pbap->msg);

	read_return_apparam(session, &phone_book_size, &new_missed_calls);

	dbus_message_append_args(reply,
			DBUS_TYPE_UINT16, &phone_book_size,
			DBUS_TYPE_INVALID);

	obc_transfer_clear_buffer(transfer);

send:
	g_dbus_send_message(conn, reply);
	dbus_message_unref(pbap->msg);
	pbap->msg = NULL;

done:
	obc_transfer_unregister(transfer);
}