mirror of
https://github.com/reactos/reactos.git
synced 2024-07-21 03:37:57 +00:00
Merge aicom-network-fixes up to 35446.
I (arty) modified the new printing in msafd to be conditional, so as not to be accused of causing unnecessary spew. svn path=/trunk/; revision=35447
This commit is contained in:
parent
eaee8097aa
commit
7d8e94151c
|
@ -285,10 +285,12 @@ DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received,
|
||||||
if( ReturnedBytes ) *ReturnedBytes = Received; break;
|
if( ReturnedBytes ) *ReturnedBytes = Received; break;
|
||||||
case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; break;
|
case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; break;
|
||||||
case STATUS_PENDING: *Errno = WSA_IO_PENDING; break;
|
case STATUS_PENDING: *Errno = WSA_IO_PENDING; break;
|
||||||
case STATUS_BUFFER_OVERFLOW: *Errno = WSAEMSGSIZE; break;
|
case STATUS_BUFFER_OVERFLOW: AFD_DbgPrint(MID_TRACE,("MSAFD: STATUS_BUFFER_TOO_SMALL/STATUS_BUFFER_OVERFLOW\n")); *Errno = WSAEMSGSIZE; break;
|
||||||
case STATUS_INSUFFICIENT_RESOURCES: *Errno = WSA_NOT_ENOUGH_MEMORY; break;
|
case STATUS_NO_MEMORY: /* Fall through to STATUS_INSUFFICIENT_RESOURCES */
|
||||||
case STATUS_INVALID_CONNECTION: *Errno = WSAEAFNOSUPPORT; break;
|
case STATUS_INSUFFICIENT_RESOURCES: AFD_DbgPrint(MID_TRACE,("MSAFD: STATUS_NO_MEMORY/STATUS_INSUFFICIENT_RESOURCES\n")); *Errno = WSA_NOT_ENOUGH_MEMORY; break;
|
||||||
case STATUS_REMOTE_NOT_LISTENING: *Errno = WSAECONNRESET; break;
|
case STATUS_INVALID_CONNECTION: AFD_DbgPrint(MID_TRACE,("MSAFD: STATUS_INVALID_CONNECTION\n")); *Errno = WSAEAFNOSUPPORT; break;
|
||||||
|
case STATUS_REMOTE_NOT_LISTENING: AFD_DbgPrint(MID_TRACE, ("MSAFD: STATUS_REMOTE_NOT_LISTENING\n")); *Errno = WSAECONNRESET; break;
|
||||||
|
case STATUS_FILE_CLOSED: AFD_DbgPrint(MID_TRACE, ("MSAFD: STATUS_FILE_CLOSED\n")); *Errno = WSAENOTSOCK; break;
|
||||||
default:
|
default:
|
||||||
DbgPrint("MSAFD: Error %x is unknown\n", Status);
|
DbgPrint("MSAFD: Error %x is unknown\n", Status);
|
||||||
*Errno = WSAEINVAL; break;
|
*Errno = WSAEINVAL; break;
|
||||||
|
|
|
@ -77,7 +77,7 @@ static NTSTATUS NTAPI StreamSocketConnectComplete
|
||||||
|
|
||||||
/* I was wrong about this before as we can have pending writes to a not
|
/* I was wrong about this before as we can have pending writes to a not
|
||||||
* yet connected socket */
|
* yet connected socket */
|
||||||
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
|
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
||||||
|
|
||||||
AFD_DbgPrint(MID_TRACE,("Irp->IoStatus.Status = %x\n",
|
AFD_DbgPrint(MID_TRACE,("Irp->IoStatus.Status = %x\n",
|
||||||
Irp->IoStatus.Status));
|
Irp->IoStatus.Status));
|
||||||
|
@ -108,7 +108,10 @@ static NTSTATUS NTAPI StreamSocketConnectComplete
|
||||||
if( NT_SUCCESS(Status) ) {
|
if( NT_SUCCESS(Status) ) {
|
||||||
Status = MakeSocketIntoConnection( FCB );
|
Status = MakeSocketIntoConnection( FCB );
|
||||||
|
|
||||||
if( !NT_SUCCESS(Status) ) return Status;
|
if( !NT_SUCCESS(Status) ) {
|
||||||
|
SocketStateUnlock( FCB );
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
if( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) {
|
if( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) {
|
||||||
NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]);
|
NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]);
|
||||||
|
|
|
@ -125,12 +125,20 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
}
|
}
|
||||||
|
|
||||||
if( SysMdl ) {
|
if( SysMdl ) {
|
||||||
MmBuildMdlForNonPagedPool( SysMdl );
|
_SEH_TRY {
|
||||||
|
MmProbeAndLockPages( SysMdl, Irp->RequestorMode, IoModifyAccess );
|
||||||
|
} _SEH_HANDLE {
|
||||||
|
AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
|
||||||
|
Status = _SEH_GetExceptionCode();
|
||||||
|
} _SEH_END;
|
||||||
|
} else Status = STATUS_NO_MEMORY;
|
||||||
|
|
||||||
|
if( NT_SUCCESS(Status) ) {
|
||||||
Status = TdiQueryInformation
|
Status = TdiQueryInformation
|
||||||
( FCB->AddressFile.Object,
|
( FCB->AddressFile.Object,
|
||||||
TDI_QUERY_CONNECTION_INFO,
|
TDI_QUERY_CONNECTION_INFO,
|
||||||
SysMdl );
|
SysMdl );
|
||||||
} else Status = STATUS_NO_MEMORY;
|
}
|
||||||
|
|
||||||
if( NT_SUCCESS(Status) ) {
|
if( NT_SUCCESS(Status) ) {
|
||||||
TransAddr =
|
TransAddr =
|
||||||
|
@ -142,14 +150,15 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
RtlCopyMemory( TransAddr, ConnInfo->RemoteAddress,
|
RtlCopyMemory( TransAddr, ConnInfo->RemoteAddress,
|
||||||
TaLengthOfTransportAddress
|
TaLengthOfTransportAddress
|
||||||
( ConnInfo->RemoteAddress ) );
|
( ConnInfo->RemoteAddress ) );
|
||||||
|
else Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
|
||||||
if( ConnInfo ) ExFreePool( ConnInfo );
|
if( ConnInfo ) ExFreePool( ConnInfo );
|
||||||
if( SysMdl ) IoFreeMdl( SysMdl );
|
if( SysMdl ) IoFreeMdl( SysMdl );
|
||||||
if( TransAddr ) MmUnmapLockedPages( TransAddr, Mdl );
|
if( TransAddr ) MmUnmapLockedPages( TransAddr, Mdl );
|
||||||
|
MmUnlockPages( Mdl );
|
||||||
|
IoFreeMdl( Mdl );
|
||||||
}
|
}
|
||||||
/* MmUnlockPages( Mdl ); */
|
|
||||||
}
|
}
|
||||||
/* IoFreeMdl( Mdl ); */
|
|
||||||
} else {
|
} else {
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,20 +83,19 @@ static NTSTATUS NTAPI ListenComplete
|
||||||
( PDEVICE_OBJECT DeviceObject,
|
( PDEVICE_OBJECT DeviceObject,
|
||||||
PIRP Irp,
|
PIRP Irp,
|
||||||
PVOID Context ) {
|
PVOID Context ) {
|
||||||
NTSTATUS Status = STATUS_UNSUCCESSFUL;
|
NTSTATUS Status = STATUS_FILE_CLOSED;
|
||||||
PAFD_FCB FCB = (PAFD_FCB)Context;
|
PAFD_FCB FCB = (PAFD_FCB)Context;
|
||||||
PAFD_TDI_OBJECT_QELT Qelt;
|
PAFD_TDI_OBJECT_QELT Qelt;
|
||||||
|
|
||||||
if ( Irp->Cancel ) {
|
|
||||||
/* FIXME: is this anything else we need to do? */
|
|
||||||
FCB->ListenIrp.InFlightRequest = NULL;
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
||||||
|
|
||||||
FCB->ListenIrp.InFlightRequest = NULL;
|
FCB->ListenIrp.InFlightRequest = NULL;
|
||||||
|
|
||||||
|
if( Irp->Cancel ) {
|
||||||
|
SocketStateUnlock( FCB );
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||||
SocketStateUnlock( FCB );
|
SocketStateUnlock( FCB );
|
||||||
DestroySocket( FCB );
|
DestroySocket( FCB );
|
||||||
|
|
|
@ -262,7 +262,7 @@ NTSTATUS NTAPI UnlockAndMaybeComplete
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS LostSocket( PIRP Irp ) {
|
NTSTATUS LostSocket( PIRP Irp ) {
|
||||||
NTSTATUS Status = STATUS_INVALID_PARAMETER;
|
NTSTATUS Status = STATUS_FILE_CLOSED;
|
||||||
AFD_DbgPrint(MIN_TRACE,("Called.\n"));
|
AFD_DbgPrint(MIN_TRACE,("Called.\n"));
|
||||||
Irp->IoStatus.Information = 0;
|
Irp->IoStatus.Information = 0;
|
||||||
Irp->IoStatus.Status = Status;
|
Irp->IoStatus.Status = Status;
|
||||||
|
|
|
@ -449,7 +449,7 @@ PacketSocketRecvComplete(
|
||||||
|
|
||||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||||
|
|
||||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_UNSUCCESSFUL;
|
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
||||||
|
|
||||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||||
|
|
||||||
|
|
|
@ -277,6 +277,10 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
(PAFD_EVENT_SELECT_INFO)LockRequest( Irp, IrpSp );
|
(PAFD_EVENT_SELECT_INFO)LockRequest( Irp, IrpSp );
|
||||||
PAFD_FCB FCB = FileObject->FsContext;
|
PAFD_FCB FCB = FileObject->FsContext;
|
||||||
|
|
||||||
|
if( !SocketAcquireStateLock( FCB ) ) {
|
||||||
|
return LostSocket( Irp );
|
||||||
|
}
|
||||||
|
|
||||||
if ( !EventSelectInfo ) {
|
if ( !EventSelectInfo ) {
|
||||||
return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
|
return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
|
||||||
0, NULL );
|
0, NULL );
|
||||||
|
@ -285,10 +289,6 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
EventSelectInfo->EventObject,
|
EventSelectInfo->EventObject,
|
||||||
EventSelectInfo->Events));
|
EventSelectInfo->Events));
|
||||||
|
|
||||||
if( !SocketAcquireStateLock( FCB ) ) {
|
|
||||||
return LostSocket( Irp );
|
|
||||||
}
|
|
||||||
|
|
||||||
FCB->EventSelectTriggers = FCB->EventsFired = 0;
|
FCB->EventSelectTriggers = FCB->EventsFired = 0;
|
||||||
if( FCB->EventSelect ) ObDereferenceObject( FCB->EventSelect );
|
if( FCB->EventSelect ) ObDereferenceObject( FCB->EventSelect );
|
||||||
FCB->EventSelect = NULL;
|
FCB->EventSelect = NULL;
|
||||||
|
@ -325,15 +325,15 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
|
|
||||||
AFD_DbgPrint(MID_TRACE,("Called (FCB %x)\n", FCB));
|
AFD_DbgPrint(MID_TRACE,("Called (FCB %x)\n", FCB));
|
||||||
|
|
||||||
|
if( !SocketAcquireStateLock( FCB ) ) {
|
||||||
|
return LostSocket( Irp );
|
||||||
|
}
|
||||||
|
|
||||||
if ( !EnumReq ) {
|
if ( !EnumReq ) {
|
||||||
return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
|
return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
|
||||||
0, NULL );
|
0, NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !SocketAcquireStateLock( FCB ) ) {
|
|
||||||
return LostSocket( Irp );
|
|
||||||
}
|
|
||||||
|
|
||||||
EnumReq->PollEvents = FCB->PollState;
|
EnumReq->PollEvents = FCB->PollState;
|
||||||
RtlZeroMemory( EnumReq->EventStatus, sizeof(EnumReq->EventStatus) );
|
RtlZeroMemory( EnumReq->EventStatus, sizeof(EnumReq->EventStatus) );
|
||||||
|
|
||||||
|
|
|
@ -608,7 +608,7 @@ NTSTATUS TdiQueryInformation(
|
||||||
|
|
||||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||||
|
|
||||||
Irp = TdiBuildInternalDeviceControlIrp(IOCTL_TCP_QUERY_INFORMATION, /* Sub function */
|
Irp = TdiBuildInternalDeviceControlIrp(TDI_QUERY_INFORMATION, /* Sub function */
|
||||||
DeviceObject, /* Device object */
|
DeviceObject, /* Device object */
|
||||||
ConnectionObject, /* File object */
|
ConnectionObject, /* File object */
|
||||||
&Event, /* Event */
|
&Event, /* Event */
|
||||||
|
|
|
@ -577,7 +577,7 @@ TdiDefaultSendPossibleHandler(
|
||||||
IrpSubFunction, DeviceObject, \
|
IrpSubFunction, DeviceObject, \
|
||||||
FileObject, Event, IoStatusBlock) \
|
FileObject, Event, IoStatusBlock) \
|
||||||
IoBuildDeviceIoControlRequest( \
|
IoBuildDeviceIoControlRequest( \
|
||||||
0x00000003, DeviceObject, \
|
IrpSubFunction, DeviceObject, \
|
||||||
NULL, 0, NULL, 0, \
|
NULL, 0, NULL, 0, \
|
||||||
TRUE, Event, IoStatusBlock)
|
TRUE, Event, IoStatusBlock)
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,7 @@ VOID DGDeliverData(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
TcpipReleaseSpinLock(&AddrFile->Lock, OldIrql);
|
||||||
TI_DbgPrint(MAX_TRACE, ("Discarding datagram.\n"));
|
TI_DbgPrint(MAX_TRACE, ("Discarding datagram.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue