gnuworld/mod.cservice/sqlChannel.h

371 lines
9.4 KiB
C++

/**
* sqlChannel.h
* Author: Greg Sikorski
*
* 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.
*
* $Id: sqlChannel.h,v 1.47 2007/08/28 16:10:12 dan_karrels Exp $
*/
#ifndef __SQLCHANNEL_H
#define __SQLCHANNEL_H "$Id: sqlChannel.h,v 1.47 2007/08/28 16:10:12 dan_karrels Exp $"
#include <string>
#include <map>
#include <vector>
#include <utility>
#include <ctime>
#include "dbHandle.h"
#include "sqlBan.h"
namespace gnuworld
{
using std::string ;
using std::map ;
using std::vector ;
class sqlChannel
{
public:
sqlChannel(dbHandle*) ;
virtual ~sqlChannel() ;
typedef unsigned int flagType ;
static const flagType F_NOPURGE;
static const flagType F_SPECIAL;
static const flagType F_NOREG;
static const flagType F_NEVREG;
static const flagType F_SUSPEND;
static const flagType F_TEMP;
static const flagType F_CAUTION;
static const flagType F_VACATION;
static const flagType F_LOCKED;
static const flagType F_ALWAYSOP;
static const flagType F_STRICTOP;
static const flagType F_NOOP;
static const flagType F_AUTOTOPIC;
static const flagType F_OPONLY; // Deprecated.
static const flagType F_AUTOJOIN;
static const flagType F_FLOATLIM;
static const flagType F_MIA; // MIA review tag
static const flagType F_NOFORCE; // Reserved for use by Planetarion.
static const flagType F_NOVOICE;
static const flagType F_NOTAKE;
static const flagType F_FLOODPRO;
/*
* Channel 'Event' Flags, used in the channelog table.
* These flags are used to filter channel log records.
* in reports.
*/
static const int EV_MISC;
static const int EV_JOIN;
static const int EV_PART;
static const int EV_OPERJOIN;
static const int EV_OPERPART;
static const int EV_FORCE;
static const int EV_REGISTER;
static const int EV_PURGE;
/* Manually added Comment */
static const int EV_COMMENT;
static const int EV_REMOVEALL;
static const int EV_IDLE;
/* other events */
static const int EV_MGRCHANGE;
static const int EV_ADMREJECT;
static const int EV_WITHDRAW;
static const int EV_NEWAPP;
static const int EV_NONSUPPORT;
static const int EV_ADMREVIEW;
static const int EV_CLRREVIEW;
static const int EV_SUSPEND;
static const int EV_UNSUSPEND;
static const int EV_NOFORCE;
static const int EV_TAKE;
/*
* Methods to get data attributes.
*/
inline const unsigned int& getID() const
{ return id ; }
inline const string& getName() const
{ return name ; }
inline const flagType& getFlags() const
{ return flags ; }
inline bool getFlag( const flagType& whichFlag ) const
{ return (flags & whichFlag) ; }
inline const unsigned short int& getMassDeopPro() const
{ return mass_deop_pro ; }
inline const unsigned int& getFloodPro() const
{ return flood_pro ; }
inline const string& getURL() const
{ return url ; }
inline const string& getDescription() const
{ return description ; }
inline const string& getComment() const
{ return comment ; }
inline const string& getKeywords() const
{ return keywords ; }
inline const string& getWelcome() const
{ return welcome ; }
inline const time_t& getRegisteredTS() const
{ return registered_ts ; }
inline const time_t& getChannelTS() const
{ return channel_ts ; }
inline const string& getChannelMode() const
{ return channel_mode ; }
inline const unsigned short int& getUserFlags() const
{ return userflags ; }
inline const time_t& getLastUpdated() const
{ return last_updated ; }
inline const bool& getInChan() const
{ return inChan; }
inline const time_t& getLastTopic() const
{ return last_topic ; }
inline const time_t& getLastLimitCheck() const
{ return last_limit_check ; }
inline const time_t& getLastUsed() const
{ return last_used ; }
inline const unsigned int& getLimitOffset() const
{ return limit_offset ; }
inline const time_t& getLimitPeriod() const
{ return limit_period ; }
inline const unsigned int& getLimitGrace() const
{ return limit_grace ; }
inline const unsigned int& getLimitMax() const
{ return limit_max ; }
inline const unsigned int& getMaxBans() const
{ return max_bans ; }
inline const unsigned int& getNoTake() const
{ return no_take ; }
/**
* Load channel data from the backend using the channel name as
* a key.
*/
bool loadData( const string& );
/**
* Load channel data from the backend using the channel_id as a
* key.
*/
bool loadData( int );
/*
* Methods to set data atrributes.
*/
// 'ID' is a primary key and cannot be altered.
inline void setID( const unsigned int& _id )
{ id = _id; }
inline void setName( const string& _name )
{ name = _name; }
inline void setFlag( const flagType& whichFlag )
{ flags |= whichFlag; }
inline void removeFlag( const flagType& whichFlag )
{ flags &= ~whichFlag; }
inline void clearFlags()
{ flags = 0; }
inline void setMassDeopPro( const unsigned short int& _mass_deop_pro )
{ mass_deop_pro = _mass_deop_pro; }
inline void setFloodPro( const unsigned int& _flood_pro )
{ flood_pro = _flood_pro; }
inline void setAntiFlood( const bool& _antiflood )
{ antiflood = _antiflood; }
inline void setLastFloodTime( const time_t& _last_flood )
{ last_flood = _last_flood; }
inline void setURL( const string& _url )
{ url = _url; }
inline void setDescription( const string& _description )
{ description = _description; }
inline void setComment( const string& _comment )
{ comment = _comment; }
inline void setKeywords( const string& _keywords )
{ keywords = _keywords; }
inline void setWelcome( const string& _welcome )
{ welcome = _welcome; }
inline void setRegisteredTS( const time_t& _registered_ts )
{ registered_ts = _registered_ts; }
inline void setChannelTS( const time_t& _channel_ts )
{ channel_ts = _channel_ts; }
inline void setChannelMode( const string& _channel_mode )
{ channel_mode = _channel_mode; }
inline void setUserFlags( const unsigned short int& _userflags )
{ userflags = _userflags; }
inline void setInChan( const bool& _inChan )
{ inChan = _inChan; }
inline void setLastTopic( const time_t& _last_topic )
{ last_topic = _last_topic; }
inline void setLastLimitCheck( const time_t& _last_limit_check )
{ last_limit_check = _last_limit_check; }
inline void setLastUsed( const time_t& _last_used )
{ last_used = _last_used; }
inline void setLimitOffset( const unsigned int& _limit_offset )
{ limit_offset = _limit_offset; }
inline void setLimitPeriod( const time_t& _limit_period )
{ limit_period = _limit_period; }
inline void setLimitGrace( const unsigned int& _limit_grace )
{ limit_grace = _limit_grace; }
inline void setLimitMax( const unsigned int& _limit_max )
{ limit_max = _limit_max; }
inline void setMaxBans( const unsigned int& _max_bans )
{ max_bans = _max_bans; }
inline void setNoTake( const unsigned int& _no_take )
{ no_take = _no_take; }
/**
* Method to perform a SQL 'UPDATE' and commit changes to this
* object back to the database.
*/
bool commit();
bool insertRecord();
void setAllMembers(int);
void setAllFlood();
void setFloodMsg(const unsigned short );
void setFloodNotice(const unsigned short );
void setFloodCTCP(const unsigned short );
void setFloodPeriod(const unsigned short );
void setRepeatCount(const unsigned short );
public:
/*
* Map with key user-id, contents level and username for
* easy access
* Stores UID's of admin users with forced accessse
* on this channel
*/
typedef map< unsigned int, std::pair < unsigned short, string > > forceMapType ;
forceMapType forceMap;
typedef map < int,sqlBan*> sqlBanMapType;
sqlBanMapType banList;
/* < repeater_xIP < Message, rep_count> > */
typedef map < unsigned int, std::pair< string, unsigned int > > chanRepeatType;
chanRepeatType chanRepeat;
/* < flooder_xIP < last_time, accumulated_floodcount > > */
typedef map < unsigned int, std::pair < time_t, unsigned int > > chanFloodType ;
chanFloodType msgFlood;
chanFloodType noticeFlood;
chanFloodType ctcpFlood;
protected:
unsigned int id ;
string name ;
flagType flags ;
unsigned short mass_deop_pro ;
unsigned int flood_pro ;
unsigned short msg_period;
unsigned short notice_period;
unsigned short ctcp_period;
unsigned short flood_period;
unsigned short repeat_count;
bool antiflood;
string url ;
string description ;
string comment ;
string keywords ;
string welcome ;
time_t registered_ts ;
time_t channel_ts ;
string channel_mode ;
unsigned short userflags ;
time_t last_updated ;
time_t last_topic ;
bool inChan;
time_t last_used;
unsigned int limit_offset;
time_t limit_period;
time_t last_limit_check;
time_t last_flood; //last time when an antiflood measure was taken (kick/ban/gline)
unsigned int limit_grace;
unsigned int limit_max;
unsigned int max_bans;
unsigned int no_take;
dbHandle* SQLDb;
} ;
}
#endif // __SQLCHANNEL_H