[libchamplain] Add possibility to set User-Agent for requests



commit 481ec72b2b9401761c2b61e41be3edf13644f9ff
Author: Jens Georg <mail jensge org>
Date:   Sun May 7 15:50:42 2017 +0200

    Add possibility to set User-Agent for requests
    
    https://bugzilla.gnome.org/show_bug.cgi?id=782297

 champlain/champlain-network-bbox-tile-source.c |   46 +++++++++++++++++++++++-
 champlain/champlain-network-bbox-tile-source.h |    4 ++
 champlain/champlain-network-tile-source.c      |   43 +++++++++++++++++++++-
 champlain/champlain-network-tile-source.h      |    1 +
 4 files changed, 92 insertions(+), 2 deletions(-)
---
diff --git a/champlain/champlain-network-bbox-tile-source.c b/champlain/champlain-network-bbox-tile-source.c
index 2502a45..8257457 100644
--- a/champlain/champlain-network-bbox-tile-source.c
+++ b/champlain/champlain-network-bbox-tile-source.c
@@ -50,7 +50,8 @@ enum
   PROP_0,
   PROP_API_URI,
   PROP_PROXY_URI,
-  PROP_STATE
+  PROP_STATE,
+  PROP_USER_AGENT
 };
 
 struct _ChamplainNetworkBboxTileSourcePrivate
@@ -127,6 +128,11 @@ champlain_network_bbox_tile_source_set_property (GObject *object,
       g_object_notify (G_OBJECT (self), "state");
       break;
 
+    case PROP_USER_AGENT:
+      champlain_network_bbox_tile_source_set_user_agent (self,
+          g_value_get_string (value));
+     break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
     }
@@ -225,6 +231,21 @@ champlain_network_bbox_tile_source_class_init (ChamplainNetworkBboxTileSourceCla
           CHAMPLAIN_TYPE_STATE,
           CHAMPLAIN_STATE_NONE,
           G_PARAM_READWRITE));
+
+  /**
+   * ChamplainNetworkBboxTileSource:user-agent:
+   *
+   * The HTTP user agent used for requests
+   *
+   * Since: 0.12.16
+   */
+  g_object_class_install_property (object_class,
+      PROP_USER_AGENT,
+      g_param_spec_string ("user-agent",
+        "HTTP User Agent",
+        "The HTTP user agent used for network requests",
+        "libchamplain/" CHAMPLAIN_VERSION_S,
+        G_PARAM_WRITABLE));
 }
 
 
@@ -480,3 +501,26 @@ champlain_network_bbox_tile_source_set_api_uri (
   priv->api_uri = g_strdup (api_uri);
   g_object_notify (G_OBJECT (self), "api-uri");
 }
+
+/**
+ * champlain_network_bbox_tile_source_set_user_agent:
+ * @map_data_source: a #ChamplainNetworkBboxTileSource
+ * @user_agent: A User-Agent string
+ *
+ * Sets the User-Agent header used communicating with the server.
+ * Since: 0.12.16
+ */
+void
+champlain_network_bbox_tile_source_set_user_agent (
+    ChamplainNetworkBboxTileSource *self,
+    const gchar *user_agent)
+{
+  g_return_if_fail (CHAMPLAIN_IS_NETWORK_BBOX_TILE_SOURCE (self)
+      && user_agent != NULL);
+
+  ChamplainNetworkBboxTileSourcePrivate *priv = self->priv;
+
+  if (priv->soup_session)
+    g_object_set (G_OBJECT (priv->soup_session), "user-agent",
+        user_agent, NULL);
+}
diff --git a/champlain/champlain-network-bbox-tile-source.h b/champlain/champlain-network-bbox-tile-source.h
index 4bc0a4c..903145e 100644
--- a/champlain/champlain-network-bbox-tile-source.h
+++ b/champlain/champlain-network-bbox-tile-source.h
@@ -92,6 +92,10 @@ void champlain_network_bbox_tile_source_set_api_uri (
     ChamplainNetworkBboxTileSource *map_data_source,
     const gchar *api_uri);
 
+void champlain_network_bbox_tile_source_set_user_agent (
+    ChamplainNetworkBboxTileSource *map_data_source,
+    const gchar *user_agent);
+
 G_END_DECLS
 
 #endif /* _CHAMPLAIN_NETWORK_BBOX_TILE_SOURCE */
diff --git a/champlain/champlain-network-tile-source.c b/champlain/champlain-network-tile-source.c
index 4463470..341ad3c 100644
--- a/champlain/champlain-network-tile-source.c
+++ b/champlain/champlain-network-tile-source.c
@@ -62,7 +62,8 @@ enum
   PROP_URI_FORMAT,
   PROP_OFFLINE,
   PROP_PROXY_URI,
-  PROP_MAX_CONNS
+  PROP_MAX_CONNS,
+  PROP_USER_AGENT
 };
 
 G_DEFINE_TYPE (ChamplainNetworkTileSource, champlain_network_tile_source, CHAMPLAIN_TYPE_TILE_SOURCE);
@@ -173,6 +174,10 @@ champlain_network_tile_source_set_property (GObject *object,
       champlain_network_tile_source_set_max_conns (tile_source, g_value_get_int (value));
       break;
 
+    case PROP_USER_AGENT:
+      champlain_network_tile_source_set_user_agent (tile_source, g_value_get_string (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -295,6 +300,20 @@ champlain_network_tile_source_class_init (ChamplainNetworkTileSourceClass *klass
 
   g_object_class_install_property (object_class, PROP_MAX_CONNS, pspec);
 
+  /**
+   * ChamplainNetworkTileSource:user-agent:
+   *
+   * The HTTP user agent used for requests
+   *
+   * Since: 0.12.16
+   */
+  pspec = g_param_spec_string ("user-agent",
+        "HTTP User Agent",
+        "The HTTP user agent used for network requests",
+        "libchamplain/" CHAMPLAIN_VERSION_S,
+        G_PARAM_WRITABLE);
+
+  g_object_class_install_property (object_class, PROP_USER_AGENT, pspec);
 }
 
 
@@ -572,6 +591,28 @@ champlain_network_tile_source_set_max_conns (ChamplainNetworkTileSource *tile_so
   g_object_notify (G_OBJECT (tile_source), "max_conns");
 }
 
+/**
+ * champlain_network_tile_source_set_user_agent:
+ * @map_data_source: a #ChamplainNetworkTileSource
+ * @user_agent: A User-Agent string
+ *
+ * Sets the User-Agent header used communicating with the server.
+ * Since: 0.12.16
+ */
+void
+champlain_network_tile_source_set_user_agent (
+    ChamplainNetworkTileSource *tile_source,
+    const gchar *user_agent)
+{
+  g_return_if_fail (CHAMPLAIN_IS_NETWORK_TILE_SOURCE (tile_source)
+      && user_agent != NULL);
+
+  ChamplainNetworkTileSourcePrivate *priv = tile_source->priv;
+
+  if (priv->soup_session)
+    g_object_set (G_OBJECT (priv->soup_session), "user-agent",
+        user_agent, NULL);
+}
 
 #define SIZE 8
 static gchar *
diff --git a/champlain/champlain-network-tile-source.h b/champlain/champlain-network-tile-source.h
index 7c29b3e..8d8f1a9 100644
--- a/champlain/champlain-network-tile-source.h
+++ b/champlain/champlain-network-tile-source.h
@@ -100,6 +100,7 @@ gint champlain_network_tile_source_get_max_conns (ChamplainNetworkTileSource *ti
 void champlain_network_tile_source_set_max_conns (ChamplainNetworkTileSource *tile_source,
     gint max_conns);
 
+void champlain_network_tile_source_set_user_agent (ChamplainNetworkTileSource *self, const gchar 
*user_agent);
 
 G_END_DECLS
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]