]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - docs/module-doc/modules_8cpp-source.html
Documented new recvq and sendq stuff
[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>InspIRCd: modules.cpp Source File</title>
4 <link href="inspircd.css" rel="stylesheet" type="text/css">
5 </head><body>
6 <!-- Generated by Doxygen 1.3.3 -->
7 <div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div>
8 <h1>modules.cpp</h1><a href="modules_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*       +------------------------------------+</span>
9 00002 <span class="comment"> *       | Inspire Internet Relay Chat Daemon |</span>
10 00003 <span class="comment"> *       +------------------------------------+</span>
11 00004 <span class="comment"> *</span>
12 00005 <span class="comment"> *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.</span>
13 00006 <span class="comment"> *                       E-mail:</span>
14 00007 <span class="comment"> *                &lt;brain@chatspike.net&gt;</span>
15 00008 <span class="comment"> *                &lt;Craig@chatspike.net&gt;</span>
16 00009 <span class="comment"> *     </span>
17 00010 <span class="comment"> * Written by Craig Edwards, Craig McLure, and others.</span>
18 00011 <span class="comment"> * This program is free but copyrighted software; see</span>
19 00012 <span class="comment"> *            the file COPYING for details.</span>
20 00013 <span class="comment"> *</span>
21 00014 <span class="comment"> * ---------------------------------------------------</span>
22 00015 <span class="comment"> */</span>
23 00016 
24 00017 <span class="preprocessor">#include "inspircd.h"</span>
25 00018 <span class="preprocessor">#include "inspircd_io.h"</span>
26 00019 <span class="preprocessor">#include "inspircd_util.h"</span>
27 00020 <span class="preprocessor">#include "inspircd_config.h"</span>
28 00021 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
29 00022 <span class="preprocessor">#include &lt;fcntl.h&gt;</span>
30 00023 <span class="preprocessor">#include &lt;sys/errno.h&gt;</span>
31 00024 <span class="preprocessor">#include &lt;sys/ioctl.h&gt;</span>
32 00025 <span class="preprocessor">#include &lt;sys/utsname.h&gt;</span>
33 00026 <span class="preprocessor">#ifdef USE_KQUEUE</span>
34 00027 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/types.h&gt;</span>
35 00028 <span class="preprocessor">#include &lt;sys/event.h&gt;</span>
36 00029 <span class="preprocessor">#include &lt;sys/time.h&gt;</span>
37 00030 <span class="preprocessor">#endif</span>
38 00031 <span class="preprocessor"></span><span class="preprocessor">#include &lt;cstdio&gt;</span>
39 00032 <span class="preprocessor">#include &lt;time.h&gt;</span>
40 00033 <span class="preprocessor">#include &lt;string&gt;</span>
41 00034 <span class="preprocessor">#ifdef GCC3</span>
42 00035 <span class="preprocessor"></span><span class="preprocessor">#include &lt;ext/hash_map&gt;</span>
43 00036 <span class="preprocessor">#else</span>
44 00037 <span class="preprocessor"></span><span class="preprocessor">#include &lt;hash_map&gt;</span>
45 00038 <span class="preprocessor">#endif</span>
46 00039 <span class="preprocessor"></span><span class="preprocessor">#include &lt;map&gt;</span>
47 00040 <span class="preprocessor">#include &lt;sstream&gt;</span>
48 00041 <span class="preprocessor">#include &lt;vector&gt;</span>
49 00042 <span class="preprocessor">#include &lt;errno.h&gt;</span>
50 00043 <span class="preprocessor">#include &lt;deque&gt;</span>
51 00044 <span class="preprocessor">#include &lt;errno.h&gt;</span>
52 00045 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
53 00046 <span class="preprocessor">#include &lt;sched.h&gt;</span>
54 00047 <span class="preprocessor">#include "<a class="code" href="connection_8h.html">connection.h</a>"</span>
55 00048 <span class="preprocessor">#include "<a class="code" href="users_8h.html">users.h</a>"</span>
56 00049 <span class="preprocessor">#include "<a class="code" href="servers_8h.html">servers.h</a>"</span>
57 00050 <span class="preprocessor">#include "<a class="code" href="ctables_8h.html">ctables.h</a>"</span>
58 00051 <span class="preprocessor">#include "globals.h"</span>
59 00052 <span class="preprocessor">#include "<a class="code" href="modules_8h.html">modules.h</a>"</span>
60 00053 <span class="preprocessor">#include "dynamic.h"</span>
61 00054 <span class="preprocessor">#include "wildcard.h"</span>
62 00055 <span class="preprocessor">#include "<a class="code" href="message_8h.html">message.h</a>"</span>
63 00056 <span class="preprocessor">#include "<a class="code" href="mode_8h.html">mode.h</a>"</span>
64 00057 <span class="preprocessor">#include "<a class="code" href="xline_8h.html">xline.h</a>"</span>
65 00058 <span class="preprocessor">#include "<a class="code" href="commands_8h.html">commands.h</a>"</span>
66 00059 <span class="preprocessor">#include "inspstring.h"</span>
67 00060 
68 00061 <span class="preprocessor">#ifdef GCC3</span>
69 00062 <span class="preprocessor"></span><span class="preprocessor">#define nspace __gnu_cxx</span>
70 00063 <span class="preprocessor"></span><span class="preprocessor">#else</span>
71 <a name="l00064"></a><a class="code" href="modules_8cpp.html#a0">00064</a> <span class="preprocessor"></span><span class="preprocessor">#define nspace std</span>
72 00065 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
73 00066 <span class="preprocessor"></span>
74 00067 <span class="keyword">using</span> <span class="keyword">namespace </span>std;
75 00068 
76 00069 <span class="preprocessor">#ifdef USE_KQUEUE</span>
77 00070 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> kq;
78 00071 <span class="preprocessor">#endif</span>
79 00072 <span class="preprocessor"></span>
80 00073 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>;
81 <a name="l00074"></a><a class="code" href="modules_8cpp.html#a2">00074</a> <span class="keyword">extern</span> std::vector&lt;Module*&gt; <a class="code" href="channels_8cpp.html#a2">modules</a>;
82 <a name="l00075"></a><a class="code" href="modules_8cpp.html#a3">00075</a> <span class="keyword">extern</span> std::vector&lt;ircd_module*&gt; <a class="code" href="channels_8cpp.html#a3">factory</a>;
83 00076 
84 <a name="l00077"></a><a class="code" href="modules_8cpp.html#a4">00077</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a37">TIME</a>;
85 00078 
86 <a name="l00079"></a><a class="code" href="modules_8cpp.html#a5">00079</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>;
87 <a name="l00080"></a><a class="code" href="modules_8cpp.html#a6">00080</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF];
88 <a name="l00081"></a><a class="code" href="modules_8cpp.html#a7">00081</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF];
89 <a name="l00082"></a><a class="code" href="modules_8cpp.html#a8">00082</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF];
90 <a name="l00083"></a><a class="code" href="modules_8cpp.html#a9">00083</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF];
91 <a name="l00084"></a><a class="code" href="modules_8cpp.html#a10">00084</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF];
92 <a name="l00085"></a><a class="code" href="modules_8cpp.html#a11">00085</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF];
93 <a name="l00086"></a><a class="code" href="modules_8cpp.html#a12">00086</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF];
94 <a name="l00087"></a><a class="code" href="modules_8cpp.html#a13">00087</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF];
95 <a name="l00088"></a><a class="code" href="modules_8cpp.html#a14">00088</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF];
96 <a name="l00089"></a><a class="code" href="modules_8cpp.html#a15">00089</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF];
97 <a name="l00090"></a><a class="code" href="modules_8cpp.html#a16">00090</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF];
98 <a name="l00091"></a><a class="code" href="modules_8cpp.html#a17">00091</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF];
99 <a name="l00092"></a><a class="code" href="modules_8cpp.html#a18">00092</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF];
100 00093 
101 <a name="l00094"></a><a class="code" href="modules_8cpp.html#a19">00094</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>;
102 <a name="l00095"></a><a class="code" href="modules_8cpp.html#a20">00095</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>;
103 <a name="l00096"></a><a class="code" href="modules_8cpp.html#a21">00096</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>;
104 <a name="l00097"></a><a class="code" href="modules_8cpp.html#a22">00097</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>;
105 <a name="l00098"></a><a class="code" href="modules_8cpp.html#a23">00098</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>;
106 <a name="l00099"></a><a class="code" href="modules_8cpp.html#a24">00099</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>;
107 <a name="l00100"></a><a class="code" href="modules_8cpp.html#a25">00100</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>;
108 <a name="l00101"></a><a class="code" href="modules_8cpp.html#a26">00101</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>;
109 00102 
110 <a name="l00103"></a><a class="code" href="modules_8cpp.html#a27">00103</a> <span class="keyword">extern</span> std::vector&lt;int&gt; <a class="code" href="channels_8cpp.html#a26">fd_reap</a>;
111 <a name="l00104"></a><a class="code" href="modules_8cpp.html#a28">00104</a> <span class="keyword">extern</span> std::vector&lt;std::string&gt; <a class="code" href="channels_8cpp.html#a27">module_names</a>;
112 00105 
113 <a name="l00106"></a><a class="code" href="modules_8cpp.html#a29">00106</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a28">boundPortCount</a>;
114 <a name="l00107"></a><a class="code" href="modules_8cpp.html#a30">00107</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">portCount</a>;
115 <a name="l00108"></a><a class="code" href="modules_8cpp.html#a31">00108</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">SERVERportCount</a>;
116 <a name="l00109"></a><a class="code" href="modules_8cpp.html#a32">00109</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">ports</a>[MAXSOCKS];
117 <a name="l00110"></a><a class="code" href="modules_8cpp.html#a33">00110</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a32">defaultRoute</a>;
118 00111 
119 <a name="l00112"></a><a class="code" href="modules_8cpp.html#a34">00112</a> <span class="keyword">extern</span> std::vector&lt;long&gt; <a class="code" href="channels_8cpp.html#a33">auth_cookies</a>;
120 <a name="l00113"></a><a class="code" href="modules_8cpp.html#a35">00113</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a34">config_f</a>;
121 00114 
122 <a name="l00115"></a><a class="code" href="modules_8cpp.html#a36">00115</a> <span class="keyword">extern</span> <a class="code" href="classserverrec.html">serverrec</a>* <a class="code" href="channels_8cpp.html#a35">me</a>[32];
123 00116 
124 <a name="l00117"></a><a class="code" href="modules_8cpp.html#a37">00117</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a36">log_file</a>;
125 00118 
126 <a name="l00119"></a><a class="code" href="modules_8cpp.html#a38">00119</a> <span class="keyword">extern</span> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="modules_8cpp.html#a38">fd_ref_table</a>[65536];
127 00120 
128 <a name="l00121"></a><a class="code" href="namespacenspace.html">00121</a> <span class="keyword">namespace </span><a class="code" href="channels_8cpp.html#a0">nspace</a>
129 00122 {
130 00123 <span class="preprocessor">#ifdef GCC34</span>
131 00124 <span class="preprocessor"></span>        <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>hash&lt;in_addr&gt;
132 00125 #else
133 <a name="l00126"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html">00126</a>         template&lt;&gt; struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash&lt;in_addr&gt;
134 00127 #endif
135 00128         {
136 <a name="l00129"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html#a0">00129</a>                 size_t operator()(<span class="keyword">const</span> <span class="keyword">struct</span> in_addr &amp;a)<span class="keyword"> const</span>
137 00130 <span class="keyword">                </span>{
138 00131                         size_t q;
139 00132                         memcpy(&amp;q,&amp;a,<span class="keyword">sizeof</span>(size_t));
140 00133                         <span class="keywordflow">return</span> q;
141 00134                 }
142 00135         };
143 00136 <span class="preprocessor">#ifdef GCC34</span>
144 00137 <span class="preprocessor"></span>        <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>hash&lt;string&gt;
145 00138 #else
146 <a name="l00139"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html">00139</a>         template&lt;&gt; struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash&lt;string&gt;
147 00140 #endif
148 00141         {
149 <a name="l00142"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html#a0">00142</a>                 size_t operator()(<span class="keyword">const</span> string &amp;s)<span class="keyword"> const</span>
150 00143 <span class="keyword">                </span>{
151 00144                         <span class="keywordtype">char</span> a[MAXBUF];
152 00145                         <span class="keyword">static</span> <span class="keyword">struct </span>hash&lt;const char *&gt; strhash;
153 00146                         strlcpy(a,s.c_str(),MAXBUF);
154 00147                         strlower(a);
155 00148                         <span class="keywordflow">return</span> strhash(a);
156 00149                 }
157 00150         };
158 00151 }
159 00152 
160 <a name="l00153"></a><a class="code" href="structStrHashComp.html">00153</a> <span class="keyword">struct </span><a class="code" href="structStrHashComp.html">StrHashComp</a>
161 00154 {
162 00155 
163 <a name="l00156"></a><a class="code" href="structStrHashComp.html#a0">00156</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>
164 00157 <span class="keyword">        </span>{
165 00158                 <span class="keywordtype">char</span> a[MAXBUF],b[MAXBUF];
166 00159                 strlcpy(a,s1.c_str(),MAXBUF);
167 00160                 strlcpy(b,s2.c_str(),MAXBUF);
168 00161                 strlower(a);
169 00162                 strlower(b);
170 00163                 <span class="keywordflow">return</span> (strcasecmp(a,b) == 0);
171 00164         }
172 00165 
173 00166 };
174 00167 
175 <a name="l00168"></a><a class="code" href="structInAddr__HashComp.html">00168</a> <span class="keyword">struct </span><a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a>
176 00169 {
177 00170 
178 <a name="l00171"></a><a class="code" href="structInAddr__HashComp.html#a0">00171</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>
179 00172 <span class="keyword">        </span>{
180 00173                 size_t q;
181 00174                 size_t p;
182 00175                 
183 00176                 memcpy(&amp;q,&amp;s1,<span class="keyword">sizeof</span>(size_t));
184 00177                 memcpy(&amp;p,&amp;s2,<span class="keyword">sizeof</span>(size_t));
185 00178                 
186 00179                 <span class="keywordflow">return</span> (q == p);
187 00180         }
188 00181 
189 00182 };
190 00183 
191 00184 
192 <a name="l00185"></a><a class="code" href="modules_8cpp.html#a39">00185</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#a39">user_hash</a>;
193 <a name="l00186"></a><a class="code" href="modules_8cpp.html#a40">00186</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#a40">chan_hash</a>;
194 <a name="l00187"></a><a class="code" href="modules_8cpp.html#a41">00187</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#a41">address_cache</a>;
195 <a name="l00188"></a><a class="code" href="modules_8cpp.html#a42">00188</a> <span class="keyword">typedef</span> std::deque&lt;command_t&gt; <a class="code" href="modules_8cpp.html#a42">command_table</a>;
196 00189 
197 00190 
198 <a name="l00191"></a><a class="code" href="modules_8cpp.html#a43">00191</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">user_hash</a> <a class="code" href="modules_8cpp.html#a43">clientlist</a>;
199 <a name="l00192"></a><a class="code" href="modules_8cpp.html#a44">00192</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">chan_hash</a> <a class="code" href="modules_8cpp.html#a44">chanlist</a>;
200 <a name="l00193"></a><a class="code" href="modules_8cpp.html#a45">00193</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">user_hash</a> <a class="code" href="modules_8cpp.html#a45">whowas</a>;
201 <a name="l00194"></a><a class="code" href="modules_8cpp.html#a46">00194</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a42">command_table</a> <a class="code" href="modules_8cpp.html#a46">cmdlist</a>;
202 <a name="l00195"></a><a class="code" href="modules_8cpp.html#a47">00195</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a47">MOTD</a>;
203 <a name="l00196"></a><a class="code" href="modules_8cpp.html#a48">00196</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a48">RULES</a>;
204 <a name="l00197"></a><a class="code" href="modules_8cpp.html#a49">00197</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a41">address_cache</a> <a class="code" href="modules_8cpp.html#a49">IP</a>;
205 00198 
206 00199 
207 00200 <span class="comment">// class type for holding an extended mode character - internal to core</span>
208 00201 
209 <a name="l00202"></a><a class="code" href="classExtMode.html">00202</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>
210 00203 {
211 00204 <span class="keyword">public</span>:
212 <a name="l00205"></a><a class="code" href="classExtMode.html#o0">00205</a>         <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#o0">modechar</a>;
213 <a name="l00206"></a><a class="code" href="classExtMode.html#o1">00206</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o1">type</a>;
214 <a name="l00207"></a><a class="code" href="classExtMode.html#o2">00207</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o2">params_when_on</a>;
215 <a name="l00208"></a><a class="code" href="classExtMode.html#o3">00208</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o3">params_when_off</a>;
216 <a name="l00209"></a><a class="code" href="classExtMode.html#o4">00209</a>         <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#o4">needsoper</a>;
217 <a name="l00210"></a><a class="code" href="classExtMode.html#o5">00210</a>         <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>;
218 <a name="l00211"></a><a class="code" href="classExtMode.html#a0">00211</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) : <a class="code" href="classExtMode.html#o0">modechar</a>(mc), <a class="code" href="classExtMode.html#o1">type</a>(ty), <a class="code" href="classExtMode.html#o4">needsoper</a>(oper), <a class="code" href="classExtMode.html#o2">params_when_on</a>(p_on), <a class="code" href="classExtMode.html#o3">params_when_off</a>(p_off) { };
219 00212 };                                     
220 00213 
221 <a name="l00214"></a><a class="code" href="modules_8cpp.html#a50">00214</a> <span class="keyword">typedef</span> std::vector&lt;ExtMode&gt; <a class="code" href="modules_8cpp.html#a50">ExtModeList</a>;
222 <a name="l00215"></a><a class="code" href="modules_8cpp.html#a51">00215</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a>;
223 00216 
224 00217 
225 <a name="l00218"></a><a class="code" href="modules_8cpp.html#a52">00218</a> <a class="code" href="modules_8cpp.html#a50">ExtModeList</a> <a class="code" href="modules_8cpp.html#a52">EMode</a>;
226 00219 
227 00220 <span class="comment">// returns true if an extended mode character is in use</span>
228 <a name="l00221"></a><a class="code" href="modules_8cpp.html#a53">00221</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
229 00222 {
230 00223         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++)
231 00224         {
232 00225                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
233 00226                 {
234 00227                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
235 00228                 }
236 00229         }
237 00230         <span class="keywordflow">return</span> <span class="keyword">false</span>;
238 00231 }
239 00232 
240 <a name="l00233"></a><a class="code" href="modules_8cpp.html#a54">00233</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a54">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
241 00234 {
242 00235         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++)
243 00236         {
244 00237                 <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>))
245 00238                 {
246 00239                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
247 00240                 }
248 00241         }
249 00242         <span class="keywordflow">return</span> <span class="keyword">false</span>;
250 00243 }
251 00244 
252 <a name="l00245"></a><a class="code" href="modules_8cpp.html#a55">00245</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
253 00246 {
254 00247         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++)
255 00248         {
256 00249                 <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>))
257 00250                 {
258 00251                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
259 00252                 }
260 00253         }
261 00254         <span class="keywordflow">return</span> <span class="keyword">false</span>;
262 00255 }
263 00256 
264 00257 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span>
265 <a name="l00258"></a><a class="code" href="modules_8cpp.html#a56">00258</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a56">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
266 00259 {
267 00260         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++)
268 00261         {
269 00262                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
270 00263                 {
271 00264                         <span class="keywordflow">return</span> i-&gt;params_when_on;
272 00265                 }
273 00266         }
274 00267         <span class="keywordflow">return</span> 0;
275 00268 }
276 00269 
277 00270 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span>
278 <a name="l00271"></a><a class="code" href="modules_8cpp.html#a57">00271</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a57">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
279 00272 {
280 00273         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++)
281 00274         {
282 00275                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
283 00276                 {
284 00277                         <span class="keywordflow">return</span> i-&gt;params_when_off;
285 00278                 }
286 00279         }
287 00280         <span class="keywordflow">return</span> 0;
288 00281 }
289 00282 
290 00283 <span class="comment">// returns true if an extended mode character is in use</span>
291 <a name="l00284"></a><a class="code" href="modules_8cpp.html#a58">00284</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a58">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)
292 00285 {
293 00286         <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a53">ModeDefined</a>(modechar,type)) {
294 00287                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
295 00288         }
296 00289         <a class="code" href="modules_8cpp.html#a52">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off));
297 00290         <span class="keywordflow">return</span> <span class="keyword">true</span>;
298 00291 }
299 00292 
300 00293 <span class="comment">// turns a mode into a listmode</span>
301 <a name="l00294"></a><a class="code" href="modules_8cpp.html#a59">00294</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a59">ModeMakeList</a>(<span class="keywordtype">char</span> modechar)
302 00295 {
303 00296         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++)
304 00297         {
305 00298                 <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>))
306 00299                 {
307 00300                         i-&gt;list = <span class="keyword">true</span>;
308 00301                         <span class="keywordflow">return</span>;
309 00302                 }
310 00303         }
311 00304         <span class="keywordflow">return</span>;
312 00305 }
313 00306 
314 00307 <span class="comment">// version is a simple class for holding a modules version number</span>
315 00308 
316 <a name="l00309"></a><a class="code" href="classVersion.html#a0">00309</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, <span class="keywordtype">int</span> flags) : Major(major), Minor(minor), Revision(revision), Build(build), Flags(flags) { };
317 00310 
318 00311 <span class="comment">// admin is a simple class for holding a server's administrative info</span>
319 00312 
320 <a name="l00313"></a><a class="code" href="classAdmin.html#a0">00313</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) { };
321 00314 
322 <a name="l00315"></a><a class="code" href="classRequest.html#a0">00315</a> <a class="code" href="classRequest.html#a0">Request::Request</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, <a class="code" href="classModule.html">Module</a>* dst) : data(anydata), source(src), dest(dst) { };
323 00316 
324 <a name="l00317"></a><a class="code" href="classRequest.html#a1">00317</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a1">Request::GetData</a>()
325 00318 {
326 00319         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classRequest.html#p0">data</a>;
327 00320 }
328 00321 
329 <a name="l00322"></a><a class="code" href="classRequest.html#a2">00322</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a2">Request::GetSource</a>()
330 00323 {
331 00324         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classRequest.html#p1">source</a>;
332 00325 }
333 00326 
334 <a name="l00327"></a><a class="code" href="classRequest.html#a3">00327</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a3">Request::GetDest</a>()
335 00328 {
336 00329         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classRequest.html#p2">dest</a>;
337 00330 }
338 00331 
339 <a name="l00332"></a><a class="code" href="classRequest.html#a4">00332</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a4">Request::Send</a>()
340 00333 {
341 00334         <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classRequest.html#p2">dest</a>)
342 00335         {
343 00336                 <span class="keywordflow">return</span> <a class="code" href="classRequest.html#p2">dest</a>-&gt;<a class="code" href="classModule.html#a46">OnRequest</a>(<span class="keyword">this</span>);
344 00337         }
345 00338         <span class="keywordflow">else</span>
346 00339         {
347 00340                 <span class="keywordflow">return</span> NULL;
348 00341         }
349 00342 }
350 00343 
351 <a name="l00344"></a><a class="code" href="classEvent.html#a0">00344</a> <a class="code" href="classEvent.html#a0">Event::Event</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, std::string eventid) : data(anydata), source(src), id(eventid) { };
352 00345 
353 <a name="l00346"></a><a class="code" href="classEvent.html#a1">00346</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a1">Event::GetData</a>()
354 00347 {
355 00348         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classEvent.html#p0">data</a>;
356 00349 }
357 00350 
358 <a name="l00351"></a><a class="code" href="classEvent.html#a2">00351</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classEvent.html#a2">Event::GetSource</a>()
359 00352 {
360 00353         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classEvent.html#p1">source</a>;
361 00354 }
362 00355 
363 <a name="l00356"></a><a class="code" href="classEvent.html#a4">00356</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a4">Event::Send</a>()
364 00357 {
365 00358         <a class="code" href="modules_8h.html#a24">FOREACH_MOD</a> OnEvent(<span class="keyword">this</span>);
366 00359         <span class="keywordflow">return</span> NULL;
367 00360 }
368 00361 
369 <a name="l00362"></a><a class="code" href="classEvent.html#a3">00362</a> std::string <a class="code" href="classEvent.html#a3">Event::GetEventID</a>()
370 00363 {
371 00364         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classEvent.html#p2">id</a>;
372 00365 }
373 00366 
374 00367 
375 00368 <span class="comment">// These declarations define the behavours of the base class Module (which does nothing at all)</span>
376 <a name="l00369"></a><a class="code" href="classModule.html#a0">00369</a>                 <a class="code" href="classModule.html#a0">Module::Module</a>() { }
377 <a name="l00370"></a><a class="code" href="classModule.html#a1">00370</a>                 <a class="code" href="classModule.html#a1">Module::~Module</a>() { }
378 <a name="l00371"></a><a class="code" href="classModule.html#a3">00371</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) { }
379 <a name="l00372"></a><a class="code" href="classModule.html#a4">00372</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) { }
380 <a name="l00373"></a><a class="code" href="classModule.html#a5">00373</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a5">Module::OnUserDisconnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }
381 <a name="l00374"></a><a class="code" href="classModule.html#a6">00374</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a6">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
382 <a name="l00375"></a><a class="code" href="classModule.html#a7">00375</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a7">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
383 <a name="l00376"></a><a class="code" href="classModule.html#a8">00376</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a8">Module::OnPacketTransmit</a>(std::string &amp;data, std::string serv) { }
384 <a name="l00377"></a><a class="code" href="classModule.html#a9">00377</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a9">Module::OnPacketReceive</a>(std::string &amp;data, std::string serv) { }
385 <a name="l00378"></a><a class="code" href="classModule.html#a10">00378</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a10">Module::OnRehash</a>() { }
386 <a name="l00379"></a><a class="code" href="classModule.html#a11">00379</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a11">Module::OnServerRaw</a>(std::string &amp;raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { }
387 <a name="l00380"></a><a class="code" href="classModule.html#a13">00380</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a13">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; }
388 <a name="l00381"></a><a class="code" href="classModule.html#a12">00381</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a12">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>; }
389 <a name="l00382"></a><a class="code" href="classModule.html#a2">00382</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,<a class="code" href="modules_8h.html#a21">VF_VENDOR</a>); }
390 <a name="l00383"></a><a class="code" href="classModule.html#a16">00383</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a16">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
391 <a name="l00384"></a><a class="code" href="classModule.html#a17">00384</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a17">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
392 <a name="l00385"></a><a class="code" href="classModule.html#a18">00385</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a18">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { };
393 <a name="l00386"></a><a class="code" href="classModule.html#a19">00386</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a19">Module::OnUserPreInvite</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="keywordflow">return</span> 0; };
394 <a name="l00387"></a><a class="code" href="classModule.html#a20">00387</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a20">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 &amp;text) { <span class="keywordflow">return</span> 0; };
395 <a name="l00388"></a><a class="code" href="classModule.html#a21">00388</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a21">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 &amp;text) { <span class="keywordflow">return</span> 0; };
396 <a name="l00389"></a><a class="code" href="classModule.html#a22">00389</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a22">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; };
397 <a name="l00390"></a><a class="code" href="classModule.html#a23">00390</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a23">Module::OnUserPostNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string oldnick) { };
398 <a name="l00391"></a><a class="code" href="classModule.html#a24">00391</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a24">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>; };
399 <a name="l00392"></a><a class="code" href="classModule.html#a25">00392</a> <a class="code" href="modules_8h.html#a32">string_list</a>     <a class="code" href="classModule.html#a25">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; }
400 <a name="l00393"></a><a class="code" href="classModule.html#a26">00393</a> <a class="code" href="modules_8h.html#a32">string_list</a>     <a class="code" href="classModule.html#a26">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; }
401 <a name="l00394"></a><a class="code" href="classModule.html#a27">00394</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a27">Module::On005Numeric</a>(std::string &amp;output) { };
402 <a name="l00395"></a><a class="code" href="classModule.html#a28">00395</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a28">Module::OnKill</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest, std::string reason) { <span class="keywordflow">return</span> 0; };
403 <a name="l00396"></a><a class="code" href="classModule.html#a29">00396</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a29">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,std::string name) { };
404 <a name="l00397"></a><a class="code" href="classModule.html#a30">00397</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a30">Module::OnBackgroundTimer</a>(time_t curtime) { };
405 <a name="l00398"></a><a class="code" href="classModule.html#a31">00398</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a31">Module::OnSendList</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel, <span class="keywordtype">char</span> mode) { };
406 <a name="l00399"></a><a class="code" href="classModule.html#a32">00399</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a32">Module::OnPreCommand</a>(std::string command, <span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) { <span class="keywordflow">return</span> 0; };
407 <a name="l00400"></a><a class="code" href="classModule.html#a33">00400</a> <span class="keywordtype">bool</span>            <a class="code" href="classModule.html#a33">Module::OnCheckReady</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <span class="keywordflow">return</span> <span class="keyword">true</span>; };
408 <a name="l00401"></a><a class="code" href="classModule.html#a34">00401</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a34">Module::OnUserRegister</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
409 <a name="l00402"></a><a class="code" href="classModule.html#a14">00402</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a14">Module::OnUserPreKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { <span class="keywordflow">return</span> 0; };
410 <a name="l00403"></a><a class="code" href="classModule.html#a15">00403</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a15">Module::OnUserKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { };
411 <a name="l00404"></a><a class="code" href="classModule.html#a35">00404</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a35">Module::OnRawMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keywordtype">char</span> mode, std::string param, <span class="keywordtype">bool</span> adding, <span class="keywordtype">int</span> pcnt) { <span class="keywordflow">return</span> 0; };
412 <a name="l00405"></a><a class="code" href="classModule.html#a36">00405</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a36">Module::OnCheckInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; };
413 <a name="l00406"></a><a class="code" href="classModule.html#a37">00406</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a37">Module::OnCheckKey</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string keygiven) { <span class="keywordflow">return</span> 0; };
414 <a name="l00407"></a><a class="code" href="classModule.html#a38">00407</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a38">Module::OnCheckLimit</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; };
415 <a name="l00408"></a><a class="code" href="classModule.html#a39">00408</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a39">Module::OnCheckBan</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; };
416 <a name="l00409"></a><a class="code" href="classModule.html#a40">00409</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a40">Module::OnStats</a>(<span class="keywordtype">char</span> symbol) { };
417 <a name="l00410"></a><a class="code" href="classModule.html#a41">00410</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a41">Module::OnChangeLocalUserHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; };
418 <a name="l00411"></a><a class="code" href="classModule.html#a42">00411</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a42">Module::OnChangeLocalUserGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; };
419 <a name="l00412"></a><a class="code" href="classModule.html#a43">00412</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a43">Module::OnLocalTopicChange</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string topic) { <span class="keywordflow">return</span> 0; };
420 <a name="l00413"></a><a class="code" href="classModule.html#a44">00413</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a44">Module::OnMeshToken</a>(<span class="keywordtype">char</span> token,string_list params,<a class="code" href="classserverrec.html">serverrec</a>* source,<a class="code" href="classserverrec.html">serverrec</a>* reply, std::string tcp_host,std::string ipaddr,<span class="keywordtype">int</span> port) { <span class="keywordflow">return</span> 0; };
421 <a name="l00414"></a><a class="code" href="classModule.html#a45">00414</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a45">Module::OnEvent</a>(<a class="code" href="classEvent.html">Event</a>* event) { <span class="keywordflow">return</span>; };
422 <a name="l00415"></a><a class="code" href="classModule.html#a46">00415</a> <span class="keywordtype">char</span>*           <a class="code" href="classModule.html#a46">Module::OnRequest</a>(<a class="code" href="classRequest.html">Request</a>* request) { <span class="keywordflow">return</span> NULL; };
423 <a name="l00416"></a><a class="code" href="classModule.html#a47">00416</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a47">Module::OnOperCompare</a>(std::string password, std::string input) { <span class="keywordflow">return</span> 0; };
424 <a name="l00417"></a><a class="code" href="classModule.html#a48">00417</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a48">Module::OnGlobalOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
425 <a name="l00418"></a><a class="code" href="classModule.html#a49">00418</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a49">Module::OnGlobalConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
426 <a name="l00419"></a><a class="code" href="classModule.html#a50">00419</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a50">Module::OnAddBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; };
427 <a name="l00420"></a><a class="code" href="classModule.html#a51">00420</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a51">Module::OnDelBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; };
428 <a name="l00421"></a><a class="code" href="classModule.html#a52">00421</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a52">Module::OnRawSocketAccept</a>(<span class="keywordtype">int</span> fd, std::string ip, <span class="keywordtype">int</span> localport) { };
429 <a name="l00422"></a><a class="code" href="classModule.html#a53">00422</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a53">Module::OnRawSocketWrite</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">int</span> count) { <span class="keywordflow">return</span> 0; };
430 <a name="l00423"></a><a class="code" href="classModule.html#a54">00423</a> <span class="keywordtype">void</span>            <a class="code" href="classModule.html#a54">Module::OnRawSocketClose</a>(<span class="keywordtype">int</span> fd) { };
431 <a name="l00424"></a><a class="code" href="classModule.html#a55">00424</a> <span class="keywordtype">int</span>             <a class="code" href="classModule.html#a55">Module::OnRawSocketRead</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keywordtype">int</span> &amp;readresult) { <span class="keywordflow">return</span> 0; };
432 00425 
433 00426 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span>
434 00427 <span class="comment">// exports in the core</span>
435 00428 <span class="comment">//</span>
436 00429 
437 <a name="l00430"></a><a class="code" href="classServer.html#a0">00430</a> <a class="code" href="classServer.html#a0">Server::Server</a>()
438 00431 {
439 00432 }
440 00433 
441 <a name="l00434"></a><a class="code" href="classServer.html#a1">00434</a> <a class="code" href="classServer.html#a1">Server::~Server</a>()
442 00435 {
443 00436 }
444 00437 
445 <a name="l00438"></a><a class="code" href="classServer.html#a2">00438</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s)
446 00439 {
447 00440         WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str());
448 00441 }
449 00442 
450 <a name="l00443"></a><a class="code" href="classServer.html#a32">00443</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a32">Server::MatchText</a>(std::string sliteral, std::string spattern)
451 00444 {
452 00445         <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF];
453 00446         strlcpy(literal,sliteral.c_str(),MAXBUF);
454 00447         strlcpy(pattern,spattern.c_str(),MAXBUF);
455 00448         <span class="keywordflow">return</span> match(literal,pattern);
456 00449 }
457 00450 
458 <a name="l00451"></a><a class="code" href="classServer.html#a27">00451</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a27">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text)
459 00452 {
460 00453         WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str());
461 00454 }
462 00455 
463 <a name="l00456"></a><a class="code" href="classServer.html#a28">00456</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a28">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key)
464 00457 {
465 00458         <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">false</span>);
466 00459 }
467 00460 
468 <a name="l00461"></a><a class="code" href="classServer.html#a29">00461</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a29">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason)
469 00462 {
470 00463         <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>);
471 00464 }
472 00465 
473 <a name="l00466"></a><a class="code" href="classServer.html#a37">00466</a> <a class="code" href="modules_8h.html#a33">chanuserlist</a> <a class="code" href="classServer.html#a37">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan)
474 00467 {
475 00468         <a class="code" href="modules_8h.html#a33">chanuserlist</a> userl;
476 00469         userl.clear();
477 00470         std::vector&lt;char*&gt; *<a class="code" href="channels_8cpp.html#a15">list</a> = chan-&gt;<a class="code" href="classchanrec.html#a9">GetUsers</a>();
478 00471         <span class="keywordflow">for</span> (std::vector&lt;char*&gt;::iterator i = <a class="code" href="channels_8cpp.html#a15">list</a>-&gt;begin(); i != <a class="code" href="channels_8cpp.html#a15">list</a>-&gt;end(); i++)
479 00472         {
480 00473                 <span class="keywordtype">char</span>* o = *i;
481 00474                 userl.push_back((<a class="code" href="classuserrec.html">userrec</a>*)o);
482 00475         }
483 00476         <span class="keywordflow">return</span> userl;
484 00477 }
485 <a name="l00478"></a><a class="code" href="classServer.html#a30">00478</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a30">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname)
486 00479 {
487 00480         force_nickchange(user,nickname.c_str());
488 00481 }
489 00482 
490 <a name="l00483"></a><a class="code" href="classServer.html#a31">00483</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason)
491 00484 {
492 00485         kill_link(user,reason.c_str());
493 00486 }
494 00487 
495 <a name="l00488"></a><a class="code" href="classServer.html#a36">00488</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a36">Server::IsUlined</a>(std::string server)
496 00489 {
497 00490         <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a74">is_uline</a>(server.c_str());
498 00491 }
499 00492 
500 <a name="l00493"></a><a class="code" href="classServer.html#a33">00493</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a33">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)
501 00494 {
502 00495         call_handler(commandname.c_str(),parameters,pcnt,user);
503 00496 }
504 00497 
505 <a name="l00498"></a><a class="code" href="classServer.html#a3">00498</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)
506 00499 {
507 00500         log(level,<span class="stringliteral">"%s"</span>,s.c_str());
508 00501 }
509 00502 
510 <a name="l00503"></a><a class="code" href="classServer.html#a25">00503</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a25">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams, <span class="keywordtype">char</span>* source)
511 00504 {
512 00505         <a class="code" href="modules_8h.html#a35">createcommand</a>(cmd,f,flags,minparams,source);
513 00506 }
514 00507 
515 <a name="l00508"></a><a class="code" href="classServer.html#a26">00508</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a26">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user)
516 00509 {
517 00510         <a class="code" href="modules_8h.html#a36">server_mode</a>(parameters,pcnt,user);
518 00511 }
519 00512 
520 <a name="l00513"></a><a class="code" href="classServer.html#a4">00513</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)
521 00514 {
522 00515         Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
523 00516 }
524 00517 
525 <a name="l00518"></a><a class="code" href="classServer.html#a5">00518</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)
526 00519 {
527 00520         WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
528 00521 }
529 00522 
530 <a name="l00523"></a><a class="code" href="classServer.html#a7">00523</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s)
531 00524 {
532 00525         WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str());
533 00526 }
534 00527 
535 <a name="l00528"></a><a class="code" href="classServer.html#a8">00528</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s)
536 00529 {
537 00530         <span class="keywordflow">if</span> (!Source)
538 00531         {
539 00532                 <span class="comment">// if source is NULL, then the message originates from the local server</span>
540 00533                 Write(Dest-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s %s"</span>,this-&gt;GetServerName().c_str(),s.c_str());
541 00534         }
542 00535         <span class="keywordflow">else</span>
543 00536         {
544 00537                 <span class="comment">// otherwise it comes from the user specified</span>
545 00538                 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str());
546 00539         }
547 00540 }
548 00541 
549 <a name="l00542"></a><a class="code" href="classServer.html#a6">00542</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendChannelServerNotice</a>(std::string ServName, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string text)
550 00543 {
551 00544         WriteChannelWithServ((<span class="keywordtype">char</span>*)ServName.c_str(), Channel, <span class="stringliteral">"%s"</span>, text.c_str());
552 00545 }
553 00546 
554 <a name="l00547"></a><a class="code" href="classServer.html#a9">00547</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a9">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)
555 00548 {
556 00549         <span class="keywordflow">if</span> (IncludeSender)
557 00550         {
558 00551                 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
559 00552         }
560 00553         <span class="keywordflow">else</span>
561 00554         {
562 00555                 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
563 00556         }
564 00557 }
565 00558 
566 <a name="l00559"></a><a class="code" href="classServer.html#a10">00559</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a10">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2)
567 00560 {
568 00561         <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0);
569 00562 }
570 00563 
571 <a name="l00564"></a><a class="code" href="classServer.html#a11">00564</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender)
572 00565 {
573 00566         <span class="keywordflow">if</span> (IncludeSender)
574 00567         {
575 00568                 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str());
576 00569         }
577 00570         <span class="keywordflow">else</span>
578 00571         {
579 00572                 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str());
580 00573         }
581 00574 }
582 00575 
583 <a name="l00576"></a><a class="code" href="classServer.html#a12">00576</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a12">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text)
584 00577 {
585 00578         WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str());
586 00579 }
587 00580 
588 <a name="l00581"></a><a class="code" href="classServer.html#a34">00581</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a34">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host)
589 00582 {
590 00583         <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str());
591 00584 }
592 00585 
593 <a name="l00586"></a><a class="code" href="classServer.html#a35">00586</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a35">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos)
594 00587 {
595 00588         <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str());
596 00589 }
597 00590 
598 <a name="l00591"></a><a class="code" href="classServer.html#a13">00591</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a13">Server::IsNick</a>(std::string nick)
599 00592 {
600 00593         <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0);
601 00594 }
602 00595 
603 <a name="l00596"></a><a class="code" href="classServer.html#a15">00596</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a15">Server::FindNick</a>(std::string nick)
604 00597 {
605 00598         <span class="keywordflow">return</span> Find(nick);
606 00599 }
607 00600 
608 <a name="l00601"></a><a class="code" href="classServer.html#a16">00601</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a16">Server::FindDescriptor</a>(<span class="keywordtype">int</span> socket)
609 00602 {
610 00603         <span class="keywordflow">return</span> (socket &lt; 65536 ? <a class="code" href="modules_8cpp.html#a38">fd_ref_table</a>[socket] : NULL);
611 00604 }
612 00605 
613 <a name="l00606"></a><a class="code" href="classServer.html#a17">00606</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a17">Server::FindChannel</a>(std::string channel)
614 00607 {
615 00608         <span class="keywordflow">return</span> FindChan(channel.c_str());
616 00609 }
617 00610 
618 <a name="l00611"></a><a class="code" href="classServer.html#a18">00611</a> std::string <a class="code" href="classServer.html#a18">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
619 00612 {
620 00613         <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan);
621 00614 }
622 00615 
623 <a name="l00616"></a><a class="code" href="classServer.html#a19">00616</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a19">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
624 00617 {
625 00618         <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan);
626 00619 }
627 00620 
628 <a name="l00621"></a><a class="code" href="classServer.html#a20">00621</a> std::string <a class="code" href="classServer.html#a20">Server::GetServerName</a>()
629 00622 {
630 00623         <span class="keywordflow">return</span> getservername();
631 00624 }
632 00625 
633 <a name="l00626"></a><a class="code" href="classServer.html#a21">00626</a> std::string <a class="code" href="classServer.html#a21">Server::GetNetworkName</a>()
634 00627 {
635 00628         <span class="keywordflow">return</span> getnetworkname();
636 00629 }
637 00630 
638 <a name="l00631"></a><a class="code" href="classServer.html#a22">00631</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a22">Server::GetAdmin</a>()
639 00632 {
640 00633         <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick());
641 00634 }
642 00635 
643 00636 
644 00637 
645 <a name="l00638"></a><a class="code" href="classServer.html#a23">00638</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a23">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)
646 00639 {
647 00640         <span class="keywordflow">if</span> (((modechar &gt;= <span class="charliteral">'A'</span>) &amp;&amp; (modechar &lt;= 'Z')) || ((modechar &gt;= <span class="charliteral">'a'</span>) &amp;&amp; (modechar &lt;= <span class="charliteral">'z'</span>)))
648 00641         {
649 00642                 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>)
650 00643                 {
651 00644                         log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Modes of type MT_SERVER are reserved for future expansion"</span>);
652 00645                         <span class="keywordflow">return</span> <span class="keyword">false</span>;
653 00646                 }
654 00647                 <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>))
655 00648                 {
656 00649                         log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Parameters on MT_CLIENT modes are not supported"</span>);
657 00650                         <span class="keywordflow">return</span> <span class="keyword">false</span>;
658 00651                 }
659 00652                 <span class="keywordflow">if</span> ((params_when_on&gt;1) || (params_when_off&gt;1))
660 00653                 {
661 00654                         log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"</span>);
662 00655                         <span class="keywordflow">return</span> <span class="keyword">false</span>;
663 00656                 }
664 00657                 <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a58">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off);
665 00658         }
666 00659         <span class="keywordflow">else</span>
667 00660         {
668 00661                 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Muppet modechar detected."</span>);
669 00662         }
670 00663         <span class="keywordflow">return</span> <span class="keyword">false</span>;
671 00664 }
672 00665 
673 <a name="l00666"></a><a class="code" href="classServer.html#a24">00666</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a24">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar)
674 00667 {
675 00668         <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a58">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1);
676 00669         <span class="keywordflow">if</span> (res)
677 00670                 <a class="code" href="modules_8cpp.html#a59">ModeMakeList</a>(modechar);
678 00671         <span class="keywordflow">return</span> res;
679 00672 }
680 00673 
681 <a name="l00674"></a><a class="code" href="classServer.html#a14">00674</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a14">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c)
682 00675 {
683 00676         <span class="keywordflow">return</span> usercount(c);
684 00677 }
685 00678 
686 00679 
687 <a name="l00680"></a><a class="code" href="classServer.html#a38">00680</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a38">Server::UserToPseudo</a>(<a class="code" href="classuserrec.html">userrec</a>* user,std::string message)
688 00681 {
689 00682         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_fd = user-&gt;<a class="code" href="classconnection.html#o0">fd</a>;
690 00683         user-&gt;<a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>;
691 00684         user-&gt;<a class="code" href="classuserrec.html#a10">ClearBuffer</a>();
692 00685         Write(old_fd,<span class="stringliteral">"ERROR :Closing link (%s@%s) [%s]"</span>,user-&gt;<a class="code" href="classuserrec.html#o1">ident</a>,user-&gt;<a class="code" href="classconnection.html#o1">host</a>,message.c_str());
693 00686 <span class="preprocessor">#ifdef USE_KQUEUE</span>
694 00687 <span class="preprocessor"></span>        <span class="keyword">struct </span>kevent ke;
695 00688         EV_SET(&amp;ke, old_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
696 00689         <span class="keywordtype">int</span> i = kevent(kq, &amp;ke, 1, 0, 0, NULL);
697 00690         <span class="keywordflow">if</span> (i == -1)
698 00691         {
699 00692                 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"kqueue: Failed to remove user from queue!"</span>);
700 00693         }
701 00694 <span class="preprocessor">#endif</span>
702 00695 <span class="preprocessor"></span>        shutdown(old_fd,2);
703 00696         close(old_fd);
704 00697 }
705 00698 
706 <a name="l00699"></a><a class="code" href="classServer.html#a39">00699</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a39">Server::PseudoToUser</a>(<a class="code" href="classuserrec.html">userrec</a>* alive,<a class="code" href="classuserrec.html">userrec</a>* zombie,std::string message)
707 00700 {
708 00701         zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a> = alive-&gt;<a class="code" href="classconnection.html#o0">fd</a>;
709 00702         alive-&gt;<a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>;
710 00703         alive-&gt;<a class="code" href="classuserrec.html#a10">ClearBuffer</a>();
711 00704         Write(zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s!%s@%s NICK %s"</span>,alive-&gt;<a class="code" href="classuserrec.html#o0">nick</a>,alive-&gt;<a class="code" href="classuserrec.html#o1">ident</a>,alive-&gt;<a class="code" href="classconnection.html#o1">host</a>,zombie-&gt;<a class="code" href="classuserrec.html#o0">nick</a>);
712 00705         kill_link(alive,message.c_str());
713 00706         <a class="code" href="modules_8cpp.html#a38">fd_ref_table</a>[zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a>] = zombie;
714 00707         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != MAXCHANS; i++)
715 00708         {
716 00709                 <span class="keywordflow">if</span> (zombie-&gt;chans[i].channel != NULL)
717 00710                 {
718 00711                         <span class="keywordflow">if</span> (zombie-&gt;chans[i].channel-&gt;name)
719 00712                         {
720 00713                                 <a class="code" href="classchanrec.html">chanrec</a>* Ptr = zombie-&gt;<a class="code" href="classuserrec.html#o5">chans</a>[i].<a class="code" href="classucrec.html#o1">channel</a>;
721 00714                                 WriteFrom(zombie-&gt;fd,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>);
722 00715                                 <span class="keywordflow">if</span> (Ptr-&gt;<a class="code" href="classchanrec.html#o6">topicset</a>)
723 00716                                 {
724 00717                                         WriteServ(zombie-&gt;fd,<span class="stringliteral">"332 %s %s :%s"</span>, zombie-&gt;nick, Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o4">topic</a>);
725 00718                                         WriteServ(zombie-&gt;fd,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie-&gt;nick, Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o7">setby</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o6">topicset</a>);
726 00719                                 }
727 00720                                 userlist(zombie,Ptr);
728 00721                                 WriteServ(zombie-&gt;fd,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie-&gt;nick, Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>);
729 00722 
730 00723                         }
731 00724                 }
732 00725         }
733 00726 
734 00727 }
735 00728 
736 <a name="l00729"></a><a class="code" href="classServer.html#a40">00729</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a40">Server::AddGLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
737 00730 {
738 00731         <a class="code" href="xline_8h.html#a1">add_gline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str());
739 00732 }
740 00733 
741 <a name="l00734"></a><a class="code" href="classServer.html#a41">00734</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a41">Server::AddQLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string nickname)
742 00735 {
743 00736         <a class="code" href="xline_8h.html#a2">add_qline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), nickname.c_str());
744 00737 }
745 00738 
746 <a name="l00739"></a><a class="code" href="classServer.html#a42">00739</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a42">Server::AddZLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string ipaddr)
747 00740 {
748 00741         <a class="code" href="xline_8h.html#a3">add_zline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), ipaddr.c_str());
749 00742 }
750 00743 
751 <a name="l00744"></a><a class="code" href="classServer.html#a43">00744</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a43">Server::AddKLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
752 00745 {
753 00746         <a class="code" href="xline_8h.html#a4">add_kline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str());
754 00747 }
755 00748 
756 <a name="l00749"></a><a class="code" href="classServer.html#a44">00749</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a44">Server::AddELine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
757 00750 {
758 00751         <a class="code" href="xline_8h.html#a5">add_eline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str());
759 00752 }
760 00753 
761 <a name="l00754"></a><a class="code" href="classServer.html#a45">00754</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a45">Server::DelGLine</a>(std::string hostmask)
762 00755 {
763 00756         <a class="code" href="xline_8h.html#a6">del_gline</a>(hostmask.c_str());
764 00757 }
765 00758 
766 <a name="l00759"></a><a class="code" href="classServer.html#a46">00759</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a46">Server::DelQLine</a>(std::string nickname)
767 00760 {
768 00761         <a class="code" href="xline_8h.html#a7">del_qline</a>(nickname.c_str());
769 00762 }
770 00763 
771 <a name="l00764"></a><a class="code" href="classServer.html#a47">00764</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a47">Server::DelZLine</a>(std::string ipaddr)
772 00765 {
773 00766         <a class="code" href="xline_8h.html#a8">del_zline</a>(ipaddr.c_str());
774 00767 }
775 00768 
776 <a name="l00769"></a><a class="code" href="classServer.html#a48">00769</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a48">Server::DelKLine</a>(std::string hostmask)
777 00770 {
778 00771         <a class="code" href="xline_8h.html#a9">del_kline</a>(hostmask.c_str());
779 00772 }
780 00773 
781 <a name="l00774"></a><a class="code" href="classServer.html#a49">00774</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a49">Server::DelELine</a>(std::string hostmask)
782 00775 {
783 00776         <a class="code" href="xline_8h.html#a10">del_eline</a>(hostmask.c_str());
784 00777 }
785 00778 
786 <a name="l00779"></a><a class="code" href="classServer.html#a50">00779</a> <span class="keywordtype">long</span> <a class="code" href="classServer.html#a50">Server::CalcDuration</a>(std::string delta)
787 00780 {
788 00781         <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a75">duration</a>(delta.c_str());
789 00782 }
790 00783 
791 <a name="l00784"></a><a class="code" href="classServer.html#a51">00784</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a51">Server::IsValidMask</a>(std::string mask)
792 00785 {
793 00786         <span class="keyword">const</span> <span class="keywordtype">char</span>* dest = mask.c_str();
794 00787         <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'!'</span>)==0)
795 00788                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
796 00789         <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'@'</span>)==0)
797 00790                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
798 00791         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; strlen(dest); i++)
799 00792                 <span class="keywordflow">if</span> (dest[i] &lt; 32)
800 00793                         <span class="keywordflow">return</span> <span class="keyword">false</span>;
801 00794         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; strlen(dest); i++)
802 00795                 <span class="keywordflow">if</span> (dest[i] &gt; 126)
803 00796                         <span class="keywordflow">return</span> <span class="keyword">false</span>;
804 00797         <span class="keywordtype">int</span> c = 0;
805 00798         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; strlen(dest); i++)
806 00799                 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'!'</span>)
807 00800                         c++;
808 00801         <span class="keywordflow">if</span> (c&gt;1)
809 00802                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
810 00803         c = 0;
811 00804         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; strlen(dest); i++)
812 00805                 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'@'</span>)
813 00806                         c++;
814 00807         <span class="keywordflow">if</span> (c&gt;1)
815 00808                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
816 00809 
817 00810         <span class="keywordflow">return</span> <span class="keyword">true</span>;
818 00811 }
819 00812 
820 <a name="l00813"></a><a class="code" href="classServer.html#a52">00813</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a52">Server::MeshSendAll</a>(std::string text)
821 00814 {
822 00815         NetSendToAll((<span class="keywordtype">char</span>*)text.c_str());
823 00816 }
824 00817 
825 <a name="l00818"></a><a class="code" href="classServer.html#a53">00818</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a53">Server::MeshSendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string text)
826 00819 {
827 00820         <span class="keywordflow">if</span> (user)
828 00821                 NetSendToCommon(user,(<span class="keywordtype">char</span>*)text.c_str());
829 00822 }
830 00823 
831 <a name="l00824"></a><a class="code" href="classServer.html#a54">00824</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a54">Server::MeshSendAllAlive</a>(std::string text)
832 00825 {
833 00826         NetSendToAllAlive((<span class="keywordtype">char</span>*)text.c_str());
834 00827 }
835 00828 
836 <a name="l00829"></a><a class="code" href="classServer.html#a55">00829</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a55">Server::MeshSendUnicast</a>(std::string destination, std::string text)
837 00830 {
838 00831         NetSendToOne((<span class="keywordtype">char</span>*)destination.c_str(),(<span class="keywordtype">char</span>*)text.c_str());
839 00832 }
840 00833 
841 <a name="l00834"></a><a class="code" href="classServer.html#a56">00834</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a56">Server::MeshSendAllExcept</a>(std::string target, std::string text)
842 00835 {
843 00836         NetSendToAllExcept(target.c_str(),(<span class="keywordtype">char</span>*)text.c_str());
844 00837 }
845 00838 
846 <a name="l00839"></a><a class="code" href="classServer.html#a57">00839</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a57">Server::MeshCheckChan</a>(<a class="code" href="classchanrec.html">chanrec</a> *c,std::string servername)
847 00840 {
848 00841         <span class="keywordflow">if</span> (c)
849 00842         {
850 00843                 <span class="keywordflow">return</span> ChanAnyOnThisServer(c,(<span class="keywordtype">char</span>*)servername.c_str());
851 00844         }
852 00845         <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
853 00846 }
854 00847 
855 <a name="l00848"></a><a class="code" href="classServer.html#a58">00848</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a58">Server::MeshCheckCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* u,std::string servername)
856 00849 {
857 00850         <span class="keywordflow">if</span> (u)
858 00851         {
859 00852                 <span class="keywordflow">return</span> CommonOnThisServer(u,(<span class="keywordtype">char</span>*)servername.c_str());
860 00853         }
861 00854         <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
862 00855 }
863 00856 
864 <a name="l00857"></a><a class="code" href="classServer.html#a59">00857</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classServer.html#a59">Server::FindModule</a>(std::string name)
865 00858 {
866 00859         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt;= <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; i++)
867 00860         {
868 00861                 <span class="keywordflow">if</span> (<a class="code" href="channels_8cpp.html#a27">module_names</a>[i] == name)
869 00862                 {
870 00863                         <span class="keywordflow">return</span> <a class="code" href="channels_8cpp.html#a2">modules</a>[i];
871 00864                 }
872 00865         }
873 00866         <span class="keywordflow">return</span> NULL;
874 00867 }
875 00868 
876 <a name="l00869"></a><a class="code" href="classConfigReader.html#a0">00869</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>()
877 00870 {
878 00871         this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
879 00872         this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
880 00873         this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this-&gt;cache,this-&gt;errorlog);
881 00874         <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>)
882 00875                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>;
883 00876 }
884 00877 
885 00878 
886 <a name="l00879"></a><a class="code" href="classConfigReader.html#a2">00879</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>()
887 00880 {
888 00881         <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a>)
889 00882                 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a>;
890 00883         <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a>)
891 00884                 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a>;
892 00885 }
893 00886 
894 00887 
895 <a name="l00888"></a><a class="code" href="classConfigReader.html#a1">00888</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename)
896 00889 {
897 00890         this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
898 00891         this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
899 00892         this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(filename.c_str(),this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a>,this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a>);
900 00893         <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>)
901 00894                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>;
902 00895 };
903 00896 
904 <a name="l00897"></a><a class="code" href="classConfigReader.html#a3">00897</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)
905 00898 {
906 00899         <span class="keywordtype">char</span> val[MAXBUF];
907 00900         <span class="keywordtype">char</span> t[MAXBUF];
908 00901         <span class="keywordtype">char</span> n[MAXBUF];
909 00902         strlcpy(t,tag.c_str(),MAXBUF);
910 00903         strlcpy(n,name.c_str(),MAXBUF);
911 00904         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
912 00905         <span class="keywordflow">if</span> (!res)
913 00906         {
914 00907                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
915 00908                 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
916 00909         }
917 00910         <span class="keywordflow">return</span> val;
918 00911 }
919 00912 
920 <a name="l00913"></a><a class="code" href="classConfigReader.html#a4">00913</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)
921 00914 {
922 00915         <span class="keywordtype">char</span> val[MAXBUF];
923 00916         <span class="keywordtype">char</span> t[MAXBUF];
924 00917         <span class="keywordtype">char</span> n[MAXBUF];
925 00918         strlcpy(t,tag.c_str(),MAXBUF);
926 00919         strlcpy(n,name.c_str(),MAXBUF);
927 00920         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
928 00921         <span class="keywordflow">if</span> (!res)
929 00922         {
930 00923                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
931 00924                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
932 00925         }
933 00926         std::string s = val;
934 00927         <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>));
935 00928 }
936 00929 
937 <a name="l00930"></a><a class="code" href="classConfigReader.html#a5">00930</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)
938 00931 {
939 00932         <span class="keywordtype">char</span> val[MAXBUF];
940 00933         <span class="keywordtype">char</span> t[MAXBUF];
941 00934         <span class="keywordtype">char</span> n[MAXBUF];
942 00935         strlcpy(t,tag.c_str(),MAXBUF);
943 00936         strlcpy(n,name.c_str(),MAXBUF);
944 00937         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
945 00938         <span class="keywordflow">if</span> (!res)
946 00939         {
947 00940                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
948 00941                 <span class="keywordflow">return</span> 0;
949 00942         }
950 00943         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; strlen(val); i++)
951 00944         {
952 00945                 <span class="keywordflow">if</span> (!isdigit(val[i]))
953 00946                 {
954 00947                         this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a27">CONF_NOT_A_NUMBER</a>;
955 00948                         <span class="keywordflow">return</span> 0;
956 00949                 }
957 00950         }
958 00951         <span class="keywordflow">if</span> ((needs_unsigned) &amp;&amp; (atoi(val)&lt;0))
959 00952         {
960 00953                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_NOT_UNSIGNED</a>;
961 00954                 <span class="keywordflow">return</span> 0;
962 00955         }
963 00956         <span class="keywordflow">return</span> atoi(val);
964 00957 }
965 00958 
966 <a name="l00959"></a><a class="code" href="classConfigReader.html#a6">00959</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>()
967 00960 {
968 00961         <span class="keywordtype">long</span> olderr = this-&gt;<a class="code" href="classConfigReader.html#p3">error</a>;
969 00962         this-&gt;error = 0;
970 00963         <span class="keywordflow">return</span> olderr;
971 00964 }
972 00965 
973 <a name="l00966"></a><a class="code" href="classConfigReader.html#a9">00966</a> <span class="keywordtype">void</span> <a class="code" href="classConfigReader.html#a9">ConfigReader::DumpErrors</a>(<span class="keywordtype">bool</span> bail, <a class="code" href="classuserrec.html">userrec</a>* user)
974 00967 {
975 00968         <span class="keywordflow">if</span> (bail)
976 00969         {
977 00970                 printf(<span class="stringliteral">"There were errors in your configuration:\n%s"</span>,<a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;str().c_str());
978 00971                 exit(0);
979 00972         }
980 00973         <span class="keywordflow">else</span>
981 00974         {
982 00975                 <span class="keywordtype">char</span> dataline[1024];
983 00976                 <span class="keywordflow">if</span> (user)
984 00977                 {
985 00978                         WriteServ(user-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"NOTICE %s :There were errors in the configuration file:"</span>,user-&gt;<a class="code" href="classuserrec.html#o0">nick</a>);
986 00979                         <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;eof())
987 00980                         {
988 00981                                 <a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;getline(dataline,1024);
989 00982                                 WriteServ(user-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"NOTICE %s :%s"</span>,user-&gt;<a class="code" href="classuserrec.html#o0">nick</a>,dataline);
990 00983                         }
991 00984                 }
992 00985                 <span class="keywordflow">else</span>
993 00986                 {
994 00987                         WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-&gt;<a class="code" href="classuserrec.html#o0">nick</a>);
995 00988                         <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;eof())
996 00989                         {
997 00990                                 <a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;getline(dataline,1024);
998 00991                                 WriteOpers(dataline);
999 00992                         }
1000 00993                 }
1001 00994                 <span class="keywordflow">return</span>;
1002 00995         }
1003 00996 }
1004 00997 
1005 00998 
1006 <a name="l00999"></a><a class="code" href="classConfigReader.html#a7">00999</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag)
1007 01000 {
1008 01001         <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str());
1009 01002 }
1010 01003 
1011 <a name="l01004"></a><a class="code" href="classConfigReader.html#a10">01004</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a10">ConfigReader::EnumerateValues</a>(std::string tag, <span class="keywordtype">int</span> index)
1012 01005 {
1013 01006         <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index);
1014 01007 }
1015 01008 
1016 <a name="l01009"></a><a class="code" href="classConfigReader.html#a8">01009</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>()
1017 01010 {
1018 01011         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>;
1019 01012 }
1020 01013 
1021 01014 
1022 <a name="l01015"></a><a class="code" href="classFileReader.html#a1">01015</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename)
1023 01016 {
1024 01017         <a class="code" href="modules_8h.html#a31">file_cache</a> c;
1025 01018         readfile(c,filename.c_str());
1026 01019         this-&gt;<a class="code" href="classFileReader.html#r0">fc</a> = c;
1027 01020 }
1028 01021 
1029 <a name="l01022"></a><a class="code" href="classFileReader.html#a0">01022</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>()
1030 01023 {
1031 01024 }
1032 01025 
1033 <a name="l01026"></a><a class="code" href="classFileReader.html#a3">01026</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename)
1034 01027 {
1035 01028         <a class="code" href="modules_8h.html#a31">file_cache</a> c;
1036 01029         readfile(c,filename.c_str());
1037 01030         this-&gt;<a class="code" href="classFileReader.html#r0">fc</a> = c;
1038 01031 }
1039 01032 
1040 01033 
1041 <a name="l01034"></a><a class="code" href="classFileReader.html#a2">01034</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>()
1042 01035 {
1043 01036 }
1044 01037 
1045 <a name="l01038"></a><a class="code" href="classFileReader.html#a4">01038</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>()
1046 01039 {
1047 01040         <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0)
1048 01041         {
1049 01042                 <span class="keywordflow">return</span>(<span class="keyword">false</span>);
1050 01043         }
1051 01044         <span class="keywordflow">else</span>
1052 01045         {
1053 01046                 <span class="keywordflow">return</span>(<span class="keyword">true</span>);
1054 01047         }
1055 01048 }
1056 01049 
1057 <a name="l01050"></a><a class="code" href="classFileReader.html#a5">01050</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x)
1058 01051 {
1059 01052         <span class="keywordflow">if</span> ((x&lt;0) || (x&gt;<a class="code" href="classFileReader.html#r0">fc</a>.size()))
1060 01053                 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
1061 01054         <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x];
1062 01055 }
1063 01056 
1064 <a name="l01057"></a><a class="code" href="classFileReader.html#a6">01057</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>()
1065 01058 {
1066 01059         <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size();
1067 01060 }
1068 01061 
1069 01062 
1070 01063 std::vector&lt;Module*&gt; <a class="code" href="modules_8cpp.html#a60">modules</a>(255);
1071 01064 std::vector&lt;ircd_module*&gt; <a class="code" href="modules_8cpp.html#a61">factory</a>(255);
1072 01065 
1073 <a name="l01066"></a><a class="code" href="modules_8cpp.html#a1">01066</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>  = -1;
1074 01067 
1075 01068 
1076 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu May 12 02:25:12 2005 for InspIRCd by
1077 <a href="http://www.doxygen.org/index.html">
1078 <img src="doxygen.png" alt="doxygen" align="middle" border=0 > 
1079 </a>1.3.3 </small></address>
1080 </body>
1081 </html>