ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

NTSTATUS DGReceiveDatagram ( PADDRESS_FILE  AddrFile,
PTDI_CONNECTION_INFORMATION  ConnInfo,
PCHAR  BufferData,
ULONG  ReceiveLength,
ULONG  ReceiveFlags,
PTDI_CONNECTION_INFORMATION  ReturnInfo,
PULONG  BytesReceived,
PDATAGRAM_COMPLETION_ROUTINE  Complete,
PVOID  Context,
PIRP  Irp 
)

Definition at line 220 of file datagram.c.

Referenced by DispTdiReceiveDatagram().

{
    NTSTATUS Status;
    PDATAGRAM_RECEIVE_REQUEST ReceiveRequest;
    KIRQL OldIrql;

    TI_DbgPrint(MAX_TRACE, ("Called.\n"));

    LockObject(AddrFile, &OldIrql);

    ReceiveRequest = ExAllocatePoolWithTag(NonPagedPool, sizeof(DATAGRAM_RECEIVE_REQUEST),
                                           DATAGRAM_RECV_TAG);
    if (ReceiveRequest)
    {
    /* Initialize a receive request */

    /* Extract the remote address filter from the request (if any) */
    if ((ConnInfo->RemoteAddressLength != 0) &&
        (ConnInfo->RemoteAddress))
        {
        Status = AddrGetAddress(ConnInfo->RemoteAddress,
                    &ReceiveRequest->RemoteAddress,
                    &ReceiveRequest->RemotePort);
        if (!NT_SUCCESS(Status))
            {
        ExFreePoolWithTag(ReceiveRequest, DATAGRAM_RECV_TAG);
            UnlockObject(AddrFile, OldIrql);
        return Status;
            }
    }
    else
        {
        ReceiveRequest->RemotePort = 0;
        AddrInitIPv4(&ReceiveRequest->RemoteAddress, 0);
        }

    IoMarkIrpPending(Irp);

    ReceiveRequest->ReturnInfo = ReturnInfo;
    ReceiveRequest->Buffer = BufferData;
    ReceiveRequest->BufferSize = ReceiveLength;
    ReceiveRequest->UserComplete = Complete;
    ReceiveRequest->UserContext = Context;
    ReceiveRequest->Complete =
        (PDATAGRAM_COMPLETION_ROUTINE)DGReceiveComplete;
    ReceiveRequest->Context = ReceiveRequest;
        ReceiveRequest->AddressFile = AddrFile;
        ReceiveRequest->Irp = Irp;

    /* Queue receive request */
    InsertTailList(&AddrFile->ReceiveQueue, &ReceiveRequest->ListEntry);

    TI_DbgPrint(MAX_TRACE, ("Leaving (pending %08x).\n", ReceiveRequest));

    UnlockObject(AddrFile, OldIrql);

    return STATUS_PENDING;
    }
    else
    {
    UnlockObject(AddrFile, OldIrql);
        Status = STATUS_INSUFFICIENT_RESOURCES;
    }

    TI_DbgPrint(MAX_TRACE, ("Leaving with errors (0x%X).\n", Status));

    return Status;
}

Generated on Sat May 26 2012 06:02:54 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.