//========================================================================== // 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: Common.h // // AUTHOR: Andrey A. Moiseenko // // OVERVIEW Common classes. // ~~~~~~~~ // DATE: 26.10.2003 //========================================================================== #ifndef __MAARF_COMMON_H #define __MAARF_COMMON_H #ifdef IPLIR_SOCKETS typedef int CDrvAppFilterId; #endif //IPLIR_SOCKETS _word CalcIpCheckSum ( void * p ); int IsCheckSumOk ( void * p ); int CalcSumNotCompl ( void * p, int len, int PrevSum ); int CalcIcmpCheckSum ( void * p, int len ); #ifndef _WINNT typedef char MY_TCHAR; #else typedef short MY_TCHAR; #endif class SimpleString { MY_TCHAR * m_Str; int m_Size; public: SimpleString () : m_Str ( NULL ), m_Size ( 0 ) { } SimpleString ( const SimpleString & That ); SimpleString ( const MY_TCHAR * str ); const char * const_char_ptr () const; #ifdef _WINNT SimpleString ( NDIS_STRING str ); SimpleString ( const char * str ); #endif ~SimpleString () { delete [] m_Str; } operator const MY_TCHAR * () const; SimpleString & operator = ( const SimpleString & That ); const MY_TCHAR * operator = ( const MY_TCHAR * str ); unsigned long Hash () const; BOOL operator == ( const MY_TCHAR * str ) const; BOOL IsOK () { return m_Str != NULL; } int GetSize () const { return m_Size; } }; struct CDrvPacket; //------------------------------------------------------------------------------ class CDrvFrame { public: virtual void GetInfo ( CDrvPacket & Packet ) = 0; virtual int GetHeaderLength () = 0; virtual int GetRecvHeaderLength () = 0; virtual int HeaderLengthInvalid ( int HeaderSize, int LookaheadSize ) = 0; virtual int GetProtocol ( void * va ) = 0; // Proto_IP, ... virtual void GetDestinMac ( const void * Hdr, void * Mac ) = 0; virtual void GetSourceMac ( const void * Hdr, void * Mac ) = 0; virtual void SetDestinMac ( void * Hdr, const void * Mac ) = 0; virtual void SetSourceMac ( void * Hdr, const void * Mac ) = 0; virtual int GetTypicalFrameSize () = 0; virtual int BuildHeader ( void * Hdr, int Protocol ) = 0; }; //------------------------------------------------------------------------------ class CDrvEthFrame : public CDrvFrame { public: void GetInfo ( CDrvPacket & Packet ); int GetHeaderLength () { return EthernetHeaderLength; } int GetRecvHeaderLength () { return EthernetHeaderLength; } int HeaderLengthInvalid ( int HeaderSize, int LookaheadSize ) { return HeaderSize != EthernetHeaderLength; } int GetProtocol ( void * Header ); void GetDestinMac ( const void * Hdr, void * Mac ); void GetSourceMac ( const void * Hdr, void * Mac ); void SetDestinMac ( void * Hdr, const void * Mac ); void SetSourceMac ( void * Hdr, const void * Mac ); int GetTypicalFrameSize () { return EthernatTypicalFrameSize; } int BuildHeader ( void * Hdr, int Protocol ); }; //------------------------------------------------------------------------------ class CDrvFddiFrame : public CDrvFrame { public: void GetInfo ( CDrvPacket & Packet ); int GetHeaderLength () { return FddiHeaderLength; } int GetRecvHeaderLength () { return FddiMinimalHeaderLength; } int HeaderLengthInvalid ( int HeaderSize, int LookaheadSize ) { return ( HeaderSize < FddiMinimalHeaderLength || ( HeaderSize + LookaheadSize < FddiHeaderLength ) ); } int GetProtocol ( void * Header ); void GetDestinMac ( const void * Hdr, void * Mac ); void GetSourceMac ( const void * Hdr, void * Mac ); void SetDestinMac ( void * Hdr, const void * Mac ); void SetSourceMac ( void * Hdr, const void * Mac ); int GetTypicalFrameSize () { return FddiTypicalFrameSize; } int BuildHeader ( void * Hdr, int Protocol ); }; //------------------------------------------------------------------------------ class CDrvTokenRingFrame : public CDrvFrame { public: void GetInfo ( CDrvPacket & Packet ); int GetHeaderLength () { return TokenRingHeaderLength; } int GetRecvHeaderLength () { return TokenRingMinimalHeaderLength; } int HeaderLengthInvalid ( int HeaderSize, int LookaheadSize ) { return ( HeaderSize < TokenRingMinimalHeaderLength || ( HeaderSize + LookaheadSize < TokenRingHeaderLength ) ); } int GetProtocol ( void * Header ); void GetDestinMac ( const void * Hdr, void * Mac ); void GetSourceMac ( const void * Hdr, void * Mac ); void SetDestinMac ( void * Hdr, const void * Mac ); void SetSourceMac ( void * Hdr, const void * Mac ); int GetTypicalFrameSize () { return TokenRingTypicalFrameSize; } int BuildHeader ( void * Hdr, int Protocol ); }; //------------------------------------------------------------------------------ class CMaaService; //--------------------------------------------------------------------------- struct CDrvPacket : public CMaaDLink { struct CDrvPacketPtr : public CMaaDLink { CDrvPacket * m_pDrvPacket; }; PNDIS_PACKET m_pPacket; CMaaService * m_pService; CDrvFrame * m_Frame; CDrvPacketPtr m_CommonPacketListItem; eRusRouteErrorCode m_ErrorCode; _byte m_FrameType; _byte m_Reserved; _word m_Protocol; int m_Status; _byte * m_pHeader; int m_HeaderLen; int m_Length; void Init ( CDrvFrame & Frame ); } GCC_PACKED; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- int Impossible (); #define IMPOSSIBLE( condition ) if ( condition ) Impossible (); //--------------------------------------------------------------------------- #endif // __MAARF_COMMON_H