]> granicus.if.org Git - neomutt/commitdiff
Fix sending long commands when using gnutls.
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 3 Apr 2008 15:08:13 +0000 (17:08 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 3 Apr 2008 15:08:13 +0000 (17:08 +0200)
mutt_ssl_gnutls.c

index 873498e8c92b0c08aa3faf6d2a3a5f2614c16b68..f537f8fde920a09cac326e0b97a52052189d539b 100644 (file)
@@ -112,6 +112,7 @@ static int tls_socket_write (CONNECTION* conn, const char* buf, size_t len)
 {
   tlssockdata *data = conn->sockdata;
   int ret;
+  size_t sent = 0;
 
   if (!data)
   {
@@ -120,14 +121,23 @@ static int tls_socket_write (CONNECTION* conn, const char* buf, size_t len)
     return -1;
   }
 
-  ret = gnutls_record_send (data->state, buf, len);
-  if (ret < 0 && gnutls_error_is_fatal(ret) == 1)
+  do
   {
-    mutt_error ("tls_socket_write (%s)", gnutls_strerror (ret));
-    mutt_sleep (4);
-    return -1;
-  }
-  return ret;
+    ret = gnutls_record_send (data->state, buf + sent, len - sent);
+    if (ret < 0)
+    {
+      if (gnutls_error_is_fatal(ret) == 1)
+      {
+       mutt_error ("tls_socket_write (%s)", gnutls_strerror (ret));
+       mutt_sleep (4);
+       return -1;
+      }
+      return ret;
+    }
+    sent += ret;
+  } while (sent < len);
+
+  return sent;
 }
 
 static int tls_socket_open (CONNECTION* conn)