static void WSAtoTLSErrno(gnutls_session_t* session) { switch(WSAGetLastError()) { #if (GNUTLS_VERSION_NUMBER >= 0x029901) case WSAEWOULDBLOCK: gnutls_transport_set_errno(session, EAGAIN); break; case WSAEINTR: gnutls_transport_set_errno(session, EINTR); break; default: gnutls_transport_set_errno(session, EIO); break; #else case WSAEWOULDBLOCK: gnutls_transport_set_global_errno(EAGAIN); break; case WSAEINTR: gnutls_transport_set_global_errno(EINTR); break; default: gnutls_transport_set_global_errno(EIO); break; #endif } }
static ssize_t Curl_gtls_pull(void *s, void *buf, size_t len) { ssize_t ret = sread(GNUTLS_POINTER_TO_INT_CAST(s), buf, len); #if defined(USE_WINSOCK) && !defined(GNUTLS_MAPS_WINSOCK_ERRORS) if(ret < 0) gnutls_transport_set_global_errno(gtls_mapped_sockerrno()); #endif return ret; }
static ssize_t Curl_gtls_push(void *s, const void *buf, size_t len) { ssize_t ret = swrite(GNUTLS_POINTER_TO_INT_CAST(s), buf, len); #ifdef USE_WINSOCK if(ret < 0) gnutls_transport_set_global_errno(gtls_mapped_sockerrno()); #endif return ret; }
static ssize_t server_pull (gnutls_transport_ptr_t tr, void *data, size_t len) { if (to_server_len < len) { gnutls_transport_set_global_errno (EAGAIN); return -1; } memcpy (data, to_server, len); memmove (to_server, to_server + len, to_server_len - len); to_server_len -= len; return len; }
static ssize_t client_pull (gnutls_transport_ptr_t tr, void *data, size_t len) { success ("client_pull len %d has %d\n", len, to_client_len); if (to_client_len < len) { gnutls_transport_set_global_errno (EAGAIN); return -1; } memcpy (data, to_client, len); memmove (to_client, to_client + len, to_client_len - len); to_client_len -= len; return len; }
static ssize_t server_pull (gnutls_transport_ptr_t tr, void *data, size_t len) { if (debug) success ("server_pull len %d has %d\n", (int) len, (int) to_server_len); if (to_server_len < len) { gnutls_transport_set_global_errno (EAGAIN); return -1; } memcpy (data, to_server, len); memmove (to_server, to_server + len, to_server_len - len); to_server_len -= len; return len; }