-/* $Id$
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: drivers/net/afd/afd/connect.c
* UPDATE HISTORY:
* 20040708 Created
*/
+
#include "afd.h"
NTSTATUS
PAFD_FCB FCB = FileObject->FsContext;
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (FCB->ConnectOptionsSize == 0)
PVOID ConnectOptions = LockRequest(Irp, IrpSp, FALSE, NULL);
UINT ConnectOptionsSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (!ConnectOptions)
if (FCB->ConnectOptions)
{
- ExFreePool(FCB->ConnectOptions);
+ ExFreePoolWithTag(FCB->ConnectOptions, TAG_AFD_CONNECT_OPTIONS);
FCB->ConnectOptions = NULL;
FCB->ConnectOptionsSize = 0;
FCB->FilledConnectOptions = 0;
}
- FCB->ConnectOptions = ExAllocatePool(PagedPool, ConnectOptionsSize);
+ FCB->ConnectOptions = ExAllocatePoolWithTag(PagedPool,
+ ConnectOptionsSize,
+ TAG_AFD_CONNECT_OPTIONS);
+
if (!FCB->ConnectOptions)
return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
PUINT ConnectOptionsSize = LockRequest(Irp, IrpSp, FALSE, NULL);
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (!ConnectOptionsSize)
if (FCB->ConnectOptions)
{
- ExFreePool(FCB->ConnectOptions);
+ ExFreePoolWithTag(FCB->ConnectOptions, TAG_AFD_CONNECT_OPTIONS);
FCB->ConnectOptionsSize = 0;
FCB->FilledConnectOptions = 0;
}
- FCB->ConnectOptions = ExAllocatePool(PagedPool, *ConnectOptionsSize);
+ FCB->ConnectOptions = ExAllocatePoolWithTag(PagedPool,
+ *ConnectOptionsSize,
+ TAG_AFD_CONNECT_OPTIONS);
+
if (!FCB->ConnectOptions) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
FCB->ConnectOptionsSize = *ConnectOptionsSize;
PAFD_FCB FCB = FileObject->FsContext;
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (FCB->ConnectDataSize == 0)
PVOID ConnectData = LockRequest(Irp, IrpSp, FALSE, NULL);
UINT ConnectDataSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (!ConnectData)
if (FCB->ConnectData)
{
- ExFreePool(FCB->ConnectData);
+ ExFreePoolWithTag(FCB->ConnectData, TAG_AFD_CONNECT_DATA);
FCB->ConnectData = NULL;
FCB->ConnectDataSize = 0;
FCB->FilledConnectData = 0;
}
- FCB->ConnectData = ExAllocatePool(PagedPool, ConnectDataSize);
+ FCB->ConnectData = ExAllocatePoolWithTag(PagedPool,
+ ConnectDataSize,
+ TAG_AFD_CONNECT_DATA);
+
if (!FCB->ConnectData) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
RtlCopyMemory(FCB->ConnectData,
PUINT ConnectDataSize = LockRequest(Irp, IrpSp, FALSE, NULL);
UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
if (!ConnectDataSize)
if (FCB->ConnectData)
{
- ExFreePool(FCB->ConnectData);
+ ExFreePoolWithTag(FCB->ConnectData, TAG_AFD_CONNECT_DATA);
FCB->ConnectDataSize = 0;
FCB->FilledConnectData = 0;
}
- FCB->ConnectData = ExAllocatePool(PagedPool, *ConnectDataSize);
+ FCB->ConnectData = ExAllocatePoolWithTag(PagedPool,
+ *ConnectDataSize,
+ TAG_AFD_CONNECT_DATA);
+
if (!FCB->ConnectData) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
FCB->ConnectDataSize = *ConnectDataSize;
/* Allocate the receive area and start receiving */
if (!FCB->Recv.Window)
{
- FCB->Recv.Window = ExAllocatePool( PagedPool, FCB->Recv.Size );
+ FCB->Recv.Window = ExAllocatePoolWithTag(PagedPool,
+ FCB->Recv.Size,
+ TAG_AFD_DATA_BUFFER);
+
if( !FCB->Recv.Window ) return STATUS_NO_MEMORY;
}
if (!FCB->Send.Window)
{
- FCB->Send.Window = ExAllocatePool( PagedPool, FCB->Send.Size );
+ FCB->Send.Window = ExAllocatePoolWithTag(PagedPool,
+ FCB->Send.Size,
+ TAG_AFD_DATA_BUFFER);
+
if( !FCB->Send.Window ) return STATUS_NO_MEMORY;
}
TDI_RECEIVE_NORMAL,
FCB->Recv.Window,
FCB->Recv.Size,
- &FCB->ReceiveIrp.Iosb,
ReceiveComplete,
FCB );
return Status;
}
+static IO_COMPLETION_ROUTINE StreamSocketConnectComplete;
static
NTSTATUS
NTAPI
PLIST_ENTRY NextIrpEntry;
PIRP NextIrp;
- AFD_DbgPrint(MID_TRACE,("Called: FCB %x, FO %x\n",
+ AFD_DbgPrint(MID_TRACE,("Called: FCB %p, FO %p\n",
Context, FCB->FileObject));
/* I was wrong about this before as we can have pending writes to a not
while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_CONNECT] ) ) {
NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_CONNECT]);
NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry);
- AFD_DbgPrint(MID_TRACE,("Completing connect %x\n", NextIrp));
+ AFD_DbgPrint(MID_TRACE,("Completing connect %p\n", NextIrp));
NextIrp->IoStatus.Status = Status;
NextIrp->IoStatus.Information = NT_SUCCESS(Status) ? ((ULONG_PTR)FCB->Connection.Handle) : 0;
if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]);
NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP,
Tail.Overlay.ListEntry);
- AFD_DbgPrint(MID_TRACE,("Launching send request %x\n", NextIrp));
+ AFD_DbgPrint(MID_TRACE,("Launching send request %p\n", NextIrp));
Status = AfdConnectedSocketWriteData
( DeviceObject,
NextIrp,
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
PAFD_CONNECT_INFO ConnectReq;
- AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+ AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
+
+ UNREFERENCED_PARAMETER(DeviceObject);
if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
if( !(ConnectReq = LockRequest( Irp, IrpSp, FALSE, NULL )) )
if( FCB->Flags & AFD_ENDPOINT_CONNECTIONLESS )
{
- if( FCB->RemoteAddress ) ExFreePool( FCB->RemoteAddress );
+ if (FCB->RemoteAddress)
+ {
+ ExFreePoolWithTag(FCB->RemoteAddress, TAG_AFD_TRANSPORT_ADDRESS);
+ }
+
FCB->RemoteAddress =
TaCopyTransportAddress( &ConnectReq->RemoteAddress );
return LeaveIrpUntilLater( FCB, Irp, FUNCTION_CONNECT );
case SOCKET_STATE_CREATED:
- if( FCB->LocalAddress ) ExFreePool( FCB->LocalAddress );
+ if (FCB->LocalAddress)
+ {
+ ExFreePoolWithTag(FCB->LocalAddress, TAG_AFD_TRANSPORT_ADDRESS);
+ }
+
FCB->LocalAddress =
TaBuildNullTransportAddress( ConnectReq->RemoteAddress.Address[0].AddressType );
/* Drop through to SOCKET_STATE_BOUND */
case SOCKET_STATE_BOUND:
- if( FCB->RemoteAddress ) ExFreePool( FCB->RemoteAddress );
+ if (FCB->RemoteAddress)
+ {
+ ExFreePoolWithTag(FCB->RemoteAddress, TAG_AFD_TRANSPORT_ADDRESS);
+ }
+
FCB->RemoteAddress =
TaCopyTransportAddress( &ConnectReq->RemoteAddress );
if( !NT_SUCCESS(Status) )
break;
- if (FCB->ConnectReturnInfo) ExFreePool(FCB->ConnectReturnInfo);
+ if (FCB->ConnectReturnInfo)
+ {
+ ExFreePoolWithTag(FCB->ConnectReturnInfo, TAG_AFD_TDI_CONNECTION_INFORMATION);
+ }
+
Status = TdiBuildConnectionInfo
( &FCB->ConnectReturnInfo,
&ConnectReq->RemoteAddress );
if( NT_SUCCESS(Status) )
{
- if (FCB->ConnectCallInfo) ExFreePool(FCB->ConnectCallInfo);
+ if (FCB->ConnectCallInfo)
+ {
+ ExFreePoolWithTag(FCB->ConnectCallInfo, TAG_AFD_TDI_CONNECTION_INFORMATION);
+ }
+
Status = TdiBuildConnectionInfo(&FCB->ConnectCallInfo,
&ConnectReq->RemoteAddress);
}
FCB->State = SOCKET_STATE_CONNECTING;
- AFD_DbgPrint(MID_TRACE,("Queueing IRP %x\n", Irp));
+ AFD_DbgPrint(MID_TRACE,("Queueing IRP %p\n", Irp));
Status = QueueUserModeIrp( FCB, Irp, FUNCTION_CONNECT );
if (Status == STATUS_PENDING)
{
FCB->Connection.Object,
FCB->ConnectCallInfo,
FCB->ConnectReturnInfo,
- &FCB->ConnectIrp.Iosb,
StreamSocketConnectComplete,
FCB );
}
break;
default:
- AFD_DbgPrint(MIN_TRACE,("Inappropriate socket state %d for connect\n",
+ AFD_DbgPrint(MIN_TRACE,("Inappropriate socket state %u for connect\n",
FCB->State));
break;
}