-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwinhttp_websocket.au3
113 lines (97 loc) · 4.64 KB
/
winhttp_websocket.au3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
; https://github.com/microsoft/Windows-classic-samples/blob/master/Samples/WinhttpWebsocket/cpp/WinhttpWebsocket.cpp
#include "WinHttp.au3"
Global Const $WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET = 114
Global Enum _
$WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE = 0, _
$WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE, _
$WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE, _
$WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE, _
$WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE
Global Enum _
$WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS = 1000, _
$WINHTTP_WEB_SOCKET_ENDPOINT_TERMINATED_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_PROTOCOL_ERROR_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_INVALID_DATA_TYPE_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_EMPTY_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_ABORTED_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_INVALID_PAYLOAD_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_POLICY_VIOLATION_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_MESSAGE_TOO_BIG_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_UNSUPPORTED_EXTENSIONS_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_SERVER_ERROR_CLOSE_STATUS, _
$WINHTTP_WEB_SOCKET_SECURE_HANDSHAKE_ERROR_CLOSE_STATUS
Func _WinHttpSetOptionNoParams($hInternet, $iOption)
Local $aCall = DllCall($hWINHTTPDLL__WINHTTP, "bool", "WinHttpSetOption", _
"handle", $hInternet, "dword", $iOption, "ptr", 0, "dword", 0)
If @error Or Not $aCall[0] Then Return SetError(4, 0, 0)
Return 1
EndFunc ;==>_WinHttpSetOptionNoParams
Func _WinHttpWebSocketCompleteUpgrade($hRequest, $pContext = 0)
Local $aCall = DllCall($hWINHTTPDLL__WINHTTP, "handle", "WinHttpWebSocketCompleteUpgrade", _
"handle", $hRequest, _
"DWORD_PTR", $pContext)
If @error Then Return SetError(@error, @extended, -1)
Return $aCall[0]
EndFunc ;==>_WinHttpWebSocketCompleteUpgrade
Func _WinHttpWebSocketSend($hWebSocket, $iBufferType, $vData)
Local $tBuffer = 0, $iBufferLen = 0
If $iBufferType = $WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE and IsBinary($vData) = 0 Then
$vData = StringToBinary($vData)
$iBufferLen = BinaryLen($vData)
Else
$iBufferLen = StringLen($vData)
EndIf
If $iBufferLen > 0 Then
$tBuffer = DllStructCreate("byte[" & $iBufferLen & "]")
DllStructSetData($tBuffer, 1, $vData)
EndIf
Local $aCall = DllCall($hWINHTTPDLL__WINHTTP, "DWORD", "WinHttpWebSocketSend", _
"handle", $hWebSocket, _
"int", $iBufferType, _
"ptr", DllStructGetPtr($tBuffer), _
"DWORD", $iBufferLen)
If @error Then Return SetError(@error, @extended, -1)
Return $aCall[0]
EndFunc ;==>_WinHttpWebSocketSend
Func _WinHttpWebSocketReceive($hWebSocket, $tBuffer, ByRef $iBytesRead, ByRef $iBufferType)
Local $aCall = DllCall($hWINHTTPDLL__WINHTTP, "handle", "WinHttpWebSocketReceive", _
"handle", $hWebSocket, _
"ptr", DllStructGetPtr($tBuffer), _
"DWORD", DllStructGetSize($tBuffer), _
"DWORD*", $iBytesRead, _
"int*", $iBufferType)
If @error Then Return SetError(@error, @extended, -1)
$iBytesRead = $aCall[4]
$iBufferType = $aCall[5]
Return $aCall[0]
EndFunc ;==>_WinHttpWebSocketReceive
Func _WinHttpWebSocketClose($hWebSocket, $iStatus, $tReason = 0)
Local $aCall = DllCall($hWINHTTPDLL__WINHTTP, "handle", "WinHttpWebSocketClose", _
"handle", $hWebSocket, _
"USHORT", $iStatus, _
"ptr", DllStructGetPtr($tReason), _
"DWORD", DllStructGetSize($tReason))
If @error Then Return SetError(@error, @extended, -1)
Return $aCall[0]
EndFunc ;==>_WinHttpWebSocketClose
Func _WinHttpWebSocketShutdown($hWebSocket, $iStatus, $tReason = 0)
Local $aCall = DllCall($hWINHTTPDLL__WINHTTP, "handle", "WinHttpWebSocketShutdown", _
"handle", $hWebSocket, _
"USHORT", $iStatus, _
"ptr", DllStructGetPtr($tReason), _
"DWORD", DllStructGetSize($tReason))
If @error Then Return SetError(@error, @extended, -1)
Return $aCall[0]
EndFunc ;==>_WinHttpWebSocketShutdown
Func _WinHttpWebSocketQueryCloseStatus($hWebSocket, ByRef $iStatus, ByRef $iReasonLengthConsumed, $tCloseReasonBuffer = 0)
Local $aCall = DllCall($hWINHTTPDLL__WINHTTP, "handle", "WinHttpWebSocketQueryCloseStatus", _
"handle", $hWebSocket, _
"USHORT*", $iStatus, _
"ptr", DllStructGetPtr($tCloseReasonBuffer), _
"DWORD", DllStructGetSize($tCloseReasonBuffer), _
"DWORD*", $iReasonLengthConsumed)
If @error Then Return SetError(@error, @extended, -1)
$iStatus = $aCall[2]
$iReasonLengthConsumed = $aCall[5]
Return $aCall[0]
EndFunc ;==>_WinHttpWebSocketQueryCloseStatus