From: Thadeu Lima de Souza Cascardo <casca...@holoscopio.com>

---
 src/stream.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/stream.c b/src/stream.c
index 6bb316e..e0839a4 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -33,6 +33,7 @@ struct stream_data {
 #ifdef HAVE_GNUTLS
        gnutls_session sess;
        gnutls_certificate_credentials cred;
+       int timeout;
 #endif
 };
 
@@ -55,8 +56,9 @@ tls_pull (iksparser *prs, char *buffer, size_t len)
        struct stream_data *data = iks_user_data (prs);
        int ret;
 
-       ret = data->trans->recv (data->sock, buffer, len, -1);
-       if (ret == -1) return (size_t) -1;
+       ret = data->trans->recv (data->sock, buffer, len, data->timeout);
+       if (!ret) gnutls_transport_set_errno (data->sess, EAGAIN);
+       if (ret == -1 || ret == 0) return (size_t) -1;
        return ret;
 }
 
@@ -91,6 +93,8 @@ handshake (struct stream_data *data)
        gnutls_transport_set_pull_function (data->sess, (gnutls_pull_func) 
tls_pull);
        gnutls_transport_set_ptr (data->sess, data->prs);
 
+       data->timeout = -1;
+
        ret = gnutls_handshake (data->sess);
        if (ret != 0) {
                gnutls_deinit (data->sess);
@@ -489,6 +493,7 @@ iks_recv (iksparser *prs, int timeout)
        while (1) {
 #ifdef HAVE_GNUTLS
                if (data->flags & SF_SECURE) {
+                       data->timeout = timeout;
                        len = gnutls_record_recv (data->sess, data->buf, 
NET_IO_BUF_SIZE - 1);
                } else
 #endif
-- 
1.6.0.6




-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to