--- /dev/null
+/*
+ * 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
+ */
+
+/*
+ * Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
+ */
+
+ /*
+ $Revision: 1.15 $
+ $Date: 2010/03/11 14:42:05 $
+ $Author: faust $
+ */
+
+#ifndef USER_STAT_H
+#define USER_STAT_H
+
+#include <ctime>
+#include <map>
+
+#include "os_int.h"
+#include "resetable.h"
+#include "user_traff.h"
+//-----------------------------------------------------------------------------
+struct IP_DIR_PAIR
+{
+ #ifdef TRAFF_STAT_WITH_PORTS
+ IP_DIR_PAIR(uint32_t _ip,
+ int _dir,
+ uint16_t _port)
+ : ip(_ip),
+ dir(_dir),
+ port(_port)
+ {}
+ #else
+ IP_DIR_PAIR(uint32_t _ip,
+ int _dir)
+ : ip(_ip),
+ dir(_dir)
+ {}
+ #endif
+ //------------------------
+ bool operator<(const IP_DIR_PAIR & idp) const
+ {
+ if (ip < idp.ip)
+ return true;
+
+ if (ip > idp.ip)
+ return false;
+
+ #ifdef TRAFF_STAT_WITH_PORTS
+ if (port < idp.port)
+ return true;
+
+ if (port > idp.port)
+ return false;
+ #endif
+
+ if (dir < idp.dir)
+ return true;
+
+ return false;
+ }
+ //------------------------
+ bool operator!=(const IP_DIR_PAIR & rvalue) const
+ {
+ if (ip != rvalue.ip)
+ return true;
+
+ #ifdef TRAFF_STAT_WITH_PORTS
+ if (port != rvalue.port)
+ return true;
+ #endif
+
+ if (dir != rvalue.dir)
+ return true;
+
+ return false;
+ }
+ //------------------------
+ uint32_t ip;
+ int dir;
+ #ifdef TRAFF_STAT_WITH_PORTS
+ uint16_t port;
+ #endif
+};
+//-----------------------------------------------------------------------------
+struct STAT_NODE
+{
+ STAT_NODE(uint64_t _up,
+ uint64_t _down,
+ double _cash)
+ : up(_up),
+ down(_down),
+ cash(_cash)
+ {}
+ uint64_t up;
+ uint64_t down;
+ double cash;
+};
+//-----------------------------------------------------------------------------
+struct USER_STAT
+{
+ //USER_STAT & operator= (const USER_STAT_RES & usr);
+ USER_STAT()
+ : up(),
+ down(),
+ cash(0),
+ freeMb(0),
+ lastCashAdd(0),
+ lastCashAddTime(0),
+ passiveTime(0),
+ lastActivityTime(0)
+ {};
+
+ DIR_TRAFF up;
+ DIR_TRAFF down;
+ double cash;
+ double freeMb;
+ double lastCashAdd;
+ time_t lastCashAddTime;
+ time_t passiveTime;
+ time_t lastActivityTime;
+};
+//-----------------------------------------------------------------------------
+typedef std::map<IP_DIR_PAIR, STAT_NODE> TRAFF_STAT;
+//-----------------------------------------------------------------------------
+struct USER_STAT_RES
+{
+ USER_STAT_RES()
+ : cash(),
+ freeMb(),
+ lastCashAdd(),
+ lastCashAddTime(),
+ passiveTime(),
+ lastActivityTime(),
+ up(),
+ down()
+ {}
+
+ USER_STAT_RES & operator= (const USER_STAT & us)
+ {
+ cash = us.cash;
+ freeMb = us.freeMb;
+ lastCashAdd = us.lastCashAdd;
+ lastCashAddTime = us.lastCashAddTime;
+ passiveTime = us.passiveTime;
+ lastActivityTime = us.lastActivityTime;
+ up = us.up;
+ down = us.down;
+ return * this;
+ };
+ operator USER_STAT() const
+ {
+ USER_STAT us;
+ us.cash = cash;
+ us.freeMb = freeMb;
+ us.lastCashAdd = lastCashAdd;
+ us.lastCashAddTime = lastCashAddTime;
+ us.passiveTime = passiveTime;
+ us.lastActivityTime = lastActivityTime;
+ us.up = up;
+ us.down = down;
+ return us;
+ };
+
+ RESETABLE<double> cash;
+ RESETABLE<double> freeMb;
+ RESETABLE<double> lastCashAdd;
+ RESETABLE<time_t> lastCashAddTime;
+ RESETABLE<time_t> passiveTime;
+ RESETABLE<time_t> lastActivityTime;
+ RESETABLE<DIR_TRAFF> up;
+ RESETABLE<DIR_TRAFF> down;
+};
+//-----------------------------------------------------------------------------
+#endif