diff options
| author | Dan Winship <danw@src.gnome.org> | 2007-11-29 19:54:37 +0000 |
|---|---|---|
| committer | Dan Winship <danw@src.gnome.org> | 2007-11-29 19:54:37 +0000 |
| commit | 0eb4ce925a419aa89162c03c0ad19c8bf9faf477 (patch) | |
| tree | e3e49dbacbb81b77b53f61f48a6743a9ce01796c | |
| parent | 00f1a99a5063795f83263ab4fa63f33f1a3b153f (diff) | |
| download | libsoup-0eb4ce925a419aa89162c03c0ad19c8bf9faf477.tar.gz | |
use GObject properties for SoupMessage fields.
* libsoup/soup-message.c: use GObject properties for SoupMessage
fields.
* libsoup/soup-message-server-io.c:
* libsoup/soup-soap-message.c:
* libsoup/soup-xmlrpc-message.c: update for that
svn path=/branches/libsoup-bindings/; revision=965
| -rw-r--r-- | ChangeLog | 9 | ||||
| -rw-r--r-- | libsoup/soup-message-server-io.c | 4 | ||||
| -rw-r--r-- | libsoup/soup-message.c | 149 | ||||
| -rw-r--r-- | libsoup/soup-message.h | 7 | ||||
| -rw-r--r-- | libsoup/soup-soap-message.c | 8 | ||||
| -rw-r--r-- | libsoup/soup-xmlrpc-message.c | 11 |
6 files changed, 165 insertions, 23 deletions
@@ -1,5 +1,14 @@ 2007-11-29 Dan Winship <danw@gnome.org> + * libsoup/soup-message.c: use GObject properties for SoupMessage + fields. + + * libsoup/soup-message-server-io.c: + * libsoup/soup-soap-message.c: + * libsoup/soup-xmlrpc-message.c: update for that + +2007-11-29 Dan Winship <danw@gnome.org> + * mono/: initial doesn't-even-compile-yet C# bindings * configure.in: diff --git a/libsoup/soup-message-server-io.c b/libsoup/soup-message-server-io.c index 69163242..44373e4f 100644 --- a/libsoup/soup-message-server-io.c +++ b/libsoup/soup-message-server-io.c @@ -38,7 +38,9 @@ parse_request_headers (SoupMessage *msg, char *headers, guint headers_len, &priv->http_version)) return SOUP_STATUS_BAD_REQUEST; - msg->method = g_intern_string (req_method); + g_object_set (G_OBJECT (msg), + SOUP_MESSAGE_METHOD, req_method, + NULL); g_free (req_method); expect = soup_message_get_header (msg->request_headers, "Expect"); diff --git a/libsoup/soup-message.c b/libsoup/soup-message.c index bb85dd72..80c70196 100644 --- a/libsoup/soup-message.c +++ b/libsoup/soup-message.c @@ -9,6 +9,7 @@ #include <string.h> #include "soup-auth.h" +#include "soup-enum-types.h" #include "soup-marshal.h" #include "soup-message.h" #include "soup-message-private.h" @@ -37,6 +38,19 @@ enum { static guint signals[LAST_SIGNAL] = { 0 }; +enum { + PROP_0, + + PROP_METHOD, + PROP_URI, + PROP_HTTP_VERSION, + PROP_FLAGS, + PROP_STATUS_CODE, + PROP_REASON_PHRASE, + + LAST_PROP +}; + static void wrote_body (SoupMessage *req); static void got_headers (SoupMessage *req); static void got_chunk (SoupMessage *req); @@ -45,6 +59,11 @@ static void restarted (SoupMessage *req); static void finished (SoupMessage *req); static void free_chunks (SoupMessage *msg); +static void set_property (GObject *object, guint prop_id, + const GValue *value, GParamSpec *pspec); +static void get_property (GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec); + static void soup_message_init (SoupMessage *msg) { @@ -112,6 +131,8 @@ soup_message_class_init (SoupMessageClass *message_class) /* virtual method override */ object_class->finalize = finalize; + object_class->set_property = set_property; + object_class->get_property = get_property; /* signals */ @@ -271,6 +292,116 @@ soup_message_class_init (SoupMessageClass *message_class) NULL, NULL, soup_marshal_NONE__NONE, G_TYPE_NONE, 0); + + /* properties */ + g_object_class_install_property ( + object_class, PROP_METHOD, + g_param_spec_string (SOUP_MESSAGE_METHOD, + "Method", + "The message's HTTP method", + SOUP_METHOD_GET, + G_PARAM_READWRITE)); + g_object_class_install_property ( + object_class, PROP_URI, + g_param_spec_pointer (SOUP_MESSAGE_URI, + "URI", + "The message's Request-URI", + G_PARAM_READWRITE)); + g_object_class_install_property ( + object_class, PROP_HTTP_VERSION, + g_param_spec_enum (SOUP_MESSAGE_HTTP_VERSION, + "HTTP Version", + "The HTTP protocol version to use", + SOUP_TYPE_HTTP_VERSION, + SOUP_HTTP_1_1, + G_PARAM_READWRITE)); + g_object_class_install_property ( + object_class, PROP_FLAGS, + g_param_spec_flags (SOUP_MESSAGE_FLAGS, + "Flags", + "Various message options", + SOUP_TYPE_MESSAGE_FLAGS, + 0, + G_PARAM_READWRITE)); + g_object_class_install_property ( + object_class, PROP_STATUS_CODE, + g_param_spec_uint (SOUP_MESSAGE_STATUS_CODE, + "Status code", + "The HTTP response status code", + 0, 599, 0, + G_PARAM_READWRITE)); + g_object_class_install_property ( + object_class, PROP_REASON_PHRASE, + g_param_spec_string (SOUP_MESSAGE_REASON_PHRASE, + "Reason phrase", + "The HTTP response reason phrase", + NULL, + G_PARAM_READWRITE)); +} + +static void +set_property (GObject *object, guint prop_id, + const GValue *value, GParamSpec *pspec) +{ + SoupMessage *msg = SOUP_MESSAGE (object); + + switch (prop_id) { + case PROP_METHOD: + msg->method = g_intern_string (g_value_get_string (value)); + break; + case PROP_URI: + soup_message_set_uri (msg, g_value_get_pointer (value)); + break; + case PROP_HTTP_VERSION: + soup_message_set_http_version (msg, g_value_get_enum (value)); + break; + case PROP_FLAGS: + soup_message_set_flags (msg, g_value_get_flags (value)); + break; + case PROP_STATUS_CODE: + soup_message_set_status (msg, g_value_get_uint (value)); + break; + case PROP_REASON_PHRASE: + soup_message_set_status_full (msg, msg->status_code, + g_value_get_string (value)); + break; + default: + break; + } +} + +static void +get_property (GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + SoupMessage *msg = SOUP_MESSAGE (object); + SoupMessagePrivate *priv = SOUP_MESSAGE_GET_PRIVATE (msg); + + switch (prop_id) { + case PROP_METHOD: + g_value_set_string (value, msg->method); + break; + case PROP_URI: + if (priv->uri) + g_value_set_pointer (value, soup_uri_copy (priv->uri)); + else + g_value_set_pointer (value, NULL); + break; + case PROP_HTTP_VERSION: + g_value_set_enum (value, priv->http_version); + break; + case PROP_FLAGS: + g_value_set_flags (value, priv->msg_flags); + break; + case PROP_STATUS_CODE: + g_value_set_uint (value, msg->status_code); + break; + case PROP_REASON_PHRASE: + g_value_set_string (value, msg->reason_phrase); + break; + default: + break; + } } @@ -293,16 +424,13 @@ soup_message_new (const char *method, const char *uri_string) uri = soup_uri_new (uri_string); if (!uri) return NULL; - if (!uri->host) { soup_uri_free (uri); return NULL; } - msg = g_object_new (SOUP_TYPE_MESSAGE, NULL); - msg->method = g_intern_string (method ? method : SOUP_METHOD_GET); - SOUP_MESSAGE_GET_PRIVATE (msg)->uri = uri; - + msg = soup_message_new_from_uri (method, uri); + soup_uri_free (uri); return msg; } @@ -318,13 +446,10 @@ soup_message_new (const char *method, const char *uri_string) SoupMessage * soup_message_new_from_uri (const char *method, const SoupUri *uri) { - SoupMessage *msg; - - msg = g_object_new (SOUP_TYPE_MESSAGE, NULL); - msg->method = g_intern_string (method ? method : SOUP_METHOD_GET); - SOUP_MESSAGE_GET_PRIVATE (msg)->uri = soup_uri_copy (uri); - - return msg; + return g_object_new (SOUP_TYPE_MESSAGE, + SOUP_MESSAGE_METHOD, method ? method : SOUP_METHOD_GET, + SOUP_MESSAGE_URI, uri, + NULL); } /** diff --git a/libsoup/soup-message.h b/libsoup/soup-message.h index e048a4a7..f0ceb4b9 100644 --- a/libsoup/soup-message.h +++ b/libsoup/soup-message.h @@ -154,6 +154,13 @@ typedef struct { GType soup_message_get_type (void); +#define SOUP_MESSAGE_METHOD "method" +#define SOUP_MESSAGE_URI "uri" +#define SOUP_MESSAGE_HTTP_VERSION "http-version" +#define SOUP_MESSAGE_FLAGS "flags" +#define SOUP_MESSAGE_STATUS_CODE "status-code" +#define SOUP_MESSAGE_REASON_PHRASE "reason-phrase" + /** * SoupMessageCallbackFn: * @req: the #SoupMessage in question diff --git a/libsoup/soup-soap-message.c b/libsoup/soup-soap-message.c index 49198ce7..417c121e 100644 --- a/libsoup/soup-soap-message.c +++ b/libsoup/soup-soap-message.c @@ -134,10 +134,12 @@ soup_soap_message_new_from_uri (const char *method, const SoupUri *uri, SoupSoapMessage *msg; SoupSoapMessagePrivate *priv; - msg = g_object_new (SOUP_TYPE_SOAP_MESSAGE, NULL); + msg = g_object_new (SOUP_TYPE_SOAP_MESSAGE, + SOUP_MESSAGE_METHOD, method ? method : SOUP_METHOD_GET, + SOUP_MESSAGE_URI, uri, + NULL); + priv = SOUP_SOAP_MESSAGE_GET_PRIVATE (msg); - SOUP_MESSAGE (msg)->method = g_intern_string (method ? method : SOUP_METHOD_GET); - soup_message_set_uri (SOUP_MESSAGE (msg), (const SoupUri *) uri); priv->doc->standalone = standalone; diff --git a/libsoup/soup-xmlrpc-message.c b/libsoup/soup-xmlrpc-message.c index 36eb4340..033dd1d6 100644 --- a/libsoup/soup-xmlrpc-message.c +++ b/libsoup/soup-xmlrpc-message.c @@ -81,13 +81,10 @@ soup_xmlrpc_message_new (const char *uri_string) SoupXmlrpcMessage * soup_xmlrpc_message_new_from_uri (const SoupUri *uri) { - SoupXmlrpcMessage *msg; - - msg = g_object_new (SOUP_TYPE_XMLRPC_MESSAGE, NULL); - SOUP_MESSAGE (msg)->method = g_intern_string (SOUP_METHOD_POST); - soup_message_set_uri (SOUP_MESSAGE (msg), uri); - - return msg; + return g_object_new (SOUP_TYPE_XMLRPC_MESSAGE, + SOUP_MESSAGE_METHOD, SOUP_METHOD_POST, + SOUP_MESSAGE_URI, uri, + NULL); } void |
