ZNC  trunk
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
znc.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2004-2014 ZNC, see the NOTICE file for details.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _ZNC_H
18 #define _ZNC_H
19 
20 #include <znc/zncconfig.h>
21 #include <znc/Client.h>
22 #include <znc/Modules.h>
23 #include <znc/Socket.h>
24 #include <znc/Listener.h>
25 #include <map>
26 #include <list>
27 
28 class CListener;
29 class CUser;
30 class CIRCNetwork;
31 class CConnectQueueTimer;
32 class CConfig;
33 class CFile;
34 
35 class CZNC {
36 public:
37  CZNC();
38  ~CZNC();
39 
40  enum ConfigState {
44  };
45 
46  void DeleteUsers();
47  void Loop();
48  bool WritePidFile(int iPid);
49  bool DeletePidFile();
50  bool WaitForChildLock();
51  bool IsHostAllowed(const CString& sHostMask) const;
52  // This returns false if there are too many anonymous connections from this ip
53  bool AllowConnectionFrom(const CString& sIP) const;
54  void InitDirs(const CString& sArgvPath, const CString& sDataDir);
55  bool OnBoot();
56  CString ExpandConfigPath(const CString& sConfigFile, bool bAllowMkDir = true);
57  bool WriteNewConfig(const CString& sConfigFile);
58  bool WriteConfig();
59  bool ParseConfig(const CString& sConfig, CString& sError);
60  bool RehashConfig(CString& sError);
61  void BackupConfigOnce(const CString& sSuffix);
62  static CString GetVersion();
63  static CString GetTag(bool bIncludeVersion = true, bool bHTML = false);
65  CString GetUptime() const;
66  void ClearBindHosts();
67  bool AddBindHost(const CString& sHost);
68  bool RemBindHost(const CString& sHost);
69  void ClearTrustedProxies();
70  bool AddTrustedProxy(const CString& sHost);
71  bool RemTrustedProxy(const CString& sHost);
72  void Broadcast(const CString& sMessage, bool bAdminOnly = false,
73  CUser* pSkipUser = NULL, CClient* pSkipClient = NULL);
74  void AddBytesRead(unsigned long long u) { m_uBytesRead += u; }
75  void AddBytesWritten(unsigned long long u) { m_uBytesWritten += u; }
76  unsigned long long BytesRead() const { return m_uBytesRead; }
77  unsigned long long BytesWritten() const { return m_uBytesWritten; }
78 
79  // Traffic fun
80  typedef std::pair<unsigned long long, unsigned long long> TrafficStatsPair;
81  typedef std::map<CString, TrafficStatsPair> TrafficStatsMap;
82  // Returns a map which maps user names to <traffic in, traffic out>
83  // while also providing the traffic of all users together, traffic which
84  // couldn't be accounted to any particular user and the total traffic
85  // generated through ZNC.
87  TrafficStatsPair &ZNC, TrafficStatsPair &Total);
88 
89  // Authenticate a user.
90  // The result is passed back via callbacks to CAuthBase.
91  // CSmartPtr handles freeing this pointer!
92  void AuthUser(CSmartPtr<CAuthBase> AuthClass);
93 
94  // Setters
96  void SetSkinName(const CString& s) { m_sSkinName = s; }
97  void SetStatusPrefix(const CString& s) { m_sStatusPrefix = (s.empty()) ? "*" : s; }
98  void SetMaxBufferSize(unsigned int i) { m_uiMaxBufferSize = i; }
99  void SetAnonIPLimit(unsigned int i) { m_uiAnonIPLimit = i; }
100  void SetServerThrottle(unsigned int i) { m_sConnectThrottle.SetTTL(i*1000); }
102  void SetConnectDelay(unsigned int i);
103  // !Setters
104 
105  // Getters
106  enum ConfigState GetConfigState() const { return m_eConfigState; }
108  const CSockManager& GetManager() const { return m_Manager; }
110  size_t FilterUncommonModules(std::set<CModInfo>& ssModules);
111  CString GetSkinName() const { return m_sSkinName; }
112  const CString& GetStatusPrefix() const { return m_sStatusPrefix; }
113  const CString& GetCurPath() const;
114  const CString& GetHomePath() const;
115  const CString& GetZNCPath() const;
116  CString GetConfPath(bool bAllowMkDir = true) const;
117  CString GetUserPath() const;
118  CString GetModPath() const;
119  CString GetPemLocation() const;
120  const CString& GetConfigFile() const { return m_sConfigFile; }
121  bool WritePemFile();
122  const VCString& GetBindHosts() const { return m_vsBindHosts; }
123  const VCString& GetTrustedProxies() const { return m_vsTrustedProxies; }
124  const std::vector<CListener*>& GetListeners() const { return m_vpListeners; }
125  time_t TimeStarted() const { return m_TimeStarted; }
126  unsigned int GetMaxBufferSize() const { return m_uiMaxBufferSize; }
127  unsigned int GetAnonIPLimit() const { return m_uiAnonIPLimit; }
128  unsigned int GetServerThrottle() const { return m_sConnectThrottle.GetTTL() / 1000; }
129  unsigned int GetConnectDelay() const { return m_uiConnectDelay; }
131  // !Getters
132 
133  // Static allocator
134  static void CreateInstance();
135  static CZNC& Get();
136  static void DestroyInstance();
137  CUser* FindUser(const CString& sUsername);
138  CModule* FindModule(const CString& sModName, const CString& sUsername);
139  CModule* FindModule(const CString& sModName, CUser* pUser);
140 
148  bool UpdateModule(const CString &sModule);
149 
150  bool DeleteUser(const CString& sUsername);
151  bool AddUser(CUser* pUser, CString& sErrorRet);
152  const std::map<CString,CUser*> & GetUserMap() const { return(m_msUsers); }
153 
154  // Listener yummy
155  CListener* FindListener(u_short uPort, const CString& BindHost, EAddrType eAddr);
156  bool AddListener(CListener*);
157  bool AddListener(unsigned short uPort, const CString& sBindHost,
158  const CString& sURIPrefix, bool bSSL,
159  EAddrType eAddr, CListener::EAcceptType eAccept, CString& sError);
160  bool DelListener(CListener*);
161 
162  // Message of the Day
163  void SetMotd(const CString& sMessage) { ClearMotd(); AddMotd(sMessage); }
164  void AddMotd(const CString& sMessage) { if (!sMessage.empty()) { m_vsMotd.push_back(sMessage); } }
165  void ClearMotd() { m_vsMotd.clear(); }
166  const VCString& GetMotd() const { return m_vsMotd; }
167  // !MOTD
168 
169  void AddServerThrottle(CString sName) { m_sConnectThrottle.AddItem(sName, true); }
170  bool GetServerThrottle(CString sName) { bool *b = m_sConnectThrottle.GetItem(sName); return (b && *b); }
171 
172  void AddNetworkToQueue(CIRCNetwork *pNetwork);
173  std::list<CIRCNetwork*>& GetConnectionQueue() { return m_lpConnectQueue; }
174 
175  // This creates a CConnectQueueTimer if we haven't got one yet
176  void EnableConnectQueue();
177  void DisableConnectQueue();
178 
179  void PauseConnectQueue();
180  void ResumeConnectQueue();
181 
182  // Never call this unless you are CConnectQueueTimer::~CConnectQueueTimer()
183  void LeakConnectQueueTimer(CConnectQueueTimer *pTimer);
184 
185  static void DumpConfig(const CConfig* Config);
186 
187 private:
188  CFile* InitPidFile();
189  bool DoRehash(CString& sError);
190  // Returns true if something was done
191  bool HandleUserDeletion();
192  CString MakeConfigHeader();
193  bool AddListener(const CString& sLine, CString& sError);
194  bool AddListener(CConfig* pConfig, CString& sError);
195 
196 protected:
198 
200  std::vector<CListener*> m_vpListeners;
201  std::map<CString,CUser*> m_msUsers;
202  std::map<CString,CUser*> m_msDelUsers;
204 
207 
217  unsigned int m_uiConnectDelay;
218  unsigned int m_uiAnonIPLimit;
219  unsigned int m_uiMaxBufferSize;
221  unsigned long long m_uBytesRead;
222  unsigned long long m_uBytesWritten;
223  std::list<CIRCNetwork*> m_lpConnectQueue;
224  CConnectQueueTimer *m_pConnectQueueTimer;
225  unsigned int m_uiConnectPaused;
228 };
229 
230 #endif // !_ZNC_H
const std::vector< CListener * > & GetListeners() const
Definition: znc.h:124
unsigned int GetConnectDelay() const
Definition: znc.h:129
unsigned int GetMaxBufferSize() const
Definition: znc.h:126
bool AddListener(CListener *)
unsigned long long m_uBytesRead
Definition: znc.h:221
Definition: User.h:37
const CString & GetConfigFile() const
Definition: znc.h:120
CString m_sPidFile
Definition: znc.h:211
void SetProtectWebSessions(bool b)
Definition: znc.h:101
EAddrType
Definition: Socket.h:40
const CString & GetCurPath() const
unsigned int GetAnonIPLimit() const
Definition: znc.h:127
const CSockManager & GetManager() const
Definition: znc.h:108
std::map< CString, CUser * > m_msUsers
Definition: znc.h:201
void DeleteUsers()
CFile * m_pLockFile
Definition: znc.h:216
void AddItem(const K &Item)
This function adds an item to the cache using the default time-to-live value.
Definition: Utils.h:253
CString GetPemLocation() const
std::map< CString, CUser * > m_msDelUsers
Definition: znc.h:202
unsigned int m_uiConnectDelay
Definition: znc.h:217
V * GetItem(const K &Item)
Performs a Cleanup() and returns a pointer to the object, or NULL.
Definition: Utils.h:305
std::map< CString, TrafficStatsPair > TrafficStatsMap
Definition: znc.h:81
void LeakConnectQueueTimer(CConnectQueueTimer *pTimer)
static CZNC & Get()
const VCString & GetBindHosts() const
Definition: znc.h:122
VCString m_vsMotd
Definition: znc.h:215
TCacheMap< CString > m_sConnectThrottle
Definition: znc.h:226
unsigned long long m_uBytesWritten
Definition: znc.h:222
void SetAnonIPLimit(unsigned int i)
Definition: znc.h:99
unsigned int GetTTL() const
Definition: Utils.h:348
bool DelListener(CListener *)
std::pair< unsigned long long, unsigned long long > TrafficStatsPair
Definition: znc.h:80
void PauseConnectQueue()
Definition: Client.h:84
unsigned long long BytesWritten() const
Definition: znc.h:77
bool WriteConfig()
const CString & GetHomePath() const
std::list< CIRCNetwork * > m_lpConnectQueue
Definition: znc.h:223
void ClearTrustedProxies()
EAcceptType
Definition: Listener.h:29
static CString GetCompileOptionsString()
void SetTTL(unsigned int u)
Definition: Utils.h:345
void SetMaxBufferSize(unsigned int i)
Definition: znc.h:98
enum ConfigState m_eConfigState
Definition: znc.h:199
CString GetSkinName() const
Definition: znc.h:111
const VCString & GetTrustedProxies() const
Definition: znc.h:123
Definition: Modules.h:1066
bool RemTrustedProxy(const CString &sHost)
CListener * FindListener(u_short uPort, const CString &BindHost, EAddrType eAddr)
size_t FilterUncommonModules(std::set< CModInfo > &ssModules)
bool RehashConfig(CString &sError)
Definition: Socket.h:46
CString m_sStatusPrefix
Definition: znc.h:210
const CString & GetZNCPath() const
CString GetConfPath(bool bAllowMkDir=true) const
unsigned int GetServerThrottle() const
Definition: znc.h:128
void SetConfigState(enum ConfigState e)
Definition: znc.h:95
unsigned int m_uiMaxBufferSize
Definition: znc.h:219
VCString m_vsTrustedProxies
Definition: znc.h:214
void SetStatusPrefix(const CString &s)
Definition: znc.h:97
void AddBytesRead(unsigned long long u)
Definition: znc.h:74
time_t TimeStarted() const
Definition: znc.h:125
unsigned long long BytesRead() const
Definition: znc.h:76
TrafficStatsMap GetTrafficStats(TrafficStatsPair &Users, TrafficStatsPair &ZNC, TrafficStatsPair &Total)
void AddBytesWritten(unsigned long long u)
Definition: znc.h:75
Definition: znc.h:35
Definition: FileUtils.h:30
time_t m_TimeStarted
Definition: znc.h:197
Definition: IRCNetwork.h:36
std::vector< CString > VCString
Definition: ZNCString.h:37
bool DeleteUser(const CString &sUsername)
CSockManager m_Manager
Definition: znc.h:203
bool ParseConfig(const CString &sConfig, CString &sError)
void SetConnectDelay(unsigned int i)
static void DumpConfig(const CConfig *Config)
const std::map< CString, CUser * > & GetUserMap() const
Definition: znc.h:152
bool GetServerThrottle(CString sName)
Definition: znc.h:170
String class that is used inside ZNC.
Definition: ZNCString.h:67
bool AddTrustedProxy(const CString &sHost)
bool WriteNewConfig(const CString &sConfigFile)
static CString GetVersion()
void SetSkinName(const CString &s)
Definition: znc.h:96
enum ConfigState GetConfigState() const
Definition: znc.h:106
void SetServerThrottle(unsigned int i)
Definition: znc.h:100
bool AddBindHost(const CString &sHost)
CString m_sSkinName
Definition: znc.h:209
bool WritePemFile()
ConfigState
Definition: znc.h:40
CString ExpandConfigPath(const CString &sConfigFile, bool bAllowMkDir=true)
The base class for your own ZNC modules.
Definition: Modules.h:322
bool AddUser(CUser *pUser, CString &sErrorRet)
void Broadcast(const CString &sMessage, bool bAdminOnly=false, CUser *pSkipUser=NULL, CClient *pSkipClient=NULL)
Definition: znc.h:42
void InitDirs(const CString &sArgvPath, const CString &sDataDir)
bool UpdateModule(const CString &sModule)
Reload a module everywhere.
void EnableConnectQueue()
static CString GetTag(bool bIncludeVersion=true, bool bHTML=false)
void AddMotd(const CString &sMessage)
Definition: znc.h:164
Definition: Listener.h:27
void Loop()
void ResumeConnectQueue()
CConnectQueueTimer * m_pConnectQueueTimer
Definition: znc.h:224
void ClearBindHosts()
CString GetUptime() const
std::vector< CListener * > m_vpListeners
Definition: znc.h:200
CUser * FindUser(const CString &sUsername)
CString m_sSSLCertFile
Definition: znc.h:212
void DisableConnectQueue()
CSockManager & GetManager()
Definition: znc.h:107
bool RemBindHost(const CString &sHost)
bool DeletePidFile()
CModules * m_pModules
Definition: znc.h:220
unsigned int m_uiConnectPaused
Definition: znc.h:225
VCString m_vsBindHosts
Definition: znc.h:213
Definition: znc.h:43
bool WaitForChildLock()
const VCString & GetMotd() const
Definition: znc.h:166
bool IsHostAllowed(const CString &sHostMask) const
void SetMotd(const CString &sMessage)
Definition: znc.h:163
Definition: znc.h:41
bool m_bProtectWebSessions
Definition: znc.h:227
void AddNetworkToQueue(CIRCNetwork *pNetwork)
bool GetProtectWebSessions() const
Definition: znc.h:130
const CString & GetStatusPrefix() const
Definition: znc.h:112
static void CreateInstance()
CString m_sZNCPath
Definition: znc.h:206
CModules & GetModules()
Definition: znc.h:109
CString m_sCurPath
Definition: znc.h:205
CModule * FindModule(const CString &sModName, const CString &sUsername)
std::list< CIRCNetwork * > & GetConnectionQueue()
Definition: znc.h:173
void BackupConfigOnce(const CString &sSuffix)
unsigned int m_uiAnonIPLimit
Definition: znc.h:218
CString GetModPath() const
static void DestroyInstance()
void ClearMotd()
Definition: znc.h:165
Definition: Config.h:36
bool WritePidFile(int iPid)
CString GetUserPath() const
CString m_sConfigFile
Definition: znc.h:208
void AuthUser(CSmartPtr< CAuthBase > AuthClass)
bool AllowConnectionFrom(const CString &sIP) const
void AddServerThrottle(CString sName)
Definition: znc.h:169
bool OnBoot()