1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WinSock 2 API
4 * FILE: dll/win32/ws2_32/src/sputil.c
5 * PURPOSE: Transport Service Provider Utility Functions
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 #include <ws2_32.h>
12
13 #define NDEBUG
14 #include <debug.h>
15
16 /* FUNCTIONS *****************************************************************/
17
18 /*
19 * @unimplemented
20 */
21 INT
22 WSPAPI
WPUCompleteOverlappedRequest(IN SOCKET s,IN LPWSAOVERLAPPED lpOverlapped,IN DWORD dwError,IN DWORD cbTransferred,OUT LPINT lpErrno)23 WPUCompleteOverlappedRequest(IN SOCKET s,
24 IN LPWSAOVERLAPPED lpOverlapped,
25 IN DWORD dwError,
26 IN DWORD cbTransferred,
27 OUT LPINT lpErrno)
28 {
29 UNIMPLEMENTED;
30 return 0;
31 }
32
33 /*
34 * @unimplemented
35 */
36 BOOL
37 WSPAPI
WPUCloseEvent(IN WSAEVENT hEvent,OUT LPINT lpErrno)38 WPUCloseEvent(IN WSAEVENT hEvent,
39 OUT LPINT lpErrno)
40 {
41 UNIMPLEMENTED;
42 return FALSE;
43 }
44
45 /*
46 * @unimplemented
47 */
48 INT
49 WSPAPI
WPUCloseThread(IN LPWSATHREADID lpThreadId,OUT LPINT lpErrno)50 WPUCloseThread(IN LPWSATHREADID lpThreadId,
51 OUT LPINT lpErrno)
52 {
53 UNIMPLEMENTED;
54 return 0;
55 }
56
57 /*
58 * @unimplemented
59 */
60 WSAEVENT
61 WSPAPI
WPUCreateEvent(OUT LPINT lpErrno)62 WPUCreateEvent(OUT LPINT lpErrno)
63 {
64 UNIMPLEMENTED;
65 return (WSAEVENT)0;
66 }
67
68 /*
69 * @unimplemented
70 */
71 INT
72 WSPAPI
WPUOpenCurrentThread(OUT LPWSATHREADID lpThreadId,OUT LPINT lpErrno)73 WPUOpenCurrentThread(OUT LPWSATHREADID lpThreadId,
74 OUT LPINT lpErrno)
75 {
76 UNIMPLEMENTED;
77 return 0;
78 }
79
80 /*
81 * @implemented
82 */
83 BOOL
84 WSPAPI
WPUPostMessage(IN HWND hWnd,IN UINT Msg,IN WPARAM wParam,IN LPARAM lParam)85 WPUPostMessage(IN HWND hWnd,
86 IN UINT Msg,
87 IN WPARAM wParam,
88 IN LPARAM lParam)
89 {
90 /* Make sure we have a post routine */
91 if (!WsSockPostRoutine) WsSockPostRoutine = PostMessage;
92
93 /* Call it */
94 return WsSockPostRoutine(hWnd, Msg, wParam, lParam);
95 }
96
97 /*
98 * @implemented
99 */
100 INT
101 WSPAPI
WPUQueryBlockingCallback(IN DWORD dwCatalogEntryId,OUT LPBLOCKINGCALLBACK FAR * lplpfnCallback,OUT PDWORD_PTR lpdwContext,OUT LPINT lpErrno)102 WPUQueryBlockingCallback(IN DWORD dwCatalogEntryId,
103 OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback,
104 OUT PDWORD_PTR lpdwContext,
105 OUT LPINT lpErrno)
106 {
107 PWSPROCESS Process;
108 PWSTHREAD Thread;
109 PTCATALOG Catalog;
110 INT ErrorCode;
111 INT Status;
112 LPBLOCKINGCALLBACK Callback = NULL;
113 PTCATALOG_ENTRY Entry;
114 DWORD_PTR Context = 0;
115 DPRINT("WPUQueryBlockingCallback: %lx \n", dwCatalogEntryId);
116
117 /* Enter prolog */
118 if ((ErrorCode = WsApiProlog(&Process, &Thread)) == ERROR_SUCCESS)
119 {
120 /* Get the callback function */
121 Callback = Thread->BlockingCallback;
122
123 /* Check if there is one */
124 if (Callback)
125 {
126 /* Get the catalog */
127 Catalog = WsProcGetTCatalog(Process);
128
129 /* Find the entry for this ID */
130 ErrorCode = WsTcGetEntryFromCatalogEntryId(Catalog,
131 dwCatalogEntryId,
132 &Entry);
133
134 /* Check for success */
135 if (ErrorCode == ERROR_SUCCESS)
136 {
137 /* Get the context */
138 Context = (DWORD_PTR)Entry->Provider->Service.lpWSPCancelBlockingCall;
139
140 /* Dereference the entry */
141 WsTcEntryDereference(Entry);
142 }
143 }
144 }
145
146 /* Check error code */
147 if (ErrorCode == ERROR_SUCCESS)
148 {
149 /* Return success as well */
150 Status = ERROR_SUCCESS;
151 }
152 else
153 {
154 /* Return expected value and no callback */
155 Status = SOCKET_ERROR;
156 Callback = NULL;
157 }
158
159 /* Return the settings */
160 *lpdwContext = Context;
161 *lpErrno = ErrorCode;
162 *lplpfnCallback = Callback;
163
164 /* Return to caller */
165 return Status;
166 }
167
168 /*
169 * @unimplemented
170 */
171 INT
172 WSPAPI
WPUQueueApc(IN LPWSATHREADID lpThreadId,IN LPWSAUSERAPC lpfnUserApc,IN DWORD_PTR dwContext,OUT LPINT lpErrno)173 WPUQueueApc(IN LPWSATHREADID lpThreadId,
174 IN LPWSAUSERAPC lpfnUserApc,
175 IN DWORD_PTR dwContext,
176 OUT LPINT lpErrno)
177 {
178 UNIMPLEMENTED;
179 return 0;
180 }
181
182 /*
183 * @unimplemented
184 */
185 BOOL
186 WSPAPI
WPUResetEvent(IN WSAEVENT hEvent,OUT LPINT lpErrno)187 WPUResetEvent(IN WSAEVENT hEvent,
188 OUT LPINT lpErrno)
189 {
190 UNIMPLEMENTED;
191 return FALSE;
192 }
193
194 /*
195 * @unimplemented
196 */
197 BOOL
198 WSPAPI
WPUSetEvent(IN WSAEVENT hEvent,OUT LPINT lpErrno)199 WPUSetEvent(IN WSAEVENT hEvent,
200 OUT LPINT lpErrno)
201 {
202 UNIMPLEMENTED;
203 return FALSE;
204 }
205