//========================================================================== // PRODUCT: RusRoute - MaaSoftware routing firewall software driver // (C) Copyright Moiseenko A.A., MaaSoftware, 2003-2008. All Rights Reserved. // http://www.maasoftware.ru http://www.maasoftware.com // http://www.rusroute.ru http://www.rusroute.com // support@maasoftware.ru //========================================================================== // FILE: MaaTL.h // // AUTHOR: Andrey A. Moiseenko // // OVERVIEW Maa's template library. // ~~~~~~~~ // DATE: 16.10.2003 //========================================================================== #ifndef __MAARF_PACKET_H #define __MAARF_PACKET_H //------------------------------------------------------------------------------ inline _byte * GetPtr ( PNDIS_PACKET Packet ) { #ifndef __unix__ #ifdef DRV_NDIS_3x return ( _byte * ) Packet -> Private.Head -> VirtualAddress; #else PNDIS_BUFFER Buffer; void * va; UINT Size; NdisGetFirstBufferFromPacket ( Packet, & Buffer, & va, & Size, & Size ); return ( _byte * ) va; #endif #else return ( _byte * ) Packet -> data; #endif } //------------------------------------------------------------------------------ inline int GetLength ( PNDIS_PACKET Packet ) { #ifndef __unix__ #ifdef DRV_NDIS_3x #ifdef _DEBUG if ( Packet -> Private.TotalLength != Packet -> Private.Head -> Length ) { INT3 } #endif return Packet -> Private.TotalLength; #else UINT Length; NdisQueryPacket ( Packet, NULL, NULL, NULL, & Length ); return Length; #endif #else return Packet -> length; #endif } //------------------------------------------------------------------------------ inline void AdjustLength ( PNDIS_PACKET Packet, int NewLength ) { #ifndef __unix__ #ifdef DRV_NDIS_3x // Packet consists of one buffer only !!!! Packet -> Private.Head -> Length = Packet -> Private.TotalLength = NewLength; #else PNDIS_BUFFER Buffer; NdisUnchainBufferAtFront ( Packet, & Buffer ); NdisAdjustBufferLength ( Buffer, NewLength ); NdisChainBufferAtFront ( Packet, Buffer ); #endif #else Packet -> length = NewLength; #endif } //------------------------------------------------------------------------------ #ifndef __unix__ struct CDrvPacketContext { PNDIS_PACKET m_OriginalPacket; #ifdef _WIN9x NDIS_HANDLE m_NdisBindingHandle; // tempr. fields int m_LookAheadSize; // tempr. fields #else //NDIS_HANDLE m_Handle; PNDIS_BUFFER m_pBuffer; #endif CDrvPacket * m_Index; }; //------------------------------------------------------------------------------ inline CDrvPacketContext * PacketCtx ( PNDIS_PACKET pPacket ) { return ( CDrvPacketContext * )( pPacket -> ProtocolReserved ); } //------------------------------------------------------------------------------ #if 0 inline CDrvPacketContext * PacketCtx ( PNDIS_PACKET pPacket ) { return ( CDrvPacketContext * )( pPacket -> ProtocolReserved + PROTOCOL_RESERVED_SIZE_IN_PACKET ); } //------------------------------------------------------------------------------ inline _byte * PacketRawPtr ( PNDIS_PACKET pPacket ) { return ( _byte * )( pPacket -> ProtocolReserved + PROTOCOL_RESERVED_SIZE_IN_PACKET + sizeof ( CDrvPacketContext ) ); } #endif //------------------------------------------------------------------------------ #ifdef _WINNT inline bool IsDeffered ( PNDIS_PACKET pPacket ) { return PacketCtx ( pPacket ) -> m_OriginalPacket == pPacket; } #endif //------------------------------------------------------------------------------ #endif #endif // __MAARF_PACKET_H