mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
[MSAFD] Minor changes. Code style fixes. tabs->spaces. CORE-12104
svn path=/trunk/; revision=73176
This commit is contained in:
parent
2c118e1890
commit
781673fa3d
1 changed files with 93 additions and 100 deletions
|
@ -4,10 +4,10 @@
|
||||||
* FILE: dll/win32/msafd/misc/event.c
|
* FILE: dll/win32/msafd/misc/event.c
|
||||||
* PURPOSE: Event handling
|
* PURPOSE: Event handling
|
||||||
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
||||||
* Alex Ionescu (alex@relsoft.net)
|
* Alex Ionescu (alex@relsoft.net)
|
||||||
* REVISIONS:
|
* REVISIONS:
|
||||||
* CSH 15/06-2001 Created
|
* CSH 15/06/2001 - Created
|
||||||
* Alex 16/07/2004 - Complete Rewrite
|
* Alex 16/07/2004 - Complete Rewrite
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <msafd.h>
|
#include <msafd.h>
|
||||||
|
@ -18,55 +18,57 @@ WINE_DEFAULT_DEBUG_CHANNEL(msafd);
|
||||||
int
|
int
|
||||||
WSPAPI
|
WSPAPI
|
||||||
WSPEventSelect(
|
WSPEventSelect(
|
||||||
SOCKET Handle,
|
IN SOCKET Handle,
|
||||||
WSAEVENT hEventObject,
|
IN WSAEVENT hEventObject,
|
||||||
long lNetworkEvents,
|
IN long lNetworkEvents,
|
||||||
LPINT lpErrno)
|
OUT LPINT lpErrno)
|
||||||
{
|
{
|
||||||
IO_STATUS_BLOCK IOSB;
|
IO_STATUS_BLOCK IOSB;
|
||||||
AFD_EVENT_SELECT_INFO EventSelectInfo;
|
AFD_EVENT_SELECT_INFO EventSelectInfo;
|
||||||
PSOCKET_INFORMATION Socket = NULL;
|
PSOCKET_INFORMATION Socket = NULL;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
BOOLEAN BlockMode;
|
BOOLEAN BlockMode;
|
||||||
HANDLE SockEvent;
|
HANDLE SockEvent;
|
||||||
|
|
||||||
/* Get the Socket Structure associate to this Socket*/
|
TRACE("WSPEventSelect (%lx) %lx %lx\n", Handle, hEventObject, lNetworkEvents);
|
||||||
Socket = GetSocketStructure(Handle);
|
|
||||||
if (!Socket)
|
|
||||||
{
|
|
||||||
if (lpErrno) *lpErrno = WSAENOTSOCK;
|
|
||||||
return SOCKET_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = NtCreateEvent( &SockEvent, EVENT_ALL_ACCESS,
|
/* Get the Socket Structure associate to this Socket*/
|
||||||
NULL, 1, FALSE );
|
Socket = GetSocketStructure(Handle);
|
||||||
|
if (!Socket)
|
||||||
|
{
|
||||||
|
if (lpErrno) *lpErrno = WSAENOTSOCK;
|
||||||
|
return SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if( !NT_SUCCESS(Status) ) return SOCKET_ERROR;
|
Status = NtCreateEvent(&SockEvent, EVENT_ALL_ACCESS,
|
||||||
|
NULL, 1, FALSE);
|
||||||
|
|
||||||
/* Set Socket to Non-Blocking */
|
if (!NT_SUCCESS(Status)) return SOCKET_ERROR;
|
||||||
BlockMode = TRUE;
|
|
||||||
SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, &BlockMode, NULL, NULL, NULL, NULL);
|
|
||||||
Socket->SharedData->NonBlocking = TRUE;
|
|
||||||
|
|
||||||
/* Deactivate Async Select if there is one */
|
/* Set Socket to Non-Blocking */
|
||||||
if (Socket->EventObject) {
|
BlockMode = TRUE;
|
||||||
Socket->SharedData->hWnd = NULL;
|
SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, &BlockMode, NULL, NULL, NULL, NULL);
|
||||||
Socket->SharedData->wMsg = 0;
|
Socket->SharedData->NonBlocking = TRUE;
|
||||||
Socket->SharedData->AsyncEvents = 0;
|
|
||||||
Socket->SharedData->SequenceNumber++; // This will kill Async Select after the next completion
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set Structure Info */
|
/* Deactivate Async Select if there is one */
|
||||||
EventSelectInfo.EventObject = hEventObject;
|
if (Socket->EventObject) {
|
||||||
EventSelectInfo.Events = 0;
|
Socket->SharedData->hWnd = NULL;
|
||||||
|
Socket->SharedData->wMsg = 0;
|
||||||
|
Socket->SharedData->AsyncEvents = 0;
|
||||||
|
Socket->SharedData->SequenceNumber++; // This will kill Async Select after the next completion
|
||||||
|
}
|
||||||
|
|
||||||
/* Set Events to wait for */
|
/* Set Structure Info */
|
||||||
if (lNetworkEvents & FD_READ) {
|
EventSelectInfo.EventObject = hEventObject;
|
||||||
EventSelectInfo.Events |= AFD_EVENT_RECEIVE;
|
EventSelectInfo.Events = 0;
|
||||||
|
|
||||||
|
/* Set Events to wait for */
|
||||||
|
if (lNetworkEvents & FD_READ) {
|
||||||
|
EventSelectInfo.Events |= AFD_EVENT_RECEIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lNetworkEvents & FD_WRITE) {
|
if (lNetworkEvents & FD_WRITE) {
|
||||||
EventSelectInfo.Events |= AFD_EVENT_SEND;
|
EventSelectInfo.Events |= AFD_EVENT_SEND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lNetworkEvents & FD_OOB) {
|
if (lNetworkEvents & FD_OOB) {
|
||||||
|
@ -74,7 +76,7 @@ WSPEventSelect(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lNetworkEvents & FD_ACCEPT) {
|
if (lNetworkEvents & FD_ACCEPT) {
|
||||||
EventSelectInfo.Events |= AFD_EVENT_ACCEPT;
|
EventSelectInfo.Events |= AFD_EVENT_ACCEPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lNetworkEvents & FD_CONNECT) {
|
if (lNetworkEvents & FD_CONNECT) {
|
||||||
|
@ -82,30 +84,28 @@ WSPEventSelect(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lNetworkEvents & FD_CLOSE) {
|
if (lNetworkEvents & FD_CLOSE) {
|
||||||
EventSelectInfo.Events |= AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE;
|
EventSelectInfo.Events |= AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lNetworkEvents & FD_QOS) {
|
if (lNetworkEvents & FD_QOS) {
|
||||||
EventSelectInfo.Events |= AFD_EVENT_QOS;
|
EventSelectInfo.Events |= AFD_EVENT_QOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lNetworkEvents & FD_GROUP_QOS) {
|
if (lNetworkEvents & FD_GROUP_QOS) {
|
||||||
EventSelectInfo.Events |= AFD_EVENT_GROUP_QOS;
|
EventSelectInfo.Events |= AFD_EVENT_GROUP_QOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send IOCTL */
|
/* Send IOCTL */
|
||||||
Status = NtDeviceIoControlFile((HANDLE)Handle,
|
Status = NtDeviceIoControlFile((HANDLE)Handle,
|
||||||
SockEvent,
|
SockEvent,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
&IOSB,
|
&IOSB,
|
||||||
IOCTL_AFD_EVENT_SELECT,
|
IOCTL_AFD_EVENT_SELECT,
|
||||||
&EventSelectInfo,
|
&EventSelectInfo,
|
||||||
sizeof(EventSelectInfo),
|
sizeof(EventSelectInfo),
|
||||||
NULL,
|
NULL,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
TRACE("AFD: %x\n", Status);
|
|
||||||
|
|
||||||
/* Wait for return */
|
/* Wait for return */
|
||||||
if (Status == STATUS_PENDING) {
|
if (Status == STATUS_PENDING) {
|
||||||
|
@ -113,9 +113,7 @@ WSPEventSelect(
|
||||||
Status = IOSB.Status;
|
Status = IOSB.Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("Waited\n");
|
NtClose (SockEvent);
|
||||||
|
|
||||||
NtClose( SockEvent );
|
|
||||||
|
|
||||||
if (Status != STATUS_SUCCESS)
|
if (Status != STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
|
@ -123,8 +121,6 @@ WSPEventSelect(
|
||||||
return MsafdReturnWithErrno(Status, lpErrno, 0, NULL);
|
return MsafdReturnWithErrno(Status, lpErrno, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("Closed event\n");
|
|
||||||
|
|
||||||
/* Set Socket Data*/
|
/* Set Socket Data*/
|
||||||
Socket->EventObject = hEventObject;
|
Socket->EventObject = hEventObject;
|
||||||
Socket->NetworkEvents = lNetworkEvents;
|
Socket->NetworkEvents = lNetworkEvents;
|
||||||
|
@ -138,51 +134,53 @@ WSPEventSelect(
|
||||||
INT
|
INT
|
||||||
WSPAPI
|
WSPAPI
|
||||||
WSPEnumNetworkEvents(
|
WSPEnumNetworkEvents(
|
||||||
IN SOCKET Handle,
|
IN SOCKET Handle,
|
||||||
IN WSAEVENT hEventObject,
|
IN WSAEVENT hEventObject,
|
||||||
OUT LPWSANETWORKEVENTS lpNetworkEvents,
|
OUT LPWSANETWORKEVENTS lpNetworkEvents,
|
||||||
OUT LPINT lpErrno)
|
OUT LPINT lpErrno)
|
||||||
{
|
{
|
||||||
AFD_ENUM_NETWORK_EVENTS_INFO EnumReq;
|
AFD_ENUM_NETWORK_EVENTS_INFO EnumReq;
|
||||||
IO_STATUS_BLOCK IOSB;
|
IO_STATUS_BLOCK IOSB;
|
||||||
PSOCKET_INFORMATION Socket = NULL;
|
PSOCKET_INFORMATION Socket = NULL;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
HANDLE SockEvent;
|
HANDLE SockEvent;
|
||||||
|
|
||||||
TRACE("Called (lpNetworkEvents %x)\n", lpNetworkEvents);
|
TRACE("Called (lpNetworkEvents %x)\n", lpNetworkEvents);
|
||||||
|
|
||||||
Status = NtCreateEvent( &SockEvent, EVENT_ALL_ACCESS,
|
/* Get the Socket Structure associate to this Socket*/
|
||||||
NULL, 1, FALSE );
|
Socket = GetSocketStructure(Handle);
|
||||||
|
if (!Socket)
|
||||||
|
{
|
||||||
|
if (lpErrno) *lpErrno = WSAENOTSOCK;
|
||||||
|
return SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
if (!lpNetworkEvents)
|
||||||
|
{
|
||||||
|
if (lpErrno) *lpErrno = WSAEFAULT;
|
||||||
|
return SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = NtCreateEvent(&SockEvent, EVENT_ALL_ACCESS,
|
||||||
|
NULL, 1, FALSE);
|
||||||
|
|
||||||
if( !NT_SUCCESS(Status) ) {
|
if( !NT_SUCCESS(Status) ) {
|
||||||
ERR("Could not make an event %x\n", Status);
|
ERR("Could not make an event %x\n", Status);
|
||||||
return SOCKET_ERROR;
|
return SOCKET_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the Socket Structure associate to this Socket*/
|
|
||||||
Socket = GetSocketStructure(Handle);
|
|
||||||
if (!Socket)
|
|
||||||
{
|
|
||||||
NtClose(SockEvent);
|
|
||||||
if (lpErrno) *lpErrno = WSAENOTSOCK;
|
|
||||||
return SOCKET_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
EnumReq.Event = hEventObject;
|
EnumReq.Event = hEventObject;
|
||||||
|
|
||||||
/* Send IOCTL */
|
/* Send IOCTL */
|
||||||
Status = NtDeviceIoControlFile((HANDLE)Handle,
|
Status = NtDeviceIoControlFile((HANDLE)Handle,
|
||||||
SockEvent,
|
SockEvent,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
&IOSB,
|
&IOSB,
|
||||||
IOCTL_AFD_ENUM_NETWORK_EVENTS,
|
IOCTL_AFD_ENUM_NETWORK_EVENTS,
|
||||||
&EnumReq,
|
&EnumReq,
|
||||||
sizeof(EnumReq),
|
sizeof(EnumReq),
|
||||||
NULL,
|
NULL,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
TRACE("AFD: %x\n", Status);
|
|
||||||
|
|
||||||
/* Wait for return */
|
/* Wait for return */
|
||||||
if (Status == STATUS_PENDING) {
|
if (Status == STATUS_PENDING) {
|
||||||
|
@ -190,9 +188,7 @@ WSPEnumNetworkEvents(
|
||||||
Status = IOSB.Status;
|
Status = IOSB.Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("Waited\n");
|
NtClose (SockEvent);
|
||||||
|
|
||||||
NtClose( SockEvent );
|
|
||||||
|
|
||||||
if (Status != STATUS_SUCCESS)
|
if (Status != STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
|
@ -200,9 +196,6 @@ WSPEnumNetworkEvents(
|
||||||
return MsafdReturnWithErrno(Status, lpErrno, 0, NULL);
|
return MsafdReturnWithErrno(Status, lpErrno, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("Closed event\n");
|
|
||||||
TRACE("About to touch struct at %x (%d)\n", lpNetworkEvents, sizeof(*lpNetworkEvents));
|
|
||||||
|
|
||||||
lpNetworkEvents->lNetworkEvents = 0;
|
lpNetworkEvents->lNetworkEvents = 0;
|
||||||
|
|
||||||
/* Set Events to wait for */
|
/* Set Events to wait for */
|
||||||
|
@ -233,14 +226,14 @@ WSPEnumNetworkEvents(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnumReq.PollEvents &
|
if (EnumReq.PollEvents &
|
||||||
(AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE)) {
|
(AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE)) {
|
||||||
lpNetworkEvents->lNetworkEvents |= FD_CLOSE;
|
lpNetworkEvents->lNetworkEvents |= FD_CLOSE;
|
||||||
lpNetworkEvents->iErrorCode[FD_CLOSE_BIT] = TranslateNtStatusError(EnumReq.EventStatus[FD_CLOSE_BIT]);
|
lpNetworkEvents->iErrorCode[FD_CLOSE_BIT] = TranslateNtStatusError(EnumReq.EventStatus[FD_CLOSE_BIT]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnumReq.PollEvents & AFD_EVENT_QOS) {
|
if (EnumReq.PollEvents & AFD_EVENT_QOS) {
|
||||||
lpNetworkEvents->lNetworkEvents |= FD_QOS;
|
lpNetworkEvents->lNetworkEvents |= FD_QOS;
|
||||||
lpNetworkEvents->iErrorCode[FD_QOS_BIT] = TranslateNtStatusError(EnumReq.EventStatus[FD_QOS_BIT]);
|
lpNetworkEvents->iErrorCode[FD_QOS_BIT] = TranslateNtStatusError(EnumReq.EventStatus[FD_QOS_BIT]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnumReq.PollEvents & AFD_EVENT_GROUP_QOS) {
|
if (EnumReq.PollEvents & AFD_EVENT_GROUP_QOS) {
|
||||||
|
|
Loading…
Reference in a new issue