Ken Thomases : secur32: Extract schan_imp_send function.

Alexandre Julliard julliard at winehq.org
Mon Mar 14 14:29:41 CDT 2011


Module: wine
Branch: master
Commit: a5715ed6258db9fbfa7ad1ce6c442f82694f4ba3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a5715ed6258db9fbfa7ad1ce6c442f82694f4ba3

Author: Ken Thomases <ken at codeweavers.com>
Date:   Sun Mar 13 18:57:04 2011 -0500

secur32: Extract schan_imp_send function.

---

 dlls/secur32/schannel.c |   41 +++++++++++++++++++++++++++++------------
 1 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index a36106a..3a7113e 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -71,6 +71,25 @@ MAKE_FUNCPTR(gnutls_transport_set_pull_function);
 MAKE_FUNCPTR(gnutls_transport_set_push_function);
 #undef MAKE_FUNCPTR
 
+
+static SECURITY_STATUS schan_imp_send(gnutls_session_t s, const void *buffer,
+                                      size_t *length)
+{
+    ssize_t ret = pgnutls_record_send(s, buffer, *length);
+    if (ret >= 0)
+        *length = ret;
+    else if (ret == GNUTLS_E_AGAIN)
+        return SEC_I_CONTINUE_NEEDED;
+    else
+    {
+        pgnutls_perror(ret);
+        return SEC_E_INTERNAL_ERROR;
+    }
+
+    return SEC_E_OK;
+}
+
+
 #define SCHAN_INVALID_HANDLE ~0UL
 
 enum schan_handle_type
@@ -1097,7 +1116,6 @@ static SECURITY_STATUS SEC_ENTRY schan_EncryptMessage(PCtxtHandle context_handle
     SIZE_T data_size;
     char *data;
     ssize_t sent = 0;
-    ssize_t ret;
     int idx;
 
     TRACE("context_handle %p, quality %d, message %p, message_seq_no %d\n",
@@ -1130,19 +1148,18 @@ static SECURITY_STATUS SEC_ENTRY schan_EncryptMessage(PCtxtHandle context_handle
 
     while (sent < data_size)
     {
-        ret = pgnutls_record_send(ctx->session, data + sent, data_size - sent);
-        if (ret < 0)
+        size_t length = data_size - sent;
+        SECURITY_STATUS status = schan_imp_send(ctx->session, data + sent, &length);
+        if (status == SEC_I_CONTINUE_NEEDED)
+            break;
+        else if (status != SEC_E_OK)
         {
-            if (ret != GNUTLS_E_AGAIN)
-            {
-                pgnutls_perror(ret);
-                HeapFree(GetProcessHeap(), 0, data);
-                ERR("Returning SEC_E_INTERNAL_ERROR\n");
-                return SEC_E_INTERNAL_ERROR;
-            }
-            else break;
+            HeapFree(GetProcessHeap(), 0, data);
+            ERR("Returning %d\n", status);
+            return status;
         }
-        sent += ret;
+
+        sent += length;
     }
 
     TRACE("Sent %zd bytes\n", sent);




More information about the wine-cvs mailing list