Ken Thomases : secur32: Extract schan_imp_handshake function.

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


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

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

secur32: Extract schan_imp_handshake function.

---

 dlls/secur32/schannel.c |   58 +++++++++++++++++++++++++++-------------------
 1 files changed, 34 insertions(+), 24 deletions(-)

diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index ae12b8e..4e360fa 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -72,6 +72,37 @@ MAKE_FUNCPTR(gnutls_transport_set_push_function);
 #undef MAKE_FUNCPTR
 
 
+static SECURITY_STATUS schan_imp_handshake(gnutls_session_t s)
+{
+    int err = pgnutls_handshake(s);
+    switch(err)
+    {
+        case GNUTLS_E_SUCCESS:
+            TRACE("Handshake completed\n");
+            return SEC_E_OK;
+
+        case GNUTLS_E_AGAIN:
+            TRACE("Continue...\n");
+            return SEC_I_CONTINUE_NEEDED;
+
+        case GNUTLS_E_WARNING_ALERT_RECEIVED:
+        case GNUTLS_E_FATAL_ALERT_RECEIVED:
+        {
+            gnutls_alert_description_t alert = pgnutls_alert_get(s);
+            const char *alert_name = pgnutls_alert_get_name(alert);
+            WARN("ALERT: %d %s\n", alert, alert_name);
+            return SEC_E_INTERNAL_ERROR;
+        }
+
+        default:
+            pgnutls_perror(err);
+            return SEC_E_INTERNAL_ERROR;
+    }
+
+    /* Never reached */
+    return SEC_E_OK;
+}
+
 static unsigned int schannel_get_cipher_block_size(gnutls_cipher_algorithm_t cipher)
 {
     const struct
@@ -867,6 +898,7 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextW(
     struct schan_credentials *cred;
     struct schan_transport transport;
     int err;
+    SECURITY_STATUS ret;
 
     TRACE("%p %p %s 0x%08x %d %d %p %d %p %p %p %p\n", phCredential, phContext,
      debugstr_w(pszTargetName), fContextReq, Reserved1, TargetDataRep, pInput,
@@ -948,7 +980,7 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextW(
     pgnutls_transport_set_ptr(ctx->session, &transport);
 
     /* Perform the TLS handshake */
-    err = pgnutls_handshake(ctx->session);
+    ret = schan_imp_handshake(ctx->session);
 
     if(transport.in.offset && transport.in.offset != pInput->pBuffers[0].cbBuffer) {
         if(pInput->cBuffers<2 || pInput->pBuffers[1].BufferType!=SECBUFFER_EMPTY)
@@ -969,29 +1001,7 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextW(
     if (ctx->req_ctx_attr & ISC_REQ_ALLOCATE_MEMORY)
         *pfContextAttr |= ISC_RET_ALLOCATED_MEMORY;
 
-    switch(err)
-    {
-        case GNUTLS_E_SUCCESS:
-            TRACE("Handshake completed\n");
-            return SEC_E_OK;
-
-        case GNUTLS_E_AGAIN:
-            TRACE("Continue...\n");
-            return SEC_I_CONTINUE_NEEDED;
-
-        case GNUTLS_E_WARNING_ALERT_RECEIVED:
-        case GNUTLS_E_FATAL_ALERT_RECEIVED:
-        {
-            gnutls_alert_description_t alert = pgnutls_alert_get(ctx->session);
-            const char *alert_name = pgnutls_alert_get_name(alert);
-            WARN("ALERT: %d %s\n", alert, alert_name);
-            return SEC_E_INTERNAL_ERROR;
-        }
-
-        default:
-            pgnutls_perror(err);
-            return SEC_E_INTERNAL_ERROR;
-    }
+    return ret;
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list