Ejemplo n.º 1
0
void connman_agent_cancel(void *user_context)
{
	GList *item, *next;
	struct connman_agent *queued_req;
	int err;

	DBG("context %p", user_context);

	item = agent_queue;

	while (item != NULL) {
		next = g_list_next(item);
		queued_req = item->data;

		if (queued_req->user_context == user_context ||
							user_context == NULL) {
			agent_data_free(queued_req);
			agent_queue = g_list_delete_link(agent_queue, item);
		}

		item = next;
	}

	if (agent_request == NULL)
		return;

	if (agent_request->user_context != user_context &&
						user_context != NULL)
		return;

	agent_send_cancel(agent_request);

	agent_data_free(agent_request);
	agent_request = NULL;

	err = agent_send_next_request();
	if (err < 0)
		DBG("send next request failed (%s/%d)", strerror(-err), -err);
}
Ejemplo n.º 2
0
int connman_agent_queue_message(void *user_context,
				DBusMessage *msg, int timeout,
				agent_queue_cb callback, void *user_data,
				void *agent_data)
{
	struct connman_agent_request *queue_data;
	struct connman_agent_driver *driver;
	struct connman_agent *agent = agent_data;
	int err;

	if (!user_context || !callback)
		return -EBADMSG;

	queue_data = g_new0(struct connman_agent_request, 1);
	if (!queue_data)
		return -ENOMEM;

	driver = get_driver();
	DBG("driver %p", driver);

	if (driver && driver->context_ref) {
		queue_data->user_context = driver->context_ref(user_context);
		queue_data->driver = driver;
	} else
		queue_data->user_context = user_context;

	queue_data->msg = dbus_message_ref(msg);
	queue_data->timeout = timeout;
	queue_data->callback = callback;
	queue_data->user_data = user_data;
	agent->queue = g_list_append(agent->queue, queue_data);

	err = agent_send_next_request(agent);
	if (err < 0 && err != -EBUSY)
		DBG("send next request failed (%s/%d)", strerror(-err), -err);

	return err;
}