1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* soup-session-sync.c
*
* Copyright (C) 2000-2003, Ximian, Inc.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "soup-session-sync.h"
#include "soup.h"
#include "soup-session-private.h"
#include "soup-message-private.h"
#include "soup-message-queue.h"
/**
* SECTION:soup-session-sync
* @short_description: SoupSession for blocking I/O in multithreaded programs
* (deprecated).
*
* #SoupSessionSync is an implementation of #SoupSession that uses
* synchronous I/O, intended for use in multi-threaded programs.
*
* Deprecated: 2.42: Use the #SoupSession class (which uses both asynchronous
* and synchronous I/O, depending on the API used). See the
* <link linkend="libsoup-session-porting">porting guide</link>.
**/
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
G_DEFINE_TYPE (SoupSessionSync, soup_session_sync, SOUP_TYPE_SESSION)
static void
soup_session_sync_init (SoupSessionSync *ss)
{
}
/**
* soup_session_sync_new:
*
* Creates an synchronous #SoupSession with the default options.
*
* Return value: the new session.
*
* Deprecated: #SoupSessionSync is deprecated; use a plain
* #SoupSession, created with soup_session_new(). See the <link
* linkend="libsoup-session-porting">porting guide</link>.
**/
SoupSession *
soup_session_sync_new (void)
{
return g_object_new (SOUP_TYPE_SESSION_SYNC, NULL);
}
/**
* soup_session_sync_new_with_options:
* @optname1: name of first property to set
* @...: value of @optname1, followed by additional property/value pairs
*
* Creates an synchronous #SoupSession with the specified options.
*
* Return value: the new session.
*
* Deprecated: #SoupSessionSync is deprecated; use a plain
* #SoupSession, created with soup_session_new_with_options(). See the
* <link linkend="libsoup-session-porting">porting guide</link>.
**/
SoupSession *
soup_session_sync_new_with_options (const char *optname1, ...)
{
SoupSession *session;
va_list ap;
va_start (ap, optname1);
session = (SoupSession *)g_object_new_valist (SOUP_TYPE_SESSION_SYNC,
optname1, ap);
va_end (ap);
return session;
}
static gboolean
queue_message_callback (gpointer data)
{
SoupMessageQueueItem *item = data;
item->callback (item->session, item->msg, item->callback_data);
soup_message_queue_item_unref (item);
return FALSE;
}
static gpointer
queue_message_thread (gpointer data)
{
SoupMessageQueueItem *item = data;
soup_session_process_queue_item (item->session, item, NULL, TRUE);
if (item->callback) {
soup_add_completion (soup_session_get_async_context (item->session),
queue_message_callback, item);
} else
soup_message_queue_item_unref (item);
return NULL;
}
static void
soup_session_sync_queue_message (SoupSession *session, SoupMessage *msg,
SoupSessionCallback callback, gpointer user_data)
{
SoupMessageQueueItem *item;
GThread *thread;
item = soup_session_append_queue_item (session, msg, FALSE, FALSE,
callback, user_data);
thread = g_thread_new ("SoupSessionSync:queue_message",
queue_message_thread, item);
g_thread_unref (thread);
}
static void
soup_session_sync_class_init (SoupSessionSyncClass *session_sync_class)
{
SoupSessionClass *session_class = SOUP_SESSION_CLASS (session_sync_class);
/* virtual method override */
session_class->queue_message = soup_session_sync_queue_message;
}
G_GNUC_END_IGNORE_DEPRECATIONS;
|