ZNC trunk
Loading...
Searching...
No Matches
IRCNetwork.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2004-2025 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_IRCNETWORK_H
18#define ZNC_IRCNETWORK_H
19
20#include <znc/zncconfig.h>
21#include <znc/ZNCString.h>
22#include <znc/Buffer.h>
23#include <znc/Nick.h>
24#include <znc/znc.h>
25
26class CModules;
27class CUser;
28class CFile;
29class CConfig;
30class CClient;
31class CConfig;
32class CChan;
33class CQuery;
34class CServer;
35class CIRCSock;
36class CIRCNetworkPingTimer;
37class CIRCNetworkJoinTimer;
38class CMessage;
39
41 public:
42 static bool IsValidNetwork(const CString& sNetwork);
43
44 CIRCNetwork(CUser* pUser, const CString& sName);
45 CIRCNetwork(CUser* pUser, const CIRCNetwork& Network);
47
48 CIRCNetwork(const CIRCNetwork&) = delete;
50
51 void Clone(const CIRCNetwork& Network, bool bCloneName = true);
52
54
55 void DelServers();
56
57 bool ParseConfig(CConfig* pConfig, CString& sError, bool bUpgrade = false);
59
61
62 bool IsUserAttached() const { return !m_vClients.empty(); }
63 bool IsUserOnline() const;
64 void ClientConnected(CClient* pClient);
66
67 CUser* GetUser() const;
68 const CString& GetName() const;
69 bool IsNetworkAttached() const { return !m_vClients.empty(); }
70 const std::vector<CClient*>& GetClients() const { return m_vClients; }
71 std::vector<CClient*> FindClients(const CString& sIdentifier) const;
72
73 void SetUser(CUser* pUser);
74 bool SetName(const CString& sName);
75
76 // Modules
78 const CModules& GetModules() const { return *m_pModules; }
79 // !Modules
80
81 bool PutUser(const CString& sLine, CClient* pClient = nullptr,
82 CClient* pSkipClient = nullptr);
83 bool PutUser(const CMessage& Message, CClient* pClient = nullptr,
84 CClient* pSkipClient = nullptr);
85 bool PutStatus(const CString& sLine, CClient* pClient = nullptr,
86 CClient* pSkipClient = nullptr);
87 bool PutModule(const CString& sModule, const CString& sLine,
88 CClient* pClient = nullptr, CClient* pSkipClient = nullptr);
89
90 const std::vector<CChan*>& GetChans() const;
91 CChan* FindChan(CString sName) const;
92 std::vector<CChan*> FindChans(const CString& sWild) const;
93 bool AddChan(CChan* pChan);
94 bool AddChan(const CString& sName, bool bInConfig);
95 bool DelChan(const CString& sName);
96 bool MoveChan(const CString& sChan, unsigned int index, CString& sError);
97 bool SwapChans(const CString& sChan1, const CString& sChan2,
98 CString& sError);
99 void JoinChans();
100 void JoinChans(std::set<CChan*>& sChans);
101
102 const std::vector<CQuery*>& GetQueries() const;
103 CQuery* FindQuery(const CString& sName) const;
104 std::vector<CQuery*> FindQueries(const CString& sWild) const;
105 CQuery* AddQuery(const CString& sName);
106 bool DelQuery(const CString& sName);
107
108 const CString& GetChanPrefixes() const { return m_sChanPrefixes; }
110 bool IsChan(const CString& sChan) const;
111
112 const std::vector<CServer*>& GetServers() const;
113 bool HasServers() const { return !m_vServers.empty(); }
114 CServer* FindServer(const CString& sName) const;
115 bool DelServer(const CString& sName, unsigned short uPort,
116 const CString& sPass);
117 bool DelServer(const CServer& Server);
118 bool AddServer(CServer Server);
119 bool AddServer(const CString& sName);
120 bool AddServer(const CString& sName, unsigned short uPort,
121 const CString& sPass = "", bool bSSL = false);
122 CServer* GetNextServer(bool bAdvance = true);
124 void SetIRCServer(const CString& s);
125 bool SetNextServer(const CServer* pServer);
126 bool IsLastServer() const;
127
130 }
136 m_ssTrustedFingerprints.erase(sFP);
137 }
139
142
144 const CIRCSock* GetIRCSock() const { return m_pIRCSock; }
145 const CString& GetIRCServer() const;
146 const CNick& GetIRCNick() const;
147 void SetIRCNick(const CNick& n);
149 bool IsIRCAway() const { return m_bIRCAway; }
150 void SetIRCAway(bool b) { m_bIRCAway = b; }
151
152 bool Connect();
156 bool IsIRCConnected() const;
157 void SetIRCSocket(CIRCSock* pIRCSock);
161 void NotifyClientsAboutServerDependentCap(const CString& sCap, bool bValue);
162 bool IsServerCapAccepted(const CString& sCap) const;
163
164 bool PutIRC(const CString& sLine);
165 bool PutIRC(const CMessage& Message);
166
167 // Buffers
168 void AddRawBuffer(const CMessage& Format, const CString& sText = "") {
169 m_RawBuffer.AddLine(Format, sText);
170 }
171 void UpdateRawBuffer(const CString& sCommand, const CMessage& Format,
172 const CString& sText = "") {
173 m_RawBuffer.UpdateLine(sCommand, Format, sText);
174 }
175 void UpdateExactRawBuffer(const CMessage& Format,
176 const CString& sText = "") {
177 m_RawBuffer.UpdateExactLine(Format, sText);
178 }
180
182 void AddRawBuffer(const CString& sFormat, const CString& sText = "") {
183 m_RawBuffer.AddLine(sFormat, sText);
184 }
186 void UpdateRawBuffer(const CString& sMatch, const CString& sFormat,
187 const CString& sText = "") {
188 m_RawBuffer.UpdateLine(sMatch, sFormat, sText);
189 }
191 void UpdateExactRawBuffer(const CString& sFormat,
192 const CString& sText = "") {
193 m_RawBuffer.UpdateExactLine(sFormat, sText);
194 }
195
196 void AddMotdBuffer(const CMessage& Format, const CString& sText = "") {
197 m_MotdBuffer.AddLine(Format, sText);
198 }
199 void UpdateMotdBuffer(const CString& sCommand, const CMessage& Format,
200 const CString& sText = "") {
201 m_MotdBuffer.UpdateLine(sCommand, Format, sText);
202 }
204
206 void AddMotdBuffer(const CString& sFormat, const CString& sText = "") {
207 m_MotdBuffer.AddLine(sFormat, sText);
208 }
210 void UpdateMotdBuffer(const CString& sMatch, const CString& sFormat,
211 const CString& sText = "") {
212 m_MotdBuffer.UpdateLine(sMatch, sFormat, sText);
213 }
214
215 void AddNoticeBuffer(const CMessage& Format, const CString& sText = "") {
216 m_NoticeBuffer.AddLine(Format, sText);
217 }
218 void UpdateNoticeBuffer(const CString& sCommand, const CMessage& Format,
219 const CString& sText = "") {
220 m_NoticeBuffer.UpdateLine(sCommand, Format, sText);
221 }
223
225 void AddNoticeBuffer(const CString& sFormat, const CString& sText = "") {
226 m_NoticeBuffer.AddLine(sFormat, sText);
227 }
229 void UpdateNoticeBuffer(const CString& sMatch, const CString& sFormat,
230 const CString& sText = "") {
231 m_NoticeBuffer.UpdateLine(sMatch, sFormat, sText);
232 }
233
235 // !Buffers
236
237 // la
238 const CString& GetNick(const bool bAllowDefault = true) const;
239 const CString& GetAltNick(const bool bAllowDefault = true) const;
240 const CString& GetIdent(const bool bAllowDefault = true) const;
242 const CString& GetBindHost() const;
243 const CString& GetEncoding() const;
245
246 void SetNick(const CString& s);
247 void SetAltNick(const CString& s);
248 void SetIdent(const CString& s);
249 void SetRealName(const CString& s);
250 void SetBindHost(const CString& s);
251 void SetEncoding(const CString& s);
252 void SetQuitMsg(const CString& s);
253
254 double GetFloodRate() const { return m_fFloodRate; }
255 unsigned short int GetFloodBurst() const { return m_uFloodBurst; }
256 void SetFloodRate(double fFloodRate) { m_fFloodRate = fFloodRate; }
257 void SetFloodBurst(unsigned short int uFloodBurst) {
258 m_uFloodBurst = uFloodBurst;
259 }
260
261 unsigned short int GetJoinDelay() const { return m_uJoinDelay; }
262 void SetJoinDelay(unsigned short int uJoinDelay) {
263 m_uJoinDelay = uJoinDelay;
264 }
265
266 void SetTrustAllCerts(const bool bTrustAll = false) {
267 m_bTrustAllCerts = bTrustAll;
268 }
269 bool GetTrustAllCerts() const { return m_bTrustAllCerts; }
270
271 void SetTrustPKI(const bool bTrustPKI = true) { m_bTrustPKI = bTrustPKI; }
272 bool GetTrustPKI() const { return m_bTrustPKI; }
273
274 unsigned long long BytesRead() const { return m_uBytesRead; }
275 unsigned long long BytesWritten() const { return m_uBytesWritten; }
276
277 void AddBytesRead(unsigned long long u) { m_uBytesRead += u; }
278 void AddBytesWritten(unsigned long long u) { m_uBytesWritten += u; }
279
280 CString ExpandString(const CString& sStr) const;
281 CString& ExpandString(const CString& sStr, CString& sRet) const;
282
283 private:
284 bool JoinChan(CChan* pChan);
285 bool LoadModule(const CString& sModName, const CString& sArgs,
286 const CString& sNotice, CString& sError);
287
288 protected:
291
300
302
303 std::vector<CClient*> m_vClients;
304
306
307 std::vector<CChan*> m_vChans;
308 std::vector<CQuery*> m_vQueries;
309
311
316 std::vector<CServer*> m_vServers;
318
321
323 unsigned short int m_uFloodBurst;
324
328
329 CIRCNetworkPingTimer* m_pPingTimer;
330 CIRCNetworkJoinTimer* m_pJoinTimer;
331
332 unsigned short int m_uJoinDelay;
333 unsigned long long m_uBytesRead;
334 unsigned long long m_uBytesWritten;
335};
336
337#endif // !ZNC_IRCNETWORK_H
std::set< CString > SCString
Definition ZNCString.h:37
Definition Buffer.h:74
size_type UpdateLine(const CString &sCommand, const CMessage &Format, const CString &sText="")
size_type AddLine(const CMessage &Format, const CString &sText="")
void Clear()
Definition Buffer.h:100
size_type UpdateExactLine(const CMessage &Format, const CString &sText="")
Definition Chan.h:35
Definition Client.h:99
Definition Config.h:36
Definition Translation.h:103
Definition FileUtils.h:30
Definition IRCNetwork.h:40
void BounceAllClients()
void DelTrustedFingerprint(const CString &sFP)
Definition IRCNetwork.h:135
void SetBindHost(const CString &s)
std::vector< CChan * > FindChans(const CString &sWild) const
CString m_sNick
Definition IRCNetwork.h:292
bool SetNextServer(const CServer *pServer)
void DelServers()
void SetQuitMsg(const CString &s)
unsigned long long BytesWritten() const
Definition IRCNetwork.h:275
CServer * GetCurrentServer() const
CString m_sRealName
Definition IRCNetwork.h:295
bool DelServer(const CServer &Server)
void AddNoticeBuffer(const CMessage &Format, const CString &sText="")
Definition IRCNetwork.h:215
bool IsLastServer() const
void IRCDisconnected()
void AddTrustedFingerprint(const CString &sFP)
Definition IRCNetwork.h:131
const std::vector< CServer * > & GetServers() const
void AddBytesWritten(unsigned long long u)
Definition IRCNetwork.h:278
CUser * m_pUser
Definition IRCNetwork.h:290
bool IsUserAttached() const
Definition IRCNetwork.h:62
const std::vector< CClient * > & GetClients() const
Definition IRCNetwork.h:70
void ClearTrustedFingerprints()
Definition IRCNetwork.h:138
CChan * FindChan(CString sName) const
void AddBytesRead(unsigned long long u)
Definition IRCNetwork.h:277
const std::vector< CQuery * > & GetQueries() const
void SetIRCSocket(CIRCSock *pIRCSock)
CString ExpandString(const CString &sStr) const
void SetAltNick(const CString &s)
bool AddServer(CServer Server)
const CString & GetAltNick(const bool bAllowDefault=true) const
const CString & GetNick(const bool bAllowDefault=true) const
CServer * GetNextServer(bool bAdvance=true)
const CString & GetIdent(const bool bAllowDefault=true) const
CQuery * AddQuery(const CString &sName)
CString m_sEncoding
Definition IRCNetwork.h:297
void UpdateExactRawBuffer(const CMessage &Format, const CString &sText="")
Definition IRCNetwork.h:175
CIRCNetwork(const CIRCNetwork &)=delete
static bool IsValidNetwork(const CString &sNetwork)
bool IsNetworkAttached() const
Definition IRCNetwork.h:69
bool IsIRCAway() const
Definition IRCNetwork.h:149
void ClearNoticeBuffer()
Definition IRCNetwork.h:222
void JoinChans()
bool IsUserOnline() const
unsigned short int m_uJoinDelay
Definition IRCNetwork.h:332
void AddRawBuffer(const CString &sFormat, const CString &sText="")
Definition IRCNetwork.h:182
CUser * GetUser() const
void SetIdent(const CString &s)
bool PutStatus(const CString &sLine, CClient *pClient=nullptr, CClient *pSkipClient=nullptr)
bool m_bIRCAway
Definition IRCNetwork.h:320
void ClientConnected(CClient *pClient)
void SetNick(const CString &s)
bool m_bTrustAllCerts
Definition IRCNetwork.h:313
double GetFloodRate() const
Definition IRCNetwork.h:254
CBuffer m_RawBuffer
Definition IRCNetwork.h:325
void AddNoticeBuffer(const CString &sFormat, const CString &sText="")
Definition IRCNetwork.h:225
CString m_sName
Definition IRCNetwork.h:289
bool IsChan(const CString &sChan) const
bool DelQuery(const CString &sName)
const CModules & GetModules() const
Definition IRCNetwork.h:78
const CNick & GetIRCNick() const
CIRCNetworkJoinTimer * m_pJoinTimer
Definition IRCNetwork.h:330
CBuffer m_MotdBuffer
Definition IRCNetwork.h:326
SCString m_ssTrustedFingerprints
Definition IRCNetwork.h:299
CString m_sBindHost
Definition IRCNetwork.h:296
void UpdateRawBuffer(const CString &sMatch, const CString &sFormat, const CString &sText="")
Definition IRCNetwork.h:186
CIRCNetwork(CUser *pUser, const CString &sName)
const CString & GetBindHost() const
std::vector< CClient * > FindClients(const CString &sIdentifier) const
void SetFloodBurst(unsigned short int uFloodBurst)
Definition IRCNetwork.h:257
CString GetCurNick() const
std::vector< CQuery * > FindQueries(const CString &sWild) const
void SetTrustAllCerts(const bool bTrustAll=false)
Definition IRCNetwork.h:266
void SetIRCAway(bool b)
Definition IRCNetwork.h:150
CNick m_IRCNick
Definition IRCNetwork.h:319
bool GetTrustPKI() const
Definition IRCNetwork.h:272
CIRCNetworkPingTimer * m_pPingTimer
Definition IRCNetwork.h:329
CString m_sChanPrefixes
Definition IRCNetwork.h:310
unsigned long long m_uBytesRead
Definition IRCNetwork.h:333
CIRCSock * m_pIRCSock
Definition IRCNetwork.h:305
CString GetQuitMsg() const
unsigned short int GetJoinDelay() const
Definition IRCNetwork.h:261
CIRCSock * GetIRCSock()
Definition IRCNetwork.h:143
void AddRawBuffer(const CMessage &Format, const CString &sText="")
Definition IRCNetwork.h:168
bool HasServers() const
Definition IRCNetwork.h:113
CModules & GetModules()
Definition IRCNetwork.h:77
CBuffer m_NoticeBuffer
Definition IRCNetwork.h:327
void ClearMotdBuffer()
Definition IRCNetwork.h:203
bool PutModule(const CString &sModule, const CString &sLine, CClient *pClient=nullptr, CClient *pSkipClient=nullptr)
void AddMotdBuffer(const CMessage &Format, const CString &sText="")
Definition IRCNetwork.h:196
bool PutUser(const CString &sLine, CClient *pClient=nullptr, CClient *pSkipClient=nullptr)
void SetUser(CUser *pUser)
std::vector< CChan * > m_vChans
Definition IRCNetwork.h:307
bool MoveChan(const CString &sChan, unsigned int index, CString &sError)
unsigned long long BytesRead() const
Definition IRCNetwork.h:274
void SetTrustPKI(const bool bTrustPKI=true)
Definition IRCNetwork.h:271
std::vector< CServer * > m_vServers
Definition IRCNetwork.h:316
CString GetRealName() const
void NotifyClientsAboutServerDependentCap(const CString &sCap, bool bValue)
CIRCNetwork(CUser *pUser, const CIRCNetwork &Network)
size_t m_uServerIdx
Index in m_vServers of our current server + 1.
Definition IRCNetwork.h:317
CConfig ToConfig() const
void SetIRCServer(const CString &s)
void UpdateMotdBuffer(const CString &sCommand, const CMessage &Format, const CString &sText="")
Definition IRCNetwork.h:199
void CheckIRCConnect()
void UpdateRawBuffer(const CString &sCommand, const CMessage &Format, const CString &sText="")
Definition IRCNetwork.h:171
unsigned short int GetFloodBurst() const
Definition IRCNetwork.h:255
bool ParseConfig(CConfig *pConfig, CString &sError, bool bUpgrade=false)
bool DelServer(const CString &sName, unsigned short uPort, const CString &sPass)
CServer * FindServer(const CString &sName) const
CString m_sIRCServer
Definition IRCNetwork.h:315
void SetJoinDelay(unsigned short int uJoinDelay)
Definition IRCNetwork.h:262
const SCString & GetTrustedFingerprints() const
Definition IRCNetwork.h:128
bool AddChan(const CString &sName, bool bInConfig)
CIRCNetwork & operator=(const CIRCNetwork &)=delete
const CString & GetIRCServer() const
CQuery * FindQuery(const CString &sName) const
CString m_sIdent
Definition IRCNetwork.h:294
CString m_sAltNick
Definition IRCNetwork.h:293
void SetIRCNick(const CNick &n)
bool PutIRC(const CMessage &Message)
bool GetTrustAllCerts() const
Definition IRCNetwork.h:269
bool PutIRC(const CString &sLine)
void ClientDisconnected(CClient *pClient)
void ClearRawBuffer()
Definition IRCNetwork.h:179
bool AddServer(const CString &sName, unsigned short uPort, const CString &sPass="", bool bSSL=false)
bool m_bIRCConnectEnabled
Definition IRCNetwork.h:312
unsigned short int m_uFloodBurst
Definition IRCNetwork.h:323
bool AddServer(const CString &sName)
bool m_bTrustPKI
Definition IRCNetwork.h:314
bool SetName(const CString &sName)
unsigned long long m_uBytesWritten
Definition IRCNetwork.h:334
std::vector< CQuery * > m_vQueries
Definition IRCNetwork.h:308
void UpdateExactRawBuffer(const CString &sFormat, const CString &sText="")
Definition IRCNetwork.h:191
void IRCConnected()
bool PutUser(const CMessage &Message, CClient *pClient=nullptr, CClient *pSkipClient=nullptr)
CModules * m_pModules
Definition IRCNetwork.h:301
CString GetNetworkPath() const
void UpdateNoticeBuffer(const CString &sCommand, const CMessage &Format, const CString &sText="")
Definition IRCNetwork.h:218
CString m_sQuitMsg
Definition IRCNetwork.h:298
bool IsServerCapAccepted(const CString &sCap) const
void UpdateMotdBuffer(const CString &sMatch, const CString &sFormat, const CString &sText="")
Definition IRCNetwork.h:210
void SetIRCConnectEnabled(bool b)
CString & ExpandString(const CString &sStr, CString &sRet) const
bool IsIRCConnected() const
This method will return whether the user is connected and authenticated to an IRC server.
const std::vector< CChan * > & GetChans() const
void SetChanPrefixes(const CString &s)
Definition IRCNetwork.h:109
bool DelChan(const CString &sName)
const CString & GetEncoding() const
void JoinChans(std::set< CChan * > &sChans)
bool GetIRCConnectEnabled() const
Definition IRCNetwork.h:141
const CString & GetName() const
void SetFloodRate(double fFloodRate)
Definition IRCNetwork.h:256
void UpdateNoticeBuffer(const CString &sMatch, const CString &sFormat, const CString &sText="")
Definition IRCNetwork.h:229
void Clone(const CIRCNetwork &Network, bool bCloneName=true)
const CString & GetChanPrefixes() const
Definition IRCNetwork.h:108
void SetEncoding(const CString &s)
const CIRCSock * GetIRCSock() const
Definition IRCNetwork.h:144
bool AddChan(CChan *pChan)
void SetRealName(const CString &s)
bool Connect()
double m_fFloodRate
Set to -1 to disable protection.
Definition IRCNetwork.h:322
void AddMotdBuffer(const CString &sFormat, const CString &sText="")
Definition IRCNetwork.h:206
void ClearQueryBuffer()
std::vector< CClient * > m_vClients
Definition IRCNetwork.h:303
bool SwapChans(const CString &sChan1, const CString &sChan2, CString &sError)
Definition IRCSock.h:35
Here is a small explanation of how messages on IRC work, and how you can use this class to get useful...
Definition Message.h:57
Definition Modules.h:1532
Definition Nick.h:29
Definition Query.h:29
Definition Server.h:23
String class that is used inside ZNC.
Definition ZNCString.h:50
@ EHEXCOLON
Definition ZNCString.h:60
CString Escape_n(EEscape eFrom, EEscape eTo) const
Definition User.h:38