/*++ Copyright (c) 1991 Microsoft Corporation Module Name: receive.h Abstract: This module describes the public routines in receive.c Author: Larry Osterman (larryo) 6-May-1991 Revision History: 6-May-1991 larryo Created --*/ #ifndef _RECEIVE_ #define _RECEIVE_ #define DATAGRAM_HANDLER(RoutineName) \ NTSTATUS \ RoutineName ( \ IN struct _TRANSPORT_NAME *TransportName, \ IN PVOID Buffer, \ IN ULONG BytesAvailable, \ IN OUT PULONG BytesTaken, \ IN PVOID SourceAddress, \ IN ULONG SourceAddressLength, \ IN PVOID SourceName, \ IN ULONG SourceNameLength, \ IN ULONG ReceiveFlags \ ) \ typedef (*PDATAGRAM_HANDLER)( IN struct _TRANSPORT_NAME *TransportName, IN PVOID Buffer, IN ULONG BytesAvailable, IN OUT PULONG BytesTaken, IN PVOID SourceAddress, IN ULONG SourceAddressLength, IN PVOID SourceName, IN ULONG SourceNameLength, IN ULONG ReceiveFlags ); LONG BowserPostedDatagramCount; LONG BowserPostedCriticalDatagramCount; typedef struct _POST_DATAGRAM_CONTEXT { WORK_QUEUE_ITEM WorkItem; PTRANSPORT_NAME TransportName; PVOID Buffer; ULONG BytesAvailable; int ClientNameLength; CHAR ClientName[NETBIOS_NAME_LEN]; int ClientAddressLength; CHAR TdiClientAddress[1]; } POST_DATAGRAM_CONTEXT, *PPOST_DATAGRAM_CONTEXT; NTSTATUS BowserTdiReceiveDatagramHandler ( IN PVOID TdiEventContext, // the event context IN LONG SourceAddressLength, // length of the originator of the datagram IN PVOID SourceAddress, // string describing the originator of the datagram IN LONG OptionsLength, // options for the receive IN PVOID Options, // IN ULONG ReceiveDatagramFlags, // IN ULONG BytesIndicated, // number of bytes this indication IN ULONG BytesAvailable, // number of bytes in complete Tsdu OUT ULONG *BytesTaken, // number of bytes used IN PVOID Tsdu, // pointer describing this TSDU, typically a lump of bytes OUT PIRP *IoRequestPacket // TdiReceive IRP if MORE_PROCESSING_REQUIRED. ); VOID BowserCancelAnnounceRequest( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID BowserCopyOemComputerName( PCHAR OutputComputerName, PCHAR NetbiosName, ULONG NetbiosNameLength, IN ULONG ReceiveFlags ); VOID BowserLogIllegalDatagram( IN PTRANSPORT_NAME TransportName, IN PVOID IncomingBuffer, IN USHORT BufferSize, IN PCHAR ClientAddress, IN ULONG ReceiveFlags ); NTSTATUS BowserPostDatagramToWorkerThread( IN PTRANSPORT_NAME TransportName, IN PVOID Datagram, IN ULONG Length, OUT PULONG BytesTaken, IN PVOID OriginatorsAddress, IN ULONG OriginatorsAddressLength, IN PVOID OriginatorsName, IN ULONG OriginatorsNameLength, IN PWORKER_THREAD_ROUTINE Handler, IN POOL_TYPE PoolType, IN WORK_QUEUE_TYPE QueueType, IN ULONG ReceiveFlags, IN BOOLEAN PostToRdrWorkerThread ); MAILSLOTTYPE BowserClassifyIncomingDatagram( IN PVOID Buffer, IN ULONG BufferLength, OUT PVOID *DatagramData, OUT PULONG DatagramDataSize ); extern PDATAGRAM_HANDLER BowserDatagramHandlerTable[]; NTSTATUS BowserHandleMailslotTransaction ( IN PTRANSPORT_NAME TransportName, IN PCHAR ClientName, IN ULONG ClientIpAddress, IN ULONG SmbOffset, IN DWORD ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT ULONG *BytesTaken, IN PVOID Tsdu, OUT PIRP *Irp ); NTSTATUS BowserHandleShortBrowserPacket( IN PTRANSPORT_NAME TransportName, IN PVOID EventContext, IN int SourceAddressLength, IN PVOID SourceAddress, IN int OptionsLength, IN PVOID Options, IN ULONG ReceiveDatagramFlags, IN ULONG BytesAvailable, IN ULONG *BytesTaken, IN PIRP *Irp, PTDI_IND_RECEIVE_DATAGRAM Handler ); #endif