summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2003-06-03 20:38:38 +0000
committerDan Winship <danw@src.gnome.org>2003-06-03 20:38:38 +0000
commit0c5f03a037b5dd4d6761b86e4e4160421f056aac (patch)
tree315b5295fa37211aaadd74c41f43f2f135a517c8
parent514012912dad15272f0788c4ece31fe073f3a318 (diff)
downloadlibsoup-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--ChangeLog34
-rw-r--r--libsoup/soup-connection.c2
-rw-r--r--libsoup/soup-connection.h2
-rw-r--r--libsoup/soup-context.c63
-rw-r--r--libsoup/soup-context.h2
-rw-r--r--libsoup/soup-message.c50
-rw-r--r--libsoup/soup-message.h10
-rw-r--r--libsoup/soup-misc.c19
-rw-r--r--libsoup/soup-misc.h2
-rw-r--r--libsoup/soup-private.h6
-rw-r--r--libsoup/soup-proxy-connection.c12
-rw-r--r--libsoup/soup-proxy-connection.h4
-rw-r--r--libsoup/soup-server-cgi.c10
-rw-r--r--libsoup/soup-server-tcp.c14
-rw-r--r--tests/auth-test.c15
-rw-r--r--tests/get.c12
16 files changed, 119 insertions, 138 deletions
diff --git a/ChangeLog b/ChangeLog
index 73c94f21..d669683c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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