summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2007-11-29 19:54:37 +0000
committerDan Winship <danw@src.gnome.org>2007-11-29 19:54:37 +0000
commit0eb4ce925a419aa89162c03c0ad19c8bf9faf477 (patch)
treee3e49dbacbb81b77b53f61f48a6743a9ce01796c
parent00f1a99a5063795f83263ab4fa63f33f1a3b153f (diff)
downloadlibsoup-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--ChangeLog9
-rw-r--r--libsoup/soup-message-server-io.c4
-rw-r--r--libsoup/soup-message.c149
-rw-r--r--libsoup/soup-message.h7
-rw-r--r--libsoup/soup-soap-message.c8
-rw-r--r--libsoup/soup-xmlrpc-message.c11
6 files changed, 165 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index c5bf8209..1d6a0def 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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