mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 14:37:45 +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",
|
||||
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
|
||||
* yet connected socket */
|
||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
||||
|
@ -91,6 +86,11 @@ static NTSTATUS NTAPI StreamSocketConnectComplete
|
|||
|
||||
FCB->ConnectIrp.InFlightRequest = NULL;
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
SocketStateUnlock( FCB );
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
if( NT_SUCCESS(Irp->IoStatus.Status) ) {
|
||||
FCB->PollState |= AFD_EVENT_CONNECT | AFD_EVENT_SEND;
|
||||
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_TDI_OBJECT_QELT Qelt;
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
if( FCB ) FCB->ListenIrp.InFlightRequest = NULL;
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
|
||||
|
||||
FCB->ListenIrp.InFlightRequest = NULL;
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
SocketStateUnlock( FCB );
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||
SocketStateUnlock( FCB );
|
||||
DestroySocket( FCB );
|
||||
|
|
|
@ -234,14 +234,15 @@ NTSTATUS NTAPI ReceiveComplete
|
|||
|
||||
ASSERT_IRQL(APC_LEVEL);
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
||||
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
SocketStateUnlock( FCB );
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
FCB->Recv.Content = Irp->IoStatus.Information;
|
||||
FCB->Recv.BytesUsed = 0;
|
||||
|
||||
|
@ -455,15 +456,15 @@ PacketSocketRecvComplete(
|
|||
|
||||
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;
|
||||
|
||||
FCB->ReceiveIrp.InFlightRequest = NULL;
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
SocketStateUnlock( FCB );
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||
SocketStateUnlock( FCB );
|
||||
DestroySocket( FCB );
|
||||
|
|
|
@ -40,16 +40,16 @@ static NTSTATUS NTAPI SendComplete
|
|||
|
||||
ASSERT_IRQL(APC_LEVEL);
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
if( FCB ) FCB->SendIrp.InFlightRequest = NULL;
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
if( !SocketAcquireStateLock( FCB ) ) return Status;
|
||||
|
||||
FCB->SendIrp.InFlightRequest = NULL;
|
||||
/* Request is not in flight any longer */
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
SocketStateUnlock( FCB );
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
if( FCB->State == SOCKET_STATE_CLOSED ) {
|
||||
SocketStateUnlock( FCB );
|
||||
DestroySocket( FCB );
|
||||
|
@ -176,20 +176,20 @@ static NTSTATUS NTAPI PacketSocketSendComplete
|
|||
Irp->IoStatus.Status,
|
||||
Irp->IoStatus.Information));
|
||||
|
||||
if( Irp->Cancel ) {
|
||||
if( FCB ) FCB->SendIrp.InFlightRequest = NULL;
|
||||
return STATUS_CANCELLED;
|
||||
}
|
||||
|
||||
/* It's ok if the FCB already died */
|
||||
if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS;
|
||||
|
||||
FCB->PollState |= AFD_EVENT_SEND;
|
||||
PollReeval( FCB->DeviceExt, FCB->FileObject );
|
||||
|
||||
FCB->SendIrp.InFlightRequest = NULL;
|
||||
/* 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 ) {
|
||||
SocketStateUnlock( FCB );
|
||||
DestroySocket( FCB );
|
||||
|
|
|
@ -485,18 +485,22 @@ NTSTATUS DispTdiDisconnect(
|
|||
IrpSp = IoGetCurrentIrpStackLocation(Irp);
|
||||
DisReq = (PTDI_REQUEST_KERNEL_DISCONNECT)&IrpSp->Parameters;
|
||||
|
||||
TcpipRecursiveMutexEnter( &TCPLock, TRUE );
|
||||
|
||||
/* Get associated connection endpoint file object. Quit if none exists */
|
||||
|
||||
TranContext = IrpSp->FileObject->FsContext;
|
||||
if (!TranContext) {
|
||||
TI_DbgPrint(MID_TRACE, ("Bad transport context.\n"));
|
||||
return STATUS_INVALID_CONNECTION;
|
||||
Status = STATUS_INVALID_CONNECTION;
|
||||
goto done;
|
||||
}
|
||||
|
||||
Connection = (PCONNECTION_ENDPOINT)TranContext->Handle.ConnectionContext;
|
||||
if (!Connection) {
|
||||
TI_DbgPrint(MID_TRACE, ("No connection endpoint file object.\n"));
|
||||
return STATUS_INVALID_CONNECTION;
|
||||
Status = STATUS_INVALID_CONNECTION;
|
||||
goto done;
|
||||
}
|
||||
|
||||
Status = TCPDisconnect(
|
||||
|
@ -507,7 +511,15 @@ NTSTATUS DispTdiDisconnect(
|
|||
DispDataRequestComplete,
|
||||
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;
|
||||
}
|
||||
|
@ -1490,7 +1502,7 @@ NTSTATUS DispTdiSetInformationEx(
|
|||
|
||||
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);
|
||||
|
|
|
@ -437,6 +437,7 @@ TiDispatchInternal(
|
|||
|
||||
case TDI_DISCONNECT:
|
||||
Status = DispTdiDisconnect(Irp);
|
||||
Complete = FALSE;
|
||||
break;
|
||||
|
||||
case TDI_ASSOCIATE_ADDRESS:
|
||||
|
|
|
@ -230,7 +230,7 @@ VOID ARPReceive(
|
|||
Header->HWAddrLen, NUD_REACHABLE);
|
||||
}
|
||||
|
||||
if (Header->Opcode != ARP_OPCODE_REQUEST)
|
||||
if (Header->Opcode != ARP_OPCODE_REQUEST || !NCE)
|
||||
return;
|
||||
|
||||
/* This is a request for our address. Swap the addresses and
|
||||
|
|
|
@ -254,6 +254,9 @@ NTSTATUS DGReceiveDatagram(
|
|||
{
|
||||
ReceiveRequest->RemotePort = 0;
|
||||
}
|
||||
|
||||
IoMarkIrpPending(Irp);
|
||||
|
||||
ReceiveRequest->ReturnInfo = ReturnInfo;
|
||||
ReceiveRequest->Buffer = BufferData;
|
||||
ReceiveRequest->BufferSize = ReceiveLength;
|
||||
|
|
Loading…
Reference in a new issue