From: Federico Mena Quintero Date: Thu, 27 May 2010 00:51:00 +0000 (-0500) Subject: Make the SSL stream's stream_write() reusable internally X-Git-Tag: upstream/3.7.4~3042 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8dd38c31e017ec5fa27de6731463009d1bdcd8a0;p=platform%2Fupstream%2Fevolution-data-server.git Make the SSL stream's stream_write() reusable internally We need to write to a PRFileDesc* from the initial step that connects to a SOCKS4 proxy, so we need that function to be reusable for generic write() operations. Signed-off-by: Federico Mena Quintero --- diff --git a/camel/camel-tcp-stream-ssl.c b/camel/camel-tcp-stream-ssl.c index 6baffbf..b0778e9 100644 --- a/camel/camel-tcp-stream-ssl.c +++ b/camel/camel-tcp-stream-ssl.c @@ -264,11 +264,8 @@ tcp_stream_ssl_read (CamelStream *stream, } static gssize -tcp_stream_ssl_write (CamelStream *stream, - const gchar *buffer, - gsize n) +write_to_prfd (PRFileDesc *fd, const gchar *buffer, gsize n) { - CamelTcpStreamSSL *tcp_stream_ssl = CAMEL_TCP_STREAM_SSL (stream); gssize w, written = 0; PRFileDesc *cancel_fd; @@ -281,7 +278,7 @@ tcp_stream_ssl_write (CamelStream *stream, if (cancel_fd == NULL) { do { do { - w = PR_Write (tcp_stream_ssl->priv->sockfd, buffer + written, n - written); + w = PR_Write (fd, buffer + written, n - written); if (w == -1) set_errno (PR_GetError ()); } while (w == -1 && (PR_GetError () == PR_PENDING_INTERRUPT_ERROR || @@ -299,13 +296,13 @@ tcp_stream_ssl_write (CamelStream *stream, /* get O_NONBLOCK options */ sockopts.option = PR_SockOpt_Nonblocking; - PR_GetSocketOption (tcp_stream_ssl->priv->sockfd, &sockopts); + PR_GetSocketOption (fd, &sockopts); sockopts.option = PR_SockOpt_Nonblocking; nonblock = sockopts.value.non_blocking; sockopts.value.non_blocking = TRUE; - PR_SetSocketOption (tcp_stream_ssl->priv->sockfd, &sockopts); + PR_SetSocketOption (fd, &sockopts); - pollfds[0].fd = tcp_stream_ssl->priv->sockfd; + pollfds[0].fd = fd; pollfds[0].in_flags = PR_POLL_WRITE; pollfds[1].fd = cancel_fd; pollfds[1].in_flags = PR_POLL_READ; @@ -332,7 +329,7 @@ tcp_stream_ssl_write (CamelStream *stream, errno = EINTR; } else { do { - w = PR_Write (tcp_stream_ssl->priv->sockfd, buffer + written, n - written); + w = PR_Write (fd, buffer + written, n - written); if (w == -1) set_errno (PR_GetError ()); } while (w == -1 && PR_GetError () == PR_PENDING_INTERRUPT_ERROR); @@ -350,7 +347,7 @@ tcp_stream_ssl_write (CamelStream *stream, error = errno; sockopts.option = PR_SockOpt_Nonblocking; sockopts.value.non_blocking = nonblock; - PR_SetSocketOption (tcp_stream_ssl->priv->sockfd, &sockopts); + PR_SetSocketOption (fd, &sockopts); errno = error; } @@ -360,6 +357,16 @@ tcp_stream_ssl_write (CamelStream *stream, return written; } +static gssize +tcp_stream_ssl_write (CamelStream *stream, + const gchar *buffer, + gsize n) +{ + CamelTcpStreamSSL *ssl = CAMEL_TCP_STREAM_SSL (stream); + + return write_to_prfd (ssl->priv->sockfd, buffer, n); +} + static gint tcp_stream_ssl_flush (CamelStream *stream) {