68 ERR(
"Unexpected completion key %Ix, completion ovr %p, ovr %p.\n",
key, completion_ovr, ovr );
91 char *server_auth[] = { oid_server_auth };
102 if (
chain->TrustStatus.dwErrorStatus)
104 static const DWORD supportedErrors =
114 else if ((
chain->TrustStatus.dwErrorStatus &
116 (
chain->TrustStatus.dwErrorStatus &
122 else if ((
chain->TrustStatus.dwErrorStatus &
124 (
chain->TrustStatus.dwErrorStatus &
129 else if (
chain->TrustStatus.dwErrorStatus &
135 else if (
chain->TrustStatus.dwErrorStatus & ~supportedErrors)
151 sslExtraPolicyPara.
cbSize =
sizeof(sslExtraPolicyPara);
154 sslExtraPolicyPara.
fdwChecks = security_flags;
155 policyPara.
cbSize =
sizeof(policyPara);
159 &chainCopy, &policyPara,
192 else ERR(
"WSAStartup failed: %d\n",
ret );
216 unsigned int addr_len;
230 WARN(
"unable to create socket (%lu)\n",
ret );
235 ERR(
"SetFileCompletionNotificationModes failed.\n" );
246 ERR(
"unhandled family %u\n", conn->
sockaddr.ss_family );
280 WARN(
"unable to connect to host (%lu)\n",
ret );
298 TRACE(
"Closing connection %p.\n", conn );
316 BOOL check_revocation )
321 SIZE_T read_buf_size = 2048;
336 &
ctx, &out_desc, &attrs,
NULL);
348 ERR(
"send failed\n");
354 out_buf.pvBuffer =
NULL;
359 assert(in_bufs[1].cbBuffer < read_buf_size);
361 memmove(
read_buf, (
BYTE*)in_bufs[0].pvBuffer+in_bufs[0].cbBuffer-in_bufs[1].cbBuffer, in_bufs[1].cbBuffer);
362 in_bufs[0].cbBuffer = in_bufs[1].cbBuffer;
367 in_bufs[1].cbBuffer = 0;
368 in_bufs[1].pvBuffer =
NULL;
370 if(in_bufs[0].cbBuffer + 1024 > read_buf_size) {
379 in_bufs[0].pvBuffer =
read_buf = new_read_buf;
380 read_buf_size += 1024;
391 in_bufs[0].cbBuffer +=
size;
395 TRACE(
"InitializeSecurityContext ret %#lx\n",
status );
399 FIXME(
"SECBUFFER_EXTRA not supported\n");
403 WARN(
"Could not get sizes\n");
412 WARN(
"cert verify failed: %lu\n",
res );
416 WARN(
"Could not get cert\n");
436 WARN(
"Failed to initialize security context: %#lx\n",
status );
446 TRACE(
"established SSL connection\n");
466 WARN(
"EncryptMessage failed: %#lx\n",
res );
472 WARN(
"send failed\n");
483 if (ovr && !conn->
port)
486 ERR(
"Failed to create port.\n" );
555 bufs[0].cbBuffer = buf_len;
564 TRACE(
"renegotiate\n");
568 TRACE(
"context expired\n");
573 assert(buf_len < ssl_buf_size);
652 WARN(
"read_ssl_chunk failed: %lu\n",
res );
692 WARN(
"setsockopt failed (%lu)\n",
err );
712 TRACE(
"checking secure connection, err %lu\n",
err );
756 switch (
res->ai_family)
786 ERR(
"No memory.\n" );
865 if (!conn->
secure)
return 0;
868 WARN(
"QueryContextAttributesW failed: %#lx\n",
res );
INT WSAAPI GetAddrInfoW(IN PCWSTR pszNodeName, IN PCWSTR pszServiceName, IN const ADDRINFOW *ptHints, OUT PADDRINFOW *pptResult)
static struct sockaddr_in sa
#define InterlockedIncrement
#define InterlockedExchange
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static HINSTANCE instance
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID, PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara, PCERT_CHAIN_POLICY_STATUS pPolicyStatus)
BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore, PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, PCCERT_CHAIN_CONTEXT *ppChainContext)
VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext)
#define ERROR_INVALID_PARAMETER
BOOL WINAPI InitOnceExecuteOnce(_Inout_ PINIT_ONCE InitOnce, _In_ __callback PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ LPVOID *Context)
BOOL WINAPI DECLSPEC_HOTPATCH TrySubmitThreadpoolCallback(PTP_SIMPLE_CALLBACK callback, PVOID userdata, TP_CALLBACK_ENVIRON *environment)
static wchar_t * wcsdup(const wchar_t *str)
ULONG netconn_query_data_available(struct netconn *conn)
void netconn_release(struct netconn *conn)
DWORD netconn_resolve(WCHAR *hostname, INTERNET_PORT port, struct sockaddr_storage *addr, int timeout)
DWORD netconn_secure_connect(struct netconn *conn, WCHAR *hostname, DWORD security_flags, CredHandle *cred_handle, BOOL check_revocation)
void netconn_cancel_io(struct netconn *conn)
const void * netconn_get_certificate(struct netconn *conn)
static void winsock_init(void)
DWORD netconn_recv(struct netconn *conn, void *buf, size_t len, int flags, int *recvd)
static BOOL winsock_loaded
static void CALLBACK resolve_proc(TP_CALLBACK_INSTANCE *instance, void *ctx)
static void async_resolve_release(struct async_resolve *async)
void netconn_unload(void)
static BOOL WINAPI winsock_startup(INIT_ONCE *once, void *param, void **ctx)
DWORD netconn_create(struct hostdata *host, const struct sockaddr_storage *sockaddr, int timeout, struct netconn **ret_conn)
void netconn_addref(struct netconn *conn)
BOOL netconn_is_alive(struct netconn *netconn)
static int sock_send(int fd, const void *msg, size_t len, WSAOVERLAPPED *ovr)
static DWORD read_ssl_chunk(struct netconn *conn, void *buf, SIZE_T buf_size, SIZE_T *ret_size, BOOL *eof)
static struct async_resolve * create_async_resolve(const WCHAR *hostname, INTERNET_PORT port)
static int sock_recv(int fd, void *msg, size_t len, int flags)
DWORD netconn_set_timeout(struct netconn *netconn, BOOL send, int value)
static DWORD send_ssl_chunk(struct netconn *conn, const void *msg, size_t size, WSAOVERLAPPED *ovr)
BOOL netconn_wait_overlapped_result(struct netconn *conn, WSAOVERLAPPED *ovr, DWORD *len)
int netconn_get_cipher_strength(struct netconn *conn)
static DWORD netconn_verify_cert(PCCERT_CONTEXT cert, WCHAR *server, DWORD security_flags, BOOL check_revocation)
DWORD netconn_send(struct netconn *conn, const void *msg, size_t len, int *sent, WSAOVERLAPPED *ovr)
static DWORD resolve_hostname(const WCHAR *name, INTERNET_PORT port, struct sockaddr_storage *sa)
static void set_blocking(struct netconn *conn, BOOL blocking)
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
INT WSAAPI WSASend(IN SOCKET s, IN LPWSABUF lpBuffers, IN DWORD dwBufferCount, OUT LPDWORD lpNumberOfBytesSent, IN DWORD dwFlags, IN LPWSAOVERLAPPED lpOverlapped, IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
static void set_error(FCI_Int *fci, int oper, int err)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HANDLE WINAPI CreateIoCompletionPort(IN HANDLE FileHandle, IN HANDLE ExistingCompletionPort, IN ULONG_PTR CompletionKey, IN DWORD NumberOfConcurrentThreads)
BOOL WINAPI SetFileCompletionNotificationModes(IN HANDLE FileHandle, IN UCHAR Flags)
#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS
BOOL WINAPI GetQueuedCompletionStatus(IN HANDLE CompletionHandle, IN LPDWORD lpNumberOfBytesTransferred, OUT PULONG_PTR lpCompletionKey, OUT LPOVERLAPPED *lpOverlapped, IN DWORD dwMilliseconds)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
unsigned __int3264 UINT_PTR
static SecHandle cred_handle
#define ISC_REQ_MANUAL_CRED_VALIDATION
#define ISC_REQ_CONFIDENTIALITY
#define ISC_REQ_ALLOCATE_MEMORY
#define SECBUFFER_STREAM_TRAILER
#define SECBUFFER_STREAM_HEADER
#define ISC_REQ_SEQUENCE_DETECT
#define ISC_REQ_REPLAY_DETECT
#define ISC_REQ_USE_SESSION_KEY
#define SECPKG_ATTR_STREAM_SIZES
#define SECBUFFER_VERSION
void release_host(struct hostdata *host)
#define SECPKG_ATTR_CONNECTION_INFO
#define SECPKG_ATTR_REMOTE_CERT_CONTEXT
namespace GUID const ADDRINFOEXW * hints
INT WSAAPI setsockopt(IN SOCKET s, IN INT level, IN INT optname, IN CONST CHAR FAR *optval, IN INT optlen)
SOCKET WSAAPI WSASocketW(IN INT af, IN INT type, IN INT protocol, IN LPWSAPROTOCOL_INFOW lpProtocolInfo, IN GROUP g, IN DWORD dwFlags)
SECURITY_STATUS WINAPI FreeContextBuffer(PVOID pv)
CERT_TRUST_STATUS TrustStatus
CERT_USAGE_MATCH RequestedUsage
LPSTR * rgpszUsageIdentifier
struct sockaddr_storage addr
SecPkgContext_StreamSizes ssl_sizes
struct sockaddr_storage sockaddr
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
static rfbScreenInfoPtr server
DWORD WINAPI GetLastError(void)
#define INIT_ONCE_STATIC_INIT
#define CERT_TRUST_IS_REVOKED
#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN
#define CERT_TRUST_IS_OFFLINE_REVOCATION
#define szOID_PKIX_KP_SERVER_AUTH
#define CERT_CHAIN_POLICY_SSL
#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
#define CERT_TRUST_IS_PARTIAL_CHAIN
#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE
#define CERT_TRUST_IS_UNTRUSTED_ROOT
#define CERT_TRUST_IS_NOT_TIME_VALID
#define SEC_I_CONTEXT_EXPIRED
#define CERT_E_CN_NO_MATCH
#define SEC_I_RENEGOTIATE
#define SEC_I_CONTINUE_NEEDED
#define SEC_E_INCOMPLETE_MESSAGE
#define ERROR_WINHTTP_NAME_NOT_RESOLVED
#define SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE
#define ERROR_WINHTTP_SECURE_CERT_REVOKED
#define ERROR_WINHTTP_CANNOT_CONNECT
#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID
#define ERROR_WINHTTP_SECURE_CERT_DATE_INVALID
#define ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
#define ERROR_WINHTTP_TIMEOUT
#define ERROR_WINHTTP_SECURE_INVALID_CERT
#define ERROR_WINHTTP_SECURE_CERT_CN_INVALID
#define ERROR_WINHTTP_SECURE_CERT_REV_FAILED
#define ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE
#define SECURITY_FLAG_IGNORE_UNKNOWN_CA
#define ERROR_WINHTTP_SECURE_CHANNEL_ERROR
#define ERROR_WINHTTP_SECURE_INVALID_CA
struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE
#define WSA_FLAG_OVERLAPPED
#define FD_ISSET(fd, set)
int PASCAL FAR WSAGetLastError(void)
int PASCAL FAR WSACleanup(void)
SECURITY_STATUS WINAPI EncryptMessage(PCtxtHandle phContext, ULONG fQOP, PSecBufferDesc pMessage, ULONG MessageSeqNo)
SECURITY_STATUS WINAPI InitializeSecurityContextW(PCredHandle phCredential, PCtxtHandle phContext, SEC_WCHAR *pszTargetName, ULONG fContextReq, ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput, ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput, ULONG *pfContextAttr, PTimeStamp ptsExpiry)
SECURITY_STATUS WINAPI DecryptMessage(PCtxtHandle phContext, PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP)
SECURITY_STATUS WINAPI QueryContextAttributesW(PCtxtHandle phContext, ULONG ulAttribute, void *pBuffer)
SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle phContext)