/* * Class.h * Copyright (c) 2004-2006 Vlad GALU * Andrei GAVRILOAIE * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifndef CLASS_H #define CLASS_H #include class CHostNode { public: in_addr m_ip; u_int m_nrFlows; u_int m_nrPackets; time_t m_lastFlow; time_t m_lastPacket; time_t m_lastCheck; CHostNode* m_pLeft; CHostNode* m_pRight; CHostNode* m_pParent; public: CHostNode(in_addr& ip, time_t& lastflow, time_t& lastpacket); ~CHostNode(void); #ifdef _DEBUG void show(FILE* file); #endif //_DEBUG }; class CHostTree { private: CHostNode* m_pRoot; u_int m_numberOfNodes; private: bool insertNode(CHostNode* pNode); void deleteNode(CHostNode* pNode); public: CHostTree(); ~CHostTree(); bool insertNode(in_addr& ip, time_t& lastflow, time_t& lastpacket); void cleanUp(CLEANFUNC cleanfunc); u_int getNumberOfNodes(); #ifdef _DEBUG void show(FILE* file); #endif //_DEBUG }; class CFlowNode { public: flow_t m_flow; u_int key[4]; CFlowNode* m_pLeft; CFlowNode* m_pRight; CFlowNode* m_pParent; public: CFlowNode( in_addr& saddr, in_addr& daddr, u_short& sport, u_short& dport, u_char& tcp_flags, u_char& proto, u_char& tos, u_int& bytes, time_t& now); ~CFlowNode(void); bool operator < (CFlowNode& node); bool operator > (CFlowNode& node); bool operator == (CFlowNode& node); bool operator <= (CFlowNode& node); bool operator >= (CFlowNode& node); #ifdef _DEBUG void show(int& nrNodes); #endif //_DEBUG }; class CFlowTree { private: CFlowNode* m_pRoot; u_int m_numberOfNodes; private: bool insertNode(CFlowNode* pNode); void deleteNode(CFlowNode* pNode); public: CFlowTree(); ~CFlowTree(); bool insertNode(flow_t& flow); bool insertNode( in_addr& saddr, in_addr& daddr, u_short& sport, u_short& dport, u_char& tcp_flags, u_char& proto, u_char& tos, u_int& bytes, time_t& now); void cleanUp(CLEANFUNC cleanfunc); u_int getNumberOfNodes(); #ifdef _DEBUG int show(); #endif //_DEBUG }; #endif //CLASS_H