From: Mario Sanchez Prada Date: Fri, 2 Oct 2009 10:33:02 +0000 (+0200) Subject: Provide a new 'accept-language' property for SoupSession X-Git-Tag: LIBSOUP_2_29_5~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d15f6c4e50f361fe0be757437dbafe0aa5badc62;p=platform%2Fupstream%2Flibsoup.git Provide a new 'accept-language' property for SoupSession This would allow to externally set a list of languages for the HTTP "Accept-Language" header, compliant to rfc2616. https://bugzilla.gnome.org/show_bug.cgi?id=597004 --- diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c index b8d79a2..48f336e 100644 --- a/libsoup/soup-session.c +++ b/libsoup/soup-session.c @@ -75,6 +75,7 @@ typedef struct { SoupMessageQueue *queue; char *user_agent; + char *accept_language; GSList *features; GHashTable *features_cache; @@ -141,6 +142,7 @@ enum { PROP_ASYNC_CONTEXT, PROP_TIMEOUT, PROP_USER_AGENT, + PROP_ACCEPT_LANGUAGE, PROP_IDLE_TIMEOUT, PROP_ADD_FEATURE, PROP_ADD_FEATURE_BY_TYPE, @@ -216,6 +218,7 @@ finalize (GObject *object) g_hash_table_destroy (priv->conns); g_free (priv->user_agent); + g_free (priv->accept_language); if (priv->ssl_creds) soup_ssl_free_client_credentials (priv->ssl_creds); @@ -569,6 +572,26 @@ soup_session_class_init (SoupSessionClass *session_class) G_PARAM_READWRITE)); /** + * SoupSession:accept-language: + * + * If non-%NULL, the value to use for the "Accept-Language" header + * on #SoupMessages sent from this session. + * + **/ + /** + * SOUP_SESSION_ACCEPT_LANGUAGE: + * + * Alias for the #SoupSession:accept-language property, qv. + **/ + g_object_class_install_property ( + object_class, PROP_ACCEPT_LANGUAGE, + g_param_spec_string (SOUP_SESSION_ACCEPT_LANGUAGE, + "Accept-Language string", + "Accept-Language string", + NULL, + G_PARAM_READWRITE)); + + /** * SoupSession:add-feature: * * Add a feature object to the session. (Shortcut for calling @@ -730,6 +753,10 @@ set_property (GObject *object, guint prop_id, } else priv->user_agent = g_strdup (user_agent); break; + case PROP_ACCEPT_LANGUAGE: + g_free (priv->accept_language); + priv->accept_language = g_strdup (g_value_get_string (value)); + break; case PROP_IDLE_TIMEOUT: priv->idle_timeout = g_value_get_uint (value); break; @@ -793,6 +820,9 @@ get_property (GObject *object, guint prop_id, case PROP_USER_AGENT: g_value_set_string (value, priv->user_agent); break; + case PROP_ACCEPT_LANGUAGE: + g_value_set_string (value, priv->accept_language); + break; case PROP_IDLE_TIMEOUT: g_value_set_uint (value, priv->idle_timeout); break; @@ -991,6 +1021,12 @@ soup_session_send_queue_item (SoupSession *session, "User-Agent", priv->user_agent); } + if (priv->accept_language) { + soup_message_headers_replace (item->msg->request_headers, + "Accept-Language", + priv->accept_language); + } + g_signal_emit (session, signals[REQUEST_STARTED], 0, item->msg, soup_connection_get_socket (conn)); soup_connection_send_request (conn, item->msg); diff --git a/libsoup/soup-session.h b/libsoup/soup-session.h index 6080008..c7873e7 100644 --- a/libsoup/soup-session.h +++ b/libsoup/soup-session.h @@ -66,6 +66,7 @@ GType soup_session_get_type (void); #define SOUP_SESSION_ASYNC_CONTEXT "async-context" #define SOUP_SESSION_TIMEOUT "timeout" #define SOUP_SESSION_USER_AGENT "user-agent" +#define SOUP_SESSION_ACCEPT_LANGUAGE "accept-language" #define SOUP_SESSION_IDLE_TIMEOUT "idle-timeout" #define SOUP_SESSION_ADD_FEATURE "add-feature" #define SOUP_SESSION_ADD_FEATURE_BY_TYPE "add-feature-by-type"