]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
qssl: reflect recent code changes in SSL interface
authorKamil Dudka <kdudka@redhat.com>
Wed, 7 Apr 2010 08:07:29 +0000 (10:07 +0200)
committerKamil Dudka <kdudka@redhat.com>
Wed, 7 Apr 2010 08:47:19 +0000 (10:47 +0200)
Reported by Guenter Knauf.

lib/qssl.c
lib/qssl.h
lib/sendf.c

index 3d1b5da2042ebb3ef7962af4c49c5b2f2ca07913..5a08a25593618b6c30da0ef0b63dee1c0842ba94 100644 (file)
@@ -374,8 +374,9 @@ int Curl_qsossl_shutdown(struct connectdata * conn, int sockindex)
 }
 
 
+/* for documentation see Curl_ssl_send() in sslgen.h */
 ssize_t Curl_qsossl_send(struct connectdata * conn, int sockindex,
-                         const void * mem, size_t len)
+                         const void * mem, size_t len, int * curlcode)
 
 {
   /* SSL_Write() is said to return 'int' while write() and send() returns
@@ -391,22 +392,26 @@ ssize_t Curl_qsossl_send(struct connectdata * conn, int sockindex,
       /* The operation did not complete; the same SSL I/O function
          should be called again later. This is basicly an EWOULDBLOCK
          equivalent. */
-      return 0;
+      *curlcode = -1; /* EWOULDBLOCK */
+      return -1;
 
     case SSL_ERROR_IO:
       switch (errno) {
       case EWOULDBLOCK:
       case EINTR:
-        return 0;
+        *curlcode = -1; /* EWOULDBLOCK */
+        return -1;
         }
 
       failf(conn->data, "SSL_Write() I/O error: %s", strerror(errno));
+      *curlcode = CURLE_SEND_ERROR;
       return -1;
     }
 
     /* An SSL error. */
     failf(conn->data, "SSL_Write() returned error %s",
           SSL_Strerror(rc, NULL));
+    *curlcode = CURLE_SEND_ERROR;
     return -1;
   }
 
@@ -414,8 +419,9 @@ ssize_t Curl_qsossl_send(struct connectdata * conn, int sockindex,
 }
 
 
+/* for documentation see Curl_ssl_recv() in sslgen.h */
 ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,
-                         size_t buffersize, bool * wouldblock)
+                         size_t buffersize, int * curlcode)
 
 {
   char error_buffer[120]; /* OpenSSL documents that this must be at
@@ -426,7 +432,6 @@ ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,
 
   buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
   nread = SSL_Read(conn->ssl[num].handle, buf, buffsize);
-  *wouldblock = FALSE;
 
   if(nread < 0) {
     /* failed SSL_read */
@@ -435,21 +440,23 @@ ssize_t Curl_qsossl_recv(struct connectdata * conn, int num, char * buf,
 
     case SSL_ERROR_BAD_STATE:
       /* there's data pending, re-invoke SSL_Read(). */
-      *wouldblock = TRUE;
-      return -1; /* basically EWOULDBLOCK */
+      *curlcode = -1; /* EWOULDBLOCK */
+      return -1;
 
     case SSL_ERROR_IO:
       switch (errno) {
       case EWOULDBLOCK:
-        *wouldblock = TRUE;
+        *curlcode = -1; /* EWOULDBLOCK */
         return -1;
         }
 
       failf(conn->data, "SSL_Read() I/O error: %s", strerror(errno));
+      *curlcode = CURLE_RECV_ERROR;
       return -1;
 
     default:
       failf(conn->data, "SSL read error: %s", SSL_Strerror(nread, NULL));
+      *curlcode = CURLE_RECV_ERROR;
       return -1;
     }
   }
index 9a984bf4d73000f1596640689648991f73e55fc7..a0cf8cc29a8b438331e5dcd3ed08c3dc6a7a33e6 100644 (file)
@@ -36,15 +36,19 @@ void Curl_qsossl_close(struct connectdata *conn, int sockindex);
 int Curl_qsossl_close_all(struct SessionHandle * data);
 int Curl_qsossl_shutdown(struct connectdata * conn, int sockindex);
 
+/* for documentation see Curl_ssl_send() in sslgen.h */
 ssize_t Curl_qsossl_send(struct connectdata * conn,
                          int sockindex,
                          const void * mem,
-                         size_t len);
+                         size_t len,
+                         int * curlcode);
+
+/* for documentation see Curl_ssl_recv() in sslgen.h */
 ssize_t Curl_qsossl_recv(struct connectdata * conn, /* connection data */
                          int num,                   /* socketindex */
                          char * buf,                /* store read data here */
                          size_t buffersize,         /* max amount to read */
-                         bool * wouldblock);
+                         int * curlcode);
 
 size_t Curl_qsossl_version(char * buffer, size_t size);
 int Curl_qsossl_check_cxn(struct connectdata * cxn);
index 90c527558f1161f057a98328210f0016972b5b96..ff4aee30b75ddc79570e23fc8e476ce6c479fe37 100644 (file)
@@ -553,7 +553,7 @@ int Curl_read(struct connectdata *conn, /* connection data */
   }
 
   if(conn->ssl[num].state == ssl_connection_complete) {
-    int curlcode;
+    int curlcode = CURLE_RECV_ERROR;
     nread = Curl_ssl_recv(conn, num, buffertofill, bytesfromsocket, &curlcode);
 
     if(nread == -1)