2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WinSock 2 API
4 * FILE: dll/win32/ws2_32_new/src/sputil.c
5 * PURPOSE: Transport Service Provider Utility Functions
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
9 /* INCLUDES ******************************************************************/
16 /* FUNCTIONS *****************************************************************/
23 WPUCompleteOverlappedRequest(IN SOCKET s
,
24 IN LPWSAOVERLAPPED lpOverlapped
,
26 IN DWORD cbTransferred
,
38 WPUCloseEvent(IN WSAEVENT hEvent
,
50 WPUCloseThread(IN LPWSATHREADID lpThreadId
,
62 WPUCreateEvent(OUT LPINT lpErrno
)
73 WPUOpenCurrentThread(OUT LPWSATHREADID lpThreadId
,
85 WPUPostMessage(IN HWND hWnd
,
90 /* Make sure we have a post routine */
91 if (!WsSockPostRoutine
) WsSockPostRoutine
= PostMessage
;
94 return WsSockPostRoutine(hWnd
, Msg
, wParam
, lParam
);
102 WPUQueryBlockingCallback(IN DWORD dwCatalogEntryId
,
103 OUT LPBLOCKINGCALLBACK FAR
* lplpfnCallback
,
104 OUT PDWORD_PTR lpdwContext
,
112 LPBLOCKINGCALLBACK Callback
= NULL
;
113 PTCATALOG_ENTRY Entry
;
114 DWORD_PTR Context
= 0;
115 DPRINT("WPUQueryBlockingCallback: %lx \n", dwCatalogEntryId
);
118 if ((ErrorCode
= WsApiProlog(&Process
, &Thread
)) == ERROR_SUCCESS
)
120 /* Get the callback function */
121 Callback
= Thread
->BlockingCallback
;
123 /* Check if there is one */
126 /* Get the catalog */
127 Catalog
= WsProcGetTCatalog(Process
);
129 /* Find the entry for this ID */
130 ErrorCode
= WsTcGetEntryFromCatalogEntryId(Catalog
,
134 /* Check for success */
135 if (ErrorCode
== ERROR_SUCCESS
)
137 /* Get the context */
138 Context
= (DWORD_PTR
)Entry
->Provider
->Service
.lpWSPCancelBlockingCall
;
140 /* Dereference the entry */
141 WsTcEntryDereference(Entry
);
146 /* Check error code */
147 if (ErrorCode
== ERROR_SUCCESS
)
149 /* Return success as well */
150 Status
= ERROR_SUCCESS
;
154 /* Return expected value and no callback */
155 Status
= SOCKET_ERROR
;
159 /* Return the settings */
160 *lpdwContext
= Context
;
161 *lpErrno
= ErrorCode
;
162 *lplpfnCallback
= Callback
;
164 /* Return to caller */
173 WPUQueueApc(IN LPWSATHREADID lpThreadId
,
174 IN LPWSAUSERAPC lpfnUserApc
,
175 IN DWORD_PTR dwContext
,
187 WPUResetEvent(IN WSAEVENT hEvent
,
199 WPUSetEvent(IN WSAEVENT hEvent
,