]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - docs/module-doc/modules_8cpp-source.html
8b4297c73ef8bff481f33a6d30988f2a4afe9bd3
[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> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>;
76 <a name="l00069"></a><a class="code" href="modules_8cpp.html#a5">00069</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF];
77 <a name="l00070"></a><a class="code" href="modules_8cpp.html#a6">00070</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF];
78 <a name="l00071"></a><a class="code" href="modules_8cpp.html#a7">00071</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF];
79 <a name="l00072"></a><a class="code" href="modules_8cpp.html#a8">00072</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF];
80 <a name="l00073"></a><a class="code" href="modules_8cpp.html#a9">00073</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF];
81 <a name="l00074"></a><a class="code" href="modules_8cpp.html#a10">00074</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF];
82 <a name="l00075"></a><a class="code" href="modules_8cpp.html#a11">00075</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF];
83 <a name="l00076"></a><a class="code" href="modules_8cpp.html#a12">00076</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF];
84 <a name="l00077"></a><a class="code" href="modules_8cpp.html#a13">00077</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF];
85 <a name="l00078"></a><a class="code" href="modules_8cpp.html#a14">00078</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF];
86 <a name="l00079"></a><a class="code" href="modules_8cpp.html#a15">00079</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF];
87 <a name="l00080"></a><a class="code" href="modules_8cpp.html#a16">00080</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF];
88 <a name="l00081"></a><a class="code" href="modules_8cpp.html#a17">00081</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF];
89 00082 
90 <a name="l00083"></a><a class="code" href="modules_8cpp.html#a18">00083</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>;
91 <a name="l00084"></a><a class="code" href="modules_8cpp.html#a19">00084</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>;
92 <a name="l00085"></a><a class="code" href="modules_8cpp.html#a20">00085</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>;
93 <a name="l00086"></a><a class="code" href="modules_8cpp.html#a21">00086</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>;
94 <a name="l00087"></a><a class="code" href="modules_8cpp.html#a22">00087</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>;
95 <a name="l00088"></a><a class="code" href="modules_8cpp.html#a23">00088</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>;
96 <a name="l00089"></a><a class="code" href="modules_8cpp.html#a24">00089</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>;
97 <a name="l00090"></a><a class="code" href="modules_8cpp.html#a25">00090</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>;
98 00091 
99 <a name="l00092"></a><a class="code" href="modules_8cpp.html#a26">00092</a> <span class="keyword">extern</span> std::vector&lt;int&gt; <a class="code" href="channels_8cpp.html#a26">fd_reap</a>;
100 <a name="l00093"></a><a class="code" href="modules_8cpp.html#a27">00093</a> <span class="keyword">extern</span> std::vector&lt;std::string&gt; <a class="code" href="channels_8cpp.html#a27">module_names</a>;
101 00094 
102 <a name="l00095"></a><a class="code" href="modules_8cpp.html#a28">00095</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a28">boundPortCount</a>;
103 <a name="l00096"></a><a class="code" href="modules_8cpp.html#a29">00096</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">portCount</a>;
104 <a name="l00097"></a><a class="code" href="modules_8cpp.html#a30">00097</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">UDPportCount</a>;
105 <a name="l00098"></a><a class="code" href="modules_8cpp.html#a31">00098</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">ports</a>[MAXSOCKS];
106 <a name="l00099"></a><a class="code" href="modules_8cpp.html#a32">00099</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a32">defaultRoute</a>;
107 00100 
108 <a name="l00101"></a><a class="code" href="modules_8cpp.html#a33">00101</a> <span class="keyword">extern</span> std::vector&lt;long&gt; <a class="code" href="channels_8cpp.html#a33">auth_cookies</a>;
109 <a name="l00102"></a><a class="code" href="modules_8cpp.html#a34">00102</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a34">config_f</a>;
110 00103 
111 <a name="l00104"></a><a class="code" href="modules_8cpp.html#a35">00104</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];
112 00105 
113 <a name="l00106"></a><a class="code" href="modules_8cpp.html#a36">00106</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a36">log_file</a>;
114 00107 
115 00108 
116 <a name="l00109"></a><a class="code" href="namespacenspace.html">00109</a> <span class="keyword">namespace </span><a class="code" href="channels_8cpp.html#a0">nspace</a>
117 00110 {
118 00111 <span class="preprocessor">#ifdef GCC34</span>
119 00112 <span class="preprocessor"></span>        <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>hash&lt;in_addr&gt;
120 00113 #else
121 <a name="l00114"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html">00114</a>         template&lt;&gt; struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash&lt;in_addr&gt;
122 00115 #endif
123 00116         {
124 <a name="l00117"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html#a0">00117</a>                 size_t operator()(<span class="keyword">const</span> <span class="keyword">struct</span> in_addr &amp;a)<span class="keyword"> const</span>
125 00118 <span class="keyword">                </span>{
126 00119                         size_t q;
127 00120                         memcpy(&amp;q,&amp;a,<span class="keyword">sizeof</span>(size_t));
128 00121                         <span class="keywordflow">return</span> q;
129 00122                 }
130 00123         };
131 00124 <span class="preprocessor">#ifdef GCC34</span>
132 00125 <span class="preprocessor"></span>        <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>hash&lt;string&gt;
133 00126 #else
134 <a name="l00127"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html">00127</a>         template&lt;&gt; struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash&lt;string&gt;
135 00128 #endif
136 00129         {
137 <a name="l00130"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html#a0">00130</a>                 size_t operator()(<span class="keyword">const</span> string &amp;s)<span class="keyword"> const</span>
138 00131 <span class="keyword">                </span>{
139 00132                         <span class="keywordtype">char</span> a[MAXBUF];
140 00133                         <span class="keyword">static</span> <span class="keyword">struct </span>hash&lt;const char *&gt; strhash;
141 00134                         strlcpy(a,s.c_str(),MAXBUF);
142 00135                         strlower(a);
143 00136                         <span class="keywordflow">return</span> strhash(a);
144 00137                 }
145 00138         };
146 00139 }
147 00140 
148 <a name="l00141"></a><a class="code" href="structStrHashComp.html">00141</a> <span class="keyword">struct </span><a class="code" href="structStrHashComp.html">StrHashComp</a>
149 00142 {
150 00143 
151 <a name="l00144"></a><a class="code" href="structStrHashComp.html#a0">00144</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>
152 00145 <span class="keyword">        </span>{
153 00146                 <span class="keywordtype">char</span> a[MAXBUF],b[MAXBUF];
154 00147                 strlcpy(a,s1.c_str(),MAXBUF);
155 00148                 strlcpy(b,s2.c_str(),MAXBUF);
156 00149                 <span class="keywordflow">return</span> (strcasecmp(a,b) == 0);
157 00150         }
158 00151 
159 00152 };
160 00153 
161 <a name="l00154"></a><a class="code" href="structInAddr__HashComp.html">00154</a> <span class="keyword">struct </span><a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a>
162 00155 {
163 00156 
164 <a name="l00157"></a><a class="code" href="structInAddr__HashComp.html#a0">00157</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>
165 00158 <span class="keyword">        </span>{
166 00159                 size_t q;
167 00160                 size_t p;
168 00161                 
169 00162                 memcpy(&amp;q,&amp;s1,<span class="keyword">sizeof</span>(size_t));
170 00163                 memcpy(&amp;p,&amp;s2,<span class="keyword">sizeof</span>(size_t));
171 00164                 
172 00165                 <span class="keywordflow">return</span> (q == p);
173 00166         }
174 00167 
175 00168 };
176 00169 
177 00170 
178 <a name="l00171"></a><a class="code" href="modules_8cpp.html#a37">00171</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#a37">user_hash</a>;
179 <a name="l00172"></a><a class="code" href="modules_8cpp.html#a38">00172</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#a38">chan_hash</a>;
180 <a name="l00173"></a><a class="code" href="modules_8cpp.html#a39">00173</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#a39">address_cache</a>;
181 <a name="l00174"></a><a class="code" href="modules_8cpp.html#a40">00174</a> <span class="keyword">typedef</span> std::deque&lt;command_t&gt; <a class="code" href="modules_8cpp.html#a40">command_table</a>;
182 00175 
183 00176 
184 <a name="l00177"></a><a class="code" href="modules_8cpp.html#a41">00177</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a37">user_hash</a> <a class="code" href="modules_8cpp.html#a41">clientlist</a>;
185 <a name="l00178"></a><a class="code" href="modules_8cpp.html#a42">00178</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">chan_hash</a> <a class="code" href="modules_8cpp.html#a42">chanlist</a>;
186 <a name="l00179"></a><a class="code" href="modules_8cpp.html#a43">00179</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a37">user_hash</a> <a class="code" href="modules_8cpp.html#a43">whowas</a>;
187 <a name="l00180"></a><a class="code" href="modules_8cpp.html#a44">00180</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">command_table</a> <a class="code" href="modules_8cpp.html#a44">cmdlist</a>;
188 <a name="l00181"></a><a class="code" href="modules_8cpp.html#a45">00181</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a26">file_cache</a> <a class="code" href="modules_8cpp.html#a45">MOTD</a>;
189 <a name="l00182"></a><a class="code" href="modules_8cpp.html#a46">00182</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a26">file_cache</a> <a class="code" href="modules_8cpp.html#a46">RULES</a>;
190 <a name="l00183"></a><a class="code" href="modules_8cpp.html#a47">00183</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">address_cache</a> <a class="code" href="modules_8cpp.html#a47">IP</a>;
191 00184 
192 00185 
193 00186 <span class="comment">// class type for holding an extended mode character - internal to core</span>
194 00187 
195 <a name="l00188"></a><a class="code" href="classExtMode.html">00188</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>
196 00189 {
197 00190 <span class="keyword">public</span>:
198 <a name="l00191"></a><a class="code" href="classExtMode.html#o0">00191</a>         <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#o0">modechar</a>;
199 <a name="l00192"></a><a class="code" href="classExtMode.html#o1">00192</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o1">type</a>;
200 <a name="l00193"></a><a class="code" href="classExtMode.html#o2">00193</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o2">params_when_on</a>;
201 <a name="l00194"></a><a class="code" href="classExtMode.html#o3">00194</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o3">params_when_off</a>;
202 <a name="l00195"></a><a class="code" href="classExtMode.html#o4">00195</a>         <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#o4">needsoper</a>;
203 <a name="l00196"></a><a class="code" href="classExtMode.html#o5">00196</a>         <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>;
204 <a name="l00197"></a><a class="code" href="classExtMode.html#a0">00197</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) { };
205 00198 };                                     
206 00199 
207 <a name="l00200"></a><a class="code" href="modules_8cpp.html#a48">00200</a> <span class="keyword">typedef</span> std::vector&lt;ExtMode&gt; <a class="code" href="modules_8cpp.html#a48">ExtModeList</a>;
208 <a name="l00201"></a><a class="code" href="modules_8cpp.html#a49">00201</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a>;
209 00202 
210 00203 
211 <a name="l00204"></a><a class="code" href="modules_8cpp.html#a50">00204</a> <a class="code" href="modules_8cpp.html#a48">ExtModeList</a> <a class="code" href="modules_8cpp.html#a50">EMode</a>;
212 00205 
213 00206 <span class="comment">// returns true if an extended mode character is in use</span>
214 <a name="l00207"></a><a class="code" href="modules_8cpp.html#a51">00207</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a51">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
215 00208 {
216 00209         log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size());
217 00210         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++)
218 00211         {
219 00212                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
220 00213                 {
221 00214                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
222 00215                 }
223 00216         }
224 00217         <span class="keywordflow">return</span> <span class="keyword">false</span>;
225 00218 }
226 00219 
227 <a name="l00220"></a><a class="code" href="modules_8cpp.html#a52">00220</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a52">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
228 00221 {
229 00222         log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size());
230 00223         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++)
231 00224         {
232 00225                 <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>))
233 00226                 {
234 00227                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
235 00228                 }
236 00229         }
237 00230         <span class="keywordflow">return</span> <span class="keyword">false</span>;
238 00231 }
239 00232 
240 <a name="l00233"></a><a class="code" href="modules_8cpp.html#a53">00233</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
241 00234 {
242 00235         log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size());
243 00236         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++)
244 00237         {
245 00238                 <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>))
246 00239                 {
247 00240                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
248 00241                 }
249 00242         }
250 00243         <span class="keywordflow">return</span> <span class="keyword">false</span>;
251 00244 }
252 00245 
253 00246 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span>
254 <a name="l00247"></a><a class="code" href="modules_8cpp.html#a54">00247</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a54">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
255 00248 {
256 00249         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++)
257 00250         {
258 00251                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
259 00252                 {
260 00253                         <span class="keywordflow">return</span> i-&gt;params_when_on;
261 00254                 }
262 00255         }
263 00256         <span class="keywordflow">return</span> 0;
264 00257 }
265 00258 
266 00259 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span>
267 <a name="l00260"></a><a class="code" href="modules_8cpp.html#a55">00260</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
268 00261 {
269 00262         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++)
270 00263         {
271 00264                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
272 00265                 {
273 00266                         <span class="keywordflow">return</span> i-&gt;params_when_off;
274 00267                 }
275 00268         }
276 00269         <span class="keywordflow">return</span> 0;
277 00270 }
278 00271 
279 00272 <span class="comment">// returns true if an extended mode character is in use</span>
280 <a name="l00273"></a><a class="code" href="modules_8cpp.html#a56">00273</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a56">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)
281 00274 {
282 00275         <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a51">ModeDefined</a>(modechar,type)) {
283 00276                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
284 00277         }
285 00278         <a class="code" href="modules_8cpp.html#a50">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off));
286 00279         <span class="keywordflow">return</span> <span class="keyword">true</span>;
287 00280 }
288 00281 
289 00282 <span class="comment">// turns a mode into a listmode</span>
290 <a name="l00283"></a><a class="code" href="modules_8cpp.html#a57">00283</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a57">ModeMakeList</a>(<span class="keywordtype">char</span> modechar)
291 00284 {
292 00285         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++)
293 00286         {
294 00287                 <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>))
295 00288                 {
296 00289                         i-&gt;list = <span class="keyword">true</span>;
297 00290                         <span class="keywordflow">return</span>;
298 00291                 }
299 00292         }
300 00293         <span class="keywordflow">return</span>;
301 00294 }
302 00295 
303 00296 <span class="comment">// version is a simple class for holding a modules version number</span>
304 00297 
305 <a name="l00298"></a><a class="code" href="classVersion.html#a0">00298</a> <a class="code" href="classVersion.html#a0">Version::Version</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> revision, <span class="keywordtype">int</span> build) : Major(major), Minor(minor), Revision(revision), Build(build) { };
306 00299 
307 00300 <span class="comment">// admin is a simple class for holding a server's administrative info</span>
308 00301 
309 <a name="l00302"></a><a class="code" href="classAdmin.html#a0">00302</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) { };
310 00303 
311 <a name="l00304"></a><a class="code" href="classModule.html#a0">00304</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { }
312 <a name="l00305"></a><a class="code" href="classModule.html#a1">00305</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { }
313 <a name="l00306"></a><a class="code" href="classModule.html#a3">00306</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) { }
314 <a name="l00307"></a><a class="code" href="classModule.html#a4">00307</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) { }
315 <a name="l00308"></a><a class="code" href="classModule.html#a5">00308</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
316 <a name="l00309"></a><a class="code" href="classModule.html#a6">00309</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
317 <a name="l00310"></a><a class="code" href="classModule.html#a7">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnPacketTransmit</a>(<span class="keywordtype">char</span> *p) { }
318 <a name="l00311"></a><a class="code" href="classModule.html#a8">00311</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketReceive</a>(<span class="keywordtype">char</span> *p) { }
319 <a name="l00312"></a><a class="code" href="classModule.html#a9">00312</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnRehash</a>() { }
320 <a name="l00313"></a><a class="code" href="classModule.html#a10">00313</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnServerRaw</a>(std::string &amp;raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { }
321 <a name="l00314"></a><a class="code" href="classModule.html#a12">00314</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; }
322 <a name="l00315"></a><a class="code" href="classModule.html#a11">00315</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a11">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &amp;params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
323 <a name="l00316"></a><a class="code" href="classModule.html#a2">00316</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); }
324 <a name="l00317"></a><a class="code" href="classModule.html#a13">00317</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a13">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
325 <a name="l00318"></a><a class="code" href="classModule.html#a14">00318</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a14">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
326 <a name="l00319"></a><a class="code" href="classModule.html#a15">00319</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { };
327 <a name="l00320"></a><a class="code" href="classModule.html#a16">00320</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a16">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; };
328 <a name="l00321"></a><a class="code" href="classModule.html#a17">00321</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a17">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; };
329 <a name="l00322"></a><a class="code" href="classModule.html#a18">00322</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a18">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; };
330 <a name="l00323"></a><a class="code" href="classModule.html#a19">00323</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; };
331 <a name="l00324"></a><a class="code" href="classModule.html#a20">00324</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a20">Module::OnUserPostNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string oldnick) { };
332 <a name="l00325"></a><a class="code" href="classModule.html#a21">00325</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a21">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>; };
333 <a name="l00326"></a><a class="code" href="classModule.html#a22">00326</a> <a class="code" href="modules_8h.html#a27">string_list</a> <a class="code" href="classModule.html#a22">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a27">string_list</a> empty; <span class="keywordflow">return</span> empty; }
334 <a name="l00327"></a><a class="code" href="classModule.html#a23">00327</a> <a class="code" href="modules_8h.html#a27">string_list</a> <a class="code" href="classModule.html#a23">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a27">string_list</a> empty; <span class="keywordflow">return</span> empty; }
335 <a name="l00328"></a><a class="code" href="classModule.html#a24">00328</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a24">Module::On005Numeric</a>(std::string &amp;output) { };
336 <a name="l00329"></a><a class="code" href="classModule.html#a25">00329</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a25">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; };
337 <a name="l00330"></a><a class="code" href="classModule.html#a26">00330</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a26">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,std::string name) { };
338 00331 
339 00332 
340 00333 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span>
341 00334 <span class="comment">// exports in the core</span>
342 00335 <span class="comment">//</span>
343 00336 
344 <a name="l00337"></a><a class="code" href="classServer.html#a0">00337</a> <a class="code" href="classServer.html#a0">Server::Server</a>()
345 00338 {
346 00339 }
347 00340 
348 <a name="l00341"></a><a class="code" href="classServer.html#a1">00341</a> <a class="code" href="classServer.html#a1">Server::~Server</a>()
349 00342 {
350 00343 }
351 00344 
352 <a name="l00345"></a><a class="code" href="classServer.html#a2">00345</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s)
353 00346 {
354 00347         WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str());
355 00348 }
356 00349 
357 <a name="l00350"></a><a class="code" href="classServer.html#a30">00350</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a30">Server::MatchText</a>(std::string sliteral, std::string spattern)
358 00351 {
359 00352         <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF];
360 00353         strlcpy(literal,sliteral.c_str(),MAXBUF);
361 00354         strlcpy(pattern,spattern.c_str(),MAXBUF);
362 00355         <span class="keywordflow">return</span> match(literal,pattern);
363 00356 }
364 00357 
365 <a name="l00358"></a><a class="code" href="classServer.html#a25">00358</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a25">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text)
366 00359 {
367 00360         WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str());
368 00361 }
369 00362 
370 <a name="l00363"></a><a class="code" href="classServer.html#a26">00363</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a26">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key)
371 00364 {
372 00365         <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">true</span>);
373 00366 }
374 00367 
375 <a name="l00368"></a><a class="code" href="classServer.html#a27">00368</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a27">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason)
376 00369 {
377 00370         <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>);
378 00371 }
379 00372 
380 <a name="l00373"></a><a class="code" href="classServer.html#a35">00373</a> <a class="code" href="modules_8h.html#a28">chanuserlist</a> <a class="code" href="classServer.html#a35">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan)
381 00374 {
382 00375         <a class="code" href="modules_8h.html#a28">chanuserlist</a> userl;
383 00376         userl.clear();
384 00377         <span class="keywordflow">for</span> (user_hash::const_iterator i = <a class="code" href="modules_8cpp.html#a41">clientlist</a>.begin(); i != <a class="code" href="modules_8cpp.html#a41">clientlist</a>.end(); i++)
385 00378         {
386 00379                 <span class="keywordflow">if</span> (i-&gt;second)
387 00380                 {
388 00381                         <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a16">has_channel</a>(i-&gt;second,chan))
389 00382                         {
390 00383                                 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a13">isnick</a>(i-&gt;second-&gt;nick))
391 00384                                 {
392 00385                                         userl.push_back(i-&gt;second);
393 00386                                 }
394 00387                         }
395 00388                 }
396 00389         }
397 00390         <span class="keywordflow">return</span> userl;
398 00391 }
399 <a name="l00392"></a><a class="code" href="classServer.html#a28">00392</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a28">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname)
400 00393 {
401 00394         force_nickchange(user,nickname.c_str());
402 00395 }
403 00396 
404 <a name="l00397"></a><a class="code" href="classServer.html#a29">00397</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a29">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason)
405 00398 {
406 00399         <a class="code" href="message_8h.html#a19">send_network_quit</a>(user-&gt;<a class="code" href="classuserrec.html#o0">nick</a>,reason.c_str());
407 00400         kill_link(user,reason.c_str());
408 00401 }
409 00402 
410 <a name="l00403"></a><a class="code" href="classServer.html#a34">00403</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a34">Server::IsUlined</a>(std::string server)
411 00404 {
412 00405         <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a72">is_uline</a>(server.c_str());
413 00406 }
414 00407 
415 <a name="l00408"></a><a class="code" href="classServer.html#a31">00408</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::CallCommandHandler</a>(std::string commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user)
416 00409 {
417 00410         call_handler(commandname.c_str(),parameters,pcnt,user);
418 00411 }
419 00412 
420 <a name="l00413"></a><a class="code" href="classServer.html#a3">00413</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)
421 00414 {
422 00415         log(level,<span class="stringliteral">"%s"</span>,s.c_str());
423 00416 }
424 00417 
425 <a name="l00418"></a><a class="code" href="classServer.html#a23">00418</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a23">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams)
426 00419 {
427 00420         <a class="code" href="modules_8h.html#a30">createcommand</a>(cmd,f,flags,minparams);
428 00421 }
429 00422 
430 <a name="l00423"></a><a class="code" href="classServer.html#a24">00423</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a24">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user)
431 00424 {
432 00425         <a class="code" href="modules_8h.html#a31">server_mode</a>(parameters,pcnt,user);
433 00426 }
434 00427 
435 <a name="l00428"></a><a class="code" href="classServer.html#a4">00428</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)
436 00429 {
437 00430         Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
438 00431 }
439 00432 
440 <a name="l00433"></a><a class="code" href="classServer.html#a5">00433</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)
441 00434 {
442 00435         WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
443 00436 }
444 00437 
445 <a name="l00438"></a><a class="code" href="classServer.html#a6">00438</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s)
446 00439 {
447 00440         WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str());
448 00441 }
449 00442 
450 <a name="l00443"></a><a class="code" href="classServer.html#a7">00443</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s)
451 00444 {
452 00445         <span class="keywordflow">if</span> (!Source)
453 00446         {
454 00447                 <span class="comment">// if source is NULL, then the message originates from the local server</span>
455 00448                 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());
456 00449         }
457 00450         <span class="keywordflow">else</span>
458 00451         {
459 00452                 <span class="comment">// otherwise it comes from the user specified</span>
460 00453                 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str());
461 00454         }
462 00455 }
463 00456 
464 <a name="l00457"></a><a class="code" href="classServer.html#a8">00457</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender)
465 00458 {
466 00459         <span class="keywordflow">if</span> (IncludeSender)
467 00460         {
468 00461                 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
469 00462         }
470 00463         <span class="keywordflow">else</span>
471 00464         {
472 00465                 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
473 00466         }
474 00467 }
475 00468 
476 <a name="l00469"></a><a class="code" href="classServer.html#a9">00469</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a9">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2)
477 00470 {
478 00471         <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0);
479 00472 }
480 00473 
481 <a name="l00474"></a><a class="code" href="classServer.html#a10">00474</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a10">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender)
482 00475 {
483 00476         <span class="keywordflow">if</span> (IncludeSender)
484 00477         {
485 00478                 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str());
486 00479         }
487 00480         <span class="keywordflow">else</span>
488 00481         {
489 00482                 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str());
490 00483         }
491 00484 }
492 00485 
493 <a name="l00486"></a><a class="code" href="classServer.html#a11">00486</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text)
494 00487 {
495 00488         WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str());
496 00489 }
497 00490 
498 <a name="l00491"></a><a class="code" href="classServer.html#a32">00491</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a32">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host)
499 00492 {
500 00493         <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str());
501 00494 }
502 00495 
503 <a name="l00496"></a><a class="code" href="classServer.html#a33">00496</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a33">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos)
504 00497 {
505 00498         <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str());
506 00499 }
507 00500 
508 <a name="l00501"></a><a class="code" href="classServer.html#a12">00501</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a12">Server::IsNick</a>(std::string nick)
509 00502 {
510 00503         <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0);
511 00504 }
512 00505 
513 <a name="l00506"></a><a class="code" href="classServer.html#a14">00506</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a14">Server::FindNick</a>(std::string nick)
514 00507 {
515 00508         <span class="keywordflow">return</span> Find(nick);
516 00509 }
517 00510 
518 <a name="l00511"></a><a class="code" href="classServer.html#a15">00511</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a15">Server::FindChannel</a>(std::string channel)
519 00512 {
520 00513         <span class="keywordflow">return</span> FindChan(channel.c_str());
521 00514 }
522 00515 
523 <a name="l00516"></a><a class="code" href="classServer.html#a16">00516</a> std::string <a class="code" href="classServer.html#a16">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
524 00517 {
525 00518         <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan);
526 00519 }
527 00520 
528 <a name="l00521"></a><a class="code" href="classServer.html#a17">00521</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a17">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
529 00522 {
530 00523         <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan);
531 00524 }
532 00525 
533 <a name="l00526"></a><a class="code" href="classServer.html#a18">00526</a> std::string <a class="code" href="classServer.html#a18">Server::GetServerName</a>()
534 00527 {
535 00528         <span class="keywordflow">return</span> getservername();
536 00529 }
537 00530 
538 <a name="l00531"></a><a class="code" href="classServer.html#a19">00531</a> std::string <a class="code" href="classServer.html#a19">Server::GetNetworkName</a>()
539 00532 {
540 00533         <span class="keywordflow">return</span> getnetworkname();
541 00534 }
542 00535 
543 <a name="l00536"></a><a class="code" href="classServer.html#a20">00536</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a20">Server::GetAdmin</a>()
544 00537 {
545 00538         <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick());
546 00539 }
547 00540 
548 00541 
549 00542 
550 <a name="l00543"></a><a class="code" href="classServer.html#a21">00543</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a21">Server::AddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_when_on, <span class="keywordtype">int</span> params_when_off)
551 00544 {
552 00545         <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>)
553 00546         {
554 00547                 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>);
555 00548                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
556 00549         }
557 00550         <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>))
558 00551         {
559 00552                 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>);
560 00553                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
561 00554         }
562 00555         <span class="keywordflow">if</span> ((params_when_on&gt;1) || (params_when_off&gt;1))
563 00556         {
564 00557                 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>);
565 00558                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
566 00559         }
567 00560         <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a56">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off);
568 00561 }
569 00562 
570 <a name="l00563"></a><a class="code" href="classServer.html#a22">00563</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a22">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar)
571 00564 {
572 00565         <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a56">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1);
573 00566         <span class="keywordflow">if</span> (res)
574 00567                 <a class="code" href="modules_8cpp.html#a57">ModeMakeList</a>(modechar);
575 00568         <span class="keywordflow">return</span> res;
576 00569 }
577 00570 
578 <a name="l00571"></a><a class="code" href="classServer.html#a13">00571</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a13">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c)
579 00572 {
580 00573         <span class="keywordflow">return</span> usercount(c);
581 00574 }
582 00575 
583 00576 
584 <a name="l00577"></a><a class="code" href="classConfigReader.html#a0">00577</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>()
585 00578 {
586 00579         this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
587 00580         this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
588 00581         this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this-&gt;cache,this-&gt;errorlog);
589 00582         <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>)
590 00583                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a25">CONF_FILE_NOT_FOUND</a>;
591 00584 }
592 00585 
593 00586 
594 <a name="l00587"></a><a class="code" href="classConfigReader.html#a2">00587</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>()
595 00588 {
596 00589         <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a>)
597 00590                 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a>;
598 00591         <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a>)
599 00592                 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a>;
600 00593 }
601 00594 
602 00595 
603 <a name="l00596"></a><a class="code" href="classConfigReader.html#a1">00596</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename)
604 00597 {
605 00598         this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
606 00599         this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
607 00600         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>);
608 00601         <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>)
609 00602                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a25">CONF_FILE_NOT_FOUND</a>;
610 00603 };
611 00604 
612 <a name="l00605"></a><a class="code" href="classConfigReader.html#a3">00605</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)
613 00606 {
614 00607         <span class="keywordtype">char</span> val[MAXBUF];
615 00608         <span class="keywordtype">char</span> t[MAXBUF];
616 00609         <span class="keywordtype">char</span> n[MAXBUF];
617 00610         strlcpy(t,tag.c_str(),MAXBUF);
618 00611         strlcpy(n,name.c_str(),MAXBUF);
619 00612         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
620 00613         <span class="keywordflow">if</span> (!res)
621 00614         {
622 00615                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>;
623 00616                 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
624 00617         }
625 00618         <span class="keywordflow">return</span> std::string(val);
626 00619 }
627 00620 
628 <a name="l00621"></a><a class="code" href="classConfigReader.html#a4">00621</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)
629 00622 {
630 00623         <span class="keywordtype">char</span> val[MAXBUF];
631 00624         <span class="keywordtype">char</span> t[MAXBUF];
632 00625         <span class="keywordtype">char</span> n[MAXBUF];
633 00626         strlcpy(t,tag.c_str(),MAXBUF);
634 00627         strlcpy(n,name.c_str(),MAXBUF);
635 00628         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
636 00629         <span class="keywordflow">if</span> (!res)
637 00630         {
638 00631                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>;
639 00632                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
640 00633         }
641 00634         std::string s = val;
642 00635         <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>));
643 00636 }
644 00637 
645 <a name="l00638"></a><a class="code" href="classConfigReader.html#a5">00638</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)
646 00639 {
647 00640         <span class="keywordtype">char</span> val[MAXBUF];
648 00641         <span class="keywordtype">char</span> t[MAXBUF];
649 00642         <span class="keywordtype">char</span> n[MAXBUF];
650 00643         strlcpy(t,tag.c_str(),MAXBUF);
651 00644         strlcpy(n,name.c_str(),MAXBUF);
652 00645         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
653 00646         <span class="keywordflow">if</span> (!res)
654 00647         {
655 00648                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>;
656 00649                 <span class="keywordflow">return</span> 0;
657 00650         }
658 00651         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; strlen(val); i++)
659 00652         {
660 00653                 <span class="keywordflow">if</span> (!isdigit(val[i]))
661 00654                 {
662 00655                         this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a22">CONF_NOT_A_NUMBER</a>;
663 00656                         <span class="keywordflow">return</span> 0;
664 00657                 }
665 00658         }
666 00659         <span class="keywordflow">if</span> ((needs_unsigned) &amp;&amp; (atoi(val)&lt;0))
667 00660         {
668 00661                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a23">CONF_NOT_UNSIGNED</a>;
669 00662                 <span class="keywordflow">return</span> 0;
670 00663         }
671 00664         <span class="keywordflow">return</span> atoi(val);
672 00665 }
673 00666 
674 <a name="l00667"></a><a class="code" href="classConfigReader.html#a6">00667</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>()
675 00668 {
676 00669         <span class="keywordtype">long</span> olderr = this-&gt;<a class="code" href="classConfigReader.html#p3">error</a>;
677 00670         this-&gt;error = 0;
678 00671         <span class="keywordflow">return</span> olderr;
679 00672 }
680 00673 
681 <a name="l00674"></a><a class="code" href="classConfigReader.html#a9">00674</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)
682 00675 {
683 00676         <span class="keywordflow">if</span> (bail)
684 00677         {
685 00678                 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());
686 00679                 exit(0);
687 00680         }
688 00681         <span class="keywordflow">else</span>
689 00682         {
690 00683                 <span class="keywordtype">char</span> dataline[1024];
691 00684                 <span class="keywordflow">if</span> (user)
692 00685                 {
693 00686                         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>);
694 00687                         <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;eof())
695 00688                         {
696 00689                                 <a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;getline(dataline,1024);
697 00690                                 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);
698 00691                         }
699 00692                 }
700 00693                 <span class="keywordflow">else</span>
701 00694                 {
702 00695                         WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-&gt;<a class="code" href="classuserrec.html#o0">nick</a>);
703 00696                         <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;eof())
704 00697                         {
705 00698                                 <a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;getline(dataline,1024);
706 00699                                 WriteOpers(dataline);
707 00700                         }
708 00701                 }
709 00702                 <span class="keywordflow">return</span>;
710 00703         }
711 00704 }
712 00705 
713 00706 
714 <a name="l00707"></a><a class="code" href="classConfigReader.html#a7">00707</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag)
715 00708 {
716 00709         <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str());
717 00710 }
718 00711 
719 <a name="l00712"></a><a class="code" href="classConfigReader.html#a10">00712</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)
720 00713 {
721 00714         <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index);
722 00715 }
723 00716 
724 <a name="l00717"></a><a class="code" href="classConfigReader.html#a8">00717</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>()
725 00718 {
726 00719         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>;
727 00720 }
728 00721 
729 00722 
730 <a name="l00723"></a><a class="code" href="classFileReader.html#a1">00723</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename)
731 00724 {
732 00725         <a class="code" href="modules_8h.html#a26">file_cache</a> c;
733 00726         readfile(c,filename.c_str());
734 00727         this-&gt;<a class="code" href="classFileReader.html#r0">fc</a> = c;
735 00728 }
736 00729 
737 <a name="l00730"></a><a class="code" href="classFileReader.html#a0">00730</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>()
738 00731 {
739 00732 }
740 00733 
741 <a name="l00734"></a><a class="code" href="classFileReader.html#a3">00734</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename)
742 00735 {
743 00736         <a class="code" href="modules_8h.html#a26">file_cache</a> c;
744 00737         readfile(c,filename.c_str());
745 00738         this-&gt;<a class="code" href="classFileReader.html#r0">fc</a> = c;
746 00739 }
747 00740 
748 00741 
749 <a name="l00742"></a><a class="code" href="classFileReader.html#a2">00742</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>()
750 00743 {
751 00744 }
752 00745 
753 <a name="l00746"></a><a class="code" href="classFileReader.html#a4">00746</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>()
754 00747 {
755 00748         <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0)
756 00749         {
757 00750                 <span class="keywordflow">return</span>(<span class="keyword">false</span>);
758 00751         }
759 00752         <span class="keywordflow">else</span>
760 00753         {
761 00754                 <span class="keywordflow">return</span>(<span class="keyword">true</span>);
762 00755         }
763 00756 }
764 00757 
765 <a name="l00758"></a><a class="code" href="classFileReader.html#a5">00758</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x)
766 00759 {
767 00760         <span class="keywordflow">if</span> ((x&lt;0) || (x&gt;<a class="code" href="classFileReader.html#r0">fc</a>.size()))
768 00761                 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
769 00762         <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x];
770 00763 }
771 00764 
772 <a name="l00765"></a><a class="code" href="classFileReader.html#a6">00765</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>()
773 00766 {
774 00767         <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size();
775 00768 }
776 00769 
777 00770 
778 00771 std::vector&lt;Module*&gt; <a class="code" href="modules_8cpp.html#a58">modules</a>(255);
779 00772 std::vector&lt;ircd_module*&gt; <a class="code" href="modules_8cpp.html#a59">factory</a>(255);
780 00773 
781 <a name="l00774"></a><a class="code" href="modules_8cpp.html#a1">00774</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>  = -1;
782 00775 
783 00776 
784 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Apr 4 18:12:48 2005 for InspIRCd by
785 <a href="http://www.doxygen.org/index.html">
786 <img src="doxygen.png" alt="doxygen" align="middle" border=0 > 
787 </a>1.3.3 </small></address>
788 </body>
789 </html>