[evolution-data-server] CamelNetworkService: Return GIOStream instead of CamelStream.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] CamelNetworkService: Return GIOStream instead of CamelStream.
- Date: Tue, 5 Nov 2013 14:37:19 +0000 (UTC)
commit 0b07255b80e92e6b6c05af70f9ef9bcc9979e290
Author: Matthew Barnes <mbarnes redhat com>
Date: Sun Nov 3 08:50:33 2013 -0500
CamelNetworkService: Return GIOStream instead of CamelStream.
Similar to recent CamelDataCache changes. Instead of wrapping a TCP
connection GIOStream in a CamelStream, return the GIOStream directly
and let callers wrap it if they need to with camel_stream_new().
camel/camel-network-service.c | 48 +++++++++------------------
camel/camel-network-service.h | 8 ++--
camel/providers/imapx/camel-imapx-server.c | 28 +++++++++++----
camel/providers/nntp/camel-nntp-store.c | 14 +++++---
camel/providers/pop3/camel-pop3-store.c | 35 +++++++++++++-------
camel/providers/smtp/camel-smtp-transport.c | 40 ++++++++++++++--------
6 files changed, 97 insertions(+), 76 deletions(-)
---
diff --git a/camel/camel-network-service.c b/camel/camel-network-service.c
index 8b28c20..5a89b82 100644
--- a/camel/camel-network-service.c
+++ b/camel/camel-network-service.c
@@ -592,7 +592,7 @@ network_service_private_free (CamelNetworkServicePrivate *priv)
g_slice_free (CamelNetworkServicePrivate, priv);
}
-static CamelStream *
+static GIOStream *
network_service_connect_sync (CamelNetworkService *service,
GCancellable *cancellable,
GError **error)
@@ -603,7 +603,6 @@ network_service_connect_sync (CamelNetworkService *service,
CamelNetworkSecurityMethod method;
CamelNetworkSettings *network_settings;
CamelSettings *settings;
- CamelStream *stream = NULL;
settings = camel_service_ref_settings (CAMEL_SERVICE (service));
@@ -630,17 +629,12 @@ network_service_connect_sync (CamelNetworkService *service,
connection = g_socket_client_connect (
client, connectable, cancellable, error);
- if (connection != NULL) {
- stream = camel_stream_new (G_IO_STREAM (connection));
- g_object_unref (connection);
- }
-
g_object_unref (connectable);
g_object_unref (client);
g_object_unref (settings);
- return stream;
+ return (connection != NULL) ? G_IO_STREAM (connection) : NULL;
}
static GSocketConnectable *
@@ -896,11 +890,11 @@ camel_network_service_get_host_reachable (CamelNetworkService *service)
* connection attempt is cancelled, the function sets @error and returns
* %NULL.
*
- * Returns: a #CamelStream, or %NULL
+ * Returns: a #GIOStream, or %NULL
*
* Since: 3.2
**/
-CamelStream *
+GIOStream *
camel_network_service_connect_sync (CamelNetworkService *service,
GCancellable *cancellable,
GError **error)
@@ -918,35 +912,30 @@ camel_network_service_connect_sync (CamelNetworkService *service,
/**
* camel_network_service_starttls:
* @service: a #CamelNetworkService
- * @stream: a #CamelStream
+ * @base_stream: a #GIOStream
* @error: return location for a #GError, or %NULL
*
- * Replaces @stream's #CamelStream:base-stream with a #GTlsClientConnection
- * wrapping #CamelStream:base-stream, which is assumed to communicate with
- * the server identified by @service's #CamelNetworkService:connectable.
+ * Creates a #GTlsClientConnection wrapping @base_stream, which is
+ * assumed to communicate with the server identified by @service's
+ * #CamelNetworkService:connectable.
*
- * This should typically be called after issuing a STARTTLS command to a
- * server to initiate a Transport Layer Security handshake.
+ * This should typically be called after issuing a STARTTLS command
+ * to a server to initiate a Transport Layer Security handshake.
*
- * Returns: %TRUE on success, %FALSE on failure
+ * Returns: the new #GTlsClientConnection, or %NULL on error
*
* Since: 3.12
**/
-gboolean
+GIOStream *
camel_network_service_starttls (CamelNetworkService *service,
- CamelStream *stream,
+ GIOStream *base_stream,
GError **error)
{
GSocketConnectable *connectable;
GIOStream *tls_client_connection;
- GIOStream *base_stream;
- gboolean success = FALSE;
- g_return_val_if_fail (CAMEL_IS_NETWORK_SERVICE (service), FALSE);
- g_return_val_if_fail (CAMEL_IS_STREAM (stream), FALSE);
-
- base_stream = camel_stream_ref_base_stream (stream);
- g_return_val_if_fail (base_stream != NULL, FALSE);
+ g_return_val_if_fail (CAMEL_IS_NETWORK_SERVICE (service), NULL);
+ g_return_val_if_fail (G_IS_IO_STREAM (base_stream), NULL);
connectable = camel_network_service_ref_connectable (service);
g_return_val_if_fail (connectable != NULL, FALSE);
@@ -959,15 +948,10 @@ camel_network_service_starttls (CamelNetworkService *service,
tls_client_connection, "accept-certificate",
G_CALLBACK (network_service_accept_certificate_cb),
service);
-
- camel_stream_set_base_stream (stream, tls_client_connection);
- g_object_unref (tls_client_connection);
- success = TRUE;
}
- g_object_unref (base_stream);
g_object_unref (connectable);
- return success;
+ return tls_client_connection;
}
diff --git a/camel/camel-network-service.h b/camel/camel-network-service.h
index 7d3479d..dd819a5 100644
--- a/camel/camel-network-service.h
+++ b/camel/camel-network-service.h
@@ -66,7 +66,7 @@ struct _CamelNetworkServiceInterface {
(CamelNetworkService *service,
CamelNetworkSecurityMethod method);
- CamelStream * (*connect_sync) (CamelNetworkService *service,
+ GIOStream * (*connect_sync) (CamelNetworkService *service,
GCancellable *cancellable,
GError **error);
@@ -92,13 +92,13 @@ void camel_network_service_set_connectable
GSocketConnectable *connectable);
gboolean camel_network_service_get_host_reachable
(CamelNetworkService *service);
-CamelStream * camel_network_service_connect_sync
+GIOStream * camel_network_service_connect_sync
(CamelNetworkService *service,
GCancellable *cancellable,
GError **error);
-gboolean camel_network_service_starttls
+GIOStream * camel_network_service_starttls
(CamelNetworkService *service,
- CamelStream *stream,
+ GIOStream *base_stream,
GError **error);
G_END_DECLS
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index bc9c8e9..2d38704 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -4203,10 +4203,12 @@ imapx_connect_to_server (CamelIMAPXServer *is,
{
CamelNetworkSettings *network_settings;
CamelNetworkSecurityMethod method;
- CamelStream *tcp_stream = NULL;
+ CamelStream *stream = NULL;
CamelStream *imapx_stream = NULL;
CamelIMAPXStore *store;
CamelSettings *settings;
+ GIOStream *base_stream;
+ GIOStream *tls_stream;
guint len;
guchar *token;
gint tok;
@@ -4253,15 +4255,18 @@ imapx_connect_to_server (CamelIMAPXServer *is,
}
#endif
- tcp_stream = camel_network_service_connect_sync (
+ base_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (store), cancellable, error);
- if (tcp_stream == NULL) {
+ if (base_stream != NULL) {
+ stream = camel_stream_new (base_stream);
+ g_object_unref (base_stream);
+ } else {
success = FALSE;
goto exit;
}
- imapx_stream = camel_imapx_stream_new (tcp_stream);
+ imapx_stream = camel_imapx_stream_new (stream);
/* CamelIMAPXServer takes ownership of the IMAPX stream.
* We need to set this right away for imapx_command_run()
@@ -4272,7 +4277,7 @@ imapx_connect_to_server (CamelIMAPXServer *is,
is->priv->stream = CAMEL_IMAPX_STREAM (imapx_stream);
g_mutex_unlock (&is->priv->stream_lock);
- g_object_unref (tcp_stream);
+ g_object_unref (stream);
connected:
CAMEL_IMAPX_STREAM (imapx_stream)->tagprefix = is->tagprefix;
@@ -4380,13 +4385,20 @@ imapx_connect_to_server (CamelIMAPXServer *is,
if (!success)
goto exit;
- success = camel_network_service_starttls (
- CAMEL_NETWORK_SERVICE (store), tcp_stream, error);
- if (!success) {
+ base_stream = camel_stream_ref_base_stream (stream);
+ tls_stream = camel_network_service_starttls (
+ CAMEL_NETWORK_SERVICE (store), base_stream, error);
+ g_object_unref (base_stream);
+
+ if (tls_stream != NULL) {
+ camel_stream_set_base_stream (stream, tls_stream);
+ g_object_unref (tls_stream);
+ } else {
g_prefix_error (
error,
_("Failed to connect to IMAP server %s in secure mode: "),
host);
+ success = FALSE;
goto exit;
}
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
index 9063110..548fb02 100644
--- a/camel/providers/nntp/camel-nntp-store.c
+++ b/camel/providers/nntp/camel-nntp-store.c
@@ -350,7 +350,8 @@ connect_to_server (CamelService *service,
CamelNetworkSettings *network_settings;
CamelSettings *settings;
CamelSession *session;
- CamelStream *tcp_stream;
+ CamelStream *stream;
+ GIOStream *base_stream;
const gchar *user_cache_dir;
guchar *buf;
guint len;
@@ -371,14 +372,17 @@ connect_to_server (CamelService *service,
g_object_unref (settings);
- tcp_stream = camel_network_service_connect_sync (
+ base_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
- if (tcp_stream == NULL)
+ if (base_stream == NULL)
goto fail;
- nntp_stream = camel_nntp_stream_new (tcp_stream);
- g_object_unref (tcp_stream);
+ stream = camel_stream_new (base_stream);
+ nntp_stream = camel_nntp_stream_new (stream);
+ g_object_unref (stream);
+
+ g_object_unref (base_stream);
/* Read the greeting, if any. */
if (camel_nntp_stream_line (nntp_stream, &buf, &len, cancellable, error) == -1) {
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
index 42cb5c1..067e76d 100644
--- a/camel/providers/pop3/camel-pop3-store.c
+++ b/camel/providers/pop3/camel-pop3-store.c
@@ -111,9 +111,11 @@ connect_to_server (CamelService *service,
CamelNetworkSettings *network_settings;
CamelNetworkSecurityMethod method;
CamelSettings *settings;
- CamelStream *tcp_stream;
+ CamelStream *stream;
CamelPOP3Engine *pop3_engine = NULL;
CamelPOP3Command *pc;
+ GIOStream *base_stream;
+ GIOStream *tls_stream;
gboolean disable_extensions;
gboolean success = TRUE;
gchar *host;
@@ -132,10 +134,13 @@ connect_to_server (CamelService *service,
g_object_unref (settings);
- tcp_stream = camel_network_service_connect_sync (
+ base_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
- if (tcp_stream == NULL) {
+ if (base_stream != NULL) {
+ stream = camel_stream_new (base_stream);
+ g_object_unref (base_stream);
+ } else {
success = FALSE;
goto exit;
}
@@ -143,7 +148,7 @@ connect_to_server (CamelService *service,
/* parent class connect initialization */
if (CAMEL_SERVICE_CLASS (camel_pop3_store_parent_class)->
connect_sync (service, cancellable, error) == FALSE) {
- g_object_unref (tcp_stream);
+ g_object_unref (stream);
success = FALSE;
goto exit;
}
@@ -151,7 +156,7 @@ connect_to_server (CamelService *service,
if (disable_extensions)
flags |= CAMEL_POP3_ENGINE_DISABLE_EXTENSIONS;
- if (!(pop3_engine = camel_pop3_engine_new (tcp_stream, flags, cancellable, &local_error)) ||
+ if (!(pop3_engine = camel_pop3_engine_new (stream, flags, cancellable, &local_error)) ||
local_error != NULL) {
if (local_error)
g_propagate_error (error, local_error);
@@ -160,13 +165,13 @@ connect_to_server (CamelService *service,
error, CAMEL_ERROR, CAMEL_ERROR_GENERIC,
_("Failed to read a valid greeting from POP server %s"),
host);
- g_object_unref (tcp_stream);
+ g_object_unref (stream);
success = FALSE;
goto exit;
}
if (method != CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT) {
- g_object_unref (tcp_stream);
+ g_object_unref (stream);
goto exit;
}
@@ -202,9 +207,15 @@ connect_to_server (CamelService *service,
}
/* Okay, now toggle SSL/TLS mode */
- success = camel_network_service_starttls (
- CAMEL_NETWORK_SERVICE (service), tcp_stream, error);
- if (!success) {
+ base_stream = camel_stream_ref_base_stream (stream);
+ tls_stream = camel_network_service_starttls (
+ CAMEL_NETWORK_SERVICE (service), base_stream, error);
+ g_object_unref (base_stream);
+
+ if (tls_stream != NULL) {
+ camel_stream_set_base_stream (stream, tls_stream);
+ g_object_unref (tls_stream);
+ } else {
g_prefix_error (
error,
_("Failed to connect to POP server %s in secure mode: "),
@@ -212,7 +223,7 @@ connect_to_server (CamelService *service,
goto stls_exception;
}
- g_object_unref (tcp_stream);
+ g_object_unref (stream);
/* rfc2595, section 4 states that after a successful STLS
* command, the client MUST discard prior CAPA responses */
@@ -235,7 +246,7 @@ stls_exception:
}*/
exception:
- g_object_unref (tcp_stream);
+ g_object_unref (stream);
g_clear_object (&pop3_engine);
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index 2b83893..b364e13 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -116,8 +116,9 @@ connect_to_server (CamelService *service,
CamelNetworkSettings *network_settings;
CamelNetworkSecurityMethod method;
CamelSettings *settings;
- CamelStream *tcp_stream;
+ CamelStream *stream;
GIOStream *base_stream;
+ GIOStream *tls_stream;
gchar *respbuf = NULL;
gboolean success = TRUE;
gchar *host;
@@ -138,25 +139,27 @@ connect_to_server (CamelService *service,
g_object_unref (settings);
- tcp_stream = camel_network_service_connect_sync (
+ base_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
- if (tcp_stream == NULL) {
+ if (base_stream != NULL) {
+ /* get the localaddr - needed later by smtp_helo */
+ transport->local_address =
+ g_socket_connection_get_local_address (
+ G_SOCKET_CONNECTION (base_stream), NULL);
+
+ stream = camel_stream_new (base_stream);
+ g_object_unref (base_stream);
+ } else {
success = FALSE;
goto exit;
}
transport->connected = TRUE;
- /* get the localaddr - needed later by smtp_helo */
- base_stream = camel_stream_ref_base_stream (tcp_stream);
- transport->local_address = g_socket_connection_get_local_address (
- G_SOCKET_CONNECTION (base_stream), NULL);
- g_object_unref (base_stream);
-
- transport->ostream = tcp_stream;
+ transport->ostream = stream;
transport->istream = camel_stream_buffer_new (
- tcp_stream, CAMEL_STREAM_BUFFER_READ);
+ stream, CAMEL_STREAM_BUFFER_READ);
/* Read the greeting, note whether the server is ESMTP or not. */
do {
@@ -219,7 +222,7 @@ connect_to_server (CamelService *service,
d (fprintf (stderr, "sending : STARTTLS\r\n"));
if (camel_stream_write (
- tcp_stream, "STARTTLS\r\n", 10, cancellable, error) == -1) {
+ stream, "STARTTLS\r\n", 10, cancellable, error) == -1) {
g_prefix_error (error, _("STARTTLS command failed: "));
success = FALSE;
goto exit;
@@ -250,13 +253,20 @@ connect_to_server (CamelService *service,
} while (*(respbuf+3) == '-'); /* if we got "220-" then loop again */
/* Okay, now toggle SSL/TLS mode */
- success = camel_network_service_starttls (
- CAMEL_NETWORK_SERVICE (service), tcp_stream, error);
- if (!success) {
+ base_stream = camel_stream_ref_base_stream (stream);
+ tls_stream = camel_network_service_starttls (
+ CAMEL_NETWORK_SERVICE (service), base_stream, error);
+ g_object_unref (base_stream);
+
+ if (tls_stream != NULL) {
+ camel_stream_set_base_stream (stream, tls_stream);
+ g_object_unref (tls_stream);
+ } else {
g_prefix_error (
error,
_("Failed to connect to SMTP server %s in secure mode: "),
host);
+ success = FALSE;
goto exit;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]