[evolution-ews/evolution-ews-3-12] Bug 733274 - EWS is very slow to download large messages



commit 10eb3f47f184de1a014f413057a96496584a2255
Author: Milan Crha <mcrha redhat com>
Date:   Fri Jul 18 14:08:16 2014 +0200

    Bug 733274 - EWS is very slow to download large messages

 src/server/e-ews-connection.c |    2 ++
 src/server/e-ews-message.c    |   23 +++++++++++++++++++++++
 src/server/e-ews-message.h    |    2 ++
 3 files changed, 27 insertions(+), 0 deletions(-)
---
diff --git a/src/server/e-ews-connection.c b/src/server/e-ews-connection.c
index 1e589f4..352855a 100644
--- a/src/server/e-ews-connection.c
+++ b/src/server/e-ews-connection.c
@@ -2644,6 +2644,8 @@ e_ews_get_msg_for_url (const gchar *url,
                return NULL;
        }
 
+       e_ews_message_attach_chunk_allocator (msg);
+
        soup_message_headers_append (
                msg->request_headers,
                "User-Agent", "libews/0.1");
diff --git a/src/server/e-ews-message.c b/src/server/e-ews-message.c
index 3612f84..b91aa3f 100644
--- a/src/server/e-ews-message.c
+++ b/src/server/e-ews-message.c
@@ -33,6 +33,27 @@
 #include <libxml/tree.h>
 #include "e-ews-message.h"
 
+static SoupBuffer *
+ews_soup_chunk_allocator (SoupMessage *message,
+                         gsize max_len,
+                         gpointer user_data)
+{
+       gsize len = 32768;
+       guchar *data;
+
+       data = g_new0 (guchar, len);
+
+       return soup_buffer_new_take (data, len);
+}
+
+void
+e_ews_message_attach_chunk_allocator (SoupMessage *message)
+{
+       g_return_if_fail (SOUP_IS_MESSAGE (message));
+
+       soup_message_set_chunk_allocator (message, ews_soup_chunk_allocator, NULL, NULL);
+}
+
 static const gchar *
 convert_server_version_to_string (EEwsServerVersion version)
 {
@@ -84,6 +105,8 @@ e_ews_message_new_with_header (const gchar *uri,
                return NULL;
        }
 
+       e_ews_message_attach_chunk_allocator (SOUP_MESSAGE (msg));
+
        soup_message_headers_append (
                SOUP_MESSAGE (msg)->request_headers,
                "Content-Type", "text/xml; charset=utf-8");
diff --git a/src/server/e-ews-message.h b/src/server/e-ews-message.h
index aca180d..f387c29 100644
--- a/src/server/e-ews-message.h
+++ b/src/server/e-ews-message.h
@@ -38,6 +38,8 @@ typedef enum {
        E_EWS_EXCHANGE_FUTURE
 } EEwsServerVersion;
 
+void           e_ews_message_attach_chunk_allocator
+                                               (SoupMessage *message);
 ESoapMessage * e_ews_message_new_with_header   (const gchar *uri,
                                                 const gchar *impersonate_user,
                                                 const gchar *method_name,


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