[evolution-ews] Bug 763991 - Add User-Agent setting in mail Properties
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] Bug 763991 - Add User-Agent setting in mail Properties
- Date: Wed, 23 Mar 2016 13:44:48 +0000 (UTC)
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]