Commit a5715ed6 authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

secur32: Extract schan_imp_send function.

parent 9942edac
...@@ -71,6 +71,25 @@ MAKE_FUNCPTR(gnutls_transport_set_pull_function); ...@@ -71,6 +71,25 @@ MAKE_FUNCPTR(gnutls_transport_set_pull_function);
MAKE_FUNCPTR(gnutls_transport_set_push_function); MAKE_FUNCPTR(gnutls_transport_set_push_function);
#undef MAKE_FUNCPTR #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 #define SCHAN_INVALID_HANDLE ~0UL
enum schan_handle_type enum schan_handle_type
...@@ -1097,7 +1116,6 @@ static SECURITY_STATUS SEC_ENTRY schan_EncryptMessage(PCtxtHandle context_handle ...@@ -1097,7 +1116,6 @@ static SECURITY_STATUS SEC_ENTRY schan_EncryptMessage(PCtxtHandle context_handle
SIZE_T data_size; SIZE_T data_size;
char *data; char *data;
ssize_t sent = 0; ssize_t sent = 0;
ssize_t ret;
int idx; int idx;
TRACE("context_handle %p, quality %d, message %p, message_seq_no %d\n", 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 ...@@ -1130,19 +1148,18 @@ static SECURITY_STATUS SEC_ENTRY schan_EncryptMessage(PCtxtHandle context_handle
while (sent < data_size) while (sent < data_size)
{ {
ret = pgnutls_record_send(ctx->session, data + sent, data_size - sent); size_t length = data_size - sent;
if (ret < 0) 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) HeapFree(GetProcessHeap(), 0, data);
{ ERR("Returning %d\n", status);
pgnutls_perror(ret); return status;
HeapFree(GetProcessHeap(), 0, data);
ERR("Returning SEC_E_INTERNAL_ERROR\n");
return SEC_E_INTERNAL_ERROR;
}
else break;
} }
sent += ret;
sent += length;
} }
TRACE("Sent %zd bytes\n", sent); TRACE("Sent %zd bytes\n", sent);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment