]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - docs/module-doc/modules_8cpp-source.html
Added Server::AddGLine
[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 00110 
118 <a name="l00111"></a><a class="code" href="namespacenspace.html">00111</a> <span class="keyword">namespace </span><a class="code" href="channels_8cpp.html#a0">nspace</a>
119 00112 {
120 00113 <span class="preprocessor">#ifdef GCC34</span>
121 00114 <span class="preprocessor"></span>        <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>hash&lt;in_addr&gt;
122 00115 #else
123 <a name="l00116"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html">00116</a>         template&lt;&gt; struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash&lt;in_addr&gt;
124 00117 #endif
125 00118         {
126 <a name="l00119"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html#a0">00119</a>                 size_t operator()(<span class="keyword">const</span> <span class="keyword">struct</span> in_addr &amp;a)<span class="keyword"> const</span>
127 00120 <span class="keyword">                </span>{
128 00121                         size_t q;
129 00122                         memcpy(&amp;q,&amp;a,<span class="keyword">sizeof</span>(size_t));
130 00123                         <span class="keywordflow">return</span> q;
131 00124                 }
132 00125         };
133 00126 <span class="preprocessor">#ifdef GCC34</span>
134 00127 <span class="preprocessor"></span>        <span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span>hash&lt;string&gt;
135 00128 #else
136 <a name="l00129"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html">00129</a>         template&lt;&gt; struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash&lt;string&gt;
137 00130 #endif
138 00131         {
139 <a name="l00132"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html#a0">00132</a>                 size_t operator()(<span class="keyword">const</span> string &amp;s)<span class="keyword"> const</span>
140 00133 <span class="keyword">                </span>{
141 00134                         <span class="keywordtype">char</span> a[MAXBUF];
142 00135                         <span class="keyword">static</span> <span class="keyword">struct </span>hash&lt;const char *&gt; strhash;
143 00136                         strlcpy(a,s.c_str(),MAXBUF);
144 00137                         strlower(a);
145 00138                         <span class="keywordflow">return</span> strhash(a);
146 00139                 }
147 00140         };
148 00141 }
149 00142 
150 <a name="l00143"></a><a class="code" href="structStrHashComp.html">00143</a> <span class="keyword">struct </span><a class="code" href="structStrHashComp.html">StrHashComp</a>
151 00144 {
152 00145 
153 <a name="l00146"></a><a class="code" href="structStrHashComp.html#a0">00146</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>
154 00147 <span class="keyword">        </span>{
155 00148                 <span class="keywordtype">char</span> a[MAXBUF],b[MAXBUF];
156 00149                 strlcpy(a,s1.c_str(),MAXBUF);
157 00150                 strlcpy(b,s2.c_str(),MAXBUF);
158 00151                 <span class="keywordflow">return</span> (strcasecmp(a,b) == 0);
159 00152         }
160 00153 
161 00154 };
162 00155 
163 <a name="l00156"></a><a class="code" href="structInAddr__HashComp.html">00156</a> <span class="keyword">struct </span><a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a>
164 00157 {
165 00158 
166 <a name="l00159"></a><a class="code" href="structInAddr__HashComp.html#a0">00159</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>
167 00160 <span class="keyword">        </span>{
168 00161                 size_t q;
169 00162                 size_t p;
170 00163                 
171 00164                 memcpy(&amp;q,&amp;s1,<span class="keyword">sizeof</span>(size_t));
172 00165                 memcpy(&amp;p,&amp;s2,<span class="keyword">sizeof</span>(size_t));
173 00166                 
174 00167                 <span class="keywordflow">return</span> (q == p);
175 00168         }
176 00169 
177 00170 };
178 00171 
179 00172 
180 <a name="l00173"></a><a class="code" href="modules_8cpp.html#a38">00173</a> <span class="keyword">typedef</span> nspace::hash_map&lt;std::string, userrec*, nspace::hash&lt;string&gt;, <a class="code" href="structStrHashComp.html">StrHashComp</a>&gt; <a class="code" href="modules_8cpp.html#a38">user_hash</a>;
181 <a name="l00174"></a><a class="code" href="modules_8cpp.html#a39">00174</a> <span class="keyword">typedef</span> nspace::hash_map&lt;std::string, chanrec*, nspace::hash&lt;string&gt;, <a class="code" href="structStrHashComp.html">StrHashComp</a>&gt; <a class="code" href="modules_8cpp.html#a39">chan_hash</a>;
182 <a name="l00175"></a><a class="code" href="modules_8cpp.html#a40">00175</a> <span class="keyword">typedef</span> nspace::hash_map&lt;in_addr,string*, nspace::hash&lt;in_addr&gt;, <a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a>&gt; <a class="code" href="modules_8cpp.html#a40">address_cache</a>;
183 <a name="l00176"></a><a class="code" href="modules_8cpp.html#a41">00176</a> <span class="keyword">typedef</span> std::deque&lt;command_t&gt; <a class="code" href="modules_8cpp.html#a41">command_table</a>;
184 00177 
185 00178 
186 <a name="l00179"></a><a class="code" href="modules_8cpp.html#a42">00179</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">user_hash</a> <a class="code" href="modules_8cpp.html#a42">clientlist</a>;
187 <a name="l00180"></a><a class="code" href="modules_8cpp.html#a43">00180</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">chan_hash</a> <a class="code" href="modules_8cpp.html#a43">chanlist</a>;
188 <a name="l00181"></a><a class="code" href="modules_8cpp.html#a44">00181</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">user_hash</a> <a class="code" href="modules_8cpp.html#a44">whowas</a>;
189 <a name="l00182"></a><a class="code" href="modules_8cpp.html#a45">00182</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a41">command_table</a> <a class="code" href="modules_8cpp.html#a45">cmdlist</a>;
190 <a name="l00183"></a><a class="code" href="modules_8cpp.html#a46">00183</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a46">MOTD</a>;
191 <a name="l00184"></a><a class="code" href="modules_8cpp.html#a47">00184</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">RULES</a>;
192 <a name="l00185"></a><a class="code" href="modules_8cpp.html#a48">00185</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">address_cache</a> <a class="code" href="modules_8cpp.html#a48">IP</a>;
193 00186 
194 00187 
195 00188 <span class="comment">// class type for holding an extended mode character - internal to core</span>
196 00189 
197 <a name="l00190"></a><a class="code" href="classExtMode.html">00190</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>
198 00191 {
199 00192 <span class="keyword">public</span>:
200 <a name="l00193"></a><a class="code" href="classExtMode.html#o0">00193</a>         <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#o0">modechar</a>;
201 <a name="l00194"></a><a class="code" href="classExtMode.html#o1">00194</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o1">type</a>;
202 <a name="l00195"></a><a class="code" href="classExtMode.html#o2">00195</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o2">params_when_on</a>;
203 <a name="l00196"></a><a class="code" href="classExtMode.html#o3">00196</a>         <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o3">params_when_off</a>;
204 <a name="l00197"></a><a class="code" href="classExtMode.html#o4">00197</a>         <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#o4">needsoper</a>;
205 <a name="l00198"></a><a class="code" href="classExtMode.html#o5">00198</a>         <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>;
206 <a name="l00199"></a><a class="code" href="classExtMode.html#a0">00199</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) { };
207 00200 };                                     
208 00201 
209 <a name="l00202"></a><a class="code" href="modules_8cpp.html#a49">00202</a> <span class="keyword">typedef</span> std::vector&lt;ExtMode&gt; <a class="code" href="modules_8cpp.html#a49">ExtModeList</a>;
210 <a name="l00203"></a><a class="code" href="modules_8cpp.html#a50">00203</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a>;
211 00204 
212 00205 
213 <a name="l00206"></a><a class="code" href="modules_8cpp.html#a51">00206</a> <a class="code" href="modules_8cpp.html#a49">ExtModeList</a> <a class="code" href="modules_8cpp.html#a51">EMode</a>;
214 00207 
215 00208 <span class="comment">// returns true if an extended mode character is in use</span>
216 <a name="l00209"></a><a class="code" href="modules_8cpp.html#a52">00209</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a52">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
217 00210 {
218 00211         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#a51">EMode</a>.size());
219 00212         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
220 00213         {
221 00214                 <span class="keywordflow">if</span> ((i-&gt;modechar == modechar) &amp;&amp; (i-&gt;type == type))
222 00215                 {
223 00216                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
224 00217                 }
225 00218         }
226 00219         <span class="keywordflow">return</span> <span class="keyword">false</span>;
227 00220 }
228 00221 
229 <a name="l00222"></a><a class="code" href="modules_8cpp.html#a53">00222</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
230 00223 {
231 00224         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#a51">EMode</a>.size());
232 00225         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
233 00226         {
234 00227                 <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>))
235 00228                 {
236 00229                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
237 00230                 }
238 00231         }
239 00232         <span class="keywordflow">return</span> <span class="keyword">false</span>;
240 00233 }
241 00234 
242 <a name="l00235"></a><a class="code" href="modules_8cpp.html#a54">00235</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a54">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
243 00236 {
244 00237         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#a51">EMode</a>.size());
245 00238         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
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#a55">00249</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
257 00250 {
258 00251         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
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#a56">00262</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a56">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
270 00263 {
271 00264         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
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#a57">00275</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_on, <span class="keywordtype">int</span> params_off)
283 00276 {
284 00277         <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a52">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#a51">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#a58">00285</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a58">ModeMakeList</a>(<span class="keywordtype">char</span> modechar)
293 00286 {
294 00287         <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i &lt; <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++)
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="classModule.html#a0">00306</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { }
314 <a name="l00307"></a><a class="code" href="classModule.html#a1">00307</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { }
315 <a name="l00308"></a><a class="code" href="classModule.html#a3">00308</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) { }
316 <a name="l00309"></a><a class="code" href="classModule.html#a4">00309</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) { }
317 <a name="l00310"></a><a class="code" href="classModule.html#a5">00310</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) { }
318 <a name="l00311"></a><a class="code" href="classModule.html#a6">00311</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) { }
319 <a name="l00312"></a><a class="code" href="classModule.html#a7">00312</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnPacketTransmit</a>(std::string &amp;data, std::string serv) { }
320 <a name="l00313"></a><a class="code" href="classModule.html#a8">00313</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketReceive</a>(std::string &amp;data, std::string serv) { }
321 <a name="l00314"></a><a class="code" href="classModule.html#a9">00314</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnRehash</a>() { }
322 <a name="l00315"></a><a class="code" href="classModule.html#a10">00315</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) { }
323 <a name="l00316"></a><a class="code" href="classModule.html#a12">00316</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; }
324 <a name="l00317"></a><a class="code" href="classModule.html#a11">00317</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>; }
325 <a name="l00318"></a><a class="code" href="classModule.html#a2">00318</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>); }
326 <a name="l00319"></a><a class="code" href="classModule.html#a13">00319</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) { };
327 <a name="l00320"></a><a class="code" href="classModule.html#a14">00320</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) { };
328 <a name="l00321"></a><a class="code" href="classModule.html#a15">00321</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) { };
329 <a name="l00322"></a><a class="code" href="classModule.html#a16">00322</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; };
330 <a name="l00323"></a><a class="code" href="classModule.html#a17">00323</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; };
331 <a name="l00324"></a><a class="code" href="classModule.html#a18">00324</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; };
332 <a name="l00325"></a><a class="code" href="classModule.html#a19">00325</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; };
333 <a name="l00326"></a><a class="code" href="classModule.html#a20">00326</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) { };
334 <a name="l00327"></a><a class="code" href="classModule.html#a21">00327</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>; };
335 <a name="l00328"></a><a class="code" href="classModule.html#a22">00328</a> <a class="code" href="modules_8h.html#a32">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#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; }
336 <a name="l00329"></a><a class="code" href="classModule.html#a23">00329</a> <a class="code" href="modules_8h.html#a32">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#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; }
337 <a name="l00330"></a><a class="code" href="classModule.html#a24">00330</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a24">Module::On005Numeric</a>(std::string &amp;output) { };
338 <a name="l00331"></a><a class="code" href="classModule.html#a25">00331</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; };
339 <a name="l00332"></a><a class="code" href="classModule.html#a26">00332</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) { };
340 <a name="l00333"></a><a class="code" href="classModule.html#a27">00333</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a27">Module::OnBackgroundTimer</a>(time_t curtime) { };
341 00334 
342 00335 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span>
343 00336 <span class="comment">// exports in the core</span>
344 00337 <span class="comment">//</span>
345 00338 
346 <a name="l00339"></a><a class="code" href="classServer.html#a0">00339</a> <a class="code" href="classServer.html#a0">Server::Server</a>()
347 00340 {
348 00341 }
349 00342 
350 <a name="l00343"></a><a class="code" href="classServer.html#a1">00343</a> <a class="code" href="classServer.html#a1">Server::~Server</a>()
351 00344 {
352 00345 }
353 00346 
354 <a name="l00347"></a><a class="code" href="classServer.html#a2">00347</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s)
355 00348 {
356 00349         WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str());
357 00350 }
358 00351 
359 <a name="l00352"></a><a class="code" href="classServer.html#a30">00352</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a30">Server::MatchText</a>(std::string sliteral, std::string spattern)
360 00353 {
361 00354         <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF];
362 00355         strlcpy(literal,sliteral.c_str(),MAXBUF);
363 00356         strlcpy(pattern,spattern.c_str(),MAXBUF);
364 00357         <span class="keywordflow">return</span> match(literal,pattern);
365 00358 }
366 00359 
367 <a name="l00360"></a><a class="code" href="classServer.html#a25">00360</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)
368 00361 {
369 00362         WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str());
370 00363 }
371 00364 
372 <a name="l00365"></a><a class="code" href="classServer.html#a26">00365</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)
373 00366 {
374 00367         <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">true</span>);
375 00368 }
376 00369 
377 <a name="l00370"></a><a class="code" href="classServer.html#a27">00370</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)
378 00371 {
379 00372         <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>);
380 00373 }
381 00374 
382 <a name="l00375"></a><a class="code" href="classServer.html#a35">00375</a> <a class="code" href="modules_8h.html#a33">chanuserlist</a> <a class="code" href="classServer.html#a35">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan)
383 00376 {
384 00377         <a class="code" href="modules_8h.html#a33">chanuserlist</a> userl;
385 00378         userl.clear();
386 00379         <span class="keywordflow">for</span> (user_hash::const_iterator i = <a class="code" href="modules_8cpp.html#a42">clientlist</a>.begin(); i != <a class="code" href="modules_8cpp.html#a42">clientlist</a>.end(); i++)
387 00380         {
388 00381                 <span class="keywordflow">if</span> (i-&gt;second)
389 00382                 {
390 00383                         <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a16">has_channel</a>(i-&gt;second,chan))
391 00384                         {
392 00385                                 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a13">isnick</a>(i-&gt;second-&gt;nick))
393 00386                                 {
394 00387                                         userl.push_back(i-&gt;second);
395 00388                                 }
396 00389                         }
397 00390                 }
398 00391         }
399 00392         <span class="keywordflow">return</span> userl;
400 00393 }
401 <a name="l00394"></a><a class="code" href="classServer.html#a28">00394</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)
402 00395 {
403 00396         force_nickchange(user,nickname.c_str());
404 00397 }
405 00398 
406 <a name="l00399"></a><a class="code" href="classServer.html#a29">00399</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)
407 00400 {
408 00401         <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());
409 00402         kill_link(user,reason.c_str());
410 00403 }
411 00404 
412 <a name="l00405"></a><a class="code" href="classServer.html#a34">00405</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a34">Server::IsUlined</a>(std::string server)
413 00406 {
414 00407         <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a74">is_uline</a>(server.c_str());
415 00408 }
416 00409 
417 <a name="l00410"></a><a class="code" href="classServer.html#a31">00410</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)
418 00411 {
419 00412         call_handler(commandname.c_str(),parameters,pcnt,user);
420 00413 }
421 00414 
422 <a name="l00415"></a><a class="code" href="classServer.html#a3">00415</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)
423 00416 {
424 00417         log(level,<span class="stringliteral">"%s"</span>,s.c_str());
425 00418 }
426 00419 
427 <a name="l00420"></a><a class="code" href="classServer.html#a23">00420</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, <span class="keywordtype">char</span>* source)
428 00421 {
429 00422         <a class="code" href="modules_8h.html#a35">createcommand</a>(cmd,f,flags,minparams,source);
430 00423 }
431 00424 
432 <a name="l00425"></a><a class="code" href="classServer.html#a24">00425</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)
433 00426 {
434 00427         <a class="code" href="modules_8h.html#a36">server_mode</a>(parameters,pcnt,user);
435 00428 }
436 00429 
437 <a name="l00430"></a><a class="code" href="classServer.html#a4">00430</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)
438 00431 {
439 00432         Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
440 00433 }
441 00434 
442 <a name="l00435"></a><a class="code" href="classServer.html#a5">00435</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)
443 00436 {
444 00437         WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
445 00438 }
446 00439 
447 <a name="l00440"></a><a class="code" href="classServer.html#a6">00440</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)
448 00441 {
449 00442         WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str());
450 00443 }
451 00444 
452 <a name="l00445"></a><a class="code" href="classServer.html#a7">00445</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)
453 00446 {
454 00447         <span class="keywordflow">if</span> (!Source)
455 00448         {
456 00449                 <span class="comment">// if source is NULL, then the message originates from the local server</span>
457 00450                 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());
458 00451         }
459 00452         <span class="keywordflow">else</span>
460 00453         {
461 00454                 <span class="comment">// otherwise it comes from the user specified</span>
462 00455                 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str());
463 00456         }
464 00457 }
465 00458 
466 <a name="l00459"></a><a class="code" href="classServer.html#a8">00459</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)
467 00460 {
468 00461         <span class="keywordflow">if</span> (IncludeSender)
469 00462         {
470 00463                 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
471 00464         }
472 00465         <span class="keywordflow">else</span>
473 00466         {
474 00467                 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
475 00468         }
476 00469 }
477 00470 
478 <a name="l00471"></a><a class="code" href="classServer.html#a9">00471</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)
479 00472 {
480 00473         <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0);
481 00474 }
482 00475 
483 <a name="l00476"></a><a class="code" href="classServer.html#a10">00476</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)
484 00477 {
485 00478         <span class="keywordflow">if</span> (IncludeSender)
486 00479         {
487 00480                 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str());
488 00481         }
489 00482         <span class="keywordflow">else</span>
490 00483         {
491 00484                 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str());
492 00485         }
493 00486 }
494 00487 
495 <a name="l00488"></a><a class="code" href="classServer.html#a11">00488</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)
496 00489 {
497 00490         WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str());
498 00491 }
499 00492 
500 <a name="l00493"></a><a class="code" href="classServer.html#a32">00493</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)
501 00494 {
502 00495         <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str());
503 00496 }
504 00497 
505 <a name="l00498"></a><a class="code" href="classServer.html#a33">00498</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)
506 00499 {
507 00500         <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str());
508 00501 }
509 00502 
510 <a name="l00503"></a><a class="code" href="classServer.html#a12">00503</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a12">Server::IsNick</a>(std::string nick)
511 00504 {
512 00505         <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0);
513 00506 }
514 00507 
515 <a name="l00508"></a><a class="code" href="classServer.html#a14">00508</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a14">Server::FindNick</a>(std::string nick)
516 00509 {
517 00510         <span class="keywordflow">return</span> Find(nick);
518 00511 }
519 00512 
520 <a name="l00513"></a><a class="code" href="classServer.html#a15">00513</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a15">Server::FindChannel</a>(std::string channel)
521 00514 {
522 00515         <span class="keywordflow">return</span> FindChan(channel.c_str());
523 00516 }
524 00517 
525 <a name="l00518"></a><a class="code" href="classServer.html#a16">00518</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)
526 00519 {
527 00520         <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan);
528 00521 }
529 00522 
530 <a name="l00523"></a><a class="code" href="classServer.html#a17">00523</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)
531 00524 {
532 00525         <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan);
533 00526 }
534 00527 
535 <a name="l00528"></a><a class="code" href="classServer.html#a18">00528</a> std::string <a class="code" href="classServer.html#a18">Server::GetServerName</a>()
536 00529 {
537 00530         <span class="keywordflow">return</span> getservername();
538 00531 }
539 00532 
540 <a name="l00533"></a><a class="code" href="classServer.html#a19">00533</a> std::string <a class="code" href="classServer.html#a19">Server::GetNetworkName</a>()
541 00534 {
542 00535         <span class="keywordflow">return</span> getnetworkname();
543 00536 }
544 00537 
545 <a name="l00538"></a><a class="code" href="classServer.html#a20">00538</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a20">Server::GetAdmin</a>()
546 00539 {
547 00540         <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick());
548 00541 }
549 00542 
550 00543 
551 00544 
552 <a name="l00545"></a><a class="code" href="classServer.html#a21">00545</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)
553 00546 {
554 00547         <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>)
555 00548         {
556 00549                 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>);
557 00550                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
558 00551         }
559 00552         <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>))
560 00553         {
561 00554                 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>);
562 00555                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
563 00556         }
564 00557         <span class="keywordflow">if</span> ((params_when_on&gt;1) || (params_when_off&gt;1))
565 00558         {
566 00559                 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>);
567 00560                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
568 00561         }
569 00562         <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off);
570 00563 }
571 00564 
572 <a name="l00565"></a><a class="code" href="classServer.html#a22">00565</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a22">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar)
573 00566 {
574 00567         <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1);
575 00568         <span class="keywordflow">if</span> (res)
576 00569                 <a class="code" href="modules_8cpp.html#a58">ModeMakeList</a>(modechar);
577 00570         <span class="keywordflow">return</span> res;
578 00571 }
579 00572 
580 <a name="l00573"></a><a class="code" href="classServer.html#a13">00573</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)
581 00574 {
582 00575         <span class="keywordflow">return</span> usercount(c);
583 00576 }
584 00577 
585 00578 
586 <a name="l00579"></a><a class="code" href="classServer.html#a36">00579</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a36">Server::UserToPseudo</a>(<a class="code" href="classuserrec.html">userrec</a>* user,std::string message)
587 00580 {
588 00581         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_fd = user-&gt;<a class="code" href="classconnection.html#o0">fd</a>;
589 00582         user-&gt;<a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>;
590 00583         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());
591 00584         close(old_fd);
592 00585         shutdown (old_fd,2);
593 00586 }
594 00587 
595 <a name="l00588"></a><a class="code" href="classServer.html#a37">00588</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a37">Server::PseudoToUser</a>(<a class="code" href="classuserrec.html">userrec</a>* alive,<a class="code" href="classuserrec.html">userrec</a>* zombie,std::string message)
596 00589 {
597 00590         zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a> = alive-&gt;<a class="code" href="classconnection.html#o0">fd</a>;
598 00591         alive-&gt;<a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>;
599 00592         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>);
600 00593         kill_link(alive,message.c_str());
601 00594         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != MAXCHANS; i++)
602 00595         {
603 00596                 <span class="keywordflow">if</span> (zombie-&gt;<a class="code" href="classuserrec.html#o5">chans</a>[i].<a class="code" href="classucrec.html#o1">channel</a> != NULL)
604 00597                 {
605 00598                         <span class="keywordflow">if</span> (zombie-&gt;<a class="code" href="classuserrec.html#o5">chans</a>[i].<a class="code" href="classucrec.html#o1">channel</a>-&gt;<a class="code" href="classchanrec.html#o0">name</a>)
606 00599                         {
607 00600                                 <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>;
608 00601                                 WriteFrom(zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a>,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>);
609 00602                                 <span class="keywordflow">if</span> (Ptr-&gt;<a class="code" href="classchanrec.html#o4">topicset</a>)
610 00603                                 {
611 00604                                         WriteServ(zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"332 %s %s :%s"</span>, zombie-&gt;<a class="code" href="classuserrec.html#o0">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o2">topic</a>);
612 00605                                         WriteServ(zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie-&gt;<a class="code" href="classuserrec.html#o0">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o5">setby</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o4">topicset</a>);
613 00606                                 }
614 00607                                 userlist(zombie,Ptr);
615 00608                                 WriteServ(zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie-&gt;<a class="code" href="classuserrec.html#o0">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>);
616 00609                                 WriteServ(zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"324 %s %s +%s"</span>,zombie-&gt;<a class="code" href="classuserrec.html#o0">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>,chanmodes(Ptr));
617 00610                                 WriteServ(zombie-&gt;<a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"329 %s %s %d"</span>, zombie-&gt;<a class="code" href="classuserrec.html#o0">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o0">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#o3">created</a>);
618 00611 
619 00612                         }
620 00613                 }
621 00614         }
622 00615 
623 00616 }
624 00617 
625 <a name="l00618"></a><a class="code" href="classServer.html#a38">00618</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a38">Server::AddGLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
626 00619 {
627 00620         <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());
628 00621 }
629 00622 
630 <a name="l00623"></a><a class="code" href="classServer.html#a39">00623</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a39">Server::AddQLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string nickname)
631 00624 {
632 00625         <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());
633 00626 }
634 00627 
635 <a name="l00628"></a><a class="code" href="classServer.html#a40">00628</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a40">Server::AddZLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string ipaddr)
636 00629 {
637 00630         <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());
638 00631 }
639 00632 
640 <a name="l00633"></a><a class="code" href="classServer.html#a41">00633</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a41">Server::AddKLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
641 00634 {
642 00635         <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());
643 00636 }
644 00637 
645 <a name="l00638"></a><a class="code" href="classServer.html#a42">00638</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a42">Server::AddELine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
646 00639 {
647 00640         <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());
648 00641 }
649 00642 
650 <a name="l00643"></a><a class="code" href="classServer.html#a43">00643</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a43">Server::DelGLine</a>(std::string hostmask)
651 00644 {
652 00645         <a class="code" href="xline_8h.html#a6">del_gline</a>(hostmask.c_str());
653 00646 }
654 00647 
655 <a name="l00648"></a><a class="code" href="classServer.html#a44">00648</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a44">Server::DelQLine</a>(std::string nickname)
656 00649 {
657 00650         <a class="code" href="xline_8h.html#a7">del_qline</a>(nickname.c_str());
658 00651 }
659 00652 
660 <a name="l00653"></a><a class="code" href="classServer.html#a45">00653</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a45">Server::DelZLine</a>(std::string ipaddr)
661 00654 {
662 00655         <a class="code" href="xline_8h.html#a8">del_zline</a>(ipaddr.c_str());
663 00656 }
664 00657 
665 <a name="l00658"></a><a class="code" href="classServer.html#a46">00658</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a46">Server::DelKLine</a>(std::string hostmask)
666 00659 {
667 00660         <a class="code" href="xline_8h.html#a9">del_kline</a>(hostmask.c_str());
668 00661 }
669 00662 
670 <a name="l00663"></a><a class="code" href="classServer.html#a47">00663</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a47">Server::DelELine</a>(std::string hostmask)
671 00664 {
672 00665         <a class="code" href="xline_8h.html#a10">del_eline</a>(hostmask.c_str());
673 00666 }
674 00667 
675 <a name="l00668"></a><a class="code" href="classServer.html#a48">00668</a> <span class="keywordtype">long</span> <a class="code" href="classServer.html#a48">Server::CalcDuration</a>(std::string delta)
676 00669 {
677 00670         <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a75">duration</a>(delta.c_str());
678 00671 }
679 00672 
680 00673 
681 <a name="l00674"></a><a class="code" href="classConfigReader.html#a0">00674</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>()
682 00675 {
683 00676         this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
684 00677         this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
685 00678         this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this-&gt;cache,this-&gt;errorlog);
686 00679         <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>)
687 00680                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>;
688 00681 }
689 00682 
690 00683 
691 <a name="l00684"></a><a class="code" href="classConfigReader.html#a2">00684</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>()
692 00685 {
693 00686         <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a>)
694 00687                 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a>;
695 00688         <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a>)
696 00689                 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a>;
697 00690 }
698 00691 
699 00692 
700 <a name="l00693"></a><a class="code" href="classConfigReader.html#a1">00693</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename)
701 00694 {
702 00695         this-&gt;<a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
703 00696         this-&gt;<a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
704 00697         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>);
705 00698         <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>)
706 00699                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>;
707 00700 };
708 00701 
709 <a name="l00702"></a><a class="code" href="classConfigReader.html#a3">00702</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)
710 00703 {
711 00704         <span class="keywordtype">char</span> val[MAXBUF];
712 00705         <span class="keywordtype">char</span> t[MAXBUF];
713 00706         <span class="keywordtype">char</span> n[MAXBUF];
714 00707         strlcpy(t,tag.c_str(),MAXBUF);
715 00708         strlcpy(n,name.c_str(),MAXBUF);
716 00709         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
717 00710         <span class="keywordflow">if</span> (!res)
718 00711         {
719 00712                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
720 00713                 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
721 00714         }
722 00715         <span class="keywordflow">return</span> std::string(val);
723 00716 }
724 00717 
725 <a name="l00718"></a><a class="code" href="classConfigReader.html#a4">00718</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)
726 00719 {
727 00720         <span class="keywordtype">char</span> val[MAXBUF];
728 00721         <span class="keywordtype">char</span> t[MAXBUF];
729 00722         <span class="keywordtype">char</span> n[MAXBUF];
730 00723         strlcpy(t,tag.c_str(),MAXBUF);
731 00724         strlcpy(n,name.c_str(),MAXBUF);
732 00725         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
733 00726         <span class="keywordflow">if</span> (!res)
734 00727         {
735 00728                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
736 00729                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
737 00730         }
738 00731         std::string s = val;
739 00732         <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>));
740 00733 }
741 00734 
742 <a name="l00735"></a><a class="code" href="classConfigReader.html#a5">00735</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)
743 00736 {
744 00737         <span class="keywordtype">char</span> val[MAXBUF];
745 00738         <span class="keywordtype">char</span> t[MAXBUF];
746 00739         <span class="keywordtype">char</span> n[MAXBUF];
747 00740         strlcpy(t,tag.c_str(),MAXBUF);
748 00741         strlcpy(n,name.c_str(),MAXBUF);
749 00742         <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
750 00743         <span class="keywordflow">if</span> (!res)
751 00744         {
752 00745                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
753 00746                 <span class="keywordflow">return</span> 0;
754 00747         }
755 00748         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; strlen(val); i++)
756 00749         {
757 00750                 <span class="keywordflow">if</span> (!isdigit(val[i]))
758 00751                 {
759 00752                         this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a27">CONF_NOT_A_NUMBER</a>;
760 00753                         <span class="keywordflow">return</span> 0;
761 00754                 }
762 00755         }
763 00756         <span class="keywordflow">if</span> ((needs_unsigned) &amp;&amp; (atoi(val)&lt;0))
764 00757         {
765 00758                 this-&gt;<a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_NOT_UNSIGNED</a>;
766 00759                 <span class="keywordflow">return</span> 0;
767 00760         }
768 00761         <span class="keywordflow">return</span> atoi(val);
769 00762 }
770 00763 
771 <a name="l00764"></a><a class="code" href="classConfigReader.html#a6">00764</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>()
772 00765 {
773 00766         <span class="keywordtype">long</span> olderr = this-&gt;<a class="code" href="classConfigReader.html#p3">error</a>;
774 00767         this-&gt;error = 0;
775 00768         <span class="keywordflow">return</span> olderr;
776 00769 }
777 00770 
778 <a name="l00771"></a><a class="code" href="classConfigReader.html#a9">00771</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)
779 00772 {
780 00773         <span class="keywordflow">if</span> (bail)
781 00774         {
782 00775                 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());
783 00776                 exit(0);
784 00777         }
785 00778         <span class="keywordflow">else</span>
786 00779         {
787 00780                 <span class="keywordtype">char</span> dataline[1024];
788 00781                 <span class="keywordflow">if</span> (user)
789 00782                 {
790 00783                         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>);
791 00784                         <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;eof())
792 00785                         {
793 00786                                 <a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;getline(dataline,1024);
794 00787                                 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);
795 00788                         }
796 00789                 }
797 00790                 <span class="keywordflow">else</span>
798 00791                 {
799 00792                         WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-&gt;<a class="code" href="classuserrec.html#o0">nick</a>);
800 00793                         <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;eof())
801 00794                         {
802 00795                                 <a class="code" href="classConfigReader.html#p1">errorlog</a>-&gt;getline(dataline,1024);
803 00796                                 WriteOpers(dataline);
804 00797                         }
805 00798                 }
806 00799                 <span class="keywordflow">return</span>;
807 00800         }
808 00801 }
809 00802 
810 00803 
811 <a name="l00804"></a><a class="code" href="classConfigReader.html#a7">00804</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag)
812 00805 {
813 00806         <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str());
814 00807 }
815 00808 
816 <a name="l00809"></a><a class="code" href="classConfigReader.html#a10">00809</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)
817 00810 {
818 00811         <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index);
819 00812 }
820 00813 
821 <a name="l00814"></a><a class="code" href="classConfigReader.html#a8">00814</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>()
822 00815 {
823 00816         <span class="keywordflow">return</span> this-&gt;<a class="code" href="classConfigReader.html#p2">readerror</a>;
824 00817 }
825 00818 
826 00819 
827 <a name="l00820"></a><a class="code" href="classFileReader.html#a1">00820</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename)
828 00821 {
829 00822         <a class="code" href="modules_8h.html#a31">file_cache</a> c;
830 00823         readfile(c,filename.c_str());
831 00824         this-&gt;<a class="code" href="classFileReader.html#r0">fc</a> = c;
832 00825 }
833 00826 
834 <a name="l00827"></a><a class="code" href="classFileReader.html#a0">00827</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>()
835 00828 {
836 00829 }
837 00830 
838 <a name="l00831"></a><a class="code" href="classFileReader.html#a3">00831</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename)
839 00832 {
840 00833         <a class="code" href="modules_8h.html#a31">file_cache</a> c;
841 00834         readfile(c,filename.c_str());
842 00835         this-&gt;<a class="code" href="classFileReader.html#r0">fc</a> = c;
843 00836 }
844 00837 
845 00838 
846 <a name="l00839"></a><a class="code" href="classFileReader.html#a2">00839</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>()
847 00840 {
848 00841 }
849 00842 
850 <a name="l00843"></a><a class="code" href="classFileReader.html#a4">00843</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>()
851 00844 {
852 00845         <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0)
853 00846         {
854 00847                 <span class="keywordflow">return</span>(<span class="keyword">false</span>);
855 00848         }
856 00849         <span class="keywordflow">else</span>
857 00850         {
858 00851                 <span class="keywordflow">return</span>(<span class="keyword">true</span>);
859 00852         }
860 00853 }
861 00854 
862 <a name="l00855"></a><a class="code" href="classFileReader.html#a5">00855</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x)
863 00856 {
864 00857         <span class="keywordflow">if</span> ((x&lt;0) || (x&gt;<a class="code" href="classFileReader.html#r0">fc</a>.size()))
865 00858                 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
866 00859         <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x];
867 00860 }
868 00861 
869 <a name="l00862"></a><a class="code" href="classFileReader.html#a6">00862</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>()
870 00863 {
871 00864         <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size();
872 00865 }
873 00866 
874 00867 
875 00868 std::vector&lt;Module*&gt; <a class="code" href="modules_8cpp.html#a59">modules</a>(255);
876 00869 std::vector&lt;ircd_module*&gt; <a class="code" href="modules_8cpp.html#a60">factory</a>(255);
877 00870 
878 <a name="l00871"></a><a class="code" href="modules_8cpp.html#a1">00871</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>  = -1;
879 00872 
880 00873 
881 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed Apr 13 12:32:16 2005 for InspIRCd by
882 <a href="http://www.doxygen.org/index.html">
883 <img src="doxygen.png" alt="doxygen" align="middle" border=0 > 
884 </a>1.3.3 </small></address>
885 </body>
886 </html>