//========================================================================== // PRODUCT: RUSROUTE - Maa's routing firewall software driver // (C) Copyright Maa, 2003-2006. All Rights Reserved. //========================================================================== // FILE: Main.h // // AUTHOR: Andrey A. Moisseyenko // // OVERVIEW Driver's main functions and structures. // ~~~~~~~~ // DATE: 15.10.2003, 04.09.2006 //========================================================================== #ifndef __RUSROUTE_MAIN_H #define __RUSROUTE_MAIN_H //--------------------------------------------------------------------------- //extern "C" int _stdcall Main_Initialize1st (); //--------------------------------------------------------------------------- struct CMaaAdapterInfo; class CMaaAdapter; struct CMaaProtocolInfo; struct CMaaWanUps : public CMaaDLink { NDIS_WAN_LINE_UP m_WanUp; int m_BufferLength; unsigned char m_Buffer[32]; }; struct CMaaAdapterInfo : public CMaaDLink { PADAPT m_pAdapt; CMaaProtocolInfo * m_pProtocol; CMaaAdapter * m_pBind; SimpleString m_AdapterName, m_UserFriendlyAdapterName; NDIS_STATUS m_GeneralStatus; int m_IsWanLineUp, m_IsMediaConnected; NDIS_WAN_LINE_UP m_WanUp; NDIS_WAN_LINE_DOWN m_WanDown; CMaaDList m_WanUps; unsigned int m_LinkSpeed; int m_SendPacketsDropped; int m_RecvPacketsDropped; enum EState { eRunning = 0, eOK = 0, eNotInit = 1, eOpening = 2, eClosing = 3, eClosed = 4 //eReseting = 5, //eHalting = 6 }; EState m_State; bool m_bStatusClosing; int m_PacketsProcessing; NDIS_HANDLE m_ProtocolBindingContext; NDIS_HANDLE m_NdisBindingHandle; // Passed to NdisSend () NDIS_HANDLE m_BindingHandle; // Passed to SendHandler () NDIS_MEDIUM m_SelectedMedium; PUINT m_pInternalSelectedMediumIndex; PNDIS_MEDIUM m_pInternalMediumArray; PNDIS_HANDLE m_pInternalNdisBindingHandle; BOOL m_fFromCloseCompleateCallOpenCompleateWithErrorSet; int m_Number; // 0-0xffff. 0-Loopback // rem, 0x10000-0x1ffff - Removed Adapters (Not opened) int m_Flags; void SendRequests(); NDIS_REQUEST m_Req1, m_Req2, m_Req3, m_Req; unsigned long m_DataGetMaxFrameSize; BOOL IsMyRequest ( PNDIS_REQUEST pReq ) { return pReq == &m_Req1 || pReq == &m_Req2 || pReq == &m_Req3 || pReq == &m_Req; } NDIS_OPEN_BLOCK m_Block; #ifdef METHOD2 NDIS_HANDLE m_MyBindingHandle; NDIS_OPEN_BLOCK m_MyBlock; void * m_ReservedData [ 0x40 ]; #endif //_IP m_Ip1, m_Ip2, m_Mask; CDrvMac6 m_Mac, m_PermanentMac; CMaaAdapterInfo(PADAPT pAdapt); ~CMaaAdapterInfo (); int OpenAdapterSucceded();//void * sb, int nsb, void * rb, int nrb); //int RepatchNdis(int bForce = 0); //int RepatchNdis_FromStatusHandler (int bForce = 0); void AdapterClosed (); void InitAsLocal () { m_AdapterName = "RusRoute_Local"; m_Number = MaaRF_ADAPTER_LOCAL; //m_Ip1 = 0x7f000001; //m_Ip2 = 0x7ffffffe; //m_Mask = 0xff000000; } void Touch(); void UnTouch(); }; struct CMaaProtocolInfo : public CMaaDLink { NDIS_HANDLE m_ProtocolHandle; NDIS_HANDLE * m_pProtocolHandle; NDIS_PROTOCOL_CHARACTERISTICS m_Chars; void * m_Reserved [ 0x40 ]; CMaaDList < CMaaAdapterInfo > m_AdapterList; CMaaProtocolInfo () { m_ProtocolHandle = NULL; m_pProtocolHandle = NULL; Memzero(&m_Chars, sizeof (m_Chars)); Memzero(m_Reserved, sizeof (m_Reserved)); } }; struct CMaaDriverBase { CMaaDList < CMaaProtocolInfo > m_ProtocolList; CMaaUnivHash < NDIS_HANDLE, CMaaProtocolInfo * > m_hProtocolHandle2ProtocolInfo; CMaaProtocolInfo * FindProtocolInfo(NDIS_HANDLE h) { CMaaProtocolInfo * r = NULL; if (!m_hProtocolHandle2ProtocolInfo.Find(h, &r)) { return r; } for (r = m_ProtocolList.LookAtFront(); r; r = m_ProtocolList.Next(r)) { if (!r->m_ProtocolHandle && *r->m_pProtocolHandle == h) { break; } } return r; } CMaaUnivHash < NDIS_HANDLE, CMaaAdapterInfo * > m_hBindingContext2AdapterInfo; CMaaUnivHash < NDIS_HANDLE, CMaaAdapterInfo * > m_hBindingHandle2AdapterInfo; CMaaUnivHash < NDIS_HANDLE, CMaaAdapterInfo * > m_hMyBindingHandle2AdapterInfo; CMaaUnivHash < NDIS_HANDLE, CMaaAdapterInfo * > m_hNdisBindingHandle2AdapterInfo; // xp specific CMaaUnivHash < int, CMaaAdapterInfo * > m_hAdapterNumber2AdapterInfo; //CMaaAdapterInfo * m_LocalAdapter; CMaaUnivHash_KeyIsClass < SimpleString, int > m_hAdapterName2AdapterNumber; int m_AdapterLastNumber; BOOL m_IsOK; //NDIS_SPIN_LOCK m_SpinLock; CMaaDriverBase () { //_NdisAllocateSpinLock ( & m_SpinLock ); /* m_LocalAdapter = new CMaaAdapterInfo; if ( m_LocalAdapter ) { m_LocalAdapter -> InitAsLocal (); } */ m_IsOK = m_hProtocolHandle2ProtocolInfo.IsOK () && m_hBindingContext2AdapterInfo.IsOK () && m_hBindingHandle2AdapterInfo.IsOK () && m_hNdisBindingHandle2AdapterInfo.IsOK () && m_hAdapterNumber2AdapterInfo.IsOK () && //m_LocalAdapter && //m_LocalAdapter -> m_AdapterName.IsOK () && m_hAdapterName2AdapterNumber.IsOK (); m_AdapterLastNumber = 1; if ( m_IsOK ) { /* if ( 0 ) { // we can do next line m_hAdapterName2AdapterNumber.Add ( m_LocalAdapter->m_AdapterName, m_LocalAdapter->m_Number ); } */ } } virtual ~CMaaDriverBase () { //delete m_LocalAdapter; //_NdisFreeSpinLock ( & m_SpinLock ); } //void Lock () //{ // _NdisAcquireSpinLock ( & m_SpinLock ); //} //void UnLock () //{ // _NdisReleaseSpinLock ( & m_SpinLock ); //} }; extern int gHooked; //--------------------------------------------------------------------------- #endif // __RUSROUTE_MAIN_H