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">
6 <!-- Generated by Doxygen 1.3.3 -->
7 <div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Compound List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Compound Members</a> | <a class="qindex" href="globals.html">File 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"> * <brain@chatspike.net></span>
15 00008 <span class="comment"> * <Craig@chatspike.net></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>
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 <unistd.h></span>
29 00022 <span class="preprocessor">#include <fcntl.h></span>
30 00023 <span class="preprocessor">#include <sys/errno.h></span>
31 00024 <span class="preprocessor">#include <sys/ioctl.h></span>
32 00025 <span class="preprocessor">#include <sys/utsname.h></span>
33 00026 <span class="preprocessor">#ifdef USE_KQUEUE</span>
34 00027 <span class="preprocessor"></span><span class="preprocessor">#include <sys/types.h></span>
35 00028 <span class="preprocessor">#include <sys/event.h></span>
36 00029 <span class="preprocessor">#include <sys/time.h></span>
37 00030 <span class="preprocessor">#endif</span>
38 00031 <span class="preprocessor"></span><span class="preprocessor">#include <cstdio></span>
39 00032 <span class="preprocessor">#include <time.h></span>
40 00033 <span class="preprocessor">#include <string></span>
41 00034 <span class="preprocessor">#ifdef GCC3</span>
42 00035 <span class="preprocessor"></span><span class="preprocessor">#include <ext/hash_map></span>
43 00036 <span class="preprocessor">#else</span>
44 00037 <span class="preprocessor"></span><span class="preprocessor">#include <hash_map></span>
45 00038 <span class="preprocessor">#endif</span>
46 00039 <span class="preprocessor"></span><span class="preprocessor">#include <map></span>
47 00040 <span class="preprocessor">#include <sstream></span>
48 00041 <span class="preprocessor">#include <vector></span>
49 00042 <span class="preprocessor">#include <errno.h></span>
50 00043 <span class="preprocessor">#include <deque></span>
51 00044 <span class="preprocessor">#include <errno.h></span>
52 00045 <span class="preprocessor">#include <unistd.h></span>
53 00046 <span class="preprocessor">#include <sched.h></span>
54 00047 <span class="preprocessor">#include "<a class="code" href="connection_8h.html">connection.h</a>"</span>
55 00048 <span class="preprocessor">#include "<a class="code" href="users_8h.html">users.h</a>"</span>
56 00049 <span class="preprocessor">#include "<a class="code" href="servers_8h.html">servers.h</a>"</span>
57 00050 <span class="preprocessor">#include "<a class="code" href="ctables_8h.html">ctables.h</a>"</span>
58 00051 <span class="preprocessor">#include "globals.h"</span>
59 00052 <span class="preprocessor">#include "<a class="code" href="modules_8h.html">modules.h</a>"</span>
60 00053 <span class="preprocessor">#include "dynamic.h"</span>
61 00054 <span class="preprocessor">#include "wildcard.h"</span>
62 00055 <span class="preprocessor">#include "<a class="code" href="message_8h.html">message.h</a>"</span>
63 00056 <span class="preprocessor">#include "<a class="code" href="mode_8h.html">mode.h</a>"</span>
64 00057 <span class="preprocessor">#include "<a class="code" href="xline_8h.html">xline.h</a>"</span>
65 00058 <span class="preprocessor">#include "<a class="code" href="commands_8h.html">commands.h</a>"</span>
66 00059 <span class="preprocessor">#include "inspstring.h"</span>
68 00061 <span class="preprocessor">#ifdef GCC3</span>
69 00062 <span class="preprocessor"></span><span class="preprocessor">#define nspace __gnu_cxx</span>
70 00063 <span class="preprocessor"></span><span class="preprocessor">#else</span>
71 <a name="l00064"></a><a class="code" href="modules_8cpp.html#a0">00064</a> <span class="preprocessor"></span><span class="preprocessor">#define nspace std</span>
72 00065 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
73 00066 <span class="preprocessor"></span>
74 00067 <span class="keyword">using</span> <span class="keyword">namespace </span>std;
76 00069 <span class="preprocessor">#ifdef USE_KQUEUE</span>
77 00070 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> kq;
78 00071 <span class="preprocessor">#endif</span>
79 00072 <span class="preprocessor"></span>
80 00073 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>;
81 <a name="l00074"></a><a class="code" href="modules_8cpp.html#a2">00074</a> <span class="keyword">extern</span> std::vector<Module*> <a class="code" href="channels_8cpp.html#a2">modules</a>;
82 <a name="l00075"></a><a class="code" href="modules_8cpp.html#a3">00075</a> <span class="keyword">extern</span> std::vector<ircd_module*> <a class="code" href="channels_8cpp.html#a3">factory</a>;
84 <a name="l00077"></a><a class="code" href="modules_8cpp.html#a4">00077</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a37">TIME</a>;
86 <a name="l00079"></a><a class="code" href="modules_8cpp.html#a5">00079</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>;
87 <a name="l00080"></a><a class="code" href="modules_8cpp.html#a6">00080</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF];
88 <a name="l00081"></a><a class="code" href="modules_8cpp.html#a7">00081</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF];
89 <a name="l00082"></a><a class="code" href="modules_8cpp.html#a8">00082</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF];
90 <a name="l00083"></a><a class="code" href="modules_8cpp.html#a9">00083</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF];
91 <a name="l00084"></a><a class="code" href="modules_8cpp.html#a10">00084</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF];
92 <a name="l00085"></a><a class="code" href="modules_8cpp.html#a11">00085</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF];
93 <a name="l00086"></a><a class="code" href="modules_8cpp.html#a12">00086</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF];
94 <a name="l00087"></a><a class="code" href="modules_8cpp.html#a13">00087</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF];
95 <a name="l00088"></a><a class="code" href="modules_8cpp.html#a14">00088</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF];
96 <a name="l00089"></a><a class="code" href="modules_8cpp.html#a15">00089</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF];
97 <a name="l00090"></a><a class="code" href="modules_8cpp.html#a16">00090</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF];
98 <a name="l00091"></a><a class="code" href="modules_8cpp.html#a17">00091</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF];
99 <a name="l00092"></a><a class="code" href="modules_8cpp.html#a18">00092</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF];
101 <a name="l00094"></a><a class="code" href="modules_8cpp.html#a19">00094</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>;
102 <a name="l00095"></a><a class="code" href="modules_8cpp.html#a20">00095</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>;
103 <a name="l00096"></a><a class="code" href="modules_8cpp.html#a21">00096</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>;
104 <a name="l00097"></a><a class="code" href="modules_8cpp.html#a22">00097</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>;
105 <a name="l00098"></a><a class="code" href="modules_8cpp.html#a23">00098</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>;
106 <a name="l00099"></a><a class="code" href="modules_8cpp.html#a24">00099</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>;
107 <a name="l00100"></a><a class="code" href="modules_8cpp.html#a25">00100</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>;
108 <a name="l00101"></a><a class="code" href="modules_8cpp.html#a26">00101</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>;
110 <a name="l00103"></a><a class="code" href="modules_8cpp.html#a27">00103</a> <span class="keyword">extern</span> std::vector<int> <a class="code" href="channels_8cpp.html#a26">fd_reap</a>;
111 <a name="l00104"></a><a class="code" href="modules_8cpp.html#a28">00104</a> <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="channels_8cpp.html#a27">module_names</a>;
113 <a name="l00106"></a><a class="code" href="modules_8cpp.html#a29">00106</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a28">boundPortCount</a>;
114 <a name="l00107"></a><a class="code" href="modules_8cpp.html#a30">00107</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">portCount</a>;
115 <a name="l00108"></a><a class="code" href="modules_8cpp.html#a31">00108</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">SERVERportCount</a>;
116 <a name="l00109"></a><a class="code" href="modules_8cpp.html#a32">00109</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">ports</a>[MAXSOCKS];
117 <a name="l00110"></a><a class="code" href="modules_8cpp.html#a33">00110</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a32">defaultRoute</a>;
119 <a name="l00112"></a><a class="code" href="modules_8cpp.html#a34">00112</a> <span class="keyword">extern</span> std::vector<long> <a class="code" href="channels_8cpp.html#a33">auth_cookies</a>;
120 <a name="l00113"></a><a class="code" href="modules_8cpp.html#a35">00113</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a34">config_f</a>;
122 <a name="l00115"></a><a class="code" href="modules_8cpp.html#a36">00115</a> <span class="keyword">extern</span> <a class="code" href="classserverrec.html">serverrec</a>* <a class="code" href="channels_8cpp.html#a35">me</a>[32];
124 <a name="l00117"></a><a class="code" href="modules_8cpp.html#a37">00117</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a36">log_file</a>;
126 <a name="l00119"></a><a class="code" href="modules_8cpp.html#a38">00119</a> <span class="keyword">extern</span> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="modules_8cpp.html#a38">fd_ref_table</a>[65536];
128 <a name="l00121"></a><a class="code" href="namespacenspace.html">00121</a> <span class="keyword">namespace </span><a class="code" href="channels_8cpp.html#a0">nspace</a>
130 00123 <span class="preprocessor">#ifdef GCC34</span>
131 00124 <span class="preprocessor"></span> <span class="keyword">template</span><> <span class="keyword">struct </span>hash<in_addr>
133 <a name="l00126"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html">00126</a> template<> struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash<in_addr>
136 <a name="l00129"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html#a0">00129</a> size_t operator()(<span class="keyword">const</span> <span class="keyword">struct</span> in_addr &a)<span class="keyword"> const</span>
137 00130 <span class="keyword"> </span>{
139 00132 memcpy(&q,&a,<span class="keyword">sizeof</span>(size_t));
140 00133 <span class="keywordflow">return</span> q;
143 00136 <span class="preprocessor">#ifdef GCC34</span>
144 00137 <span class="preprocessor"></span> <span class="keyword">template</span><> <span class="keyword">struct </span>hash<string>
146 <a name="l00139"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html">00139</a> template<> struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash<string>
149 <a name="l00142"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html#a0">00142</a> size_t operator()(<span class="keyword">const</span> string &s)<span class="keyword"> const</span>
150 00143 <span class="keyword"> </span>{
151 00144 <span class="keywordtype">char</span> a[MAXBUF];
152 00145 <span class="keyword">static</span> <span class="keyword">struct </span>hash<const char *> strhash;
153 00146 strlcpy(a,s.c_str(),MAXBUF);
155 00148 <span class="keywordflow">return</span> strhash(a);
160 <a name="l00153"></a><a class="code" href="structStrHashComp.html">00153</a> <span class="keyword">struct </span><a class="code" href="structStrHashComp.html">StrHashComp</a>
163 <a name="l00156"></a><a class="code" href="structStrHashComp.html#a0">00156</a> <span class="keywordtype">bool</span> <a class="code" href="structStrHashComp.html#a0">operator()</a>(<span class="keyword">const</span> string& s1, <span class="keyword">const</span> string& s2)<span class="keyword"> const</span>
164 00157 <span class="keyword"> </span>{
165 00158 <span class="keywordtype">char</span> a[MAXBUF],b[MAXBUF];
166 00159 strlcpy(a,s1.c_str(),MAXBUF);
167 00160 strlcpy(b,s2.c_str(),MAXBUF);
170 00163 <span class="keywordflow">return</span> (strcasecmp(a,b) == 0);
175 <a name="l00168"></a><a class="code" href="structInAddr__HashComp.html">00168</a> <span class="keyword">struct </span><a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a>
178 <a name="l00171"></a><a class="code" href="structInAddr__HashComp.html#a0">00171</a> <span class="keywordtype">bool</span> <a class="code" href="structInAddr__HashComp.html#a0">operator()</a>(<span class="keyword">const</span> in_addr &s1, <span class="keyword">const</span> in_addr &s2)<span class="keyword"> const</span>
179 00172 <span class="keyword"> </span>{
183 00176 memcpy(&q,&s1,<span class="keyword">sizeof</span>(size_t));
184 00177 memcpy(&p,&s2,<span class="keyword">sizeof</span>(size_t));
186 00179 <span class="keywordflow">return</span> (q == p);
192 <a name="l00185"></a><a class="code" href="modules_8cpp.html#a39">00185</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, userrec*, nspace::hash<string>, <a class="code" href="structStrHashComp.html">StrHashComp</a>> <a class="code" href="modules_8cpp.html#a39">user_hash</a>;
193 <a name="l00186"></a><a class="code" href="modules_8cpp.html#a40">00186</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, chanrec*, nspace::hash<string>, <a class="code" href="structStrHashComp.html">StrHashComp</a>> <a class="code" href="modules_8cpp.html#a40">chan_hash</a>;
194 <a name="l00187"></a><a class="code" href="modules_8cpp.html#a41">00187</a> <span class="keyword">typedef</span> nspace::hash_map<in_addr,string*, nspace::hash<in_addr>, <a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a>> <a class="code" href="modules_8cpp.html#a41">address_cache</a>;
195 <a name="l00188"></a><a class="code" href="modules_8cpp.html#a42">00188</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, WhoWasUser*, nspace::hash<string>, <a class="code" href="structStrHashComp.html">StrHashComp</a>> <a class="code" href="modules_8cpp.html#a42">whowas_hash</a>;
196 <a name="l00189"></a><a class="code" href="modules_8cpp.html#a43">00189</a> <span class="keyword">typedef</span> std::deque<command_t> <a class="code" href="modules_8cpp.html#a43">command_table</a>;
199 <a name="l00192"></a><a class="code" href="modules_8cpp.html#a44">00192</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">user_hash</a> <a class="code" href="modules_8cpp.html#a44">clientlist</a>;
200 <a name="l00193"></a><a class="code" href="modules_8cpp.html#a45">00193</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">chan_hash</a> <a class="code" href="modules_8cpp.html#a45">chanlist</a>;
201 <a name="l00194"></a><a class="code" href="modules_8cpp.html#a46">00194</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a42">whowas_hash</a> <a class="code" href="modules_8cpp.html#a46">whowas</a>;
202 <a name="l00195"></a><a class="code" href="modules_8cpp.html#a47">00195</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a43">command_table</a> <a class="code" href="modules_8cpp.html#a47">cmdlist</a>;
203 <a name="l00196"></a><a class="code" href="modules_8cpp.html#a48">00196</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a48">MOTD</a>;
204 <a name="l00197"></a><a class="code" href="modules_8cpp.html#a49">00197</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a49">RULES</a>;
205 <a name="l00198"></a><a class="code" href="modules_8cpp.html#a50">00198</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a41">address_cache</a> <a class="code" href="modules_8cpp.html#a50">IP</a>;
208 00201 <span class="comment">// class type for holding an extended mode character - internal to core</span>
210 <a name="l00203"></a><a class="code" href="classExtMode.html">00203</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>
212 00205 <span class="keyword">public</span>:
213 <a name="l00206"></a><a class="code" href="classExtMode.html#o0">00206</a> <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#o0">modechar</a>;
214 <a name="l00207"></a><a class="code" href="classExtMode.html#o1">00207</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o1">type</a>;
215 <a name="l00208"></a><a class="code" href="classExtMode.html#o2">00208</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o2">params_when_on</a>;
216 <a name="l00209"></a><a class="code" href="classExtMode.html#o3">00209</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o3">params_when_off</a>;
217 <a name="l00210"></a><a class="code" href="classExtMode.html#o4">00210</a> <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#o4">needsoper</a>;
218 <a name="l00211"></a><a class="code" href="classExtMode.html#o5">00211</a> <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>;
219 <a name="l00212"></a><a class="code" href="classExtMode.html#a0">00212</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) { };
222 <a name="l00215"></a><a class="code" href="modules_8cpp.html#a51">00215</a> <span class="keyword">typedef</span> std::vector<ExtMode> <a class="code" href="modules_8cpp.html#a51">ExtModeList</a>;
223 <a name="l00216"></a><a class="code" href="modules_8cpp.html#a52">00216</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a52">ExtModeListIter</a>;
226 <a name="l00219"></a><a class="code" href="modules_8cpp.html#a53">00219</a> <a class="code" href="modules_8cpp.html#a51">ExtModeList</a> <a class="code" href="modules_8cpp.html#a53">EMode</a>;
228 00221 <span class="comment">// returns true if an extended mode character is in use</span>
229 <a name="l00222"></a><a class="code" href="modules_8cpp.html#a54">00222</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a54">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
231 00224 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a52">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a53">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a53">EMode</a>.end(); i++)
233 00226 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type))
235 00228 <span class="keywordflow">return</span> <span class="keyword">true</span>;
238 00231 <span class="keywordflow">return</span> <span class="keyword">false</span>;
241 <a name="l00234"></a><a class="code" href="modules_8cpp.html#a55">00234</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a55">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
243 00236 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a52">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a53">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a53">EMode</a>.end(); i++)
245 00238 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->list == <span class="keyword">true</span>))
247 00240 <span class="keywordflow">return</span> <span class="keyword">true</span>;
250 00243 <span class="keywordflow">return</span> <span class="keyword">false</span>;
253 <a name="l00246"></a><a class="code" href="modules_8cpp.html#a56">00246</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a56">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
255 00248 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a52">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a53">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a53">EMode</a>.end(); i++)
257 00250 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->needsoper == <span class="keyword">true</span>))
259 00252 <span class="keywordflow">return</span> <span class="keyword">true</span>;
262 00255 <span class="keywordflow">return</span> <span class="keyword">false</span>;
265 00258 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span>
266 <a name="l00259"></a><a class="code" href="modules_8cpp.html#a57">00259</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a57">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
268 00261 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a52">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a53">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a53">EMode</a>.end(); i++)
270 00263 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type))
272 00265 <span class="keywordflow">return</span> i->params_when_on;
275 00268 <span class="keywordflow">return</span> 0;
278 00271 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span>
279 <a name="l00272"></a><a class="code" href="modules_8cpp.html#a58">00272</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a58">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type)
281 00274 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a52">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a53">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a53">EMode</a>.end(); i++)
283 00276 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type))
285 00278 <span class="keywordflow">return</span> i->params_when_off;
288 00281 <span class="keywordflow">return</span> 0;
291 00284 <span class="comment">// returns true if an extended mode character is in use</span>
292 <a name="l00285"></a><a class="code" href="modules_8cpp.html#a59">00285</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a59">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)
294 00287 <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a54">ModeDefined</a>(modechar,type)) {
295 00288 <span class="keywordflow">return</span> <span class="keyword">false</span>;
297 00290 <a class="code" href="modules_8cpp.html#a53">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off));
298 00291 <span class="keywordflow">return</span> <span class="keyword">true</span>;
301 00294 <span class="comment">// turns a mode into a listmode</span>
302 <a name="l00295"></a><a class="code" href="modules_8cpp.html#a60">00295</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a60">ModeMakeList</a>(<span class="keywordtype">char</span> modechar)
304 00297 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a52">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a53">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a53">EMode</a>.end(); i++)
306 00299 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == <a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>))
308 00301 i->list = <span class="keyword">true</span>;
309 00302 <span class="keywordflow">return</span>;
312 00305 <span class="keywordflow">return</span>;
315 00308 <span class="comment">// version is a simple class for holding a modules version number</span>
317 <a name="l00310"></a><a class="code" href="classVersion.html#a0">00310</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) { };
319 00312 <span class="comment">// admin is a simple class for holding a server's administrative info</span>
321 <a name="l00314"></a><a class="code" href="classAdmin.html#a0">00314</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) { };
323 <a name="l00316"></a><a class="code" href="classRequest.html#a0">00316</a> <a class="code" href="classRequest.html#a0">Request::Request</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, <a class="code" href="classModule.html">Module</a>* dst) : data(anydata), source(src), dest(dst) { };
325 <a name="l00318"></a><a class="code" href="classRequest.html#a1">00318</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a1">Request::GetData</a>()
327 00320 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p0">data</a>;
330 <a name="l00323"></a><a class="code" href="classRequest.html#a2">00323</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a2">Request::GetSource</a>()
332 00325 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p1">source</a>;
335 <a name="l00328"></a><a class="code" href="classRequest.html#a3">00328</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a3">Request::GetDest</a>()
337 00330 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p2">dest</a>;
340 <a name="l00333"></a><a class="code" href="classRequest.html#a4">00333</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a4">Request::Send</a>()
342 00335 <span class="keywordflow">if</span> (this-><a class="code" href="classRequest.html#p2">dest</a>)
344 00337 <span class="keywordflow">return</span> <a class="code" href="classRequest.html#p2">dest</a>-><a class="code" href="classModule.html#a46">OnRequest</a>(<span class="keyword">this</span>);
346 00339 <span class="keywordflow">else</span>
348 00341 <span class="keywordflow">return</span> NULL;
352 <a name="l00345"></a><a class="code" href="classEvent.html#a0">00345</a> <a class="code" href="classEvent.html#a0">Event::Event</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, std::string eventid) : data(anydata), source(src), id(eventid) { };
354 <a name="l00347"></a><a class="code" href="classEvent.html#a1">00347</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a1">Event::GetData</a>()
356 00349 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p0">data</a>;
359 <a name="l00352"></a><a class="code" href="classEvent.html#a2">00352</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classEvent.html#a2">Event::GetSource</a>()
361 00354 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p1">source</a>;
364 <a name="l00357"></a><a class="code" href="classEvent.html#a4">00357</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a4">Event::Send</a>()
366 00359 <a class="code" href="modules_8h.html#a24">FOREACH_MOD</a> OnEvent(<span class="keyword">this</span>);
367 00360 <span class="keywordflow">return</span> NULL;
370 <a name="l00363"></a><a class="code" href="classEvent.html#a3">00363</a> std::string <a class="code" href="classEvent.html#a3">Event::GetEventID</a>()
372 00365 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p2">id</a>;
376 00369 <span class="comment">// These declarations define the behavours of the base class Module (which does nothing at all)</span>
377 <a name="l00370"></a><a class="code" href="classModule.html#a0">00370</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { }
378 <a name="l00371"></a><a class="code" href="classModule.html#a1">00371</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { }
379 <a name="l00372"></a><a class="code" href="classModule.html#a3">00372</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) { }
380 <a name="l00373"></a><a class="code" href="classModule.html#a4">00373</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) { }
381 <a name="l00374"></a><a class="code" href="classModule.html#a5">00374</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserDisconnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }
382 <a name="l00375"></a><a class="code" href="classModule.html#a6">00375</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
383 <a name="l00376"></a><a class="code" href="classModule.html#a7">00376</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
384 <a name="l00377"></a><a class="code" href="classModule.html#a8">00377</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketTransmit</a>(std::string &data, std::string serv) { }
385 <a name="l00378"></a><a class="code" href="classModule.html#a9">00378</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnPacketReceive</a>(std::string &data, std::string serv) { }
386 <a name="l00379"></a><a class="code" href="classModule.html#a10">00379</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnRehash</a>() { }
387 <a name="l00380"></a><a class="code" href="classModule.html#a11">00380</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a11">Module::OnServerRaw</a>(std::string &raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { }
388 <a name="l00381"></a><a class="code" href="classModule.html#a13">00381</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a13">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; }
389 <a name="l00382"></a><a class="code" href="classModule.html#a12">00382</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
390 <a name="l00383"></a><a class="code" href="classModule.html#a2">00383</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>); }
391 <a name="l00384"></a><a class="code" href="classModule.html#a16">00384</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a16">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
392 <a name="l00385"></a><a class="code" href="classModule.html#a17">00385</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a17">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
393 <a name="l00386"></a><a class="code" href="classModule.html#a18">00386</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a18">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { };
394 <a name="l00387"></a><a class="code" href="classModule.html#a19">00387</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnUserPreInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel) { <span class="keywordflow">return</span> 0; };
395 <a name="l00388"></a><a class="code" href="classModule.html#a20">00388</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a20">Module::OnUserPreMessage</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; };
396 <a name="l00389"></a><a class="code" href="classModule.html#a21">00389</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a21">Module::OnUserPreNotice</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; };
397 <a name="l00390"></a><a class="code" href="classModule.html#a22">00390</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a22">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; };
398 <a name="l00391"></a><a class="code" href="classModule.html#a23">00391</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a23">Module::OnUserPostNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string oldnick) { };
399 <a name="l00392"></a><a class="code" href="classModule.html#a24">00392</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a24">Module::OnAccessCheck</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel,<span class="keywordtype">int</span> access_type) { <span class="keywordflow">return</span> <a class="code" href="modules_8h.html#a8">ACR_DEFAULT</a>; };
400 <a name="l00393"></a><a class="code" href="classModule.html#a25">00393</a> <a class="code" href="modules_8h.html#a32">string_list</a> <a class="code" href="classModule.html#a25">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; }
401 <a name="l00394"></a><a class="code" href="classModule.html#a26">00394</a> <a class="code" href="modules_8h.html#a32">string_list</a> <a class="code" href="classModule.html#a26">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; }
402 <a name="l00395"></a><a class="code" href="classModule.html#a27">00395</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a27">Module::On005Numeric</a>(std::string &output) { };
403 <a name="l00396"></a><a class="code" href="classModule.html#a28">00396</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a28">Module::OnKill</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest, std::string reason) { <span class="keywordflow">return</span> 0; };
404 <a name="l00397"></a><a class="code" href="classModule.html#a29">00397</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a29">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,std::string name) { };
405 <a name="l00398"></a><a class="code" href="classModule.html#a30">00398</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a30">Module::OnBackgroundTimer</a>(time_t curtime) { };
406 <a name="l00399"></a><a class="code" href="classModule.html#a31">00399</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a31">Module::OnSendList</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel, <span class="keywordtype">char</span> mode) { };
407 <a name="l00400"></a><a class="code" href="classModule.html#a32">00400</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a32">Module::OnPreCommand</a>(std::string command, <span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) { <span class="keywordflow">return</span> 0; };
408 <a name="l00401"></a><a class="code" href="classModule.html#a33">00401</a> <span class="keywordtype">bool</span> <a class="code" href="classModule.html#a33">Module::OnCheckReady</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <span class="keywordflow">return</span> <span class="keyword">true</span>; };
409 <a name="l00402"></a><a class="code" href="classModule.html#a34">00402</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a34">Module::OnUserRegister</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
410 <a name="l00403"></a><a class="code" href="classModule.html#a14">00403</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a14">Module::OnUserPreKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { <span class="keywordflow">return</span> 0; };
411 <a name="l00404"></a><a class="code" href="classModule.html#a15">00404</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnUserKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { };
412 <a name="l00405"></a><a class="code" href="classModule.html#a35">00405</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a35">Module::OnRawMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keywordtype">char</span> mode, std::string param, <span class="keywordtype">bool</span> adding, <span class="keywordtype">int</span> pcnt) { <span class="keywordflow">return</span> 0; };
413 <a name="l00406"></a><a class="code" href="classModule.html#a36">00406</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a36">Module::OnCheckInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; };
414 <a name="l00407"></a><a class="code" href="classModule.html#a37">00407</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a37">Module::OnCheckKey</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string keygiven) { <span class="keywordflow">return</span> 0; };
415 <a name="l00408"></a><a class="code" href="classModule.html#a38">00408</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a38">Module::OnCheckLimit</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; };
416 <a name="l00409"></a><a class="code" href="classModule.html#a39">00409</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a39">Module::OnCheckBan</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; };
417 <a name="l00410"></a><a class="code" href="classModule.html#a40">00410</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a40">Module::OnStats</a>(<span class="keywordtype">char</span> symbol) { };
418 <a name="l00411"></a><a class="code" href="classModule.html#a41">00411</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a41">Module::OnChangeLocalUserHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; };
419 <a name="l00412"></a><a class="code" href="classModule.html#a42">00412</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a42">Module::OnChangeLocalUserGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; };
420 <a name="l00413"></a><a class="code" href="classModule.html#a43">00413</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a43">Module::OnLocalTopicChange</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string topic) { <span class="keywordflow">return</span> 0; };
421 <a name="l00414"></a><a class="code" href="classModule.html#a44">00414</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a44">Module::OnMeshToken</a>(<span class="keywordtype">char</span> token,string_list params,<a class="code" href="classserverrec.html">serverrec</a>* source,<a class="code" href="classserverrec.html">serverrec</a>* reply, std::string tcp_host,std::string ipaddr,<span class="keywordtype">int</span> port) { <span class="keywordflow">return</span> 0; };
422 <a name="l00415"></a><a class="code" href="classModule.html#a45">00415</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a45">Module::OnEvent</a>(<a class="code" href="classEvent.html">Event</a>* event) { <span class="keywordflow">return</span>; };
423 <a name="l00416"></a><a class="code" href="classModule.html#a46">00416</a> <span class="keywordtype">char</span>* <a class="code" href="classModule.html#a46">Module::OnRequest</a>(<a class="code" href="classRequest.html">Request</a>* request) { <span class="keywordflow">return</span> NULL; };
424 <a name="l00417"></a><a class="code" href="classModule.html#a47">00417</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a47">Module::OnOperCompare</a>(std::string password, std::string input) { <span class="keywordflow">return</span> 0; };
425 <a name="l00418"></a><a class="code" href="classModule.html#a48">00418</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a48">Module::OnGlobalOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
426 <a name="l00419"></a><a class="code" href="classModule.html#a49">00419</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a49">Module::OnGlobalConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
427 <a name="l00420"></a><a class="code" href="classModule.html#a50">00420</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a50">Module::OnAddBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; };
428 <a name="l00421"></a><a class="code" href="classModule.html#a51">00421</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a51">Module::OnDelBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; };
429 <a name="l00422"></a><a class="code" href="classModule.html#a52">00422</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a52">Module::OnRawSocketAccept</a>(<span class="keywordtype">int</span> fd, std::string ip, <span class="keywordtype">int</span> localport) { };
430 <a name="l00423"></a><a class="code" href="classModule.html#a53">00423</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a53">Module::OnRawSocketWrite</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">int</span> count) { <span class="keywordflow">return</span> 0; };
431 <a name="l00424"></a><a class="code" href="classModule.html#a54">00424</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a54">Module::OnRawSocketClose</a>(<span class="keywordtype">int</span> fd) { };
432 <a name="l00425"></a><a class="code" href="classModule.html#a55">00425</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a55">Module::OnRawSocketRead</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keywordtype">int</span> &readresult) { <span class="keywordflow">return</span> 0; };
434 00427 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span>
435 00428 <span class="comment">// exports in the core</span>
436 00429 <span class="comment">//</span>
438 <a name="l00431"></a><a class="code" href="classServer.html#a0">00431</a> <a class="code" href="classServer.html#a0">Server::Server</a>()
442 <a name="l00435"></a><a class="code" href="classServer.html#a1">00435</a> <a class="code" href="classServer.html#a1">Server::~Server</a>()
446 <a name="l00439"></a><a class="code" href="classServer.html#a2">00439</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s)
448 00441 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str());
451 <a name="l00444"></a><a class="code" href="classServer.html#a32">00444</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a32">Server::MatchText</a>(std::string sliteral, std::string spattern)
453 00446 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF];
454 00447 strlcpy(literal,sliteral.c_str(),MAXBUF);
455 00448 strlcpy(pattern,spattern.c_str(),MAXBUF);
456 00449 <span class="keywordflow">return</span> match(literal,pattern);
459 <a name="l00452"></a><a class="code" href="classServer.html#a27">00452</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a27">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text)
461 00454 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str());
464 <a name="l00457"></a><a class="code" href="classServer.html#a28">00457</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a28">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key)
466 00459 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">false</span>);
469 <a name="l00462"></a><a class="code" href="classServer.html#a29">00462</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a29">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason)
471 00464 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>);
474 <a name="l00467"></a><a class="code" href="classServer.html#a37">00467</a> <a class="code" href="modules_8h.html#a33">chanuserlist</a> <a class="code" href="classServer.html#a37">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan)
476 00469 <a class="code" href="modules_8h.html#a33">chanuserlist</a> userl;
478 00471 std::vector<char*> *<a class="code" href="channels_8cpp.html#a15">list</a> = chan-><a class="code" href="classchanrec.html#a7">GetUsers</a>();
479 00472 <span class="keywordflow">for</span> (std::vector<char*>::iterator i = <a class="code" href="channels_8cpp.html#a15">list</a>->begin(); i != <a class="code" href="channels_8cpp.html#a15">list</a>->end(); i++)
481 00474 <span class="keywordtype">char</span>* o = *i;
482 00475 userl.push_back((<a class="code" href="classuserrec.html">userrec</a>*)o);
484 00477 <span class="keywordflow">return</span> userl;
486 <a name="l00479"></a><a class="code" href="classServer.html#a30">00479</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a30">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname)
488 00481 force_nickchange(user,nickname.c_str());
491 <a name="l00484"></a><a class="code" href="classServer.html#a31">00484</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason)
493 00486 kill_link(user,reason.c_str());
496 <a name="l00489"></a><a class="code" href="classServer.html#a36">00489</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a36">Server::IsUlined</a>(std::string server)
498 00491 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a74">is_uline</a>(server.c_str());
501 <a name="l00494"></a><a class="code" href="classServer.html#a33">00494</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a33">Server::CallCommandHandler</a>(std::string commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user)
503 00496 call_handler(commandname.c_str(),parameters,pcnt,user);
506 <a name="l00499"></a><a class="code" href="classServer.html#a3">00499</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)
508 00501 log(level,<span class="stringliteral">"%s"</span>,s.c_str());
511 <a name="l00504"></a><a class="code" href="classServer.html#a25">00504</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a25">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams, <span class="keywordtype">char</span>* source)
513 00506 <a class="code" href="modules_8h.html#a35">createcommand</a>(cmd,f,flags,minparams,source);
516 <a name="l00509"></a><a class="code" href="classServer.html#a26">00509</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a26">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user)
518 00511 <a class="code" href="modules_8h.html#a36">server_mode</a>(parameters,pcnt,user);
521 <a name="l00514"></a><a class="code" href="classServer.html#a4">00514</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)
523 00516 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
526 <a name="l00519"></a><a class="code" href="classServer.html#a5">00519</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)
528 00521 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
531 <a name="l00524"></a><a class="code" href="classServer.html#a7">00524</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s)
533 00526 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str());
536 <a name="l00529"></a><a class="code" href="classServer.html#a8">00529</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s)
538 00531 <span class="keywordflow">if</span> (!Source)
540 00533 <span class="comment">// if source is NULL, then the message originates from the local server</span>
541 00534 Write(Dest-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s %s"</span>,this->GetServerName().c_str(),s.c_str());
543 00536 <span class="keywordflow">else</span>
545 00538 <span class="comment">// otherwise it comes from the user specified</span>
546 00539 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str());
550 <a name="l00543"></a><a class="code" href="classServer.html#a6">00543</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendChannelServerNotice</a>(std::string ServName, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string text)
552 00545 WriteChannelWithServ((<span class="keywordtype">char</span>*)ServName.c_str(), Channel, <span class="stringliteral">"%s"</span>, text.c_str());
555 <a name="l00548"></a><a class="code" href="classServer.html#a9">00548</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a9">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender)
557 00550 <span class="keywordflow">if</span> (IncludeSender)
559 00552 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
561 00554 <span class="keywordflow">else</span>
563 00556 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
567 <a name="l00560"></a><a class="code" href="classServer.html#a10">00560</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a10">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2)
569 00562 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0);
572 <a name="l00565"></a><a class="code" href="classServer.html#a11">00565</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender)
574 00567 <span class="keywordflow">if</span> (IncludeSender)
576 00569 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str());
578 00571 <span class="keywordflow">else</span>
580 00573 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str());
584 <a name="l00577"></a><a class="code" href="classServer.html#a12">00577</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a12">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text)
586 00579 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str());
589 <a name="l00582"></a><a class="code" href="classServer.html#a34">00582</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a34">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host)
591 00584 <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str());
594 <a name="l00587"></a><a class="code" href="classServer.html#a35">00587</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a35">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos)
596 00589 <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str());
599 <a name="l00592"></a><a class="code" href="classServer.html#a13">00592</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a13">Server::IsNick</a>(std::string nick)
601 00594 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0);
604 <a name="l00597"></a><a class="code" href="classServer.html#a15">00597</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a15">Server::FindNick</a>(std::string nick)
606 00599 <span class="keywordflow">return</span> Find(nick);
609 <a name="l00602"></a><a class="code" href="classServer.html#a16">00602</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a16">Server::FindDescriptor</a>(<span class="keywordtype">int</span> socket)
611 00604 <span class="keywordflow">return</span> (socket < 65536 ? <a class="code" href="modules_8cpp.html#a38">fd_ref_table</a>[socket] : NULL);
614 <a name="l00607"></a><a class="code" href="classServer.html#a17">00607</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a17">Server::FindChannel</a>(std::string channel)
616 00609 <span class="keywordflow">return</span> FindChan(channel.c_str());
619 <a name="l00612"></a><a class="code" href="classServer.html#a18">00612</a> std::string <a class="code" href="classServer.html#a18">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
621 00614 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan);
624 <a name="l00617"></a><a class="code" href="classServer.html#a19">00617</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a19">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
626 00619 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan);
629 <a name="l00622"></a><a class="code" href="classServer.html#a20">00622</a> std::string <a class="code" href="classServer.html#a20">Server::GetServerName</a>()
631 00624 <span class="keywordflow">return</span> getservername();
634 <a name="l00627"></a><a class="code" href="classServer.html#a21">00627</a> std::string <a class="code" href="classServer.html#a21">Server::GetNetworkName</a>()
636 00629 <span class="keywordflow">return</span> getnetworkname();
639 <a name="l00632"></a><a class="code" href="classServer.html#a22">00632</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a22">Server::GetAdmin</a>()
641 00634 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick());
646 <a name="l00639"></a><a class="code" href="classServer.html#a23">00639</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a23">Server::AddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_when_on, <span class="keywordtype">int</span> params_when_off)
648 00641 <span class="keywordflow">if</span> (((modechar >= <span class="charliteral">'A'</span>) && (modechar <= 'Z')) || ((modechar >= <span class="charliteral">'a'</span>) && (modechar <= <span class="charliteral">'z'</span>)))
650 00643 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>)
652 00645 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>);
653 00646 <span class="keywordflow">return</span> <span class="keyword">false</span>;
655 00648 <span class="keywordflow">if</span> (((params_when_on>0) || (params_when_off>0)) && (type == <a class="code" href="modules_8h.html#a6">MT_CLIENT</a>))
657 00650 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>);
658 00651 <span class="keywordflow">return</span> <span class="keyword">false</span>;
660 00653 <span class="keywordflow">if</span> ((params_when_on>1) || (params_when_off>1))
662 00655 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>);
663 00656 <span class="keywordflow">return</span> <span class="keyword">false</span>;
665 00658 <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a59">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off);
667 00660 <span class="keywordflow">else</span>
669 00662 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Muppet modechar detected."</span>);
671 00664 <span class="keywordflow">return</span> <span class="keyword">false</span>;
674 <a name="l00667"></a><a class="code" href="classServer.html#a24">00667</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a24">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar)
676 00669 <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a59">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1);
677 00670 <span class="keywordflow">if</span> (res)
678 00671 <a class="code" href="modules_8cpp.html#a60">ModeMakeList</a>(modechar);
679 00672 <span class="keywordflow">return</span> res;
682 <a name="l00675"></a><a class="code" href="classServer.html#a14">00675</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a14">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c)
684 00677 <span class="keywordflow">return</span> usercount(c);
688 <a name="l00681"></a><a class="code" href="classServer.html#a38">00681</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a38">Server::UserToPseudo</a>(<a class="code" href="classuserrec.html">userrec</a>* user,std::string message)
690 00683 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_fd = user-><a class="code" href="classconnection.html#o0">fd</a>;
691 00684 user-><a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>;
692 00685 user-><a class="code" href="classuserrec.html#a10">ClearBuffer</a>();
693 00686 Write(old_fd,<span class="stringliteral">"ERROR :Closing link (%s@%s) [%s]"</span>,user-><a class="code" href="classuserrec.html#o1">ident</a>,user-><a class="code" href="classconnection.html#o1">host</a>,message.c_str());
694 00687 <span class="preprocessor">#ifdef USE_KQUEUE</span>
695 00688 <span class="preprocessor"></span> <span class="keyword">struct </span>kevent ke;
696 00689 EV_SET(&ke, old_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
697 00690 <span class="keywordtype">int</span> i = kevent(kq, &ke, 1, 0, 0, NULL);
698 00691 <span class="keywordflow">if</span> (i == -1)
700 00693 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"kqueue: Failed to remove user from queue!"</span>);
702 00695 <span class="preprocessor">#endif</span>
703 00696 <span class="preprocessor"></span> shutdown(old_fd,2);
707 <a name="l00700"></a><a class="code" href="classServer.html#a39">00700</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a39">Server::PseudoToUser</a>(<a class="code" href="classuserrec.html">userrec</a>* alive,<a class="code" href="classuserrec.html">userrec</a>* zombie,std::string message)
709 00702 zombie-><a class="code" href="classconnection.html#o0">fd</a> = alive-><a class="code" href="classconnection.html#o0">fd</a>;
710 00703 alive-><a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>;
711 00704 alive-><a class="code" href="classuserrec.html#a10">ClearBuffer</a>();
712 00705 Write(zombie-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s!%s@%s NICK %s"</span>,alive-><a class="code" href="classuserrec.html#o0">nick</a>,alive-><a class="code" href="classuserrec.html#o1">ident</a>,alive-><a class="code" href="classconnection.html#o1">host</a>,zombie-><a class="code" href="classuserrec.html#o0">nick</a>);
713 00706 kill_link(alive,message.c_str());
714 00707 <a class="code" href="modules_8cpp.html#a38">fd_ref_table</a>[zombie-><a class="code" href="classconnection.html#o0">fd</a>] = zombie;
715 00708 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != MAXCHANS; i++)
717 00710 <span class="keywordflow">if</span> (zombie->chans[i].channel != NULL)
719 00712 <span class="keywordflow">if</span> (zombie->chans[i].channel->name)
721 00714 <a class="code" href="classchanrec.html">chanrec</a>* Ptr = zombie-><a class="code" href="classuserrec.html#o5">chans</a>[i].<a class="code" href="classucrec.html#o1">channel</a>;
722 00715 WriteFrom(zombie->fd,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-><a class="code" href="classchanrec.html#o0">name</a>);
723 00716 <span class="keywordflow">if</span> (Ptr-><a class="code" href="classchanrec.html#o5">topicset</a>)
725 00718 WriteServ(zombie->fd,<span class="stringliteral">"332 %s %s :%s"</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>, Ptr-><a class="code" href="classchanrec.html#o3">topic</a>);
726 00719 WriteServ(zombie->fd,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>, Ptr-><a class="code" href="classchanrec.html#o6">setby</a>, Ptr-><a class="code" href="classchanrec.html#o5">topicset</a>);
728 00721 userlist(zombie,Ptr);
729 00722 WriteServ(zombie->fd,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>);
737 <a name="l00730"></a><a class="code" href="classServer.html#a40">00730</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a40">Server::AddGLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
739 00732 <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());
742 <a name="l00735"></a><a class="code" href="classServer.html#a41">00735</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a41">Server::AddQLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string nickname)
744 00737 <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());
747 <a name="l00740"></a><a class="code" href="classServer.html#a42">00740</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a42">Server::AddZLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string ipaddr)
749 00742 <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());
752 <a name="l00745"></a><a class="code" href="classServer.html#a43">00745</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a43">Server::AddKLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
754 00747 <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());
757 <a name="l00750"></a><a class="code" href="classServer.html#a44">00750</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a44">Server::AddELine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask)
759 00752 <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());
762 <a name="l00755"></a><a class="code" href="classServer.html#a45">00755</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a45">Server::DelGLine</a>(std::string hostmask)
764 00757 <a class="code" href="xline_8h.html#a6">del_gline</a>(hostmask.c_str());
767 <a name="l00760"></a><a class="code" href="classServer.html#a46">00760</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a46">Server::DelQLine</a>(std::string nickname)
769 00762 <a class="code" href="xline_8h.html#a7">del_qline</a>(nickname.c_str());
772 <a name="l00765"></a><a class="code" href="classServer.html#a47">00765</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a47">Server::DelZLine</a>(std::string ipaddr)
774 00767 <a class="code" href="xline_8h.html#a8">del_zline</a>(ipaddr.c_str());
777 <a name="l00770"></a><a class="code" href="classServer.html#a48">00770</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a48">Server::DelKLine</a>(std::string hostmask)
779 00772 <a class="code" href="xline_8h.html#a9">del_kline</a>(hostmask.c_str());
782 <a name="l00775"></a><a class="code" href="classServer.html#a49">00775</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a49">Server::DelELine</a>(std::string hostmask)
784 00777 <a class="code" href="xline_8h.html#a10">del_eline</a>(hostmask.c_str());
787 <a name="l00780"></a><a class="code" href="classServer.html#a50">00780</a> <span class="keywordtype">long</span> <a class="code" href="classServer.html#a50">Server::CalcDuration</a>(std::string delta)
789 00782 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a75">duration</a>(delta.c_str());
792 <a name="l00785"></a><a class="code" href="classServer.html#a51">00785</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a51">Server::IsValidMask</a>(std::string mask)
794 00787 <span class="keyword">const</span> <span class="keywordtype">char</span>* dest = mask.c_str();
795 00788 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'!'</span>)==0)
796 00789 <span class="keywordflow">return</span> <span class="keyword">false</span>;
797 00790 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'@'</span>)==0)
798 00791 <span class="keywordflow">return</span> <span class="keyword">false</span>;
799 00792 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++)
800 00793 <span class="keywordflow">if</span> (dest[i] < 32)
801 00794 <span class="keywordflow">return</span> <span class="keyword">false</span>;
802 00795 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++)
803 00796 <span class="keywordflow">if</span> (dest[i] > 126)
804 00797 <span class="keywordflow">return</span> <span class="keyword">false</span>;
805 00798 <span class="keywordtype">int</span> c = 0;
806 00799 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++)
807 00800 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'!'</span>)
809 00802 <span class="keywordflow">if</span> (c>1)
810 00803 <span class="keywordflow">return</span> <span class="keyword">false</span>;
812 00805 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++)
813 00806 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'@'</span>)
815 00808 <span class="keywordflow">if</span> (c>1)
816 00809 <span class="keywordflow">return</span> <span class="keyword">false</span>;
818 00811 <span class="keywordflow">return</span> <span class="keyword">true</span>;
821 <a name="l00814"></a><a class="code" href="classServer.html#a52">00814</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a52">Server::MeshSendAll</a>(std::string text)
823 00816 NetSendToAll((<span class="keywordtype">char</span>*)text.c_str());
826 <a name="l00819"></a><a class="code" href="classServer.html#a53">00819</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a53">Server::MeshSendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string text)
828 00821 <span class="keywordflow">if</span> (user)
829 00822 NetSendToCommon(user,(<span class="keywordtype">char</span>*)text.c_str());
832 <a name="l00825"></a><a class="code" href="classServer.html#a54">00825</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a54">Server::MeshSendAllAlive</a>(std::string text)
834 00827 NetSendToAllAlive((<span class="keywordtype">char</span>*)text.c_str());
837 <a name="l00830"></a><a class="code" href="classServer.html#a55">00830</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a55">Server::MeshSendUnicast</a>(std::string destination, std::string text)
839 00832 NetSendToOne((<span class="keywordtype">char</span>*)destination.c_str(),(<span class="keywordtype">char</span>*)text.c_str());
842 <a name="l00835"></a><a class="code" href="classServer.html#a56">00835</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a56">Server::MeshSendAllExcept</a>(std::string target, std::string text)
844 00837 NetSendToAllExcept(target.c_str(),(<span class="keywordtype">char</span>*)text.c_str());
847 <a name="l00840"></a><a class="code" href="classServer.html#a57">00840</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a57">Server::MeshCheckChan</a>(<a class="code" href="classchanrec.html">chanrec</a> *c,std::string servername)
849 00842 <span class="keywordflow">if</span> (c)
851 00844 <span class="keywordflow">return</span> ChanAnyOnThisServer(c,(<span class="keywordtype">char</span>*)servername.c_str());
853 00846 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
856 <a name="l00849"></a><a class="code" href="classServer.html#a58">00849</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a58">Server::MeshCheckCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* u,std::string servername)
858 00851 <span class="keywordflow">if</span> (u)
860 00853 <span class="keywordflow">return</span> CommonOnThisServer(u,(<span class="keywordtype">char</span>*)servername.c_str());
862 00855 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
865 <a name="l00858"></a><a class="code" href="classServer.html#a59">00858</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classServer.html#a59">Server::FindModule</a>(std::string name)
867 00860 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; i++)
869 00862 <span class="keywordflow">if</span> (<a class="code" href="channels_8cpp.html#a27">module_names</a>[i] == name)
871 00864 <span class="keywordflow">return</span> <a class="code" href="channels_8cpp.html#a2">modules</a>[i];
874 00867 <span class="keywordflow">return</span> NULL;
877 <a name="l00870"></a><a class="code" href="classConfigReader.html#a0">00870</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>()
879 00872 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
880 00873 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
881 00874 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this->cache,this->errorlog);
882 00875 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>)
883 00876 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>;
887 <a name="l00880"></a><a class="code" href="classConfigReader.html#a2">00880</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>()
889 00882 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p0">cache</a>)
890 00883 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p0">cache</a>;
891 00884 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p1">errorlog</a>)
892 00885 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p1">errorlog</a>;
896 <a name="l00889"></a><a class="code" href="classConfigReader.html#a1">00889</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename)
898 00891 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
899 00892 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
900 00893 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(filename.c_str(),this-><a class="code" href="classConfigReader.html#p0">cache</a>,this-><a class="code" href="classConfigReader.html#p1">errorlog</a>);
901 00894 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>)
902 00895 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>;
905 <a name="l00898"></a><a class="code" href="classConfigReader.html#a3">00898</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)
907 00900 <span class="keywordtype">char</span> val[MAXBUF];
908 00901 <span class="keywordtype">char</span> t[MAXBUF];
909 00902 <span class="keywordtype">char</span> n[MAXBUF];
910 00903 strlcpy(t,tag.c_str(),MAXBUF);
911 00904 strlcpy(n,name.c_str(),MAXBUF);
912 00905 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
913 00906 <span class="keywordflow">if</span> (!res)
915 00908 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
916 00909 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
918 00911 <span class="keywordflow">return</span> val;
921 <a name="l00914"></a><a class="code" href="classConfigReader.html#a4">00914</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)
923 00916 <span class="keywordtype">char</span> val[MAXBUF];
924 00917 <span class="keywordtype">char</span> t[MAXBUF];
925 00918 <span class="keywordtype">char</span> n[MAXBUF];
926 00919 strlcpy(t,tag.c_str(),MAXBUF);
927 00920 strlcpy(n,name.c_str(),MAXBUF);
928 00921 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
929 00922 <span class="keywordflow">if</span> (!res)
931 00924 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
932 00925 <span class="keywordflow">return</span> <span class="keyword">false</span>;
934 00927 std::string s = val;
935 00928 <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>));
938 <a name="l00931"></a><a class="code" href="classConfigReader.html#a5">00931</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)
940 00933 <span class="keywordtype">char</span> val[MAXBUF];
941 00934 <span class="keywordtype">char</span> t[MAXBUF];
942 00935 <span class="keywordtype">char</span> n[MAXBUF];
943 00936 strlcpy(t,tag.c_str(),MAXBUF);
944 00937 strlcpy(n,name.c_str(),MAXBUF);
945 00938 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
946 00939 <span class="keywordflow">if</span> (!res)
948 00941 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>;
949 00942 <span class="keywordflow">return</span> 0;
951 00944 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(val); i++)
953 00946 <span class="keywordflow">if</span> (!isdigit(val[i]))
955 00948 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a27">CONF_NOT_A_NUMBER</a>;
956 00949 <span class="keywordflow">return</span> 0;
959 00952 <span class="keywordflow">if</span> ((needs_unsigned) && (atoi(val)<0))
961 00954 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_NOT_UNSIGNED</a>;
962 00955 <span class="keywordflow">return</span> 0;
964 00957 <span class="keywordflow">return</span> atoi(val);
967 <a name="l00960"></a><a class="code" href="classConfigReader.html#a6">00960</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>()
969 00962 <span class="keywordtype">long</span> olderr = this-><a class="code" href="classConfigReader.html#p3">error</a>;
970 00963 this->error = 0;
971 00964 <span class="keywordflow">return</span> olderr;
974 <a name="l00967"></a><a class="code" href="classConfigReader.html#a9">00967</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)
976 00969 <span class="keywordflow">if</span> (bail)
978 00971 printf(<span class="stringliteral">"There were errors in your configuration:\n%s"</span>,<a class="code" href="classConfigReader.html#p1">errorlog</a>->str().c_str());
981 00974 <span class="keywordflow">else</span>
983 00976 <span class="keywordtype">char</span> dataline[1024];
984 00977 <span class="keywordflow">if</span> (user)
986 00979 WriteServ(user-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"NOTICE %s :There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>);
987 00980 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof())
989 00982 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024);
990 00983 WriteServ(user-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"NOTICE %s :%s"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>,dataline);
993 00986 <span class="keywordflow">else</span>
995 00988 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>);
996 00989 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof())
998 00991 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024);
999 00992 WriteOpers(dataline);
1002 00995 <span class="keywordflow">return</span>;
1007 <a name="l01000"></a><a class="code" href="classConfigReader.html#a7">01000</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag)
1009 01002 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str());
1012 <a name="l01005"></a><a class="code" href="classConfigReader.html#a10">01005</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)
1014 01007 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index);
1017 <a name="l01010"></a><a class="code" href="classConfigReader.html#a8">01010</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>()
1019 01012 <span class="keywordflow">return</span> this-><a class="code" href="classConfigReader.html#p2">readerror</a>;
1023 <a name="l01016"></a><a class="code" href="classFileReader.html#a1">01016</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename)
1025 01018 <a class="code" href="modules_8h.html#a31">file_cache</a> c;
1026 01019 readfile(c,filename.c_str());
1027 01020 this-><a class="code" href="classFileReader.html#r0">fc</a> = c;
1030 <a name="l01023"></a><a class="code" href="classFileReader.html#a0">01023</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>()
1034 <a name="l01027"></a><a class="code" href="classFileReader.html#a3">01027</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename)
1036 01029 <a class="code" href="modules_8h.html#a31">file_cache</a> c;
1037 01030 readfile(c,filename.c_str());
1038 01031 this-><a class="code" href="classFileReader.html#r0">fc</a> = c;
1042 <a name="l01035"></a><a class="code" href="classFileReader.html#a2">01035</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>()
1046 <a name="l01039"></a><a class="code" href="classFileReader.html#a4">01039</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>()
1048 01041 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0)
1050 01043 <span class="keywordflow">return</span>(<span class="keyword">false</span>);
1052 01045 <span class="keywordflow">else</span>
1054 01047 <span class="keywordflow">return</span>(<span class="keyword">true</span>);
1058 <a name="l01051"></a><a class="code" href="classFileReader.html#a5">01051</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x)
1060 01053 <span class="keywordflow">if</span> ((x<0) || (x><a class="code" href="classFileReader.html#r0">fc</a>.size()))
1061 01054 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
1062 01055 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x];
1065 <a name="l01058"></a><a class="code" href="classFileReader.html#a6">01058</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>()
1067 01060 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size();
1071 01064 std::vector<Module*> <a class="code" href="modules_8cpp.html#a61">modules</a>(255);
1072 01065 std::vector<ircd_module*> <a class="code" href="modules_8cpp.html#a62">factory</a>(255);
1074 <a name="l01067"></a><a class="code" href="modules_8cpp.html#a1">01067</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a> = -1;
1077 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu May 12 22:58:58 2005 for InspIRCd by
1078 <a href="http://www.doxygen.org/index.html">
1079 <img src="doxygen.png" alt="doxygen" align="middle" border=0 >
1080 </a>1.3.3 </small></address>