[evolution-ews] Bug 763991 - Add User-Agent setting in mail Properties



commit 7b0c26a5f05c798f97f05b0c7d09664c90735d8c
Author: Milan Crha <mcrha redhat com>
Date:   Wed Mar 23 14:43:59 2016 +0100

    Bug 763991 - Add User-Agent setting in mail Properties

 src/camel/camel-ews-provider.c  |    3 +
 src/server/camel-ews-settings.c |  125 ++++++++++++++++++++++++++++++++++++++-
 src/server/camel-ews-settings.h |   12 ++++
 src/server/e-ews-connection.c   |   54 +++++++++++++----
 src/server/e-ews-message.c      |   29 ++++++++-
 src/server/e-ews-message.h      |    7 ++-
 src/server/e-ews-notification.c |   18 ++++++
 src/server/e-ews-oof-settings.c |   10 +++
 8 files changed, 241 insertions(+), 17 deletions(-)
---
diff --git a/src/camel/camel-ews-provider.c b/src/camel/camel-ews-provider.c
index e9449d2..5efd5e6 100644
--- a/src/camel/camel-ews-provider.c
+++ b/src/camel/camel-ews-provider.c
@@ -67,6 +67,9 @@ static CamelProviderConfEntry ews_conf_entries[] = {
          /* Translators: '%s' is preplaced with a widget, where "
           * user can select how long the timeout should be. */
          N_("Connection _timeout (in seconds) %s"), "0:1:0:32768" },
+       { CAMEL_PROVIDER_CONF_CHECKBOX, "override-user-agent", NULL,
+         N_("Override _User-Agent header value"), "0" },
+       { CAMEL_PROVIDER_CONF_ENTRY, "user-agent", "override-user-agent", "" },
        { CAMEL_PROVIDER_CONF_SECTION_END },
 
        { CAMEL_PROVIDER_CONF_END }
diff --git a/src/server/camel-ews-settings.c b/src/server/camel-ews-settings.c
index cfb97b9..2e40679 100644
--- a/src/server/camel-ews-settings.c
+++ b/src/server/camel-ews-settings.c
@@ -43,6 +43,8 @@ struct _CamelEwsSettingsPrivate {
        gchar *oal_selected;
        guint timeout;
        gchar *impersonate_user;
+       gboolean override_user_agent;
+       gchar *user_agent;
 };
 
 enum {
@@ -64,7 +66,9 @@ enum {
        PROP_TIMEOUT,
        PROP_USER,
        PROP_USE_IMPERSONATION,
-       PROP_IMPERSONATE_USER
+       PROP_IMPERSONATE_USER,
+       PROP_OVERRIDE_USER_AGENT,
+       PROP_USER_AGENT
 };
 
 G_DEFINE_TYPE_WITH_CODE (
@@ -217,6 +221,18 @@ ews_settings_set_property (GObject *object,
                                CAMEL_EWS_SETTINGS (object),
                                g_value_get_string (value));
                        return;
+
+               case PROP_OVERRIDE_USER_AGENT:
+                       camel_ews_settings_set_override_user_agent (
+                               CAMEL_EWS_SETTINGS (object),
+                               g_value_get_boolean (value));
+                       return;
+
+               case PROP_USER_AGENT:
+                       camel_ews_settings_set_user_agent (
+                               CAMEL_EWS_SETTINGS (object),
+                               g_value_get_string (value));
+                       return;
        }
 
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -354,6 +370,20 @@ ews_settings_get_property (GObject *object,
                                camel_ews_settings_dup_impersonate_user (
                                CAMEL_EWS_SETTINGS (object)));
                        return;
+
+               case PROP_OVERRIDE_USER_AGENT:
+                       g_value_set_boolean (
+                               value,
+                               camel_ews_settings_get_override_user_agent (
+                               CAMEL_EWS_SETTINGS (object)));
+                       return;
+
+               case PROP_USER_AGENT:
+                       g_value_take_string (
+                               value,
+                               camel_ews_settings_dup_user_agent (
+                               CAMEL_EWS_SETTINGS (object)));
+                       return;
        }
 
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -576,6 +606,30 @@ camel_ews_settings_class_init (CamelEwsSettingsClass *class)
                        G_PARAM_READWRITE |
                        G_PARAM_CONSTRUCT |
                        G_PARAM_STATIC_STRINGS));
+
+       g_object_class_install_property (
+               object_class,
+               PROP_OVERRIDE_USER_AGENT,
+               g_param_spec_boolean (
+                       "override-user-agent",
+                       "Override User Agent",
+                       "Whether to override User-Agent header",
+                       FALSE,
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT |
+                       G_PARAM_STATIC_STRINGS));
+
+       g_object_class_install_property (
+               object_class,
+               PROP_USER_AGENT,
+               g_param_spec_string (
+                       "user-agent",
+                       "User Agent",
+                       "User-Agent header value to use, if override-user-agent is set to TRUE",
+                       "Microsoft Office/14.0 (Windows NT ,5.1; Microsoft Outlook 14.0.4734; Pro)",
+                       G_PARAM_READWRITE |
+                       G_PARAM_CONSTRUCT |
+                       G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -1145,3 +1199,72 @@ camel_ews_settings_set_impersonate_user (CamelEwsSettings *settings,
 
        g_object_notify (G_OBJECT (settings), "impersonate-user");
 }
+
+gboolean
+camel_ews_settings_get_override_user_agent (CamelEwsSettings *settings)
+{
+       g_return_val_if_fail (CAMEL_IS_EWS_SETTINGS (settings), FALSE);
+
+       return settings->priv->override_user_agent;
+}
+
+void
+camel_ews_settings_set_override_user_agent (CamelEwsSettings *settings,
+                                           gboolean override_user_agent)
+{
+       g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+       if ((settings->priv->override_user_agent ? 1 : 0) == (override_user_agent ? 1 : 0))
+               return;
+
+       settings->priv->override_user_agent = override_user_agent;
+
+       g_object_notify (G_OBJECT (settings), "override-user-agent");
+}
+
+const gchar *
+camel_ews_settings_get_user_agent (CamelEwsSettings *settings)
+{
+       g_return_val_if_fail (CAMEL_IS_EWS_SETTINGS (settings), NULL);
+
+       return settings->priv->user_agent;
+}
+
+gchar *
+camel_ews_settings_dup_user_agent (CamelEwsSettings *settings)
+{
+       const gchar *protected;
+       gchar *duplicate;
+
+       g_return_val_if_fail (CAMEL_IS_EWS_SETTINGS (settings), NULL);
+
+       g_mutex_lock (&settings->priv->property_lock);
+
+       protected = camel_ews_settings_get_user_agent (settings);
+       duplicate = g_strdup (protected);
+
+       g_mutex_unlock (&settings->priv->property_lock);
+
+       return duplicate;
+}
+
+void
+camel_ews_settings_set_user_agent (CamelEwsSettings *settings,
+                                  const gchar *user_agent)
+{
+       g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+       g_mutex_lock (&settings->priv->property_lock);
+
+       if (g_strcmp0 (settings->priv->user_agent, user_agent) == 0) {
+               g_mutex_unlock (&settings->priv->property_lock);
+               return;
+       }
+
+       g_free (settings->priv->user_agent);
+       settings->priv->user_agent = e_util_strdup_strip (user_agent);
+
+       g_mutex_unlock (&settings->priv->property_lock);
+
+       g_object_notify (G_OBJECT (settings), "user-agent");
+}
diff --git a/src/server/camel-ews-settings.h b/src/server/camel-ews-settings.h
index fe54756..ee3829b 100644
--- a/src/server/camel-ews-settings.h
+++ b/src/server/camel-ews-settings.h
@@ -128,6 +128,18 @@ gchar *            camel_ews_settings_dup_impersonate_user
 void           camel_ews_settings_set_impersonate_user
                                                (CamelEwsSettings *settings,
                                                 const gchar *impersonate_user);
+gboolean       camel_ews_settings_get_override_user_agent
+                                               (CamelEwsSettings *settings);
+void           camel_ews_settings_set_override_user_agent
+                                               (CamelEwsSettings *settings,
+                                                gboolean override_user_agent);
+const gchar *  camel_ews_settings_get_user_agent
+                                               (CamelEwsSettings *settings);
+gchar *                camel_ews_settings_dup_user_agent
+                                               (CamelEwsSettings *settings);
+void           camel_ews_settings_set_user_agent
+                                               (CamelEwsSettings *settings,
+                                                const gchar *user_agent);
 
 G_END_DECLS
 
diff --git a/src/server/e-ews-connection.c b/src/server/e-ews-connection.c
index 76befcf..3c11a3e 100644
--- a/src/server/e-ews-connection.c
+++ b/src/server/e-ews-connection.c
@@ -2651,7 +2651,8 @@ static void post_restarted (SoupMessage *msg, gpointer data)
 }
 
 static SoupMessage *
-e_ews_get_msg_for_url (const gchar *url,
+e_ews_get_msg_for_url (CamelEwsSettings *settings,
+                      const gchar *url,
                        xmlOutputBuffer *buf,
                        GError **error)
 {
@@ -2674,9 +2675,7 @@ e_ews_get_msg_for_url (const gchar *url,
 
        e_ews_message_attach_chunk_allocator (msg);
 
-       soup_message_headers_append (
-               msg->request_headers,
-               "User-Agent", "libews/0.1");
+       e_ews_message_set_user_agent_header (msg, settings);
 
        if (buf != NULL) {
                soup_message_set_request (
@@ -2824,10 +2823,10 @@ e_ews_autodiscover_ws_url (CamelEwsSettings *settings,
                simple, ad, (GDestroyNotify) autodiscover_data_free);
 
        /* Passing a NULL URL string returns NULL. */
-       ad->msgs[0] = e_ews_get_msg_for_url (url1, buf, &error);
-       ad->msgs[1] = e_ews_get_msg_for_url (url2, buf, NULL);
-       ad->msgs[2] = e_ews_get_msg_for_url (url3, buf, NULL);
-       ad->msgs[3] = e_ews_get_msg_for_url (url4, buf, NULL);
+       ad->msgs[0] = e_ews_get_msg_for_url (settings, url1, buf, &error);
+       ad->msgs[1] = e_ews_get_msg_for_url (settings, url2, buf, NULL);
+       ad->msgs[2] = e_ews_get_msg_for_url (settings, url3, buf, NULL);
+       ad->msgs[3] = e_ews_get_msg_for_url (settings, url4, buf, NULL);
 
        /* These have to be submitted only after they're both set in ad->msgs[]
         * or there will be races with fast completion */
@@ -3180,7 +3179,7 @@ e_ews_connection_get_oal_list (EEwsConnection *cnc,
 
        g_return_if_fail (E_IS_EWS_CONNECTION (cnc));
 
-       soup_message = e_ews_get_msg_for_url (cnc->priv->uri, NULL, &error);
+       soup_message = e_ews_get_msg_for_url (cnc->priv->settings, cnc->priv->uri, NULL, &error);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -3301,7 +3300,7 @@ e_ews_connection_get_oal_detail (EEwsConnection *cnc,
 
        g_return_if_fail (E_IS_EWS_CONNECTION (cnc));
 
-       soup_message = e_ews_get_msg_for_url (cnc->priv->uri, NULL, &error);
+       soup_message = e_ews_get_msg_for_url (cnc->priv->settings, cnc->priv->uri, NULL, &error);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -3514,7 +3513,7 @@ e_ews_connection_download_oal_file (EEwsConnection *cnc,
 
        g_return_if_fail (E_IS_EWS_CONNECTION (cnc));
 
-       soup_message = e_ews_get_msg_for_url (cnc->priv->uri, NULL, &error);
+       soup_message = e_ews_get_msg_for_url (cnc->priv->settings, cnc->priv->uri, NULL, &error);
 
        simple = g_simple_async_result_new (
                G_OBJECT (cnc), callback, user_data,
@@ -3747,6 +3746,7 @@ e_ews_connection_sync_folder_items (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "SyncFolderItems",
@@ -3941,6 +3941,7 @@ e_ews_connection_find_folder_items (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "FindItem",
@@ -4073,6 +4074,7 @@ e_ews_connection_sync_folder_hierarchy (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "SyncFolderHierarchy",
@@ -4257,6 +4259,7 @@ e_ews_connection_get_items (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetItem",
@@ -4485,6 +4488,7 @@ e_ews_connection_delete_items (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "DeleteItem",
@@ -4549,6 +4553,7 @@ e_ews_connection_delete_item (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "DeleteItem",
@@ -4792,6 +4797,7 @@ e_ews_connection_update_items (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "UpdateItem",
@@ -4956,6 +4962,7 @@ e_ews_connection_create_items (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "CreateItem",
@@ -5119,6 +5126,7 @@ e_ews_connection_resolve_names (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "ResolveNames",
@@ -5415,6 +5423,7 @@ e_ews_connection_expand_dl (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "ExpandDL",
@@ -5568,6 +5577,7 @@ e_ews_connection_update_folder (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "UpdateFolder",
@@ -5700,6 +5710,7 @@ e_ews_connection_move_folder (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "MoveFolder",
@@ -5812,6 +5823,7 @@ e_ews_connection_get_folder (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetFolder",
@@ -5933,6 +5945,7 @@ e_ews_connection_create_folder (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "CreateFolder",
@@ -6092,6 +6105,7 @@ e_ews_connection_move_items (EEwsConnection *cnc,
 
        if (docopy)
                msg = e_ews_message_new_with_header (
+                               cnc->priv->settings,
                                cnc->priv->uri,
                                cnc->priv->impersonate_user,
                                "CopyItem",
@@ -6103,6 +6117,7 @@ e_ews_connection_move_items (EEwsConnection *cnc,
                                TRUE);
        else
                msg = e_ews_message_new_with_header (
+                               cnc->priv->settings,
                                cnc->priv->uri,
                                cnc->priv->impersonate_user,
                                "MoveItem",
@@ -6275,6 +6290,7 @@ e_ews_connection_delete_folder (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "DeleteFolder",
@@ -6438,6 +6454,7 @@ e_ews_connection_empty_folder (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "EmptyFolder",
@@ -6705,6 +6722,7 @@ e_ews_connection_create_attachments (EEwsConnection *cnc,
                simple, async_data, (GDestroyNotify) async_data_free);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "CreateAttachment",
@@ -6889,6 +6907,7 @@ e_ews_connection_delete_attachments (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "DeleteAttachment",
@@ -7079,6 +7098,7 @@ e_ews_connection_get_attachments (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetAttachment",
@@ -7355,6 +7375,7 @@ e_ews_connection_get_free_busy (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetUserAvailabilityRequest",
@@ -7631,6 +7652,7 @@ e_ews_connection_get_delegate (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetDelegate",
@@ -7809,6 +7831,7 @@ e_ews_connection_add_delegate (EEwsConnection *cnc,
        g_return_if_fail (delegates != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "AddDelegate",
@@ -7940,6 +7963,7 @@ e_ews_connection_remove_delegate (EEwsConnection *cnc,
        g_return_if_fail (delegate_ids != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "RemoveDelegate",
@@ -8051,6 +8075,7 @@ e_ews_connection_update_delegate (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "UpdateDelegate",
@@ -8245,6 +8270,7 @@ e_ews_connection_get_folder_permissions (EEwsConnection *cnc,
        g_return_if_fail (folder_id != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetFolder",
@@ -8364,6 +8390,7 @@ e_ews_connection_set_folder_permissions (EEwsConnection *cnc,
        g_return_if_fail (permissions != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "UpdateFolder",
@@ -8612,6 +8639,7 @@ e_ews_connection_get_password_expiration (EEwsConnection *cnc,
        EwsAsyncData *async_data;
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetPasswordExpirationDate",
@@ -8776,6 +8804,7 @@ e_ews_connection_get_folder_info (EEwsConnection *cnc,
        g_return_if_fail (folder_id != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetFolder",
@@ -8971,6 +9000,7 @@ e_ews_connection_find_folder (EEwsConnection *cnc,
        g_return_if_fail (cnc != NULL);
 
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "FindFolder",
@@ -9153,6 +9183,7 @@ e_ews_connection_query_auth_methods (EEwsConnection *cnc,
 
        /* use some simple operation to get WWW-Authenticate headers from the server */
        msg = e_ews_message_new_with_header (
+                       cnc->priv->settings,
                        cnc->priv->uri,
                        cnc->priv->impersonate_user,
                        "GetFolder",
@@ -9931,6 +9962,7 @@ e_ews_connection_get_server_time_zones (EEwsConnection *cnc,
        }
 
        msg = e_ews_message_new_with_header (
+               cnc->priv->settings,
                cnc->priv->uri,
                cnc->priv->impersonate_user,
                "GetServerTimeZones",
diff --git a/src/server/e-ews-message.c b/src/server/e-ews-message.c
index 4e74fd1..8c015b0 100644
--- a/src/server/e-ews-message.c
+++ b/src/server/e-ews-message.c
@@ -83,8 +83,31 @@ convert_server_version_to_string (EEwsServerVersion version)
        return "Exchange2007";
 }
 
+void
+e_ews_message_set_user_agent_header (SoupMessage *message,
+                                    CamelEwsSettings *settings)
+{
+       g_return_if_fail (SOUP_IS_MESSAGE (message));
+       g_return_if_fail (CAMEL_IS_EWS_SETTINGS (settings));
+
+       if (camel_ews_settings_get_override_user_agent (settings)) {
+               gchar *user_agent;
+
+               user_agent = camel_ews_settings_dup_user_agent (settings);
+
+               if (user_agent && *user_agent) {
+                       soup_message_headers_append (message->request_headers, "User-Agent", user_agent);
+               }
+
+               g_free (user_agent);
+       } else {
+               soup_message_headers_append (message->request_headers, "User-Agent", "Evolution/" VERSION);
+       }
+}
+
 ESoapMessage *
-e_ews_message_new_with_header (const gchar *uri,
+e_ews_message_new_with_header (CamelEwsSettings *settings,
+                              const gchar *uri,
                                const gchar *impersonate_user,
                                const gchar *method_name,
                                const gchar *attribute_name,
@@ -110,9 +133,7 @@ e_ews_message_new_with_header (const gchar *uri,
        soup_message_headers_append (
                SOUP_MESSAGE (msg)->request_headers,
                "Content-Type", "text/xml; charset=utf-8");
-       soup_message_headers_append (
-               SOUP_MESSAGE (msg)->request_headers,
-               "User-Agent", "Evolution/" VERSION);
+       e_ews_message_set_user_agent_header (SOUP_MESSAGE (msg), settings);
        soup_message_headers_append (
                SOUP_MESSAGE (msg)->request_headers,
                "Connection", "Keep-Alive");
diff --git a/src/server/e-ews-message.h b/src/server/e-ews-message.h
index f387c29..60b0d6c 100644
--- a/src/server/e-ews-message.h
+++ b/src/server/e-ews-message.h
@@ -25,6 +25,7 @@
 #define E_EWS_MESSAGE_H
 
 #include "e-soap-message.h"
+#include "camel-ews-settings.h"
 
 G_BEGIN_DECLS
 
@@ -40,7 +41,11 @@ typedef enum {
 
 void           e_ews_message_attach_chunk_allocator
                                                (SoupMessage *message);
-ESoapMessage * e_ews_message_new_with_header   (const gchar *uri,
+void           e_ews_message_set_user_agent_header
+                                               (SoupMessage *message,
+                                                CamelEwsSettings *settings);
+ESoapMessage * e_ews_message_new_with_header   (CamelEwsSettings *settings,
+                                                const gchar *uri,
                                                 const gchar *impersonate_user,
                                                 const gchar *method_name,
                                                 const gchar *attribute_name,
diff --git a/src/server/e-ews-notification.c b/src/server/e-ews-notification.c
index 2b404bf..7b5abf6 100644
--- a/src/server/e-ews-notification.c
+++ b/src/server/e-ews-notification.c
@@ -302,6 +302,7 @@ e_ews_notification_subscribe_folder_sync (EEwsNotification *notification,
        ESoapMessage *msg;
        ESoapResponse *response;
        ESoapParameter *param, *subparam;
+       CamelEwsSettings *settings;
        GError *error = NULL;
        GSList *l;
        guint event_type;
@@ -315,7 +316,10 @@ e_ews_notification_subscribe_folder_sync (EEwsNotification *notification,
        if (!notification->priv->connection)
                return FALSE;
 
+       settings = e_ews_connection_ref_settings (notification->priv->connection);
+
        msg = e_ews_message_new_with_header (
+               settings,
                e_ews_connection_get_uri (notification->priv->connection),
                e_ews_connection_get_impersonate_user (notification->priv->connection),
                "Subscribe",
@@ -326,6 +330,8 @@ e_ews_notification_subscribe_folder_sync (EEwsNotification *notification,
                FALSE,
                FALSE);
 
+       g_clear_object (&settings);
+
        if (!msg) {
                g_warning ("%s: Failed to create Soup message for URI '%s'", G_STRFUNC, 
e_ews_connection_get_uri (notification->priv->connection));
                return FALSE;
@@ -439,6 +445,7 @@ e_ews_notification_unsubscribe_folder_sync (EEwsNotification *notification,
        ESoapMessage *msg;
        ESoapResponse *response;
        ESoapParameter *param;
+       CamelEwsSettings *settings;
        GError *error = NULL;
        xmlDoc *doc;
 
@@ -449,7 +456,10 @@ e_ews_notification_unsubscribe_folder_sync (EEwsNotification *notification,
        if (!notification->priv->connection)
                return FALSE;
 
+       settings = e_ews_connection_ref_settings (notification->priv->connection);
+
        msg = e_ews_message_new_with_header (
+               settings,
                e_ews_connection_get_uri (notification->priv->connection),
                e_ews_connection_get_impersonate_user (notification->priv->connection),
                "Unsubscribe",
@@ -460,6 +470,8 @@ e_ews_notification_unsubscribe_folder_sync (EEwsNotification *notification,
                FALSE,
                FALSE);
 
+       g_clear_object (&settings);
+
        if (!msg) {
                g_warning ("%s: Failed to create Soup message for URI '%s'", G_STRFUNC, 
e_ews_connection_get_uri (notification->priv->connection));
                return FALSE;
@@ -754,6 +766,7 @@ e_ews_notification_get_events_sync (EEwsNotification *notification,
                                    gboolean *out_fatal_error)
 {
        ESoapMessage *msg;
+       CamelEwsSettings *settings;
        gboolean ret;
        gulong handler_id;
        guint status_code;
@@ -766,7 +779,10 @@ e_ews_notification_get_events_sync (EEwsNotification *notification,
        g_return_val_if_fail (notification->priv != NULL, FALSE);
        g_return_val_if_fail (notification->priv->connection != NULL, FALSE);
 
+       settings = e_ews_connection_ref_settings (notification->priv->connection);
+
        msg = e_ews_message_new_with_header (
+               settings,
                e_ews_connection_get_uri (notification->priv->connection),
                e_ews_connection_get_impersonate_user (notification->priv->connection),
                "GetStreamingEvents",
@@ -777,6 +793,8 @@ e_ews_notification_get_events_sync (EEwsNotification *notification,
                FALSE,
                FALSE);
 
+       g_clear_object (&settings);
+
        if (!msg) {
                g_warning ("%s: Failed to create Soup message for URI '%s'", G_STRFUNC, 
e_ews_connection_get_uri (notification->priv->connection));
                return FALSE;
diff --git a/src/server/e-ews-oof-settings.c b/src/server/e-ews-oof-settings.c
index 7c66768..d6b2463 100644
--- a/src/server/e-ews-oof-settings.c
+++ b/src/server/e-ews-oof-settings.c
@@ -463,6 +463,7 @@ ews_oof_settings_initable_init_async (GAsyncInitable *initable,
        EEwsOofSettings *settings;
        EEwsConnection *connection;
        ESoapMessage *message;
+       CamelEwsSettings *ews_settings;
        const gchar *uri, *impersonate_user;
        const gchar *mailbox;
        EEwsServerVersion version;
@@ -474,8 +475,10 @@ ews_oof_settings_initable_init_async (GAsyncInitable *initable,
        impersonate_user = e_ews_connection_get_impersonate_user (connection);
        mailbox = e_ews_connection_get_mailbox (connection);
        version = e_ews_connection_get_server_version (connection);
+       ews_settings = e_ews_connection_ref_settings (connection);
 
        message = e_ews_message_new_with_header (
+               ews_settings,
                uri,
                impersonate_user,
                "GetUserOofSettingsRequest",
@@ -486,6 +489,8 @@ ews_oof_settings_initable_init_async (GAsyncInitable *initable,
                FALSE,
                TRUE);
 
+       g_clear_object (&ews_settings);
+
        e_soap_message_start_element (message, "Mailbox", NULL, NULL);
        e_ews_message_write_string_parameter (
                message, "Address", NULL, mailbox);
@@ -972,6 +977,7 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
        gchar *start_time;
        gchar *end_time;
        EEwsServerVersion version;
+       CamelEwsSettings *ews_settings;
 
        g_return_if_fail (E_IS_EWS_OOF_SETTINGS (settings));
 
@@ -980,6 +986,7 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
        uri = e_ews_connection_get_uri (connection);
        impersonate_user = e_ews_connection_get_impersonate_user (connection);
        version = e_ews_connection_get_server_version (connection);
+       ews_settings = e_ews_connection_ref_settings (connection);
 
        internal_reply = e_ews_oof_settings_dup_internal_reply (settings);
        external_reply = e_ews_oof_settings_dup_external_reply (settings);
@@ -993,6 +1000,7 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
        g_date_time_unref (date_time);
 
        message = e_ews_message_new_with_header (
+               ews_settings,
                uri,
                impersonate_user,
                "SetUserOofSettingsRequest",
@@ -1003,6 +1011,8 @@ e_ews_oof_settings_submit (EEwsOofSettings *settings,
                FALSE,
                TRUE);
 
+       g_clear_object (&ews_settings);
+
        /* <Mailbox> */
 
        e_soap_message_start_element (


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