ZNC
trunk
include
znc
main.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2004-2024 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_MAIN_H
18
#define ZNC_MAIN_H
19
20
#include <znc/zncconfig.h>
21
#include <
znc/version.h
>
22
23
extern
bool
ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER
;
24
#define NOTHING &ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER
25
26
#define ALLMODULECALL(macFUNC, macEXITER) \
27
do { \
28
CModules& GMods = CZNC::Get().GetModules(); \
29
bool bAllExit = false; \
30
if (GMods.macFUNC) { \
31
bAllExit = true; \
32
} else { \
33
const map<CString, CUser*>& mUsers = CZNC::Get().GetUserMap(); \
34
map<CString, CUser*>::const_iterator it; \
35
for (it = mUsers.begin(); it != mUsers.end(); ++it) { \
36
CModules& UMods = it->second->GetModules(); \
37
if (UMods.macFUNC) { \
38
bAllExit = true; \
39
break; \
40
} \
41
const vector<CIRCNetwork*>& mNets = it->second->GetNetworks(); \
42
vector<CIRCNetwork*>::const_iterator it2; \
43
for (it2 = mNets.begin(); it2 != mNets.end(); ++it2) { \
44
CModules& NMods = (*it2)->GetModules(); \
45
if (NMods.macFUNC) { \
46
bAllExit = true; \
47
break; \
48
} \
49
} \
50
if (bAllExit) break; \
51
} \
52
} \
53
if (bAllExit) *macEXITER = true; \
54
} while (false)
55
56
#define _GLOBALMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER) \
57
do { \
58
CModules& GMods = CZNC::Get().GetModules(); \
59
CUser* pOldGUser = GMods.GetUser(); \
60
CIRCNetwork* pOldGNetwork = GMods.GetNetwork(); \
61
CClient* pOldGClient = GMods.GetClient(); \
62
GMods.SetUser(macUSER); \
63
GMods.SetNetwork(macNETWORK); \
64
GMods.SetClient(macCLIENT); \
65
if (GMods.macFUNC) { \
66
GMods.SetUser(pOldGUser); \
67
GMods.SetNetwork(pOldGNetwork); \
68
GMods.SetClient(pOldGClient); \
69
*macEXITER = true; \
70
} \
71
GMods.SetUser(pOldGUser); \
72
GMods.SetNetwork(pOldGNetwork); \
73
GMods.SetClient(pOldGClient); \
74
} while (false)
75
76
#define _USERMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER) \
77
do { \
78
bool bGlobalExited = false; \
79
_GLOBALMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, \
80
&bGlobalExited); \
81
if (bGlobalExited) { \
82
*macEXITER = true; \
83
break; \
84
} \
85
if (macUSER != nullptr) { \
86
CModules& UMods = macUSER->GetModules(); \
87
CIRCNetwork* pOldUNetwork = UMods.GetNetwork(); \
88
CClient* pOldUClient = UMods.GetClient(); \
89
UMods.SetNetwork(macNETWORK); \
90
UMods.SetClient(macCLIENT); \
91
if (UMods.macFUNC) { \
92
UMods.SetNetwork(pOldUNetwork); \
93
UMods.SetClient(pOldUClient); \
94
*macEXITER = true; \
95
} \
96
UMods.SetNetwork(pOldUNetwork); \
97
UMods.SetClient(pOldUClient); \
98
} \
99
} while (false)
100
101
#define NETWORKMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER) \
102
do { \
103
bool bUserExited = false; \
104
_USERMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, \
105
&bUserExited); \
106
if (bUserExited) { \
107
*macEXITER = true; \
108
break; \
109
} \
110
if (macNETWORK != nullptr) { \
111
CModules& NMods = macNETWORK->GetModules(); \
112
CClient* pOldNClient = NMods.GetClient(); \
113
NMods.SetClient(macCLIENT); \
114
if (NMods.macFUNC) { \
115
NMods.SetClient(pOldNClient); \
116
*macEXITER = true; \
117
} \
118
NMods.SetClient(pOldNClient); \
119
} \
120
} while (false)
121
122
#define GLOBALMODULECALL(macFUNC, macEXITER) \
123
_GLOBALMODULECALL(macFUNC, nullptr, nullptr, nullptr, macEXITER)
124
125
#define USERMODULECALL(macFUNC, macUSER, macCLIENT, macEXITER) \
126
_USERMODULECALL(macFUNC, macUSER, nullptr, macCLIENT, macEXITER)
127
145
#endif
// !ZNC_MAIN_H
ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER
bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER
version.h
Generated on Fri Nov 1 2024 15:56:15 for ZNC by
1.9.1