diff -up evolution-data-server-3.12.11/camel/camel-network-service.c.smtp-timeout-change evolution-data-server-3.12.11/camel/camel-network-service.c
--- evolution-data-server-3.12.11/camel/camel-network-service.c.smtp-timeout-change 2015-01-12 14:23:00.000000000 +0100
+++ evolution-data-server-3.12.11/camel/camel-network-service.c 2015-05-28 11:29:50.007493148 +0200
@@ -659,8 +659,10 @@ network_service_connect_sync (CamelNetwo
GSocket *socket;
socket = g_socket_connection_get_socket (connection);
- if (socket)
+ if (socket) {
g_socket_set_timeout (socket, 90);
+ g_socket_set_keepalive (socket, TRUE);
+ }
}
return (connection != NULL) ? G_IO_STREAM (connection) : NULL;
diff -up evolution-data-server-3.12.11/camel/camel-stream.c.smtp-timeout-change evolution-data-server-3.12.11/camel/camel-stream.c
--- evolution-data-server-3.12.11/camel/camel-stream.c.smtp-timeout-change 2015-05-28 11:30:32.653491341 +0200
+++ evolution-data-server-3.12.11/camel/camel-stream.c 2015-05-28 11:30:37.965491116 +0200
@@ -149,20 +149,25 @@ stream_write (CamelStream *stream,
GError **error)
{
GIOStream *base_stream;
- gssize n_bytes_written = (gssize) n;
+ gssize n_bytes_written = -1;
base_stream = camel_stream_ref_base_stream (stream);
if (base_stream != NULL) {
GOutputStream *output_stream;
+ gsize n_written = 0;
output_stream = g_io_stream_get_output_stream (base_stream);
stream->eos = FALSE;
- n_bytes_written = g_output_stream_write (
- output_stream, buffer, n, cancellable, error);
+ if (g_output_stream_write_all (output_stream, buffer, n, &n_written, cancellable, error))
+ n_bytes_written = (gssize) n_written;
+ else
+ n_bytes_written = -1;
g_object_unref (base_stream);
+ } else {
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Cannot write with no base stream"));
}
return n_bytes_written;
diff -up evolution-data-server-3.12.11/camel/providers/smtp/camel-smtp-transport.c.smtp-timeout-change evolution-data-server-3.12.11/camel/providers/smtp/camel-smtp-transport.c
--- evolution-data-server-3.12.11/camel/providers/smtp/camel-smtp-transport.c.smtp-timeout-change 2014-10-14 15:32:01.000000000 +0200
+++ evolution-data-server-3.12.11/camel/providers/smtp/camel-smtp-transport.c 2015-05-28 11:29:50.007493148 +0200
@@ -1444,6 +1444,36 @@ smtp_rcpt (CamelSmtpTransport *transport
return TRUE;
}
+static void
+smtp_maybe_update_socket_timeout (CamelStream *strm,
+ gint timeout_seconds)
+{
+ GIOStream *base_strm = camel_stream_ref_base_stream (strm);
+
+ if (G_IS_TLS_CONNECTION (base_strm)) {
+ GIOStream *base_io_stream = NULL;
+
+ g_object_get (G_OBJECT (base_strm), "base-io-stream", &base_io_stream, NULL);
+
+ g_object_unref (base_strm);
+ base_strm = base_io_stream;
+ } else if (base_strm) {
+ g_object_ref (base_strm);
+ }
+
+ if (G_IS_SOCKET_CONNECTION (base_strm)) {
+ GSocket *socket;
+
+ socket = g_socket_connection_get_socket (G_SOCKET_CONNECTION (base_strm));
+ if (socket) {
+ if (timeout_seconds > g_socket_get_timeout (socket))
+ g_socket_set_timeout (socket, timeout_seconds);
+ }
+ }
+
+ g_clear_object (&base_strm);
+}
+
static gboolean
smtp_data (CamelSmtpTransport *transport,
CamelMimeMessage *message,
@@ -1532,6 +1562,9 @@ smtp_data (CamelSmtpTransport *transport
CAMEL_DATA_WRAPPER (message),
CAMEL_STREAM (null), NULL, NULL);
+ /* Set the upload timeout to an equal of 512 bytes per second */
+ smtp_maybe_update_socket_timeout (transport->ostream, null->written / 512);
+
filtered_stream = camel_stream_filter_new (transport->ostream);
/* setup progress reporting for message sending... */