~ubuntu-branches/ubuntu/edgy/libsoup/edgy-updates

« back to all changes in this revision

Viewing changes to libsoup/soup-connection.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2006-03-11 15:53:09 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20060311155309-4ei0gqzv59bqlk04
Tags: 2.2.91-1ubuntu1
* Sync with Debian
* debian/patches/02_xmlrpc_pointer.patch,
  debian/patches/03_xmlrpc_array.patch:
  - patches for the xmlrpc code

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
        gpointer     ssl_creds;
42
42
 
43
43
        SoupMessageFilter *filter;
 
44
        GMainContext      *async_context;
44
45
 
45
46
        SoupMessage *cur_req;
46
47
        time_t       last_used;
47
48
        gboolean     connected, in_use;
 
49
        guint        timeout;
48
50
} SoupConnectionPrivate;
49
51
#define SOUP_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SOUP_TYPE_CONNECTION, SoupConnectionPrivate))
50
52
 
67
69
        PROP_PROXY_URI,
68
70
        PROP_SSL_CREDS,
69
71
        PROP_MESSAGE_FILTER,
 
72
        PROP_ASYNC_CONTEXT,
 
73
        PROP_TIMEOUT,
70
74
 
71
75
        LAST_PROP
72
76
};
82
86
static void
83
87
soup_connection_init (SoupConnection *conn)
84
88
{
 
89
        SoupConnectionPrivate *priv = SOUP_CONNECTION_GET_PRIVATE (conn);
 
90
        priv->timeout = 0;
85
91
}
86
92
 
87
93
static void
96
102
 
97
103
        if (priv->filter)
98
104
                g_object_unref (priv->filter);
 
105
        if (priv->async_context)
 
106
                g_main_context_unref (priv->async_context);
99
107
 
100
108
        G_OBJECT_CLASS (soup_connection_parent_class)->finalize (object);
101
109
}
244
252
                                      "Message filter",
245
253
                                      "Message filter object for this connection",
246
254
                                      G_PARAM_READWRITE));
 
255
        g_object_class_install_property (
 
256
                object_class, PROP_ASYNC_CONTEXT,
 
257
                g_param_spec_pointer (SOUP_CONNECTION_ASYNC_CONTEXT,
 
258
                                      "Async GMainContext",
 
259
                                      "GMainContext to dispatch this connection's async I/O in",
 
260
                                      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
261
        g_object_class_install_property (
 
262
                object_class, PROP_TIMEOUT,
 
263
                g_param_spec_uint (SOUP_CONNECTION_TIMEOUT,
 
264
                                   "Timeout value",
 
265
                                   "Value in seconds to timeout a blocking I/O",
 
266
                                   0, G_MAXUINT, 0,
 
267
                                   G_PARAM_READWRITE));
247
268
}
248
269
 
249
270
 
304
325
                priv->ssl_creds = g_value_get_pointer (value);
305
326
                break;
306
327
        case PROP_MESSAGE_FILTER:
307
 
                priv->filter = g_object_ref (g_value_get_pointer (value));
 
328
                if (priv->filter)
 
329
                        g_object_unref (priv->filter);
 
330
                priv->filter = g_value_get_pointer (value);
 
331
                if (priv->filter)
 
332
                        g_object_ref (priv->filter);
 
333
                break;
 
334
        case PROP_ASYNC_CONTEXT:
 
335
                priv->async_context = g_value_get_pointer (value);
 
336
                if (priv->async_context)
 
337
                        g_main_context_ref (priv->async_context);
 
338
                break;
 
339
        case PROP_TIMEOUT:
 
340
                priv->timeout = g_value_get_uint (value);
308
341
                break;
309
342
        default:
310
343
                break;
331
364
                g_value_set_pointer (value, priv->ssl_creds);
332
365
                break;
333
366
        case PROP_MESSAGE_FILTER:
334
 
                g_value_set_pointer (value, g_object_ref (priv->filter));
 
367
                g_value_set_pointer (value, priv->filter ? g_object_ref (priv->filter) : NULL);
 
368
                break;
 
369
        case PROP_ASYNC_CONTEXT:
 
370
                g_value_set_pointer (value, priv->async_context ? g_main_context_ref (priv->async_context) : NULL);
 
371
                break;
 
372
        case PROP_TIMEOUT:
 
373
                g_value_set_uint (value, priv->timeout);
335
374
                break;
336
375
        default:
337
376
                break;
513
552
        }
514
553
 
515
554
        priv->socket =
516
 
                soup_socket_client_new_async (priv->conn_uri->host,
517
 
                                              priv->conn_uri->port,
518
 
                                              priv->ssl_creds,
519
 
                                              socket_connect_result, conn);
 
555
                soup_socket_new (SOUP_SOCKET_SSL_CREDENTIALS, priv->ssl_creds,
 
556
                                 SOUP_SOCKET_ASYNC_CONTEXT, priv->async_context,
 
557
                                 NULL);
 
558
        soup_socket_connect (priv->socket, soup_address_new (priv->conn_uri->host,
 
559
                                                             priv->conn_uri->port));
 
560
        soup_signal_connect_once (priv->socket, "connect_result",
 
561
                                  G_CALLBACK (socket_connect_result), conn);
520
562
        g_signal_connect (priv->socket, "disconnected",
521
563
                          G_CALLBACK (socket_disconnected), conn);
522
564
}
533
575
soup_connection_connect_sync (SoupConnection *conn)
534
576
{
535
577
        SoupConnectionPrivate *priv;
 
578
        SoupAddress* addr;
536
579
        guint status;
537
580
 
538
581
        g_return_val_if_fail (SOUP_IS_CONNECTION (conn), SOUP_STATUS_MALFORMED);
540
583
        g_return_val_if_fail (priv->socket == NULL, SOUP_STATUS_MALFORMED);
541
584
 
542
585
        priv->socket =
543
 
                soup_socket_client_new_sync (priv->conn_uri->host,
544
 
                                             priv->conn_uri->port,
545
 
                                             priv->ssl_creds,
546
 
                                             &status);
 
586
                soup_socket_new (SOUP_SOCKET_SSL_CREDENTIALS, priv->ssl_creds,
 
587
                                 SOUP_SOCKET_FLAG_NONBLOCKING, FALSE,
 
588
                                 SOUP_SOCKET_TIMEOUT, priv->timeout,
 
589
                                 NULL);
 
590
 
 
591
        addr = soup_address_new (priv->conn_uri->host,
 
592
                                 priv->conn_uri->port);
 
593
 
 
594
        status = soup_socket_connect (priv->socket, addr);
 
595
        g_object_unref (addr);
547
596
 
548
597
        if (!SOUP_STATUS_IS_SUCCESSFUL (status))
549
598
                goto fail;
550
599
 
 
600
                
551
601
        g_signal_connect (priv->socket, "disconnected",
552
602
                          G_CALLBACK (socket_disconnected), conn);
553
603