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