|
Packit Service |
ca3877 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
Packit Service |
ca3877 |
/*
|
|
Packit Service |
ca3877 |
* soup-session-async.c
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Copyright (C) 2000-2003, Ximian, Inc.
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
ca3877 |
#include <config.h>
|
|
Packit Service |
ca3877 |
#endif
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#include "soup-session-async.h"
|
|
Packit Service |
ca3877 |
#include "soup.h"
|
|
Packit Service |
ca3877 |
#include "soup-session-private.h"
|
|
Packit Service |
ca3877 |
#include "soup-message-private.h"
|
|
Packit Service |
ca3877 |
#include "soup-message-queue.h"
|
|
Packit Service |
ca3877 |
#include "soup-misc-private.h"
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* SECTION:soup-session-async
|
|
Packit Service |
ca3877 |
* @short_description: SoupSession for asynchronous (main-loop-based) I/O
|
|
Packit Service |
ca3877 |
* (deprecated).
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* #SoupSessionAsync is an implementation of #SoupSession that uses
|
|
Packit Service |
ca3877 |
* non-blocking I/O via the glib main loop for all I/O.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Deprecated: 2.42: Use the #SoupSession class (which uses both asynchronous
|
|
Packit Service |
ca3877 |
* and synchronous I/O, depending on the API used). See the
|
|
Packit Service |
ca3877 |
* <link linkend="libsoup-session-porting">porting guide</link>.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
G_DEFINE_TYPE (SoupSessionAsync, soup_session_async, SOUP_TYPE_SESSION)
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_session_async_init (SoupSessionAsync *sa)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_session_async_new:
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Creates an asynchronous #SoupSession with the default options.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: the new session.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Deprecated: #SoupSessionAsync is deprecated; use a plain
|
|
Packit Service |
ca3877 |
* #SoupSession, created with soup_session_new(). See the
|
|
Packit Service |
ca3877 |
* linkend="libsoup-session-porting">porting guide</link>.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
SoupSession *
|
|
Packit Service |
ca3877 |
soup_session_async_new (void)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
return g_object_new (SOUP_TYPE_SESSION_ASYNC, NULL);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/**
|
|
Packit Service |
ca3877 |
* soup_session_async_new_with_options:
|
|
Packit Service |
ca3877 |
* @optname1: name of first property to set
|
|
Packit Service |
ca3877 |
* @...: value of @optname1, followed by additional property/value pairs
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Creates an asynchronous #SoupSession with the specified options.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Return value: the new session.
|
|
Packit Service |
ca3877 |
*
|
|
Packit Service |
ca3877 |
* Deprecated: #SoupSessionAsync is deprecated; use a plain
|
|
Packit Service |
ca3877 |
* #SoupSession, created with soup_session_new_with_options(). See the
|
|
Packit Service |
ca3877 |
* <link linkend="libsoup-session-porting">porting guide</link>.
|
|
Packit Service |
ca3877 |
**/
|
|
Packit Service |
ca3877 |
SoupSession *
|
|
Packit Service |
ca3877 |
soup_session_async_new_with_options (const char *optname1, ...)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
va_list ap;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
va_start (ap, optname1);
|
|
Packit Service |
ca3877 |
session = (SoupSession *)g_object_new_valist (SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
optname1, ap);
|
|
Packit Service |
ca3877 |
va_end (ap);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return session;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static guint
|
|
Packit Service |
ca3877 |
soup_session_async_send_message (SoupSession *session, SoupMessage *msg)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupMessageQueueItem *item;
|
|
Packit Service |
ca3877 |
GMainContext *async_context =
|
|
Packit Service |
ca3877 |
soup_session_get_async_context (session);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
item = soup_session_append_queue_item (session, msg, TRUE, FALSE,
|
|
Packit Service |
ca3877 |
NULL, NULL);
|
|
Packit Service |
ca3877 |
soup_session_kick_queue (session);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
while (item->state != SOUP_MESSAGE_FINISHED)
|
|
Packit Service |
ca3877 |
g_main_context_iteration (async_context, TRUE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_message_queue_item_unref (item);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return msg->status_code;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_session_async_cancel_message (SoupSession *session, SoupMessage *msg,
|
|
Packit Service |
ca3877 |
guint status_code)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupMessageQueue *queue;
|
|
Packit Service |
ca3877 |
SoupMessageQueueItem *item;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
SOUP_SESSION_CLASS (soup_session_async_parent_class)->
|
|
Packit Service |
ca3877 |
cancel_message (session, msg, status_code);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
queue = soup_session_get_queue (session);
|
|
Packit Service |
ca3877 |
item = soup_message_queue_lookup (queue, msg);
|
|
Packit Service |
ca3877 |
if (!item)
|
|
Packit Service |
ca3877 |
return;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Force it to finish immediately, so that
|
|
Packit Service |
ca3877 |
* soup_session_abort (session); g_object_unref (session);
|
|
Packit Service |
ca3877 |
* will work. (The soup_session_cancel_message() docs
|
|
Packit Service |
ca3877 |
* point out that the callback will be invoked from
|
|
Packit Service |
ca3877 |
* within the cancel call.)
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
if (soup_message_io_in_progress (msg))
|
|
Packit Service |
ca3877 |
soup_message_io_finished (msg);
|
|
Packit Service |
ca3877 |
else if (item->state != SOUP_MESSAGE_FINISHED)
|
|
Packit Service |
ca3877 |
item->state = SOUP_MESSAGE_FINISHING;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (item->state != SOUP_MESSAGE_FINISHED)
|
|
Packit Service |
ca3877 |
soup_session_process_queue_item (session, item, NULL, FALSE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_message_queue_item_unref (item);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
soup_session_async_class_init (SoupSessionAsyncClass *soup_session_async_class)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupSessionClass *session_class = SOUP_SESSION_CLASS (soup_session_async_class);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* virtual method override */
|
|
Packit Service |
ca3877 |
session_class->send_message = soup_session_async_send_message;
|
|
Packit Service |
ca3877 |
session_class->cancel_message = soup_session_async_cancel_message;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
G_GNUC_END_IGNORE_DEPRECATIONS;
|