Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
e3ab70b8
Commit
e3ab70b8
authored
Jun 24, 2020
by
Hans Leidekker
Committed by
Alexandre Julliard
Jun 24, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winhttp/tests: Add more WebSocket tests.
Signed-off-by:
Hans Leidekker
<
hans@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
6d564bd5
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
148 additions
and
8 deletions
+148
-8
winhttp.c
dlls/winhttp/tests/winhttp.c
+148
-8
No files found.
dlls/winhttp/tests/winhttp.c
View file @
e3ab70b8
...
...
@@ -27,7 +27,6 @@
#include <winhttp.h>
#include <wincrypt.h>
#include <winreg.h>
#include <stdio.h>
#include <initguid.h>
#include <httprequest.h>
#include <httprequestid.h>
...
...
@@ -37,7 +36,12 @@
DEFINE_GUID
(
GUID_NULL
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
);
static
DWORD
(
WINAPI
*
pWinHttpWebSocketClose
)(
HINTERNET
,
USHORT
,
void
*
,
DWORD
);
static
HINTERNET
(
WINAPI
*
pWinHttpWebSocketCompleteUpgrade
)(
HINTERNET
,
DWORD_PTR
);
static
DWORD
(
WINAPI
*
pWinHttpWebSocketQueryCloseStatus
)(
HINTERNET
,
USHORT
*
,
void
*
,
DWORD
,
DWORD
*
);
static
DWORD
(
WINAPI
*
pWinHttpWebSocketReceive
)(
HINTERNET
,
void
*
,
DWORD
,
DWORD
*
,
WINHTTP_WEB_SOCKET_BUFFER_TYPE
*
);
static
DWORD
(
WINAPI
*
pWinHttpWebSocketSend
)(
HINTERNET
,
WINHTTP_WEB_SOCKET_BUFFER_TYPE
,
void
*
,
DWORD
);
static
DWORD
(
WINAPI
*
pWinHttpWebSocketShutdown
)(
HINTERNET
,
USHORT
,
void
*
,
DWORD
);
static
BOOL
proxy_active
(
void
)
{
...
...
@@ -2440,9 +2444,9 @@ static DWORD CALLBACK server_thread(LPVOID param)
strcat
(
headers
,
"
\r\n\r\n
"
);
send
(
c
,
headers
,
strlen
(
headers
),
0
);
continue
;
}
else
send
(
c
,
notokmsg
,
sizeof
(
notokmsg
)
-
1
,
0
);
continue
;
}
if
(
strstr
(
buffer
,
"GET /quit"
))
{
...
...
@@ -3097,11 +3101,13 @@ static void test_head_request(int port)
static
void
test_websocket
(
int
port
)
{
HINTERNET
session
,
connection
,
request
,
socket
;
HINTERNET
session
,
connection
,
request
,
socket
,
socket2
;
DWORD
size
,
len
,
count
,
status
,
index
,
error
;
DWORD_PTR
ctx
;
WINHTTP_WEB_SOCKET_BUFFER_TYPE
type
;
WCHAR
header
[
32
];
char
buf
[
128
];
char
buf
[
128
],
*
large_buf
;
USHORT
close_status
;
BOOL
ret
;
if
(
!
pWinHttpWebSocketCompleteUpgrade
)
...
...
@@ -3215,7 +3221,7 @@ static void test_websocket(int port)
len
=
0xdeadbeef
;
size
=
sizeof
(
len
);
ret
=
WinHttpQueryHeaders
(
request
,
WINHTTP_QUERY_CONTENT_LENGTH
|
WINHTTP_QUERY_FLAG_NUMBER
,
NULL
,
&
len
,
&
size
,
0
);
&
size
,
NULL
);
ok
(
!
ret
,
"success
\n
"
);
index
=
0
;
...
...
@@ -3226,6 +3232,12 @@ static void test_websocket(int port)
socket
=
pWinHttpWebSocketCompleteUpgrade
(
request
,
0
);
ok
(
socket
!=
NULL
,
"got %u
\n
"
,
GetLastError
());
size
=
sizeof
(
header
);
ret
=
WinHttpQueryHeaders
(
socket
,
WINHTTP_QUERY_UPGRADE
,
NULL
,
&
header
,
&
size
,
NULL
);
error
=
GetLastError
();
ok
(
!
ret
,
"success
\n
"
);
ok
(
error
==
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
,
"got %u
\n
"
,
error
);
header
[
0
]
=
0
;
size
=
sizeof
(
header
);
ret
=
WinHttpQueryHeaders
(
request
,
WINHTTP_QUERY_UPGRADE
,
NULL
,
&
header
,
&
size
,
NULL
);
...
...
@@ -3243,16 +3255,24 @@ static void test_websocket(int port)
ret
=
WinHttpQueryHeaders
(
request
,
WINHTTP_QUERY_CUSTOM
,
L"Sec-WebSocket-Accept"
,
buf
,
&
size
,
&
index
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
/* Send/Receive on websock */
ret
=
WinHttpCloseHandle
(
connection
);
/* sending request again generates new key */
ret
=
WinHttpSendRequest
(
request
,
NULL
,
0
,
NULL
,
0
,
0
,
0
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
/* and creates a new websocket */
socket2
=
pWinHttpWebSocketCompleteUpgrade
(
request
,
0
);
ok
(
socket2
!=
NULL
,
"got %u
\n
"
,
GetLastError
());
ok
(
socket2
!=
socket
,
"got same socket
\n
"
);
WinHttpCloseHandle
(
connection
);
/* request handle is still valid */
size
=
sizeof
(
ctx
);
ret
=
WinHttpQueryOption
(
request
,
WINHTTP_OPTION_CONTEXT_VALUE
,
&
ctx
,
&
size
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
ret
=
WinHttpCloseHandle
(
socket2
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
ret
=
WinHttpCloseHandle
(
socket
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
...
...
@@ -3267,6 +3287,121 @@ static void test_websocket(int port)
ret
=
WinHttpCloseHandle
(
request
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
session
=
WinHttpOpen
(
L"winetest"
,
0
,
NULL
,
NULL
,
0
);
ok
(
session
!=
NULL
,
"got %u
\n
"
,
GetLastError
());
connection
=
WinHttpConnect
(
session
,
L"echo.websocket.org"
,
0
,
0
);
ok
(
connection
!=
NULL
,
"got %u
\n
"
,
GetLastError
());
request
=
WinHttpOpenRequest
(
connection
,
L"GET"
,
L"/"
,
NULL
,
NULL
,
NULL
,
0
);
ok
(
request
!=
NULL
,
"got %u
\n
"
,
GetLastError
());
ret
=
WinHttpSetOption
(
request
,
WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET
,
NULL
,
0
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
ret
=
WinHttpSendRequest
(
request
,
NULL
,
0
,
NULL
,
0
,
0
,
0
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
ret
=
WinHttpReceiveResponse
(
request
,
NULL
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
status
=
0xdeadbeef
;
size
=
sizeof
(
status
);
ret
=
WinHttpQueryHeaders
(
request
,
WINHTTP_QUERY_STATUS_CODE
|
WINHTTP_QUERY_FLAG_NUMBER
,
NULL
,
&
status
,
&
size
,
NULL
);
ok
(
ret
,
"got %u
\n
"
,
GetLastError
());
ok
(
status
==
HTTP_STATUS_SWITCH_PROTOCOLS
,
"got %u
\n
"
,
status
);
socket
=
pWinHttpWebSocketCompleteUpgrade
(
request
,
0
);
ok
(
socket
!=
NULL
,
"got %u
\n
"
,
GetLastError
());
error
=
pWinHttpWebSocketSend
(
socket
,
WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE
,
NULL
,
1
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
large_buf
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
buf
)
*
2
);
memcpy
(
large_buf
,
"hello"
,
sizeof
(
"hello"
));
memcpy
(
large_buf
+
sizeof
(
buf
),
"world"
,
sizeof
(
"world"
));
error
=
pWinHttpWebSocketSend
(
socket
,
WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE
,
large_buf
,
sizeof
(
buf
)
*
2
);
ok
(
!
error
,
"got %u
\n
"
,
error
);
HeapFree
(
GetProcessHeap
(),
0
,
large_buf
);
error
=
pWinHttpWebSocketReceive
(
socket
,
NULL
,
0
,
NULL
,
NULL
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketReceive
(
socket
,
buf
,
0
,
NULL
,
NULL
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketReceive
(
socket
,
NULL
,
1
,
NULL
,
NULL
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
buf
[
0
]
=
0
;
count
=
0
;
type
=
0xdeadbeef
;
error
=
pWinHttpWebSocketReceive
(
socket
,
buf
,
sizeof
(
buf
),
&
count
,
&
type
);
ok
(
!
error
,
"got %u
\n
"
,
error
);
ok
(
buf
[
0
]
==
'h'
,
"got %c
\n
"
,
buf
[
0
]);
ok
(
count
==
sizeof
(
buf
),
"got %u
\n
"
,
count
);
ok
(
type
==
WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE
,
"got %u
\n
"
,
type
);
buf
[
0
]
=
0
;
count
=
0
;
type
=
0xdeadbeef
;
error
=
pWinHttpWebSocketReceive
(
socket
,
buf
,
sizeof
(
buf
),
&
count
,
&
type
);
ok
(
!
error
,
"got %u
\n
"
,
error
);
ok
(
buf
[
0
]
==
'w'
,
"got %c
\n
"
,
buf
[
0
]);
ok
(
count
==
sizeof
(
buf
),
"got %u
\n
"
,
count
);
ok
(
type
==
WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE
,
"got %u
\n
"
,
type
);
error
=
pWinHttpWebSocketShutdown
(
socket
,
WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS
,
NULL
,
1
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketShutdown
(
socket
,
WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS
,
(
void
*
)
"success"
,
sizeof
(
"success"
));
ok
(
!
error
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketClose
(
socket
,
WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS
,
NULL
,
1
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketClose
(
socket
,
WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS
,
(
void
*
)
"success2"
,
sizeof
(
"success2"
));
ok
(
!
error
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketQueryCloseStatus
(
socket
,
NULL
,
NULL
,
0
,
NULL
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketQueryCloseStatus
(
socket
,
&
close_status
,
NULL
,
0
,
NULL
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketQueryCloseStatus
(
socket
,
&
close_status
,
buf
,
0
,
NULL
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketQueryCloseStatus
(
socket
,
&
close_status
,
buf
,
sizeof
(
buf
),
NULL
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
error
=
pWinHttpWebSocketQueryCloseStatus
(
socket
,
NULL
,
NULL
,
0
,
&
len
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
len
=
0
;
error
=
pWinHttpWebSocketQueryCloseStatus
(
socket
,
&
close_status
,
NULL
,
0
,
&
len
);
ok
(
error
==
ERROR_INSUFFICIENT_BUFFER
,
"got %u
\n
"
,
error
);
ok
(
len
,
"len not set
\n
"
);
error
=
pWinHttpWebSocketQueryCloseStatus
(
socket
,
&
close_status
,
NULL
,
1
,
&
len
);
ok
(
error
==
ERROR_INVALID_PARAMETER
,
"got %u
\n
"
,
error
);
close_status
=
0xdead
;
len
=
0xdeadbeef
;
memset
(
buf
,
0
,
sizeof
(
buf
));
error
=
pWinHttpWebSocketQueryCloseStatus
(
socket
,
&
close_status
,
buf
,
sizeof
(
buf
),
&
len
);
ok
(
!
error
,
"got %u
\n
"
,
error
);
ok
(
close_status
==
1000
,
"got %08x
\n
"
,
close_status
);
ok
(
len
==
sizeof
(
"success"
),
"got %u
\n
"
,
len
);
WinHttpCloseHandle
(
socket
);
WinHttpCloseHandle
(
request
);
WinHttpCloseHandle
(
connection
);
WinHttpCloseHandle
(
session
);
}
static
void
test_not_modified
(
int
port
)
...
...
@@ -4942,7 +5077,12 @@ START_TEST (winhttp)
DWORD
ret
;
HMODULE
mod
=
GetModuleHandleA
(
"winhttp.dll"
);
pWinHttpWebSocketClose
=
(
void
*
)
GetProcAddress
(
mod
,
"WinHttpWebSocketClose"
);
pWinHttpWebSocketCompleteUpgrade
=
(
void
*
)
GetProcAddress
(
mod
,
"WinHttpWebSocketCompleteUpgrade"
);
pWinHttpWebSocketQueryCloseStatus
=
(
void
*
)
GetProcAddress
(
mod
,
"WinHttpWebSocketQueryCloseStatus"
);
pWinHttpWebSocketSend
=
(
void
*
)
GetProcAddress
(
mod
,
"WinHttpWebSocketSend"
);
pWinHttpWebSocketShutdown
=
(
void
*
)
GetProcAddress
(
mod
,
"WinHttpWebSocketShutdown"
);
pWinHttpWebSocketReceive
=
(
void
*
)
GetProcAddress
(
mod
,
"WinHttpWebSocketReceive"
);
test_WinHttpOpenRequest
();
test_WinHttpSendRequest
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment