mirror of
https://github.com/reactos/reactos.git
synced 2024-10-01 23:14:53 +00:00
- Merge aicom-network-fixes up to r36921
svn path=/trunk/; revision=36922
This commit is contained in:
parent
2f626cf5fe
commit
497d2b42a7
|
@ -77,11 +77,6 @@ static NTSTATUS NTAPI StreamSocketConnectComplete
|
||||||
AFD_DbgPrint(MID_TRACE,("Called: FCB %x, FO %x\n",
|
AFD_DbgPrint(MID_TRACE,("Called: FCB %x, FO %x\n",
|
||||||
Context, FCB->FileObject));
|
Context, FCB->FileObject));
|
||||||
|
|
||||||
if( Irp->Cancel ) {
|
|
||||||
if( FCB ) FCB->ConnectIrp.InFlightRequest = NULL;
|
|
||||||
return STATUS_CANCELLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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 STATUS_FILE_CLOSED;
|
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
||||||
|
@ -91,6 +86,11 @@ static NTSTATUS NTAPI StreamSocketConnectComplete
|
||||||
|
|
||||||
FCB->ConnectIrp.InFlightRequest = NULL;
|
FCB->ConnectIrp.InFlightRequest = NULL;
|
||||||
|
|
||||||
|
if( Irp->Cancel ) {
|
||||||
|
SocketStateUnlock( FCB );
|
||||||
|
return STATUS_CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
if( NT_SUCCESS(Irp->IoStatus.Status) ) {
|
if( NT_SUCCESS(Irp->IoStatus.Status) ) {
|
||||||
FCB->PollState |= AFD_EVENT_CONNECT | AFD_EVENT_SEND;
|
FCB->PollState |= AFD_EVENT_CONNECT | AFD_EVENT_SEND;
|
||||||
AFD_DbgPrint(MID_TRACE,("Going to connected state %d\n", FCB->State));
|
AFD_DbgPrint(MID_TRACE,("Going to connected state %d\n", FCB->State));
|
||||||
|
|
|
@ -102,15 +102,15 @@ static NTSTATUS NTAPI ListenComplete
|
||||||
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 ) {
|
|
||||||
if( FCB ) FCB->ListenIrp.InFlightRequest = NULL;
|
|
||||||
return STATUS_CANCELLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
||||||
|
|
||||||
FCB->ListenIrp.InFlightRequest = NULL;
|
FCB->ListenIrp.InFlightRequest = NULL;
|
||||||
|
|
||||||
|
if( Irp->Cancel ) {
|
||||||
|
SocketStateUnlock( FCB );
|
||||||
|
return STATUS_CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||||
SocketStateUnlock( FCB );
|
SocketStateUnlock( FCB );
|
||||||
DestroySocket( FCB );
|
DestroySocket( FCB );
|
||||||
|
|
|
@ -234,14 +234,15 @@ NTSTATUS NTAPI ReceiveComplete
|
||||||
|
|
||||||
ASSERT_IRQL(APC_LEVEL);
|
ASSERT_IRQL(APC_LEVEL);
|
||||||
|
|
||||||
if( Irp->Cancel ) {
|
|
||||||
if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL;
|
|
||||||
return STATUS_CANCELLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
||||||
|
|
||||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||||
|
|
||||||
|
if( Irp->Cancel ) {
|
||||||
|
SocketStateUnlock( FCB );
|
||||||
|
return STATUS_CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
FCB->Recv.Content = Irp->IoStatus.Information;
|
FCB->Recv.Content = Irp->IoStatus.Information;
|
||||||
FCB->Recv.BytesUsed = 0;
|
FCB->Recv.BytesUsed = 0;
|
||||||
|
|
||||||
|
@ -455,15 +456,15 @@ PacketSocketRecvComplete(
|
||||||
|
|
||||||
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
|
||||||
|
|
||||||
if( Irp->Cancel ) {
|
|
||||||
if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL;
|
|
||||||
return STATUS_CANCELLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
||||||
|
|
||||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||||
|
|
||||||
|
if( Irp->Cancel ) {
|
||||||
|
SocketStateUnlock( FCB );
|
||||||
|
return STATUS_CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||||
SocketStateUnlock( FCB );
|
SocketStateUnlock( FCB );
|
||||||
DestroySocket( FCB );
|
DestroySocket( FCB );
|
||||||
|
|
|
@ -40,16 +40,16 @@ static NTSTATUS NTAPI SendComplete
|
||||||
|
|
||||||
ASSERT_IRQL(APC_LEVEL);
|
ASSERT_IRQL(APC_LEVEL);
|
||||||
|
|
||||||
if( Irp->Cancel ) {
|
|
||||||
if( FCB ) FCB->SendIrp.InFlightRequest = NULL;
|
|
||||||
return STATUS_CANCELLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
||||||
|
|
||||||
FCB->SendIrp.InFlightRequest = NULL;
|
FCB->SendIrp.InFlightRequest = NULL;
|
||||||
/* Request is not in flight any longer */
|
/* Request is not in flight any longer */
|
||||||
|
|
||||||
|
if( Irp->Cancel ) {
|
||||||
|
SocketStateUnlock( FCB );
|
||||||
|
return STATUS_CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||||
SocketStateUnlock( FCB );
|
SocketStateUnlock( FCB );
|
||||||
DestroySocket( FCB );
|
DestroySocket( FCB );
|
||||||
|
@ -176,20 +176,20 @@ static NTSTATUS NTAPI PacketSocketSendComplete
|
||||||
Irp->IoStatus.Status,
|
Irp->IoStatus.Status,
|
||||||
Irp->IoStatus.Information));
|
Irp->IoStatus.Information));
|
||||||
|
|
||||||
if( Irp->Cancel ) {
|
|
||||||
if( FCB ) FCB->SendIrp.InFlightRequest = NULL;
|
|
||||||
return STATUS_CANCELLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* It's ok if the FCB already died */
|
/* It's ok if the FCB already died */
|
||||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS;
|
if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS;
|
||||||
|
|
||||||
FCB->PollState |= AFD_EVENT_SEND;
|
|
||||||
PollReeval( FCB->DeviceExt, FCB->FileObject );
|
|
||||||
|
|
||||||
FCB->SendIrp.InFlightRequest = NULL;
|
FCB->SendIrp.InFlightRequest = NULL;
|
||||||
/* Request is not in flight any longer */
|
/* Request is not in flight any longer */
|
||||||
|
|
||||||
|
if( Irp->Cancel ) {
|
||||||
|
SocketStateUnlock( FCB );
|
||||||
|
return STATUS_CANCELLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCB->PollState |= AFD_EVENT_SEND;
|
||||||
|
PollReeval( FCB->DeviceExt, FCB->FileObject );
|
||||||
|
|
||||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||||
SocketStateUnlock( FCB );
|
SocketStateUnlock( FCB );
|
||||||
DestroySocket( FCB );
|
DestroySocket( FCB );
|
||||||
|
|
|
@ -485,18 +485,22 @@ NTSTATUS DispTdiDisconnect(
|
||||||
IrpSp = IoGetCurrentIrpStackLocation(Irp);
|
IrpSp = IoGetCurrentIrpStackLocation(Irp);
|
||||||
DisReq = (PTDI_REQUEST_KERNEL_DISCONNECT)&IrpSp->Parameters;
|
DisReq = (PTDI_REQUEST_KERNEL_DISCONNECT)&IrpSp->Parameters;
|
||||||
|
|
||||||
|
TcpipRecursiveMutexEnter( &TCPLock, TRUE );
|
||||||
|
|
||||||
/* Get associated connection endpoint file object. Quit if none exists */
|
/* Get associated connection endpoint file object. Quit if none exists */
|
||||||
|
|
||||||
TranContext = IrpSp->FileObject->FsContext;
|
TranContext = IrpSp->FileObject->FsContext;
|
||||||
if (!TranContext) {
|
if (!TranContext) {
|
||||||
TI_DbgPrint(MID_TRACE, ("Bad transport context.\n"));
|
TI_DbgPrint(MID_TRACE, ("Bad transport context.\n"));
|
||||||
return STATUS_INVALID_CONNECTION;
|
Status = STATUS_INVALID_CONNECTION;
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
Connection = (PCONNECTION_ENDPOINT)TranContext->Handle.ConnectionContext;
|
Connection = (PCONNECTION_ENDPOINT)TranContext->Handle.ConnectionContext;
|
||||||
if (!Connection) {
|
if (!Connection) {
|
||||||
TI_DbgPrint(MID_TRACE, ("No connection endpoint file object.\n"));
|
TI_DbgPrint(MID_TRACE, ("No connection endpoint file object.\n"));
|
||||||
return STATUS_INVALID_CONNECTION;
|
Status = STATUS_INVALID_CONNECTION;
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = TCPDisconnect(
|
Status = TCPDisconnect(
|
||||||
|
@ -507,7 +511,15 @@ NTSTATUS DispTdiDisconnect(
|
||||||
DispDataRequestComplete,
|
DispDataRequestComplete,
|
||||||
Irp );
|
Irp );
|
||||||
|
|
||||||
TI_DbgPrint(MAX_TRACE, ("TCP Connect returned %08x\n", Status));
|
done:
|
||||||
|
if (Status != STATUS_PENDING) {
|
||||||
|
DispDataRequestComplete(Irp, Status, 0);
|
||||||
|
} else
|
||||||
|
IoMarkIrpPending(Irp);
|
||||||
|
|
||||||
|
TcpipRecursiveMutexLeave( &TCPLock );
|
||||||
|
|
||||||
|
TI_DbgPrint(MAX_TRACE, ("TCP Disconnect returned %08x\n", Status));
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
@ -1490,7 +1502,7 @@ NTSTATUS DispTdiSetInformationEx(
|
||||||
|
|
||||||
TI_DbgPrint(DEBUG_IRP, ("Completing IRP at (0x%X).\n", Irp));
|
TI_DbgPrint(DEBUG_IRP, ("Completing IRP at (0x%X).\n", Irp));
|
||||||
|
|
||||||
return IRPFinish(Irp, STATUS_INVALID_PARAMETER);
|
return Irp->IoStatus.Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = DispPrepareIrpForCancel(TranContext, Irp, NULL);
|
Status = DispPrepareIrpForCancel(TranContext, Irp, NULL);
|
||||||
|
|
|
@ -437,6 +437,7 @@ TiDispatchInternal(
|
||||||
|
|
||||||
case TDI_DISCONNECT:
|
case TDI_DISCONNECT:
|
||||||
Status = DispTdiDisconnect(Irp);
|
Status = DispTdiDisconnect(Irp);
|
||||||
|
Complete = FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TDI_ASSOCIATE_ADDRESS:
|
case TDI_ASSOCIATE_ADDRESS:
|
||||||
|
|
|
@ -230,7 +230,7 @@ VOID ARPReceive(
|
||||||
Header->HWAddrLen, NUD_REACHABLE);
|
Header->HWAddrLen, NUD_REACHABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Header->Opcode != ARP_OPCODE_REQUEST)
|
if (Header->Opcode != ARP_OPCODE_REQUEST || !NCE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* This is a request for our address. Swap the addresses and
|
/* This is a request for our address. Swap the addresses and
|
||||||
|
|
|
@ -254,6 +254,9 @@ NTSTATUS DGReceiveDatagram(
|
||||||
{
|
{
|
||||||
ReceiveRequest->RemotePort = 0;
|
ReceiveRequest->RemotePort = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IoMarkIrpPending(Irp);
|
||||||
|
|
||||||
ReceiveRequest->ReturnInfo = ReturnInfo;
|
ReceiveRequest->ReturnInfo = ReturnInfo;
|
||||||
ReceiveRequest->Buffer = BufferData;
|
ReceiveRequest->Buffer = BufferData;
|
||||||
ReceiveRequest->BufferSize = ReceiveLength;
|
ReceiveRequest->BufferSize = ReceiveLength;
|
||||||
|
|
Loading…
Reference in a new issue