]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - docs/module-doc/modules_8cpp-source.html
documentation update for updated return values of OnUserPreJoin
[user/henk/code/inspircd.git] / docs / module-doc / modules_8cpp-source.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
3 <title>modules.cpp Source File</title>
4 <link href="inspircd.css" rel="stylesheet" type="text/css">
5 </head><body>
6 <!-- Generated by Doxygen 1.3-rc3 -->
7 <center>
8 <a class="qindex" href="main.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
9 <hr><h1>modules.cpp</h1><a href="modules_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="preprocessor">#include "inspircd.h"</span>
10 00002 <span class="preprocessor">#include "inspircd_io.h"</span>
11 00003 <span class="preprocessor">#include "inspircd_util.h"</span>
12 00004 <span class="preprocessor">#include "inspircd_config.h"</span>
13 00005 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
14 00006 <span class="preprocessor">#include &lt;fcntl.h&gt;</span>
15 00007 <span class="preprocessor">#include &lt;sys/errno.h&gt;</span>
16 00008 <span class="preprocessor">#include &lt;sys/ioctl.h&gt;</span>
17 00009 <span class="preprocessor">#include &lt;sys/utsname.h&gt;</span>
18 00010 <span class="preprocessor">#include &lt;cstdio&gt;</span>
19 00011 <span class="preprocessor">#include &lt;time.h&gt;</span>
20 00012 <span class="preprocessor">#include &lt;string&gt;</span>
21 00013 <span class="preprocessor">#ifdef GCC3</span>
22 00014 <span class="preprocessor"></span><span class="preprocessor">#include &lt;ext/hash_map&gt;</span>
23 00015 <span class="preprocessor">#else</span>
24 00016 <span class="preprocessor"></span><span class="preprocessor">#include &lt;hash_map&gt;</span>
25 00017 <span class="preprocessor">#endif</span>
26 00018 <span class="preprocessor"></span><span class="preprocessor">#include &lt;map&gt;</span>
27 00019 <span class="preprocessor">#include &lt;sstream&gt;</span>
28 00020 <span class="preprocessor">#include &lt;vector&gt;</span>
29 00021 <span class="preprocessor">#include &lt;errno.h&gt;</span>
30 00022 <span class="preprocessor">#include &lt;deque&gt;</span>
31 00023 <span class="preprocessor">#include &lt;errno.h&gt;</span>
32 00024 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
33 00025 <span class="preprocessor">#include &lt;sched.h&gt;</span>
34 00026 <span class="preprocessor">#include "<a class="code" href="connection_8h.html">connection.h</a>"</span>
35 00027 <span class="preprocessor">#include "<a class="code" href="users_8h.html">users.h</a>"</span>
36 00028 <span class="preprocessor">#include "<a class="code" href="servers_8h.html">servers.h</a>"</span>
37 00029 <span class="preprocessor">#include "<a class="code" href="ctables_8h.html">ctables.h</a>"</span>
38 00030 <span class="preprocessor">#include "globals.h"</span>
39 00031 <span class="preprocessor">#include "<a class="code" href="modules_8h.html">modules.h</a>"</span>
40 00032 <span class="preprocessor">#include "dynamic.h"</span>
41 00033 <span class="preprocessor">#include "wildcard.h"</span>
42 00034 <span class="preprocessor">#include "<a class="code" href="message_8h.html">message.h</a>"</span>
43 00035 <span class="preprocessor">#include "<a class="code" href="mode_8h.html">mode.h</a>"</span>
44 00036 <span class="preprocessor">#include "<a class="code" href="xline_8h.html">xline.h</a>"</span>
45 00037 <span class="preprocessor">#include "<a class="code" href="commands_8h.html">commands.h</a>"</span>
46 00038 
47 00039 <span class="preprocessor">#ifdef GCC3</span>
48 00040 <span class="preprocessor"></span><span class="preprocessor">#define nspace __gnu_cxx</span>
49 00041 <span class="preprocessor"></span><span class="preprocessor">#else</span>
50 <a name="l00042"></a><a class="code" href="modules_8cpp.html#a0">00042</a> <span class="preprocessor"></span><span class="preprocessor">#define nspace std</span>
51 00043 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
52 00044 <span class="preprocessor"></span>
53 00045 <span class="keyword">using</span> <span class="keyword">namespace </span>std;
54 00046 
55 00047 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>;
56 <a name="l00048"></a><a class="code" href="modules_8cpp.html#a2">00048</a> <span class="keyword">extern</span> vector&lt;Module*&gt; <a class="code" href="channels_8cpp.html#a2">modules</a>;
57 <a name="l00049"></a><a class="code" href="modules_8cpp.html#a3">00049</a> <span class="keyword">extern</span> vector&lt;ircd_module*&gt; <a class="code" href="channels_8cpp.html#a3">factory</a>;
58 00050 
59 <a name="l00051"></a><a class="code" href="modules_8cpp.html#a4">00051</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>;
60 <a name="l00052"></a><a class="code" href="modules_8cpp.html#a5">00052</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF];
61 <a name="l00053"></a><a class="code" href="modules_8cpp.html#a6">00053</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF];
62 <a name="l00054"></a><a class="code" href="modules_8cpp.html#a7">00054</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF];
63 <a name="l00055"></a><a class="code" href="modules_8cpp.html#a8">00055</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF];
64 <a name="l00056"></a><a class="code" href="modules_8cpp.html#a9">00056</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF];
65 <a name="l00057"></a><a class="code" href="modules_8cpp.html#a10">00057</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF];
66 <a name="l00058"></a><a class="code" href="modules_8cpp.html#a11">00058</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF];
67 <a name="l00059"></a><a class="code" href="modules_8cpp.html#a12">00059</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF];
68 <a name="l00060"></a><a class="code" href="modules_8cpp.html#a13">00060</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF];
69 <a name="l00061"></a><a class="code" href="modules_8cpp.html#a14">00061</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF];
70 <a name="l00062"></a><a class="code" href="modules_8cpp.html#a15">00062</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF];
71 <a name="l00063"></a><a class="code" href="modules_8cpp.html#a16">00063</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF];
72 <a name="l00064"></a><a class="code" href="modules_8cpp.html#a17">00064</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF];
73 00065 
74 <a name="l00066"></a><a class="code" href="modules_8cpp.html#a18">00066</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>;
75 <a name="l00067"></a><a class="code" href="modules_8cpp.html#a19">00067</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>;
76 <a name="l00068"></a><a class="code" href="modules_8cpp.html#a20">00068</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>;
77 <a name="l00069"></a><a class="code" href="modules_8cpp.html#a21">00069</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>;
78 <a name="l00070"></a><a class="code" href="modules_8cpp.html#a22">00070</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>;
79 <a name="l00071"></a><a class="code" href="modules_8cpp.html#a23">00071</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>;
80 <a name="l00072"></a><a class="code" href="modules_8cpp.html#a24">00072</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>;
81 <a name="l00073"></a><a class="code" href="modules_8cpp.html#a25">00073</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>;
82 00074 
83 <a name="l00075"></a><a class="code" href="modules_8cpp.html#a26">00075</a> <span class="keyword">extern</span> std::vector&lt;int&gt; <a class="code" href="channels_8cpp.html#a26">fd_reap</a>;
84 <a name="l00076"></a><a class="code" href="modules_8cpp.html#a27">00076</a> <span class="keyword">extern</span> std::vector&lt;std::string&gt; <a class="code" href="channels_8cpp.html#a27">module_names</a>;
85 00077 
86 <a name="l00078"></a><a class="code" href="modules_8cpp.html#a28">00078</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a28">bannerBuffer</a>[MAXBUF];
87 <a name="l00079"></a><a class="code" href="modules_8cpp.html#a29">00079</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">boundPortCount</a>;
88 <a name="l00080"></a><a class="code" href="modules_8cpp.html#a30">00080</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">portCount</a>;
89 <a name="l00081"></a><a class="code" href="modules_8cpp.html#a31">00081</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">UDPportCount</a>;
90 <a name="l00082"></a><a class="code" href="modules_8cpp.html#a32">00082</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a32">ports</a>[MAXSOCKS];
91 <a name="l00083"></a><a class="code" href="modules_8cpp.html#a33">00083</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a33">defaultRoute</a>;
92 00084 
93 <a name="l00085"></a><a class="code" href="modules_8cpp.html#a34">00085</a> <span class="keyword">extern</span> std::vector&lt;long&gt; <a class="code" href="channels_8cpp.html#a34">auth_cookies</a>;
94 <a name="l00086"></a><a class="code" href="modules_8cpp.html#a35">00086</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a35">config_f</a>;
95 00087 
96 <a name="l00088"></a><a class="code" href="modules_8cpp.html#a36">00088</a> <span class="keyword">extern</span> <a class="code" href="classserverrec.html">serverrec</a>* <a class="code" href="channels_8cpp.html#a36">me</a>[32];
97 00089 
98 <a name="l00090"></a><a class="code" href="modules_8cpp.html#a37">00090</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a37">log_file</a>;
99 00091 
100 00092 
101 <a name="l00093"></a><a class="code" href="namespacenspace.html">00093</a> <span class="keyword">namespace </span><a class="code" href="channels_8cpp.html#a0">nspace</a>
102 00094 {
103 <a name="l00095"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html">00095</a>         <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span><a class="code" href="channels_8cpp.html#a0">nspace</a>::hash&lt;in_addr&gt;
104 00096         {
105 <a name="l00097"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html#a0">00097</a>                 size_t operator()(<span class="keyword">const</span> <span class="keyword">struct</span> in_addr &amp;a)<span class="keyword"> const</span>
106 00098 <span class="keyword">                </span>{
107 00099                         size_t q;
108 00100                         memcpy(&amp;q,&amp;a,<span class="keyword">sizeof</span>(size_t));
109 00101                         <span class="keywordflow">return</span> q;
110 00102                 }
111 00103         };
112 00104 
113 <a name="l00105"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html">00105</a>         <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span><a class="code" href="channels_8cpp.html#a0">nspace</a>::hash&lt;string&gt;
114 00106         {
115 <a name="l00107"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html#a0">00107</a>                 size_t operator()(<span class="keyword">const</span> string &amp;s)<span class="keyword"> const</span>
116 00108 <span class="keyword">                </span>{
117 00109                         <span class="keywordtype">char</span> a[MAXBUF];
118 00110                         <span class="keyword">static</span> <span class="keyword">struct </span>hash&lt;const char *&gt; strhash;
119 00111                         strcpy(a,s.c_str());
120 00112                         strlower(a);
121 00113                         <span class="keywordflow">return</span> strhash(a);
122 00114                 }
123 00115         };
124 00116 }       
125 00117 
126 00118 
127 <a name="l00119"></a><a class="code" href="structStrHashComp.html">00119</a> <span class="keyword">struct </span><a class="code" href="structStrHashComp.html">StrHashComp</a>
128 00120 {
129 00121 
130 <a name="l00122"></a><a class="code" href="structStrHashComp.html#a0">00122</a>         <span class="keywordtype">bool</span> <a class="code" href="structStrHashComp.html#a0">operator()</a>(<span class="keyword">const</span> string&amp; s1, <span class="keyword">const</span> string&amp; s2)<span class="keyword"> const</span>
131 00123 <span class="keyword">        </span>{
132 00124                 <span class="keywordtype">char</span> a[MAXBUF],b[MAXBUF];
133 00125                 strcpy(a,s1.c_str());
134 00126                 strcpy(b,s2.c_str());
135 00127                 <span class="keywordflow">return</span> (strcasecmp(a,b) == 0);
136 00128         }
137 00129 
138 00130 };
139 00131 
140 <a name="l00132"></a><a class="code" href="structInAddr__HashComp.html">00132</a> <span class="keyword">struct </span><a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a>
141 00133 {
142 00134 
143 <a name="l00135"></a><a class="code" href="structInAddr__HashComp.html#a0">00135</a>         <span class="keywordtype">bool</span> <a class="code" href="structInAddr__HashComp.html#a0">operator()</a>(<span class="keyword">const</span> in_addr &amp;s1, <span class="keyword">const</span> in_addr &amp;s2)<span class="keyword"> const</span>
144 00136 <span class="keyword">        </span>{
145 00137                 size_t q;
146 00138                 size_t p;
147 00139                 
148 00140                 memcpy(&amp;q,&amp;s1,<span class="keyword">sizeof</span>(size_t));
149 00141                 memcpy(&amp;p,&amp;s2,<span class="keyword">sizeof</span>(size_t));
150 00142                 
151 00143                 <span class="keywordflow">return</span> (q == p);
152 00144         }
153 00145 
154 00146 };
155 00147 
156 00148 
157 <a name="l00149"></a><a class="code" href="modules_8cpp.html#a38">00149</a> <span class="keyword">typedef</span> nspace::hash_map&lt;std::string, userrec*, nspace::hash&lt;string&gt;, <a class="code" href="structStrHashComp.html">StrHashComp</a>&gt; <a class="code" href="modules_8cpp.html#a38">user_hash</a>;
158 <a name="l00150"></a><a class="code" href="modules_8cpp.html#a39">00150</a> <span class="keyword">typedef</span> nspace::hash_map&lt;std::string, chanrec*, nspace::hash&lt;string&gt;, <a class="code" href="structStrHashComp.html">StrHashComp</a>&gt; <a class="code" href="modules_8cpp.html#a39">chan_hash</a>;
159 <a name="l00151"></a><a class="code" href="modules_8cpp.html#a40">00151</a> <span class="keyword">typedef</span> nspace::hash_map&lt;in_addr,string*, nspace::hash&lt;in_addr&gt;, <a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a>&gt; <a class="code" href="modules_8cpp.html#a40">address_cache</a>;
160 <a name="l00152"></a><a class="code" href="modules_8cpp.html#a41">00152</a> <span class="keyword">typedef</span> std::deque&lt;command_t&gt; <a class="code" href="modules_8cpp.html#a41">command_table</a>;
161 00153 
162 00154 
163 <a name="l00155"></a><a class="code" href="modules_8cpp.html#a42">00155</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">user_hash</a> <a class="code" href="modules_8cpp.html#a42">clientlist</a>;
164 <a name="l00156"></a><a class="code" href="modules_8cpp.html#a43">00156</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">chan_hash</a> <a class="code" href="modules_8cpp.html#a43">chanlist</a>;
165 <a name="l00157"></a><a class="code" href="modules_8cpp.html#a44">00157</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">user_hash</a> <a class="code" href="modules_8cpp.html#a44">whowas</a>;
166 <a name="l00158"></a><a class="code" href="modules_8cpp.html#a45">00158</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a41">command_table</a> <a class="code" href="modules_8cpp.html#a45">cmdlist</a>;
167 <a name="l00159"></a><a class="code" href="modules_8cpp.html#a46">00159</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a26">file_cache</a> <a class="code" href="modules_8cpp.html#a46">MOTD</a>;
168 <a name="l00160"></a><a class="code" href="modules_8cpp.html#a47">00160</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a26">file_cache</a> <a class="code" href="modules_8cpp.html#a47">RULES</a>;
169 <a name="l00161"></a><a class="code" href="modules_8cpp.html#a48">00161</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">address_cache</a> <a class="code" href="modules_8cpp.html#a48">IP</a>;
170 00162 
171 00163 
172 00164 <span class="comment">// class type for holding an extended mode character - internal to core</span>
173 00165 
174 <a name="l00166"></a><a class="code" href="classExtMode.html">00166</a> <span class="keyword">class </span><a class="code" href="classExtMode.html">ExtMode</a> : <span class="keyword">public</span> <a class="code" href="classclassbase.html">classbase</a>
175 00167 {
176 00168 <span class="keyword">public</span>:
177 <a name="l00169"></a><a class="code" href="classExtMode.html#m0">00169</a>         <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#m0">modechar</a>;
178 <a name="l00170"></a><a class="code" href="classExtMode.html#m1">00170</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#m1">type</a>;
179 <a name="l00171"></a><a class="code" href="classExtMode.html#m2">00171</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#m2">params_when_on</a>;
180 <a name="l00172"></a><a class="code" href="classExtMode.html#m3">00172</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#m3">params_when_off</a>;
181 <a name="l00173"></a><a class="code" href="classExtMode.html#m4">00173</a>         <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#m4">needsoper</a>;
182 <a name="l00174"></a><a class="code" href="classExtMode.html#m5">00174</a>         <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>;
183 <a name="l00175"></a><a class="code" href="classExtMode.html#a0">00175</a>         <a class="code" href="classExtMode.html#a0">ExtMode</a>(<span class="keywordtype">char</span> mc, <span class="keywordtype">int</span> ty, <span class="keywordtype">bool</span> oper, <span class="keywordtype">int</span> p_on, <span class="keywordtype">int</span> p_off) : modechar(mc), type(ty), needsoper(oper), params_when_on(p_on), params_when_off(p_off) { };
184 00176 };                                     
185 00177 
186 <a name="l00178"></a><a class="code" href="modules_8cpp.html#a49">00178</a> <span class="keyword">typedef</span> std::vector&lt;ExtMode&gt; <a class="code" href="modules_8cpp.html#a49">ExtModeList</a>;
187 <a name="l00179"></a><a class="code" href="modules_8cpp.html#a50">00179</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a>;
188 00180 
189 00181 
190 <a name="l00182"></a><a class="code" href="modules_8cpp.html#a51">00182</a> <a class="code" href="modules_8cpp.html#a49">ExtModeList</a> <a class="code" href="modules_8cpp.html#a51">EMode</a>;
191 00183 
192 00184 <span class="comment">// returns true if an extended mode character is in use</span>
193 <a name="l00185"></a><a class="code" href="modules_8cpp.html#a52">00185</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a52">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
194 00186 {
195 00187         log(DEBUG,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a51">EMode</a>.size());
196 00188         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
197 00189         {
198 00190                 log(DEBUG,<span class="stringliteral">"i-&gt;modechar==%c, modechar=%c, i-&gt;type=%d, type=%d"</span>,i-&gt;modechar,modechar,i-&gt;type,type);
199 00191                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
200 00192                 {
201 00193                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
202 00194                 }
203 00195         }
204 00196         <span class="keywordflow">return</span> <span class="keyword">false</span>;
205 00197 }
206 00198 
207 <a name="l00199"></a><a class="code" href="modules_8cpp.html#a53">00199</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
208 00200 {
209 00201         log(DEBUG,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a51">EMode</a>.size());
210 00202         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
211 00203         {
212 00204                 log(DEBUG,<span class="stringliteral">"i-&gt;modechar==%c, modechar=%c, i-&gt;type=%d, type=%d"</span>,i-&gt;modechar,modechar,i-&gt;type,type);
213 00205                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type) &amp;&amp; (i-&gt;list == <span class="keyword">true</span>))
214 00206                 {
215 00207                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
216 00208                 }
217 00209         }
218 00210         <span class="keywordflow">return</span> <span class="keyword">false</span>;
219 00211 }
220 00212 
221 <a name="l00213"></a><a class="code" href="modules_8cpp.html#a54">00213</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a54">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
222 00214 {
223 00215         log(DEBUG,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a51">EMode</a>.size());
224 00216         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
225 00217         {
226 00218                 log(DEBUG,<span class="stringliteral">"i-&gt;modechar==%c, modechar=%c, i-&gt;type=%d, type=%d"</span>,i-&gt;modechar,modechar,i-&gt;type,type);
227 00219                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type) &amp;&amp; (i-&gt;needsoper == <span class="keyword">true</span>))
228 00220                 {
229 00221                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
230 00222                 }
231 00223         }
232 00224         <span class="keywordflow">return</span> <span class="keyword">false</span>;
233 00225 }
234 00226 
235 00227 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span>
236 <a name="l00228"></a><a class="code" href="modules_8cpp.html#a55">00228</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
237 00229 {
238 00230         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
239 00231         {
240 00232                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
241 00233                 {
242 00234                         <span class="keywordflow">return</span> i-&gt;params_when_on;
243 00235                 }
244 00236         }
245 00237         <span class="keywordflow">return</span> 0;
246 00238 }
247 00239 
248 00240 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span>
249 <a name="l00241"></a><a class="code" href="modules_8cpp.html#a56">00241</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a56">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
250 00242 {
251 00243         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
252 00244         {
253 00245                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
254 00246                 {
255 00247                         <span class="keywordflow">return</span> i-&gt;params_when_off;
256 00248                 }
257 00249         }
258 00250         <span class="keywordflow">return</span> 0;
259 00251 }
260 00252 
261 00253 <span class="comment">// returns true if an extended mode character is in use</span>
262 <a name="l00254"></a><a class="code" href="modules_8cpp.html#a57">00254</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_on, <span class="keywordtype">int</span> params_off)
263 00255 {
264 00256         <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a52">ModeDefined</a>(modechar,type)) {
265 00257                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
266 00258         }
267 00259         <a class="code" href="modules_8cpp.html#a51">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off));
268 00260         <span class="keywordflow">return</span> <span class="keyword">true</span>;
269 00261 }
270 00262 
271 00263 <span class="comment">// turns a mode into a listmode</span>
272 <a name="l00264"></a><a class="code" href="modules_8cpp.html#a58">00264</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a58">ModeMakeList</a>(<span class="keywordtype">char</span> modechar)
273 00265 {
274 00266         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
275 00267         {
276 00268                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == <a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>))
277 00269                 {
278 00270                         i-&gt;list = <span class="keyword">true</span>;
279 00271                         <span class="keywordflow">return</span>;
280 00272                 }
281 00273         }
282 00274         <span class="keywordflow">return</span>;
283 00275 }
284 00276 
285 00277 <span class="comment">// version is a simple class for holding a modules version number</span>
286 00278 
287 <a name="l00279"></a><a class="code" href="classVersion.html#a0">00279</a> <a class="code" href="classVersion.html#a0">Version::Version</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> revision, <span class="keywordtype">int</span> build) : Major(major), Minor(minor), Revision(revision), Build(build) { };
288 00280 
289 00281 <span class="comment">// admin is a simple class for holding a server's administrative info</span>
290 00282 
291 <a name="l00283"></a><a class="code" href="classAdmin.html#a0">00283</a> <a class="code" href="classAdmin.html#a0">Admin::Admin</a>(std::string name, std::string email, std::string nick) : Name(name), Email(email), Nick(nick) { };
292 00284 
293 <a name="l00285"></a><a class="code" href="classModule.html#a0">00285</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { }
294 <a name="l00286"></a><a class="code" href="classModule.html#a1">00286</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { }
295 <a name="l00287"></a><a class="code" href="classModule.html#a3">00287</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a3">Module::OnUserConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }
296 <a name="l00288"></a><a class="code" href="classModule.html#a4">00288</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a4">Module::OnUserQuit</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }
297 <a name="l00289"></a><a class="code" href="classModule.html#a5">00289</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
298 <a name="l00290"></a><a class="code" href="classModule.html#a6">00290</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
299 <a name="l00291"></a><a class="code" href="classModule.html#a7">00291</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnPacketTransmit</a>(<span class="keywordtype">char</span> *p) { }
300 <a name="l00292"></a><a class="code" href="classModule.html#a8">00292</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketReceive</a>(<span class="keywordtype">char</span> *p) { }
301 <a name="l00293"></a><a class="code" href="classModule.html#a9">00293</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnRehash</a>() { }
302 <a name="l00294"></a><a class="code" href="classModule.html#a10">00294</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnServerRaw</a>(std::string &amp;raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { }
303 <a name="l00295"></a><a class="code" href="classModule.html#a12">00295</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; }
304 <a name="l00296"></a><a class="code" href="classModule.html#a11">00296</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a11">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &amp;params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
305 <a name="l00297"></a><a class="code" href="classModule.html#a2">00297</a> <a class="code" href="classVersion.html">Version</a> <a class="code" href="classModule.html#a2">Module::GetVersion</a>() { <span class="keywordflow">return</span> <a class="code" href="classVersion.html">Version</a>(1,0,0,0); }
306 <a name="l00298"></a><a class="code" href="classModule.html#a13">00298</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a13">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
307 <a name="l00299"></a><a class="code" href="classModule.html#a14">00299</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a14">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
308 <a name="l00300"></a><a class="code" href="classModule.html#a15">00300</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { };
309 <a name="l00301"></a><a class="code" href="classModule.html#a16">00301</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a16">Module::OnUserPreMessage</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string text) { <span class="keywordflow">return</span> 0; };
310 <a name="l00302"></a><a class="code" href="classModule.html#a17">00302</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a17">Module::OnUserPreNotice</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string text) { <span class="keywordflow">return</span> 0; };
311 <a name="l00303"></a><a class="code" href="classModule.html#a18">00303</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a18">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; };
312 <a name="l00304"></a><a class="code" href="classModule.html#a19">00304</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnAccessCheck</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel,<span class="keywordtype">int</span> access_type) { <span class="keywordflow">return</span> <a class="code" href="modules_8h.html#a8">ACR_DEFAULT</a>; };
313 <a name="l00305"></a><a class="code" href="classModule.html#a20">00305</a> <a class="code" href="modules_8h.html#a27">string_list</a> <a class="code" href="classModule.html#a20">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a27">string_list</a> empty; <span class="keywordflow">return</span> empty; }
314 <a name="l00306"></a><a class="code" href="classModule.html#a21">00306</a> <a class="code" href="modules_8h.html#a27">string_list</a> <a class="code" href="classModule.html#a21">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a27">string_list</a> empty; <span class="keywordflow">return</span> empty; }
315 00307 
316 00308 
317 00309 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span>
318 00310 <span class="comment">// exports in the core</span>
319 00311 <span class="comment">//</span>
320 00312 
321 <a name="l00313"></a><a class="code" href="classServer.html#a0">00313</a> <a class="code" href="classServer.html#a0">Server::Server</a>()
322 00314 {
323 00315 }
324 00316 
325 <a name="l00317"></a><a class="code" href="classServer.html#a1">00317</a> <a class="code" href="classServer.html#a1">Server::~Server</a>()
326 00318 {
327 00319 }
328 00320 
329 <a name="l00321"></a><a class="code" href="classServer.html#a2">00321</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s)
330 00322 {
331 00323         WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str());
332 00324 }
333 00325 
334 <a name="l00326"></a><a class="code" href="classServer.html#a30">00326</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a30">Server::MatchText</a>(std::string sliteral, std::string spattern)
335 00327 {
336 00328         <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF];
337 00329         strncpy(literal,sliteral.c_str(),MAXBUF);
338 00330         strncpy(pattern,spattern.c_str(),MAXBUF);
339 00331         <span class="keywordflow">return</span> match(literal,pattern);
340 00332 }
341 00333 
342 <a name="l00334"></a><a class="code" href="classServer.html#a25">00334</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a25">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text)
343 00335 {
344 00336         WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str());
345 00337 }
346 00338 
347 <a name="l00339"></a><a class="code" href="classServer.html#a26">00339</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a26">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key)
348 00340 {
349 00341         <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">true</span>);
350 00342 }
351 00343 
352 <a name="l00344"></a><a class="code" href="classServer.html#a27">00344</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a27">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason)
353 00345 {
354 00346         <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>);
355 00347 }
356 00348 
357 <a name="l00349"></a><a class="code" href="classServer.html#a35">00349</a> <a class="code" href="modules_8h.html#a28">chanuserlist</a> <a class="code" href="classServer.html#a35">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan)
358 00350 {
359 00351         <a class="code" href="modules_8h.html#a28">chanuserlist</a> userl;
360 00352         userl.clear();
361 00353         <span class="keywordflow">for</span> (user_hash::const_iterator i = <a class="code" href="modules_8cpp.html#a42">clientlist</a>.begin(); i != <a class="code" href="modules_8cpp.html#a42">clientlist</a>.end(); i++)
362 00354         {
363 00355                 <span class="keywordflow">if</span> (i-&gt;second)
364 00356                 {
365 00357                         <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a16">has_channel</a>(i-&gt;second,chan))
366 00358                         {
367 00359                                 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a13">isnick</a>(i-&gt;second-&gt;nick))
368 00360                                 {
369 00361                                         userl.push_back(i-&gt;second);
370 00362                                 }
371 00363                         }
372 00364                 }
373 00365         }
374 00366         <span class="keywordflow">return</span> userl;
375 00367 }
376 <a name="l00368"></a><a class="code" href="classServer.html#a28">00368</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a28">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname)
377 00369 {
378 00370         force_nickchange(user,nickname.c_str());
379 00371 }
380 00372 
381 <a name="l00373"></a><a class="code" href="classServer.html#a29">00373</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a29">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason)
382 00374 {
383 00375         <a class="code" href="message_8h.html#a19">send_network_quit</a>(user-&gt;<a class="code" href="classuserrec.html#m0">nick</a>,reason.c_str());
384 00376         kill_link(user,reason.c_str());
385 00377 }
386 00378 
387 <a name="l00379"></a><a class="code" href="classServer.html#a34">00379</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a34">Server::IsUlined</a>(std::string server)
388 00380 {
389 00381         <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a71">is_uline</a>(server.c_str());
390 00382 }
391 00383 
392 <a name="l00384"></a><a class="code" href="classServer.html#a31">00384</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::CallCommandHandler</a>(std::string commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user)
393 00385 {
394 00386         call_handler(commandname.c_str(),parameters,pcnt,user);
395 00387 }
396 00388 
397 <a name="l00389"></a><a class="code" href="classServer.html#a3">00389</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a3">Server::Log</a>(<span class="keywordtype">int</span> level, std::string s)
398 00390 {
399 00391         log(level,<span class="stringliteral">"%s"</span>,s.c_str());
400 00392 }
401 00393 
402 <a name="l00394"></a><a class="code" href="classServer.html#a23">00394</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a23">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams)
403 00395 {
404 00396         <a class="code" href="modules_8h.html#a30">createcommand</a>(cmd,f,flags,minparams);
405 00397 }
406 00398 
407 <a name="l00399"></a><a class="code" href="classServer.html#a24">00399</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a24">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user)
408 00400 {
409 00401         <a class="code" href="modules_8h.html#a31">server_mode</a>(parameters,pcnt,user);
410 00402 }
411 00403 
412 <a name="l00404"></a><a class="code" href="classServer.html#a4">00404</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a4">Server::Send</a>(<span class="keywordtype">int</span> Socket, std::string s)
413 00405 {
414 00406         Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
415 00407 }
416 00408 
417 <a name="l00409"></a><a class="code" href="classServer.html#a5">00409</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a5">Server::SendServ</a>(<span class="keywordtype">int</span> Socket, std::string s)
418 00410 {
419 00411         WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
420 00412 }
421 00413 
422 <a name="l00414"></a><a class="code" href="classServer.html#a6">00414</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s)
423 00415 {
424 00416         WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str());
425 00417 }
426 00418 
427 <a name="l00419"></a><a class="code" href="classServer.html#a7">00419</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s)
428 00420 {
429 00421         <span class="keywordflow">if</span> (!Source)
430 00422         {
431 00423                 <span class="comment">// if source is NULL, then the message originates from the local server</span>
432 00424                 Write(Dest-&gt;<a class="code" href="classconnection.html#m0">fd</a>,<span class="stringliteral">":%s %s"</span>,this-&gt;GetServerName().c_str(),s.c_str());
433 00425         }
434 00426         <span class="keywordflow">else</span>
435 00427         {
436 00428                 <span class="comment">// otherwise it comes from the user specified</span>
437 00429                 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str());
438 00430         }
439 00431 }
440 00432 
441 <a name="l00433"></a><a class="code" href="classServer.html#a8">00433</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender)
442 00434 {
443 00435         <span class="keywordflow">if</span> (IncludeSender)
444 00436         {
445 00437                 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
446 00438         }
447 00439         <span class="keywordflow">else</span>
448 00440         {
449 00441                 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
450 00442         }
451 00443 }
452 00444 
453 <a name="l00445"></a><a class="code" href="classServer.html#a9">00445</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a9">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2)
454 00446 {
455 00447         <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0);
456 00448 }
457 00449 
458 <a name="l00450"></a><a class="code" href="classServer.html#a10">00450</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a10">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender)
459 00451 {
460 00452         <span class="keywordflow">if</span> (IncludeSender)
461 00453         {
462 00454                 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str());
463 00455         }
464 00456         <span class="keywordflow">else</span>
465 00457         {
466 00458                 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str());
467 00459         }
468 00460 }
469 00461 
470 <a name="l00462"></a><a class="code" href="classServer.html#a11">00462</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text)
471 00463 {
472 00464         WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str());
473 00465 }
474 00466 
475 <a name="l00467"></a><a class="code" href="classServer.html#a32">00467</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a32">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host)
476 00468 {
477 00469         <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str());
478 00470 }
479 00471 
480 <a name="l00472"></a><a class="code" href="classServer.html#a33">00472</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a33">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos)
481 00473 {
482 00474         <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str());
483 00475 }
484 00476 
485 <a name="l00477"></a><a class="code" href="classServer.html#a12">00477</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a12">Server::IsNick</a>(std::string nick)
486 00478 {
487 00479         <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0);
488 00480 }
489 00481 
490 <a name="l00482"></a><a class="code" href="classServer.html#a14">00482</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a14">Server::FindNick</a>(std::string nick)
491 00483 {
492 00484         <span class="keywordflow">return</span> Find(nick);
493 00485 }
494 00486 
495 <a name="l00487"></a><a class="code" href="classServer.html#a15">00487</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a15">Server::FindChannel</a>(std::string channel)
496 00488 {
497 00489         <span class="keywordflow">return</span> FindChan(channel.c_str());
498 00490 }
499 00491 
500 <a name="l00492"></a><a class="code" href="classServer.html#a16">00492</a> std::string <a class="code" href="classServer.html#a16">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
501 00493 {
502 00494         <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan);
503 00495 }
504 00496 
505 <a name="l00497"></a><a class="code" href="classServer.html#a17">00497</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a17">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
506 00498 {
507 00499         <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan);
508 00500 }
509 00501 
510 <a name="l00502"></a><a class="code" href="classServer.html#a18">00502</a> std::string <a class="code" href="classServer.html#a18">Server::GetServerName</a>()
511 00503 {
512 00504         <span class="keywordflow">return</span> getservername();
513 00505 }
514 00506 
515 <a name="l00507"></a><a class="code" href="classServer.html#a19">00507</a> std::string <a class="code" href="classServer.html#a19">Server::GetNetworkName</a>()
516 00508 {
517 00509         <span class="keywordflow">return</span> getnetworkname();
518 00510 }
519 00511 
520 <a name="l00512"></a><a class="code" href="classServer.html#a20">00512</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a20">Server::GetAdmin</a>()
521 00513 {
522 00514         <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick());
523 00515 }
524 00516 
525 00517 
526 00518 
527 <a name="l00519"></a><a class="code" href="classServer.html#a21">00519</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a21">Server::AddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_when_on, <span class="keywordtype">int</span> params_when_off)
528 00520 {
529 00521         <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>)
530 00522         {
531 00523                 log(DEBUG,<span class="stringliteral">"*** API ERROR *** Modes of type MT_SERVER are reserved for future expansion"</span>);
532 00524                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
533 00525         }
534 00526         <span class="keywordflow">if</span> (((params_when_on&gt;0) || (params_when_off&gt;0)) &amp;&amp; (type == <a class="code" href="modules_8h.html#a6">MT_CLIENT</a>))
535 00527         {
536 00528                 log(DEBUG,<span class="stringliteral">"*** API ERROR *** Parameters on MT_CLIENT modes are not supported"</span>);
537 00529                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
538 00530         }
539 00531         <span class="keywordflow">if</span> ((params_when_on&gt;1) || (params_when_off&gt;1))
540 00532         {
541 00533                 log(DEBUG,<span class="stringliteral">"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"</span>);
542 00534                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
543 00535         }
544 00536         <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off);
545 00537 }
546 00538 
547 <a name="l00539"></a><a class="code" href="classServer.html#a22">00539</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a22">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar)
548 00540 {
549 00541         <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(modechar,MT_CHANNEL,<span class="keyword">false</span>,1,1);
550 00542         <span class="keywordflow">if</span> (res)
551 00543                 <a class="code" href="modules_8cpp.html#a58">ModeMakeList</a>(modechar);
552 00544         <span class="keywordflow">return</span> res;
553 00545 }
554 00546 
555 <a name="l00547"></a><a class="code" href="classServer.html#a13">00547</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a13">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c)
556 00548 {
557 00549         <span class="keywordflow">return</span> usercount(c);
558 00550 }
559 00551 
560 00552 
561 <a name="l00553"></a><a class="code" href="classConfigReader.html#a0">00553</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>()
562 00554 {
563 00555         this-&gt;<a class="code" href="classConfigReader.html#n0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
564 00556         this-&gt;<a class="code" href="classConfigReader.html#n1">readerror</a> = LoadConf(CONFIG_FILE,this-&gt;cache);
565 00557         <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classConfigReader.html#n1">readerror</a>)
566 00558                 this-&gt;<a class="code" href="classConfigReader.html#n2">error</a> = <a class="code" href="modules_8h.html#a25">CONF_FILE_NOT_FOUND</a>;
567 00559 }
568 00560 
569 00561 
570 <a name="l00562"></a><a class="code" href="classConfigReader.html#a2">00562</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>()
571 00563 {
572 00564         <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classConfigReader.html#n0">cache</a>)
573 00565                 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#n0">cache</a>;
574 00566 }
575 00567 
576 00568 
577 <a name="l00569"></a><a class="code" href="classConfigReader.html#a1">00569</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename)
578 00570 {
579 00571         this-&gt;<a class="code" href="classConfigReader.html#n0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
580 00572         this-&gt;<a class="code" href="classConfigReader.html#n1">readerror</a> = LoadConf(filename.c_str(),this-&gt;<a class="code" href="classConfigReader.html#n0">cache</a>);
581 00573         <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classConfigReader.html#n1">readerror</a>)
582 00574                 this-&gt;<a class="code" href="classConfigReader.html#n2">error</a> = <a class="code" href="modules_8h.html#a25">CONF_FILE_NOT_FOUND</a>;
583 00575 };
584 00576 
585 <a name="l00577"></a><a class="code" href="classConfigReader.html#a3">00577</a> std::string <a class="code" href="classConfigReader.html#a3">ConfigReader::ReadValue</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index)
586 00578 {
587 00579         <span class="keywordtype">char</span> val[MAXBUF];
588 00580         <span class="keywordtype">char</span> t[MAXBUF];
589 00581         <span class="keywordtype">char</span> n[MAXBUF];
590 00582         strncpy(t,tag.c_str(),MAXBUF);
591 00583         strncpy(n,name.c_str(),MAXBUF);
592 00584         <span class="keywordtype">int</span> res = ReadConf(cache,t,n,index,val);
593 00585         <span class="keywordflow">if</span> (!res)
594 00586         {
595 00587                 this-&gt;<a class="code" href="classConfigReader.html#n2">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>;
596 00588                 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
597 00589         }
598 00590         <span class="keywordflow">return</span> std::string(val);
599 00591 }
600 00592 
601 <a name="l00593"></a><a class="code" href="classConfigReader.html#a4">00593</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a4">ConfigReader::ReadFlag</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index)
602 00594 {
603 00595         <span class="keywordtype">char</span> val[MAXBUF];
604 00596         <span class="keywordtype">char</span> t[MAXBUF];
605 00597         <span class="keywordtype">char</span> n[MAXBUF];
606 00598         strncpy(t,tag.c_str(),MAXBUF);
607 00599         strncpy(n,name.c_str(),MAXBUF);
608 00600         <span class="keywordtype">int</span> res = ReadConf(cache,t,n,index,val);
609 00601         <span class="keywordflow">if</span> (!res)
610 00602         {
611 00603                 this-&gt;<a class="code" href="classConfigReader.html#n2">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>;
612 00604                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
613 00605         }
614 00606         std::string s = val;
615 00607         <span class="keywordflow">return</span> ((s == <span class="stringliteral">"yes"</span>) || (s == <span class="stringliteral">"YES"</span>) || (s == <span class="stringliteral">"true"</span>) || (s == <span class="stringliteral">"TRUE"</span>) || (s == <span class="stringliteral">"1"</span>));
616 00608 }
617 00609 
618 <a name="l00610"></a><a class="code" href="classConfigReader.html#a5">00610</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a5">ConfigReader::ReadInteger</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index, <span class="keywordtype">bool</span> needs_unsigned)
619 00611 {
620 00612         <span class="keywordtype">char</span> val[MAXBUF];
621 00613         <span class="keywordtype">char</span> t[MAXBUF];
622 00614         <span class="keywordtype">char</span> n[MAXBUF];
623 00615         strncpy(t,tag.c_str(),MAXBUF);
624 00616         strncpy(n,name.c_str(),MAXBUF);
625 00617         <span class="keywordtype">int</span> res = ReadConf(cache,t,n,index,val);
626 00618         <span class="keywordflow">if</span> (!res)
627 00619         {
628 00620                 this-&gt;<a class="code" href="classConfigReader.html#n2">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>;
629 00621                 <span class="keywordflow">return</span> 0;
630 00622         }
631 00623         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; strlen(val); i++)
632 00624         {
633 00625                 <span class="keywordflow">if</span> (!isdigit(val[i]))
634 00626                 {
635 00627                         this-&gt;<a class="code" href="classConfigReader.html#n2">error</a> = <a class="code" href="modules_8h.html#a22">CONF_NOT_A_NUMBER</a>;
636 00628                         <span class="keywordflow">return</span> 0;
637 00629                 }
638 00630         }
639 00631         <span class="keywordflow">if</span> ((needs_unsigned) &amp;&amp; (atoi(val)&lt;0))
640 00632         {
641 00633                 this-&gt;<a class="code" href="classConfigReader.html#n2">error</a> = <a class="code" href="modules_8h.html#a23">CONF_NOT_UNSIGNED</a>;
642 00634                 <span class="keywordflow">return</span> 0;
643 00635         }
644 00636         <span class="keywordflow">return</span> atoi(val);
645 00637 }
646 00638 
647 <a name="l00639"></a><a class="code" href="classConfigReader.html#a6">00639</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>()
648 00640 {
649 00641         <span class="keywordtype">long</span> olderr = this-&gt;<a class="code" href="classConfigReader.html#n2">error</a>;
650 00642         this-&gt;error = 0;
651 00643         <span class="keywordflow">return</span> olderr;
652 00644 }
653 00645 
654 00646 
655 <a name="l00647"></a><a class="code" href="classConfigReader.html#a7">00647</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag)
656 00648 {
657 00649         <span class="keywordflow">return</span> EnumConf(cache,tag.c_str());
658 00650 }
659 00651 
660 <a name="l00652"></a><a class="code" href="classConfigReader.html#a9">00652</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a9">ConfigReader::EnumerateValues</a>(std::string tag, <span class="keywordtype">int</span> index)
661 00653 {
662 00654         <span class="keywordflow">return</span> EnumValues(cache, tag.c_str(), index);
663 00655 }
664 00656 
665 <a name="l00657"></a><a class="code" href="classConfigReader.html#a8">00657</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>()
666 00658 {
667 00659         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classConfigReader.html#n1">readerror</a>;
668 00660 }
669 00661 
670 00662 
671 <a name="l00663"></a><a class="code" href="classFileReader.html#a1">00663</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename)
672 00664 {
673 00665         <a class="code" href="modules_8h.html#a26">file_cache</a> c;
674 00666         readfile(c,filename.c_str());
675 00667         this-&gt;<a class="code" href="classFileReader.html#o0">fc</a> = c;
676 00668 }
677 00669 
678 <a name="l00670"></a><a class="code" href="classFileReader.html#a0">00670</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>()
679 00671 {
680 00672 }
681 00673 
682 <a name="l00674"></a><a class="code" href="classFileReader.html#a3">00674</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename)
683 00675 {
684 00676         <a class="code" href="modules_8h.html#a26">file_cache</a> c;
685 00677         readfile(c,filename.c_str());
686 00678         this-&gt;<a class="code" href="classFileReader.html#o0">fc</a> = c;
687 00679 }
688 00680 
689 00681 
690 <a name="l00682"></a><a class="code" href="classFileReader.html#a2">00682</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>()
691 00683 {
692 00684 }
693 00685 
694 <a name="l00686"></a><a class="code" href="classFileReader.html#a4">00686</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>()
695 00687 {
696 00688         <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#o0">fc</a>.size() == 0)
697 00689         {
698 00690                 <span class="keywordflow">return</span>(false);
699 00691         }
700 00692         <span class="keywordflow">else</span>
701 00693         {
702 00694                 <span class="keywordflow">return</span>(true);
703 00695         }
704 00696 }
705 00697 
706 <a name="l00698"></a><a class="code" href="classFileReader.html#a5">00698</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x)
707 00699 {
708 00700         <span class="keywordflow">if</span> ((x&lt;0) || (x&gt;<a class="code" href="classFileReader.html#o0">fc</a>.size()))
709 00701                 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
710 00702         <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#o0">fc</a>[x];
711 00703 }
712 00704 
713 <a name="l00705"></a><a class="code" href="classFileReader.html#a6">00705</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>()
714 00706 {
715 00707         <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#o0">fc</a>.size();
716 00708 }
717 00709 
718 00710 
719 00711 std::vector&lt;Module*&gt; <a class="code" href="modules_8cpp.html#a59">modules</a>(255);
720 00712 std::vector&lt;ircd_module*&gt; <a class="code" href="modules_8cpp.html#a60">factory</a>(255);
721 00713 
722 <a name="l00714"></a><a class="code" href="modules_8cpp.html#a1">00714</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>  = -1;
723 00715 
724 00716 
725 </pre></div><hr><address style="align: right;"><small>Generated on Sun May 2 00:09:18 2004 for InspIRCd by
726 <a href="http://www.doxygen.org/index.html">
727 <img src="doxygen.png" alt="doxygen" align="middle" border=0 
728 width=110 height=53></a>1.3-rc3 </small></address>
729 </body>
730 </html>