From a52618ca991990961ea73ee555d293f74ef72a10 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Sun, 3 Oct 2004 20:36:46 +0000 Subject: [PATCH] Fixed use of TA_ADDRESS in favor of TRANSPORT_ADDRESS. This still confuses me. write, read: Handle errors correctly. svn path=/trunk/; revision=11170 --- reactos/drivers/net/afd/afd/bind.c | 4 +-- reactos/drivers/net/afd/afd/read.c | 29 +++++++++++--------- reactos/drivers/net/afd/afd/tdi.c | 1 + reactos/drivers/net/afd/afd/tdiconn.c | 32 +++++++++++------------ reactos/drivers/net/afd/afd/write.c | 30 +++++++++++++-------- reactos/drivers/net/afd/include/tdiconn.h | 8 +++--- 6 files changed, 58 insertions(+), 46 deletions(-) diff --git a/reactos/drivers/net/afd/afd/bind.c b/reactos/drivers/net/afd/afd/bind.c index 77f122823e6..306db10b76f 100644 --- a/reactos/drivers/net/afd/afd/bind.c +++ b/reactos/drivers/net/afd/afd/bind.c @@ -1,4 +1,4 @@ -/* $Id: bind.c,v 1.4 2004/09/05 04:26:29 arty Exp $ +/* $Id: bind.c,v 1.5 2004/10/03 20:36:45 arty Exp $ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: drivers/net/afd/afd/bind.c @@ -68,7 +68,7 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( FCB->Flags & SGID_CONNECTIONLESS ) { /* This will be the from address for subsequent recvfrom calls */ TdiBuildConnectionInfo( &FCB->AddressFrom, - &FCB->LocalAddress->Address[0] ); + FCB->LocalAddress ); /* Allocate our backup buffer */ FCB->Recv.Window = ExAllocatePool( NonPagedPool, FCB->Recv.Size ); FCB->PollState |= AFD_EVENT_SEND; diff --git a/reactos/drivers/net/afd/afd/read.c b/reactos/drivers/net/afd/afd/read.c index 5067b95947c..0e02c0d3991 100644 --- a/reactos/drivers/net/afd/afd/read.c +++ b/reactos/drivers/net/afd/afd/read.c @@ -1,4 +1,4 @@ -/* $Id: read.c,v 1.6 2004/09/23 20:48:40 arty Exp $ +/* $Id: read.c,v 1.7 2004/10/03 20:36:45 arty Exp $ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: drivers/net/afd/afd/read.c @@ -134,7 +134,8 @@ NTSTATUS DDKAPI ReceiveComplete } } - if( NT_SUCCESS(Status) && FCB->Recv.Window && !FCB->Recv.Content ) { + if( NT_SUCCESS(Status) && FCB->Recv.Window && !FCB->Recv.Content && + NT_SUCCESS(Irp->IoStatus.Status) ) { AFD_DbgPrint(MID_TRACE, ("Exhausted our buffer. Requesting new: %x\n", FCB)); @@ -343,17 +344,19 @@ PacketSocketRecvComplete( PollReeval( FCB->DeviceExt, FCB->FileObject ); } - /* Now relaunch the datagram request */ - Status = TdiReceiveDatagram - ( &FCB->ReceiveIrp.InFlightRequest, - FCB->AddressFile.Object, - 0, - FCB->Recv.Window, - FCB->Recv.Size, - FCB->AddressFrom, - &FCB->ReceiveIrp.Iosb, - PacketSocketRecvComplete, - FCB ); + if( NT_SUCCESS(Irp->IoStatus.Status) ) { + /* Now relaunch the datagram request */ + Status = TdiReceiveDatagram + ( &FCB->ReceiveIrp.InFlightRequest, + FCB->AddressFile.Object, + 0, + FCB->Recv.Window, + FCB->Recv.Size, + FCB->AddressFrom, + &FCB->ReceiveIrp.Iosb, + PacketSocketRecvComplete, + FCB ); + } SocketStateUnlock( FCB ); diff --git a/reactos/drivers/net/afd/afd/tdi.c b/reactos/drivers/net/afd/afd/tdi.c index 357e338bb8c..7adea7b1144 100644 --- a/reactos/drivers/net/afd/afd/tdi.c +++ b/reactos/drivers/net/afd/afd/tdi.c @@ -1077,6 +1077,7 @@ NTSTATUS TdiSendDatagram( FALSE, /* Not secondary */ FALSE, /* Don't charge quota */ *Irp); /* Don't use IRP */ + if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); diff --git a/reactos/drivers/net/afd/afd/tdiconn.c b/reactos/drivers/net/afd/afd/tdiconn.c index d4d2c502428..5aef50bc23f 100644 --- a/reactos/drivers/net/afd/afd/tdiconn.c +++ b/reactos/drivers/net/afd/afd/tdiconn.c @@ -1,4 +1,4 @@ -/* $Id: tdiconn.c,v 1.2 2004/07/18 22:49:17 arty Exp $ +/* $Id: tdiconn.c,v 1.3 2004/10/03 20:36:45 arty Exp $ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: drivers/net/afd/afd/tdiconn.c @@ -13,7 +13,7 @@ UINT TdiAddressSizeFromType( UINT AddressType ) { switch( AddressType ) { - case TDI_ADDRESS_TYPE_IP: + case AF_INET: return sizeof(TA_IP_ADDRESS); default: KeBugCheck( 0 ); @@ -129,7 +129,7 @@ NTSTATUS TdiBuildNullConnectionInfo NTSTATUS TdiBuildConnectionInfoInPlace ( PTDI_CONNECTION_INFORMATION ConnectionInfo, - PTA_ADDRESS Address ) { + PTRANSPORT_ADDRESS Address ) { NTSTATUS Status = STATUS_SUCCESS; RtlCopyMemory( ConnectionInfo->RemoteAddress, @@ -143,9 +143,9 @@ TdiBuildConnectionInfoInPlace NTSTATUS TdiBuildConnectionInfo ( PTDI_CONNECTION_INFORMATION *ConnectionInfo, - PTA_ADDRESS Address ) { - NTSTATUS Status = TdiBuildNullConnectionInfo( ConnectionInfo, - Address->AddressType ); + PTRANSPORT_ADDRESS Address ) { + NTSTATUS Status = TdiBuildNullConnectionInfo + ( ConnectionInfo, Address->Address[0].AddressType ); if( NT_SUCCESS(Status) ) TdiBuildConnectionInfoInPlace( *ConnectionInfo, Address ); @@ -156,7 +156,7 @@ TdiBuildConnectionInfo NTSTATUS TdiBuildConnectionInfoPair ( PTDI_CONNECTION_INFO_PAIR ConnectionInfo, - PTA_ADDRESS From, PTA_ADDRESS To ) + PTRANSPORT_ADDRESS From, PTRANSPORT_ADDRESS To ) /* * FUNCTION: Fill a TDI_CONNECTION_INFO_PAIR struct will the two addresses * given. @@ -173,7 +173,7 @@ TdiBuildConnectionInfoPair ULONG TdiAddressSize; /* FIXME: Get from socket information */ - TdiAddressSize = TdiAddressSizeFromType(From->AddressType); + TdiAddressSize = TdiAddressSizeFromType(From->Address[0].AddressType); SizeOfEntry = TdiAddressSize + sizeof(TDI_CONNECTION_INFORMATION); LayoutFrame = (PCHAR)ExAllocatePool(NonPagedPool, 2 * SizeOfEntry); @@ -185,20 +185,18 @@ TdiBuildConnectionInfoPair RtlZeroMemory( LayoutFrame, 2 * SizeOfEntry ); - { - PTDI_CONNECTION_INFORMATION + PTDI_CONNECTION_INFORMATION FromTdiConn = (PTDI_CONNECTION_INFORMATION)LayoutFrame, ToTdiConn = (PTDI_CONNECTION_INFORMATION)LayoutFrame + SizeOfEntry; - - if (From != NULL) { + + if (From != NULL) { TdiBuildConnectionInfoInPlace( FromTdiConn, From ); - } else { + } else { TdiBuildNullConnectionInfoInPlace( FromTdiConn, - From->AddressType ); - } - - TdiBuildConnectionInfoInPlace( ToTdiConn, To ); + From->Address[0].AddressType ); } + + TdiBuildConnectionInfoInPlace( ToTdiConn, To ); return STATUS_SUCCESS; } diff --git a/reactos/drivers/net/afd/afd/write.c b/reactos/drivers/net/afd/afd/write.c index ec9f2d440c3..74bffb94b7a 100644 --- a/reactos/drivers/net/afd/afd/write.c +++ b/reactos/drivers/net/afd/afd/write.c @@ -1,4 +1,4 @@ -/* $Id: write.c,v 1.7 2004/09/23 20:48:40 arty Exp $ +/* $Id: write.c,v 1.8 2004/10/03 20:36:45 arty Exp $ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: drivers/net/afd/afd/write.c @@ -272,6 +272,7 @@ NTSTATUS STDCALL AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp) { NTSTATUS Status = STATUS_SUCCESS; + PTDI_CONNECTION_INFORMATION TargetAddress; PFILE_OBJECT FileObject = IrpSp->FileObject; PAFD_FCB FCB = FileObject->FsContext; PAFD_SEND_INFO_UDP SendReq; @@ -293,18 +294,25 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, TAAddressCount, ((PTRANSPORT_ADDRESS)SendReq->RemoteAddress)-> Address[0].AddressType)); - + + TdiBuildConnectionInfo( &TargetAddress, + ((PTRANSPORT_ADDRESS)SendReq->RemoteAddress) ); + /* Check the size of the Address given ... */ - Status = TdiSendDatagram - ( &FCB->SendIrp.InFlightRequest, - FCB->AddressFile.Object, - SendReq->BufferArray[0].buf, - SendReq->BufferArray[0].len, - SendReq->RemoteAddress, - &FCB->SendIrp.Iosb, - PacketSocketSendComplete, - FCB ); + if( TargetAddress ) { + Status = TdiSendDatagram + ( &FCB->SendIrp.InFlightRequest, + FCB->AddressFile.Object, + SendReq->BufferArray[0].buf, + SendReq->BufferArray[0].len, + TargetAddress, + &FCB->SendIrp.Iosb, + PacketSocketSendComplete, + FCB ); + + ExFreePool( TargetAddress ); + } if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS; diff --git a/reactos/drivers/net/afd/include/tdiconn.h b/reactos/drivers/net/afd/include/tdiconn.h index ff0221a0a7f..26dc89796c8 100644 --- a/reactos/drivers/net/afd/include/tdiconn.h +++ b/reactos/drivers/net/afd/include/tdiconn.h @@ -16,15 +16,17 @@ VOID TaCopyTransportAddressInPlace( PTRANSPORT_ADDRESS Target, UINT TdiAddressSizeFromType( UINT Type ); UINT TdiAddressSizeFromName( PTRANSPORT_ADDRESS Name ); NTSTATUS TdiBuildConnectionInfoInPlace -( PTDI_CONNECTION_INFORMATION ConnInfo, PTA_ADDRESS Name ); +( PTDI_CONNECTION_INFORMATION ConnInfo, PTRANSPORT_ADDRESS Name ); NTSTATUS TdiBuildConnectionInfo -( PTDI_CONNECTION_INFORMATION *ConnectionInfo, PTA_ADDRESS Name ); +( PTDI_CONNECTION_INFORMATION *ConnectionInfo, PTRANSPORT_ADDRESS Name ); NTSTATUS TdiBuildNullConnectionInfoToPlace ( PTDI_CONNECTION_INFORMATION ConnInfo, ULONG Type ); NTSTATUS TdiBuildNullConnectionInfo ( PTDI_CONNECTION_INFORMATION *ConnectionInfo, ULONG Type ); NTSTATUS TdiBuildConnectionInfoPair -( PTDI_CONNECTION_INFO_PAIR ConnectionInfo, PTA_ADDRESS From, PTA_ADDRESS To ); +( PTDI_CONNECTION_INFO_PAIR ConnectionInfo, + PTRANSPORT_ADDRESS From, + PTRANSPORT_ADDRESS To ); PTA_ADDRESS TdiGetRemoteAddress( PTDI_CONNECTION_INFORMATION TdiConn ); #endif/*_TDICONN_H*/