diff options
author | Dan Winship <danw@src.gnome.org> | 2003-06-03 20:38:38 +0000 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2003-06-03 20:38:38 +0000 |
commit | 0c5f03a037b5dd4d6761b86e4e4160421f056aac (patch) | |
tree | 315b5295fa37211aaadd74c41f43f2f135a517c8 | |
parent | 514012912dad15272f0788c4ece31fe073f3a318 (diff) | |
download | libsoup-soup-refactoring.tar.gz |
Push SoupContext into the background in preparation for itssoup-refactoring
eventual removal.
* libsoup/soup-message.c (soup_message_new,
soup_message_new_full): Take a SoupUri instead of a SoupContext
(soup_message_set_uri): instead of set_context
(redirect_handler): Use soup_message_set_uri
(soup_message_get_context): gone
* libsoup/soup-context.c (struct _SoupContext): Move this here. No
one else needs to know.
(soup_context_get): Gone
(soup_context_from_uri): constify uri
(get_proxy): moved here from soup-misc.c and made to return a
SoupUri.
(try_create_connection): Update for that.
* libsoup/soup-private.h: Remove struct _SoupContext def
* libsoup/soup-connection.c (soup_connection_new): constify uri
* libsoup/soup-proxy-connection.c (soup_proxy_connection_new):
constify uri arguments, remove SoupContext references
* libsoup/soup-misc.c (soup_get_proxy): Gone
* libsoup/soup-server-cgi.c (run_async): Use soup_message_set_uri, etc
* libsoup/soup-server-tcp.c (read_headers_cb): Likewise
* tests/*: update soup_message_new() calls
-rw-r--r-- | ChangeLog | 34 | ||||
-rw-r--r-- | libsoup/soup-connection.c | 2 | ||||
-rw-r--r-- | libsoup/soup-connection.h | 2 | ||||
-rw-r--r-- | libsoup/soup-context.c | 63 | ||||
-rw-r--r-- | libsoup/soup-context.h | 2 | ||||
-rw-r--r-- | libsoup/soup-message.c | 50 | ||||
-rw-r--r-- | libsoup/soup-message.h | 10 | ||||
-rw-r--r-- | libsoup/soup-misc.c | 19 | ||||
-rw-r--r-- | libsoup/soup-misc.h | 2 | ||||
-rw-r--r-- | libsoup/soup-private.h | 6 | ||||
-rw-r--r-- | libsoup/soup-proxy-connection.c | 12 | ||||
-rw-r--r-- | libsoup/soup-proxy-connection.h | 4 | ||||
-rw-r--r-- | libsoup/soup-server-cgi.c | 10 | ||||
-rw-r--r-- | libsoup/soup-server-tcp.c | 14 | ||||
-rw-r--r-- | tests/auth-test.c | 15 | ||||
-rw-r--r-- | tests/get.c | 12 |
16 files changed, 119 insertions, 138 deletions
@@ -1,3 +1,37 @@ +2003-06-03 Dan Winship <danw@ximian.com> + + Push SoupContext into the background in preparation for its + eventual removal. + + * libsoup/soup-message.c (soup_message_new, + soup_message_new_full): Take a SoupUri instead of a SoupContext + (soup_message_set_uri): instead of set_context + (redirect_handler): Use soup_message_set_uri + (soup_message_get_context): gone + + * libsoup/soup-context.c (struct _SoupContext): Move this here. No + one else needs to know. + (soup_context_get): Gone + (soup_context_from_uri): constify uri + (get_proxy): moved here from soup-misc.c and made to return a + SoupUri. + (try_create_connection): Update for that. + + * libsoup/soup-private.h: Remove struct _SoupContext def + + * libsoup/soup-connection.c (soup_connection_new): constify uri + + * libsoup/soup-proxy-connection.c (soup_proxy_connection_new): + constify uri arguments, remove SoupContext references + + * libsoup/soup-misc.c (soup_get_proxy): Gone + + * libsoup/soup-server-cgi.c (run_async): Use soup_message_set_uri, etc + + * libsoup/soup-server-tcp.c (read_headers_cb): Likewise + + * tests/*: update soup_message_new() calls + 2003-05-14 Dan Winship <danw@ximian.com> * libsoup/soup-socket.c: Add a "connected" signal and use that diff --git a/libsoup/soup-connection.c b/libsoup/soup-connection.c index 59be8818..d57b0b44 100644 --- a/libsoup/soup-connection.c +++ b/libsoup/soup-connection.c @@ -149,7 +149,7 @@ connected (SoupSocket *sock, SoupKnownErrorCode status) * Return value: the new #SoupConnection. */ SoupConnection * -soup_connection_new (SoupUri *uri, SoupAuthContext *ac) +soup_connection_new (const SoupUri *uri, SoupAuthContext *ac) { SoupConnection *conn; diff --git a/libsoup/soup-connection.h b/libsoup/soup-connection.h index 53f25ee2..3290812c 100644 --- a/libsoup/soup-connection.h +++ b/libsoup/soup-connection.h @@ -33,7 +33,7 @@ struct _SoupConnectionClass { GType soup_connection_get_type (void); -SoupConnection *soup_connection_new (SoupUri *uri, +SoupConnection *soup_connection_new (const SoupUri *uri, SoupAuthContext *ac); GIOChannel *soup_connection_get_iochannel (SoupConnection *conn); diff --git a/libsoup/soup-context.c b/libsoup/soup-context.c index c5afec61..1235525e 100644 --- a/libsoup/soup-context.c +++ b/libsoup/soup-context.c @@ -33,34 +33,13 @@ #include "soup-ssl.h" #include "soup-www-auth-context.h" -GHashTable *soup_hosts; /* KEY, VALUE: SoupHost */ - -/** - * soup_context_get: - * @uri: the stringified URI. - * - * Returns a pointer to the %SoupContext representing @uri. If a context - * already exists for the URI, it is returned with an added reference. - * Otherwise, a new context is created with a reference count of one. - * - * Return value: a %SoupContext representing @uri. - */ -SoupContext * -soup_context_get (const gchar *uri) -{ - SoupUri *suri; - SoupContext *con; - - g_return_val_if_fail (uri != NULL, NULL); - - suri = soup_uri_new (uri); - if (!suri) return NULL; - - con = soup_context_from_uri (suri); - soup_uri_free (suri); +struct _SoupContext { + SoupUri *uri; + SoupHost *server; + guint refcnt; +}; - return con; -} +GHashTable *soup_hosts; /* KEY, VALUE: SoupHost */ /** * soup_context_uri_hash: @@ -163,7 +142,7 @@ authenticate (SoupAuthContext *ac, SoupAuth *auth, SoupMessage *msg) * Return value: a %SoupContext representing @uri. */ SoupContext * -soup_context_from_uri (SoupUri *suri) +soup_context_from_uri (const SoupUri *suri) { SoupHost *serv = NULL; SoupContext *ret; @@ -348,21 +327,39 @@ try_existing_connections (SoupContext *ctx, return FALSE; } +static const SoupUri * +get_proxy (void) +{ + static SoupUri *proxy = NULL; + static gboolean inited = FALSE; + + if (!inited) { + char *proxy_string; + + proxy_string = getenv ("SOUP_PROXY"); + if (proxy_string) + proxy = soup_uri_new (proxy_string); + inited = TRUE; + } + + return proxy; +} + static gboolean try_create_connection (struct SoupContextConnectData *data) { SoupContext *ctx = data->ctx; - SoupContext *proxy; + const SoupUri *proxy_uri; data->timeout_tag = 0; - proxy = soup_get_proxy (); - if (proxy) { + proxy_uri = get_proxy (); + if (proxy_uri) { data->connection = soup_proxy_connection_new (ctx->uri, ctx->server->ac, - proxy->uri, - proxy->server->ac); + proxy_uri, + NULL); } else { data->connection = soup_connection_new (ctx->uri, ctx->server->ac); diff --git a/libsoup/soup-context.h b/libsoup/soup-context.h index 5e1b57fb..12f7a882 100644 --- a/libsoup/soup-context.h +++ b/libsoup/soup-context.h @@ -22,7 +22,7 @@ typedef void (*SoupContextConnectFn) (SoupContext *ctx, SoupContext *soup_context_get (const char *uri); -SoupContext *soup_context_from_uri (SoupUri *suri); +SoupContext *soup_context_from_uri (const SoupUri *suri); void soup_context_ref (SoupContext *ctx); diff --git a/libsoup/soup-message.c b/libsoup/soup-message.c index dd307e4e..b9afc7a3 100644 --- a/libsoup/soup-message.c +++ b/libsoup/soup-message.c @@ -84,41 +84,39 @@ SOUP_MAKE_TYPE (soup_message, SoupMessage, class_init, init, PARENT_TYPE) /** * soup_message_new: - * @context: a #SoupContext for the destination endpoint. + * @uri: a #SoupUri for the destination endpoint. * @method: a (static) string which will be used as the HTTP method * for the created request * - * Creates a new empty #SoupMessage, which will connect to the URL - * represented by @context. A reference will be added to @context. + * Creates a new empty #SoupMessage, which will connect to @uri * * The new message has a status of %SOUP_STATUS_IDLE. * * Return value: the new #SoupMessage. */ SoupMessage * -soup_message_new (SoupContext *context, const char *method) +soup_message_new (const SoupUri *uri, const char *method) { SoupMessage *msg; msg = g_object_new (SOUP_TYPE_MESSAGE, NULL); msg->method = method; - soup_message_set_context (msg, context); + soup_message_set_uri (msg, uri); return msg; } /** * soup_message_new_full: - * @context: a #SoupContext for the destination endpoint. + * @uri: a #SoupUri for the destination endpoint. * @method: a string which will be used as the HTTP method for the * created request * @req_owner: the #SoupOwnership of the passed data buffer. * @req_body: a data buffer containing the body of the message request. * @req_length: the byte length of @req_body. * - * Creates a new #SoupMessage, which will connect to the URL - * represented by @context. A reference is added to @context. The + * Creates a new #SoupMessage, which will connect to @uri. The * request data buffer will be filled from @req_owner, @req_body, and * @req_length respectively. * @@ -127,13 +125,13 @@ soup_message_new (SoupContext *context, const char *method) * Return value: the new #SoupMessage. */ SoupMessage * -soup_message_new_full (SoupContext *context, +soup_message_new_full (const SoupUri *uri, const char *method, SoupOwnership req_owner, char *req_body, gulong req_length) { - SoupMessage *msg = soup_message_new (context, method); + SoupMessage *msg = soup_message_new (uri, method); msg->request.owner = req_owner; msg->request.body = req_body; @@ -495,7 +493,6 @@ redirect_handler (SoupMessage *msg, gpointer user_data) if (new_loc) { const SoupUri *old_uri; SoupUri *new_uri; - SoupContext *new_ctx; old_uri = soup_message_get_uri (msg); @@ -512,16 +509,10 @@ redirect_handler (SoupMessage *msg, gpointer user_data) old_uri->passwd, old_uri->authmech); - new_ctx = soup_context_from_uri (new_uri); + soup_message_set_uri (msg, new_uri); soup_uri_free (new_uri); - if (!new_ctx) - goto INVALID_REDIRECT; - - soup_message_set_context (msg, new_ctx); - soup_context_unref (new_ctx); - soup_message_requeue (msg); } @@ -817,29 +808,18 @@ soup_message_get_http_version (SoupMessage *msg) } void -soup_message_set_context (SoupMessage *msg, - SoupContext *new_ctx) +soup_message_set_uri (SoupMessage *msg, + const SoupUri *new_uri) { g_return_if_fail (SOUP_IS_MESSAGE (msg)); if (msg->priv->context) soup_context_unref (msg->priv->context); - if (new_ctx) - soup_context_ref (new_ctx); - - msg->priv->context = new_ctx; -} - -SoupContext * -soup_message_get_context (SoupMessage *msg) -{ - g_return_val_if_fail (SOUP_IS_MESSAGE (msg), NULL); - - if (msg->priv->context) - soup_context_ref (msg->priv->context); - - return msg->priv->context; + if (new_uri) + msg->priv->context = soup_context_from_uri (new_uri); + else + msg->priv->context = NULL; } const SoupUri * diff --git a/libsoup/soup-message.h b/libsoup/soup-message.h index cfe10da7..cb35c9ad 100644 --- a/libsoup/soup-message.h +++ b/libsoup/soup-message.h @@ -77,10 +77,10 @@ GType soup_message_get_type (void); typedef void (*SoupCallbackFn) (SoupMessage *req, gpointer user_data); -SoupMessage *soup_message_new (SoupContext *context, +SoupMessage *soup_message_new (const SoupUri *uri, const char *method); -SoupMessage *soup_message_new_full (SoupContext *context, +SoupMessage *soup_message_new_full (const SoupUri *uri, const char *method, SoupOwnership req_owner, char *req_body, @@ -130,10 +130,8 @@ void soup_message_set_http_version (SoupMessage *msg, SoupHttpVersion soup_message_get_http_version (SoupMessage *msg); -void soup_message_set_context (SoupMessage *msg, - SoupContext *new_ctx); - -SoupContext *soup_message_get_context (SoupMessage *msg); +void soup_message_set_uri (SoupMessage *msg, + const SoupUri *uri); const SoupUri *soup_message_get_uri (SoupMessage *msg); diff --git a/libsoup/soup-misc.c b/libsoup/soup-misc.c index ed116460..421b3c82 100644 --- a/libsoup/soup-misc.c +++ b/libsoup/soup-misc.c @@ -19,25 +19,6 @@ gboolean soup_initialized = FALSE; -/* This is just here so that stuff that currently calls soup_get_proxy - * doesn't need to be changed, so that as that code is being moved, I - * remember where to think about proxy stuff. - */ -SoupContext * -soup_get_proxy (void) -{ - static SoupContext *proxy_ctx; - static gboolean inited; - - if (!inited) { - if (getenv ("SOUP_PROXY")) - proxy_ctx = soup_context_get (getenv ("SOUP_PROXY")); - inited = TRUE; - } - - return proxy_ctx; -} - guint soup_str_case_hash (gconstpointer key) { diff --git a/libsoup/soup-misc.h b/libsoup/soup-misc.h index 42797638..ef55275a 100644 --- a/libsoup/soup-misc.h +++ b/libsoup/soup-misc.h @@ -21,8 +21,6 @@ void soup_load_config (gchar *config_file); void soup_shutdown (void); -SoupContext *soup_get_proxy (void); - /* SSL setup routines */ void soup_set_ssl_ca_file (const gchar *ca_file); diff --git a/libsoup/soup-private.h b/libsoup/soup-private.h index 4dbe7640..b9ffd557 100644 --- a/libsoup/soup-private.h +++ b/libsoup/soup-private.h @@ -55,12 +55,6 @@ typedef struct { #define soup_sockaddr_max sockaddr_in #endif -struct _SoupContext { - SoupUri *uri; - SoupHost *server; - guint refcnt; -}; - struct _SoupMessagePrivate { SoupContext *context; diff --git a/libsoup/soup-proxy-connection.c b/libsoup/soup-proxy-connection.c index 645443ca..97e5e465 100644 --- a/libsoup/soup-proxy-connection.c +++ b/libsoup/soup-proxy-connection.c @@ -109,8 +109,10 @@ set_property (GObject *object, guint prop_id, SoupConnection * -soup_proxy_connection_new (SoupUri *origin_server, SoupAuthContext *origin_ac, - SoupUri *proxy_server, SoupAuthContext *proxy_ac) +soup_proxy_connection_new (const SoupUri *origin_server, + SoupAuthContext *origin_ac, + const SoupUri *proxy_server, + SoupAuthContext *proxy_ac) { SoupProxyConnection *pconn; @@ -156,7 +158,6 @@ connected (SoupSocket *sock, SoupKnownErrorCode err) { SoupProxyConnection *pconn = SOUP_PROXY_CONNECTION (sock); SoupConnection *conn = SOUP_CONNECTION (sock); - SoupContext *ctx; SoupMessage *connect_msg; /* Let the signal through if it's an error, or we don't need @@ -170,9 +171,8 @@ connected (SoupSocket *sock, SoupKnownErrorCode err) g_signal_stop_emission_by_name (sock, "connected"); /* Handle HTTPS tunnel setup via proxy CONNECT request. */ - ctx = soup_context_from_uri (pconn->priv->tunnel_dest); - connect_msg = soup_message_new (ctx, SOUP_METHOD_CONNECT); - soup_context_unref (ctx); + connect_msg = soup_message_new (pconn->priv->tunnel_dest, + SOUP_METHOD_CONNECT); connect_msg->connection = conn; soup_message_queue (connect_msg, connect_cb, conn); } diff --git a/libsoup/soup-proxy-connection.h b/libsoup/soup-proxy-connection.h index 92ee54cb..44b1f9ac 100644 --- a/libsoup/soup-proxy-connection.h +++ b/libsoup/soup-proxy-connection.h @@ -27,9 +27,9 @@ struct _SoupProxyConnectionClass { GType soup_proxy_connection_get_type (void); -SoupConnection *soup_proxy_connection_new (SoupUri *origin_server, +SoupConnection *soup_proxy_connection_new (const SoupUri *origin_server, SoupAuthContext *origin_ac, - SoupUri *proxy_server, + const SoupUri *proxy_server, SoupAuthContext *proxy_ac); #endif /* SOUP_PROXY_CONNECTION_H */ diff --git a/libsoup/soup-server-cgi.c b/libsoup/soup-server-cgi.c index 73f8f156..3565c994 100644 --- a/libsoup/soup-server-cgi.c +++ b/libsoup/soup-server-cgi.c @@ -147,7 +147,7 @@ run_async (SoupServer *serv) { SoupServerCGI *cgi = SOUP_SERVER_CGI (serv); SoupMessage *msg; - SoupContext *ctx; + SoupUri *uri; const char *length, *proto, *host, *https; int i; char *url; @@ -180,17 +180,17 @@ run_async (SoupServer *serv) getenv ("SERVER_PORT"), getenv ("REQUEST_URI"), NULL); - ctx = soup_context_get (url); + uri = soup_uri_new (url); g_free (url); - if (!ctx) { + if (!uri) { soup_server_quit (serv); g_object_unref (msg); return; } - soup_message_set_context (msg, ctx); - soup_context_unref (ctx); + soup_message_set_uri (msg, uri); + soup_uri_free (uri); /* Load request headers from environment. Header environment * variables are of the form "HTTP_<NAME>=<VALUE>" diff --git a/libsoup/soup-server-tcp.c b/libsoup/soup-server-tcp.c index 7bec72be..93085504 100644 --- a/libsoup/soup-server-tcp.c +++ b/libsoup/soup-server-tcp.c @@ -202,7 +202,7 @@ read_headers_cb (const GString *headers, { SoupServerTCPConnection *sconn = user_data; SoupMessage *msg = sconn->msg; - SoupContext *ctx; + SoupUri *uri; char *req_path = NULL; const char *length, *enc; @@ -239,10 +239,10 @@ read_headers_cb (const GString *headers, /* Generate correct context for request */ if (*req_path != '/') { - /* Should be an absolute URI. (If not, soup_context_get + /* Should be an absolute URI. (If not, soup_uri_new * will fail and return NULL. */ - ctx = soup_context_get (req_path); + uri = soup_uri_new (req_path); } else { SoupServerTCP *tcp = SOUP_SERVER_TCP (sconn->serv); const char *req_host; @@ -261,14 +261,14 @@ read_headers_cb (const GString *headers, req_host, tcp->priv->port, req_path); - ctx = soup_context_get (url); + uri = soup_uri_new (url); g_free (url); } - if (!ctx) + if (!uri) goto THROW_MALFORMED_HEADER; - soup_message_set_context (msg, ctx); - soup_context_unref (ctx); + soup_message_set_uri (msg, uri); + soup_uri_free (uri); g_free (req_path); diff --git a/tests/auth-test.c b/tests/auth-test.c index e0d18fd9..b184397e 100644 --- a/tests/auth-test.c +++ b/tests/auth-test.c @@ -174,7 +174,7 @@ handler (SoupMessage *msg, gpointer data) int main (int argc, char **argv) { - SoupContext *ctx; + SoupUri *uri; SoupMessage *msg; char *expected; int i; @@ -185,13 +185,13 @@ main (int argc, char **argv) printf ("Test %d: %s\n", i + 1, tests[i].explanation); printf (" GET %s\n", tests[i].url); - ctx = soup_context_get (tests[i].url); - if (!ctx) { + uri = soup_uri_new (tests[i].url); + if (!uri) { fprintf (stderr, "auth-test: Could not parse URI\n"); exit (1); } - msg = soup_message_new (ctx, SOUP_METHOD_GET); + msg = soup_message_new (uri, SOUP_METHOD_GET); expected = g_strdup (tests[i].expected); soup_message_add_error_code_handler ( @@ -222,10 +222,9 @@ main (int argc, char **argv) printf ("\n"); - g_object_unref (msg); - /* We don't free ctx because if we did, we'd end up - * discarding the cached auth info at the end of each - * test. + /* We don't free msg because if we did, we'd end up + * freeing its SoupContext and therefore the SoupContext's + * SoupAuthContext. */ } diff --git a/tests/get.c b/tests/get.c index 5ea864df..e4760144 100644 --- a/tests/get.c +++ b/tests/get.c @@ -147,7 +147,7 @@ static void get_url (const char *url) { char *url_to_get, *slash, *name; - SoupContext *ctx; + SoupUri *uri; SoupMessage *msg; int fd; @@ -176,14 +176,14 @@ get_url (const char *url) close (fd); } - ctx = soup_context_get (url_to_get); - msg = soup_message_new (ctx, SOUP_METHOD_GET); + uri = soup_uri_new (url_to_get); + g_free (url_to_get); + + msg = soup_message_new (uri, SOUP_METHOD_GET); soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT); pending++; - soup_message_queue (msg, got_url, soup_uri_new (url)); - soup_context_unref (ctx); - g_free (url_to_get); + soup_message_queue (msg, got_url, uri); } static void |