diff options
Diffstat (limited to 'docs/module-doc/modules_8cpp-source.html')
-rw-r--r-- | docs/module-doc/modules_8cpp-source.html | 1292 |
1 files changed, 651 insertions, 641 deletions
diff --git a/docs/module-doc/modules_8cpp-source.html b/docs/module-doc/modules_8cpp-source.html index fcf95d119..27f88fd1a 100644 --- a/docs/module-doc/modules_8cpp-source.html +++ b/docs/module-doc/modules_8cpp-source.html @@ -58,719 +58,729 @@ 00051 <span class="preprocessor">#include "<a class="code" href="mode_8h.html">mode.h</a>"</span> 00052 <span class="preprocessor">#include "<a class="code" href="xline_8h.html">xline.h</a>"</span> 00053 <span class="preprocessor">#include "<a class="code" href="commands_8h.html">commands.h</a>"</span> -00054 -00055 <span class="preprocessor">#ifdef GCC3</span> -00056 <span class="preprocessor"></span><span class="preprocessor">#define nspace __gnu_cxx</span> -00057 <span class="preprocessor"></span><span class="preprocessor">#else</span> -<a name="l00058"></a><a class="code" href="modules_8cpp.html#a0">00058</a> <span class="preprocessor"></span><span class="preprocessor">#define nspace std</span> -00059 <span class="preprocessor"></span><span class="preprocessor">#endif</span> -00060 <span class="preprocessor"></span> -00061 <span class="keyword">using</span> <span class="keyword">namespace </span>std; -00062 -00063 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; -<a name="l00064"></a><a class="code" href="modules_8cpp.html#a2">00064</a> <span class="keyword">extern</span> vector<Module*> <a class="code" href="channels_8cpp.html#a2">modules</a>; -<a name="l00065"></a><a class="code" href="modules_8cpp.html#a3">00065</a> <span class="keyword">extern</span> vector<ircd_module*> <a class="code" href="channels_8cpp.html#a3">factory</a>; -00066 -<a name="l00067"></a><a class="code" href="modules_8cpp.html#a4">00067</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>; -<a name="l00068"></a><a class="code" href="modules_8cpp.html#a5">00068</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF]; -<a name="l00069"></a><a class="code" href="modules_8cpp.html#a6">00069</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF]; -<a name="l00070"></a><a class="code" href="modules_8cpp.html#a7">00070</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF]; -<a name="l00071"></a><a class="code" href="modules_8cpp.html#a8">00071</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF]; -<a name="l00072"></a><a class="code" href="modules_8cpp.html#a9">00072</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF]; -<a name="l00073"></a><a class="code" href="modules_8cpp.html#a10">00073</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF]; -<a name="l00074"></a><a class="code" href="modules_8cpp.html#a11">00074</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF]; -<a name="l00075"></a><a class="code" href="modules_8cpp.html#a12">00075</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF]; -<a name="l00076"></a><a class="code" href="modules_8cpp.html#a13">00076</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF]; -<a name="l00077"></a><a class="code" href="modules_8cpp.html#a14">00077</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF]; -<a name="l00078"></a><a class="code" href="modules_8cpp.html#a15">00078</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF]; -<a name="l00079"></a><a class="code" href="modules_8cpp.html#a16">00079</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF]; -<a name="l00080"></a><a class="code" href="modules_8cpp.html#a17">00080</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF]; -00081 -<a name="l00082"></a><a class="code" href="modules_8cpp.html#a18">00082</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>; -<a name="l00083"></a><a class="code" href="modules_8cpp.html#a19">00083</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>; -<a name="l00084"></a><a class="code" href="modules_8cpp.html#a20">00084</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>; -<a name="l00085"></a><a class="code" href="modules_8cpp.html#a21">00085</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>; -<a name="l00086"></a><a class="code" href="modules_8cpp.html#a22">00086</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>; -<a name="l00087"></a><a class="code" href="modules_8cpp.html#a23">00087</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>; -<a name="l00088"></a><a class="code" href="modules_8cpp.html#a24">00088</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>; -<a name="l00089"></a><a class="code" href="modules_8cpp.html#a25">00089</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>; -00090 -<a name="l00091"></a><a class="code" href="modules_8cpp.html#a26">00091</a> <span class="keyword">extern</span> std::vector<int> <a class="code" href="channels_8cpp.html#a26">fd_reap</a>; -<a name="l00092"></a><a class="code" href="modules_8cpp.html#a27">00092</a> <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="channels_8cpp.html#a27">module_names</a>; -00093 -<a name="l00094"></a><a class="code" href="modules_8cpp.html#a28">00094</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a28">boundPortCount</a>; -<a name="l00095"></a><a class="code" href="modules_8cpp.html#a29">00095</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">portCount</a>; -<a name="l00096"></a><a class="code" href="modules_8cpp.html#a30">00096</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">UDPportCount</a>; -<a name="l00097"></a><a class="code" href="modules_8cpp.html#a31">00097</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">ports</a>[MAXSOCKS]; -<a name="l00098"></a><a class="code" href="modules_8cpp.html#a32">00098</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a32">defaultRoute</a>; -00099 -<a name="l00100"></a><a class="code" href="modules_8cpp.html#a33">00100</a> <span class="keyword">extern</span> std::vector<long> <a class="code" href="channels_8cpp.html#a33">auth_cookies</a>; -<a name="l00101"></a><a class="code" href="modules_8cpp.html#a34">00101</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a34">config_f</a>; -00102 -<a name="l00103"></a><a class="code" href="modules_8cpp.html#a35">00103</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]; -00104 -<a name="l00105"></a><a class="code" href="modules_8cpp.html#a36">00105</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a36">log_file</a>; -00106 +00054 <span class="preprocessor">#include "inspstring.h"</span> +00055 +00056 <span class="preprocessor">#ifdef GCC3</span> +00057 <span class="preprocessor"></span><span class="preprocessor">#define nspace __gnu_cxx</span> +00058 <span class="preprocessor"></span><span class="preprocessor">#else</span> +<a name="l00059"></a><a class="code" href="modules_8cpp.html#a0">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define nspace std</span> +00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span> +00061 <span class="preprocessor"></span> +00062 <span class="keyword">using</span> <span class="keyword">namespace </span>std; +00063 +00064 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; +<a name="l00065"></a><a class="code" href="modules_8cpp.html#a2">00065</a> <span class="keyword">extern</span> std::vector<Module*> <a class="code" href="channels_8cpp.html#a2">modules</a>; +<a name="l00066"></a><a class="code" href="modules_8cpp.html#a3">00066</a> <span class="keyword">extern</span> std::vector<ircd_module*> <a class="code" href="channels_8cpp.html#a3">factory</a>; +00067 +<a name="l00068"></a><a class="code" href="modules_8cpp.html#a4">00068</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>; +<a name="l00069"></a><a class="code" href="modules_8cpp.html#a5">00069</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF]; +<a name="l00070"></a><a class="code" href="modules_8cpp.html#a6">00070</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF]; +<a name="l00071"></a><a class="code" href="modules_8cpp.html#a7">00071</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF]; +<a name="l00072"></a><a class="code" href="modules_8cpp.html#a8">00072</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF]; +<a name="l00073"></a><a class="code" href="modules_8cpp.html#a9">00073</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF]; +<a name="l00074"></a><a class="code" href="modules_8cpp.html#a10">00074</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF]; +<a name="l00075"></a><a class="code" href="modules_8cpp.html#a11">00075</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF]; +<a name="l00076"></a><a class="code" href="modules_8cpp.html#a12">00076</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF]; +<a name="l00077"></a><a class="code" href="modules_8cpp.html#a13">00077</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF]; +<a name="l00078"></a><a class="code" href="modules_8cpp.html#a14">00078</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF]; +<a name="l00079"></a><a class="code" href="modules_8cpp.html#a15">00079</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF]; +<a name="l00080"></a><a class="code" href="modules_8cpp.html#a16">00080</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF]; +<a name="l00081"></a><a class="code" href="modules_8cpp.html#a17">00081</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF]; +00082 +<a name="l00083"></a><a class="code" href="modules_8cpp.html#a18">00083</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>; +<a name="l00084"></a><a class="code" href="modules_8cpp.html#a19">00084</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>; +<a name="l00085"></a><a class="code" href="modules_8cpp.html#a20">00085</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>; +<a name="l00086"></a><a class="code" href="modules_8cpp.html#a21">00086</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>; +<a name="l00087"></a><a class="code" href="modules_8cpp.html#a22">00087</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>; +<a name="l00088"></a><a class="code" href="modules_8cpp.html#a23">00088</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>; +<a name="l00089"></a><a class="code" href="modules_8cpp.html#a24">00089</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>; +<a name="l00090"></a><a class="code" href="modules_8cpp.html#a25">00090</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>; +00091 +<a name="l00092"></a><a class="code" href="modules_8cpp.html#a26">00092</a> <span class="keyword">extern</span> std::vector<int> <a class="code" href="channels_8cpp.html#a26">fd_reap</a>; +<a name="l00093"></a><a class="code" href="modules_8cpp.html#a27">00093</a> <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="channels_8cpp.html#a27">module_names</a>; +00094 +<a name="l00095"></a><a class="code" href="modules_8cpp.html#a28">00095</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a28">boundPortCount</a>; +<a name="l00096"></a><a class="code" href="modules_8cpp.html#a29">00096</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">portCount</a>; +<a name="l00097"></a><a class="code" href="modules_8cpp.html#a30">00097</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">UDPportCount</a>; +<a name="l00098"></a><a class="code" href="modules_8cpp.html#a31">00098</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">ports</a>[MAXSOCKS]; +<a name="l00099"></a><a class="code" href="modules_8cpp.html#a32">00099</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a32">defaultRoute</a>; +00100 +<a name="l00101"></a><a class="code" href="modules_8cpp.html#a33">00101</a> <span class="keyword">extern</span> std::vector<long> <a class="code" href="channels_8cpp.html#a33">auth_cookies</a>; +<a name="l00102"></a><a class="code" href="modules_8cpp.html#a34">00102</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a34">config_f</a>; +00103 +<a name="l00104"></a><a class="code" href="modules_8cpp.html#a35">00104</a> <span class="keyword">extern</span> <a class="code" href="classserverrec.html">serverrec</a>* <a class="code" href="channels_8cpp.html#a35">me</a>[32]; +00105 +<a name="l00106"></a><a class="code" href="modules_8cpp.html#a36">00106</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a36">log_file</a>; 00107 -<a name="l00108"></a><a class="code" href="namespacenspace.html">00108</a> <span class="keyword">namespace </span><a class="code" href="channels_8cpp.html#a0">nspace</a> -00109 { -<a name="l00110"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html">00110</a> <span class="keyword">template</span><> <span class="keyword">struct </span>nspace::hash<in_addr> -00111 { -<a name="l00112"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html#a0">00112</a> size_t operator()(<span class="keyword">const</span> <span class="keyword">struct</span> in_addr &a)<span class="keyword"> const</span> -00113 <span class="keyword"> </span>{ -00114 size_t q; -00115 memcpy(&q,&a,<span class="keyword">sizeof</span>(size_t)); -00116 <span class="keywordflow">return</span> q; -00117 } -00118 }; -00119 -<a name="l00120"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html">00120</a> <span class="keyword">template</span><> <span class="keyword">struct </span>nspace::hash<string> -00121 { -<a name="l00122"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html#a0">00122</a> size_t operator()(<span class="keyword">const</span> string &s)<span class="keyword"> const</span> -00123 <span class="keyword"> </span>{ -00124 <span class="keywordtype">char</span> a[MAXBUF]; -00125 <span class="keyword">static</span> <span class="keyword">struct </span>hash<const char *> strhash; -00126 strlcpy(a,s.c_str(),MAXBUF); -00127 strlower(a); -00128 <span class="keywordflow">return</span> strhash(a); -00129 } -00130 }; -00131 } -00132 -00133 -<a name="l00134"></a><a class="code" href="structStrHashComp.html">00134</a> <span class="keyword">struct </span><a class="code" href="structStrHashComp.html">StrHashComp</a> -00135 { -00136 -<a name="l00137"></a><a class="code" href="structStrHashComp.html#a0">00137</a> <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> string& s1, <span class="keyword">const</span> string& s2)<span class="keyword"> const</span> -00138 <span class="keyword"> </span>{ -00139 <span class="keywordtype">char</span> a[MAXBUF],b[MAXBUF]; -00140 strlcpy(a,s1.c_str(),MAXBUF); -00141 strlcpy(b,s2.c_str(),MAXBUF); -00142 <span class="keywordflow">return</span> (strcasecmp(a,b) == 0); -00143 } -00144 -00145 }; -00146 -<a name="l00147"></a><a class="code" href="structInAddr__HashComp.html">00147</a> <span class="keyword">struct </span><a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a> -00148 { -00149 -<a name="l00150"></a><a class="code" href="structInAddr__HashComp.html#a0">00150</a> <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> in_addr &s1, <span class="keyword">const</span> in_addr &s2)<span class="keyword"> const</span> -00151 <span class="keyword"> </span>{ -00152 size_t q; -00153 size_t p; -00154 -00155 memcpy(&q,&s1,<span class="keyword">sizeof</span>(size_t)); -00156 memcpy(&p,&s2,<span class="keyword">sizeof</span>(size_t)); -00157 -00158 <span class="keywordflow">return</span> (q == p); -00159 } -00160 -00161 }; -00162 -00163 -<a name="l00164"></a><a class="code" href="modules_8cpp.html#a37">00164</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#a37">user_hash</a>; -<a name="l00165"></a><a class="code" href="modules_8cpp.html#a38">00165</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#a38">chan_hash</a>; -<a name="l00166"></a><a class="code" href="modules_8cpp.html#a39">00166</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#a39">address_cache</a>; -<a name="l00167"></a><a class="code" href="modules_8cpp.html#a40">00167</a> <span class="keyword">typedef</span> std::deque<command_t> <a class="code" href="modules_8cpp.html#a40">command_table</a>; -00168 +00108 +<a name="l00109"></a><a class="code" href="namespacenspace.html">00109</a> <span class="keyword">namespace </span><a class="code" href="channels_8cpp.html#a0">nspace</a> +00110 { +00111 <span class="preprocessor">#ifdef GCC34</span> +00112 <span class="preprocessor"></span> <span class="keyword">template</span><> <span class="keyword">struct </span>hash<in_addr> +00113 #else +<a name="l00114"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html">00114</a> template<> struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash<in_addr> +00115 #endif +00116 { +<a name="l00117"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01in__addr_01_4.html#a0">00117</a> size_t operator()(<span class="keyword">const</span> <span class="keyword">struct</span> in_addr &a)<span class="keyword"> const</span> +00118 <span class="keyword"> </span>{ +00119 size_t q; +00120 memcpy(&q,&a,<span class="keyword">sizeof</span>(size_t)); +00121 <span class="keywordflow">return</span> q; +00122 } +00123 }; +00124 <span class="preprocessor">#ifdef GCC34</span> +00125 <span class="preprocessor"></span> <span class="keyword">template</span><> <span class="keyword">struct </span>hash<string> +00126 #else +<a name="l00127"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html">00127</a> template<> struct <a class="code" href="channels_8cpp.html#a0">nspace</a>::hash<string> +00128 #endif +00129 { +<a name="l00130"></a><a class="code" href="structnspace_1_1nspace_1_1hash_3_01string_01_4.html#a0">00130</a> size_t operator()(<span class="keyword">const</span> string &s)<span class="keyword"> const</span> +00131 <span class="keyword"> </span>{ +00132 <span class="keywordtype">char</span> a[MAXBUF]; +00133 <span class="keyword">static</span> <span class="keyword">struct </span>hash<const char *> strhash; +00134 strlcpy(a,s.c_str(),MAXBUF); +00135 strlower(a); +00136 <span class="keywordflow">return</span> strhash(a); +00137 } +00138 }; +00139 } +00140 +<a name="l00141"></a><a class="code" href="structStrHashComp.html">00141</a> <span class="keyword">struct </span><a class="code" href="structStrHashComp.html">StrHashComp</a> +00142 { +00143 +<a name="l00144"></a><a class="code" href="structStrHashComp.html#a0">00144</a> <span class="keywordtype">bool</span> <a class="code" href="structStrHashComp.html#a0">operator()</a>(<span class="keyword">const</span> string& s1, <span class="keyword">const</span> string& s2)<span class="keyword"> const</span> +00145 <span class="keyword"> </span>{ +00146 <span class="keywordtype">char</span> a[MAXBUF],b[MAXBUF]; +00147 strlcpy(a,s1.c_str(),MAXBUF); +00148 strlcpy(b,s2.c_str(),MAXBUF); +00149 <span class="keywordflow">return</span> (strcasecmp(a,b) == 0); +00150 } +00151 +00152 }; +00153 +<a name="l00154"></a><a class="code" href="structInAddr__HashComp.html">00154</a> <span class="keyword">struct </span><a class="code" href="structInAddr__HashComp.html">InAddr_HashComp</a> +00155 { +00156 +<a name="l00157"></a><a class="code" href="structInAddr__HashComp.html#a0">00157</a> <span class="keywordtype">bool</span> <a class="code" href="structInAddr__HashComp.html#a0">operator()</a>(<span class="keyword">const</span> in_addr &s1, <span class="keyword">const</span> in_addr &s2)<span class="keyword"> const</span> +00158 <span class="keyword"> </span>{ +00159 size_t q; +00160 size_t p; +00161 +00162 memcpy(&q,&s1,<span class="keyword">sizeof</span>(size_t)); +00163 memcpy(&p,&s2,<span class="keyword">sizeof</span>(size_t)); +00164 +00165 <span class="keywordflow">return</span> (q == p); +00166 } +00167 +00168 }; 00169 -<a name="l00170"></a><a class="code" href="modules_8cpp.html#a41">00170</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a37">user_hash</a> <a class="code" href="modules_8cpp.html#a41">clientlist</a>; -<a name="l00171"></a><a class="code" href="modules_8cpp.html#a42">00171</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">chan_hash</a> <a class="code" href="modules_8cpp.html#a42">chanlist</a>; -<a name="l00172"></a><a class="code" href="modules_8cpp.html#a43">00172</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a37">user_hash</a> <a class="code" href="modules_8cpp.html#a43">whowas</a>; -<a name="l00173"></a><a class="code" href="modules_8cpp.html#a44">00173</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">command_table</a> <a class="code" href="modules_8cpp.html#a44">cmdlist</a>; -<a name="l00174"></a><a class="code" href="modules_8cpp.html#a45">00174</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a26">file_cache</a> <a class="code" href="modules_8cpp.html#a45">MOTD</a>; -<a name="l00175"></a><a class="code" href="modules_8cpp.html#a46">00175</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a26">file_cache</a> <a class="code" href="modules_8cpp.html#a46">RULES</a>; -<a name="l00176"></a><a class="code" href="modules_8cpp.html#a47">00176</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">address_cache</a> <a class="code" href="modules_8cpp.html#a47">IP</a>; -00177 -00178 -00179 <span class="comment">// class type for holding an extended mode character - internal to core</span> -00180 -<a name="l00181"></a><a class="code" href="classExtMode.html">00181</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> -00182 { -00183 <span class="keyword">public</span>: -<a name="l00184"></a><a class="code" href="classExtMode.html#o0">00184</a> <span class="keywordtype">char</span> modechar; -<a name="l00185"></a><a class="code" href="classExtMode.html#o1">00185</a> <span class="keywordtype">int</span> type; -<a name="l00186"></a><a class="code" href="classExtMode.html#o2">00186</a> <span class="keywordtype">int</span> params_when_on; -<a name="l00187"></a><a class="code" href="classExtMode.html#o3">00187</a> <span class="keywordtype">int</span> params_when_off; -<a name="l00188"></a><a class="code" href="classExtMode.html#o4">00188</a> <span class="keywordtype">bool</span> needsoper; -<a name="l00189"></a><a class="code" href="classExtMode.html#o5">00189</a> <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>; -<a name="l00190"></a><a class="code" href="classExtMode.html#a0">00190</a> <a class="code" href="classExtMode.html">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) : modechar(mc), type(ty), needsoper(oper), params_when_on(p_on), params_when_off(p_off) { }; -00191 }; -00192 -<a name="l00193"></a><a class="code" href="modules_8cpp.html#a48">00193</a> <span class="keyword">typedef</span> std::vector<ExtMode> <a class="code" href="modules_8cpp.html#a48">ExtModeList</a>; -<a name="l00194"></a><a class="code" href="modules_8cpp.html#a49">00194</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a>; -00195 -00196 -<a name="l00197"></a><a class="code" href="modules_8cpp.html#a50">00197</a> <a class="code" href="modules_8cpp.html#a48">ExtModeList</a> <a class="code" href="modules_8cpp.html#a50">EMode</a>; -00198 -00199 <span class="comment">// returns true if an extended mode character is in use</span> -<a name="l00200"></a><a class="code" href="modules_8cpp.html#a51">00200</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a51">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00201 { -00202 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size()); -00203 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) -00204 { -00205 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00206 { -00207 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00208 } -00209 } -00210 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00211 } -00212 -<a name="l00213"></a><a class="code" href="modules_8cpp.html#a52">00213</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a52">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00214 { -00215 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size()); -00216 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) -00217 { -00218 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->list == <span class="keyword">true</span>)) -00219 { -00220 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00221 } -00222 } -00223 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00224 } -00225 -<a name="l00226"></a><a class="code" href="modules_8cpp.html#a53">00226</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00227 { -00228 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size()); -00229 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) -00230 { -00231 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->needsoper == <span class="keyword">true</span>)) -00232 { -00233 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00234 } -00235 } -00236 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00237 } -00238 -00239 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> -<a name="l00240"></a><a class="code" href="modules_8cpp.html#a54">00240</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a54">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00241 { -00242 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) -00243 { -00244 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00245 { -00246 <span class="keywordflow">return</span> i->params_when_on; -00247 } -00248 } -00249 <span class="keywordflow">return</span> 0; -00250 } -00251 -00252 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> -<a name="l00253"></a><a class="code" href="modules_8cpp.html#a55">00253</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00254 { -00255 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) -00256 { -00257 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00258 { -00259 <span class="keywordflow">return</span> i->params_when_off; -00260 } -00261 } -00262 <span class="keywordflow">return</span> 0; -00263 } -00264 -00265 <span class="comment">// returns true if an extended mode character is in use</span> -<a name="l00266"></a><a class="code" href="modules_8cpp.html#a56">00266</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a56">DoAddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_on, <span class="keywordtype">int</span> params_off) -00267 { -00268 <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a51">ModeDefined</a>(modechar,type)) { -00269 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00270 } -00271 <a class="code" href="modules_8cpp.html#a50">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off)); -00272 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00273 } -00274 -00275 <span class="comment">// turns a mode into a listmode</span> -<a name="l00276"></a><a class="code" href="modules_8cpp.html#a57">00276</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a57">ModeMakeList</a>(<span class="keywordtype">char</span> modechar) -00277 { -00278 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) -00279 { -00280 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == <a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>)) -00281 { -00282 i->list = <span class="keyword">true</span>; -00283 <span class="keywordflow">return</span>; -00284 } -00285 } -00286 <span class="keywordflow">return</span>; -00287 } -00288 -00289 <span class="comment">// version is a simple class for holding a modules version number</span> -00290 -<a name="l00291"></a><a class="code" href="classVersion.html#a0">00291</a> <a class="code" href="classVersion.html#a0">Version::Version</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> revision, <span class="keywordtype">int</span> build) : Major(major), Minor(minor), Revision(revision), Build(build) { }; -00292 -00293 <span class="comment">// admin is a simple class for holding a server's administrative info</span> -00294 -<a name="l00295"></a><a class="code" href="classAdmin.html#a0">00295</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) { }; -00296 -<a name="l00297"></a><a class="code" href="classModule.html#a0">00297</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { } -<a name="l00298"></a><a class="code" href="classModule.html#a1">00298</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { } -<a name="l00299"></a><a class="code" href="classModule.html#a3">00299</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) { } -<a name="l00300"></a><a class="code" href="classModule.html#a4">00300</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) { } -<a name="l00301"></a><a class="code" href="classModule.html#a5">00301</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } -<a name="l00302"></a><a class="code" href="classModule.html#a6">00302</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } -<a name="l00303"></a><a class="code" href="classModule.html#a7">00303</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnPacketTransmit</a>(<span class="keywordtype">char</span> *p) { } -<a name="l00304"></a><a class="code" href="classModule.html#a8">00304</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketReceive</a>(<span class="keywordtype">char</span> *p) { } -<a name="l00305"></a><a class="code" href="classModule.html#a9">00305</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnRehash</a>() { } -<a name="l00306"></a><a class="code" href="classModule.html#a10">00306</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnServerRaw</a>(std::string &raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { } -<a name="l00307"></a><a class="code" href="classModule.html#a12">00307</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; } -<a name="l00308"></a><a class="code" href="classModule.html#a11">00308</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a11">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; } -<a name="l00309"></a><a class="code" href="classModule.html#a2">00309</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 name="l00310"></a><a class="code" href="classModule.html#a13">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a13">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00311"></a><a class="code" href="classModule.html#a14">00311</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a14">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00312"></a><a class="code" href="classModule.html#a15">00312</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { }; -<a name="l00313"></a><a class="code" href="classModule.html#a16">00313</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a16">Module::OnUserPreInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel) { <span class="keywordflow">return</span> 0; }; -<a name="l00314"></a><a class="code" href="classModule.html#a17">00314</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a17">Module::OnUserPreMessage</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; -<a name="l00315"></a><a class="code" href="classModule.html#a18">00315</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a18">Module::OnUserPreNotice</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; -<a name="l00316"></a><a class="code" href="classModule.html#a19">00316</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; }; -<a name="l00317"></a><a class="code" href="classModule.html#a20">00317</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a20">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>; }; -<a name="l00318"></a><a class="code" href="classModule.html#a21">00318</a> <a class="code" href="modules_8h.html#a27">string_list</a> <a class="code" href="classModule.html#a21">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a27">string_list</a> empty; <span class="keywordflow">return</span> empty; } -<a name="l00319"></a><a class="code" href="classModule.html#a22">00319</a> <a class="code" href="modules_8h.html#a27">string_list</a> <a class="code" href="classModule.html#a22">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a27">string_list</a> empty; <span class="keywordflow">return</span> empty; } -00320 -00321 -00322 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span> -00323 <span class="comment">// exports in the core</span> -00324 <span class="comment">//</span> -00325 -<a name="l00326"></a><a class="code" href="classServer.html#a0">00326</a> <a class="code" href="classServer.html#a0">Server::Server</a>() -00327 { -00328 } -00329 -<a name="l00330"></a><a class="code" href="classServer.html#a1">00330</a> <a class="code" href="classServer.html#a1">Server::~Server</a>() -00331 { -00332 } -00333 -<a name="l00334"></a><a class="code" href="classServer.html#a2">00334</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s) -00335 { -00336 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str()); -00337 } -00338 -<a name="l00339"></a><a class="code" href="classServer.html#a30">00339</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a30">Server::MatchText</a>(std::string sliteral, std::string spattern) -00340 { -00341 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF]; -00342 strlcpy(literal,sliteral.c_str(),MAXBUF); -00343 strlcpy(pattern,spattern.c_str(),MAXBUF); -00344 <span class="keywordflow">return</span> match(literal,pattern); -00345 } -00346 -<a name="l00347"></a><a class="code" href="classServer.html#a25">00347</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a25">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text) -00348 { -00349 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str()); -00350 } -00351 -<a name="l00352"></a><a class="code" href="classServer.html#a26">00352</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a26">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key) -00353 { -00354 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">true</span>); +00170 +<a name="l00171"></a><a class="code" href="modules_8cpp.html#a37">00171</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#a37">user_hash</a>; +<a name="l00172"></a><a class="code" href="modules_8cpp.html#a38">00172</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#a38">chan_hash</a>; +<a name="l00173"></a><a class="code" href="modules_8cpp.html#a39">00173</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#a39">address_cache</a>; +<a name="l00174"></a><a class="code" href="modules_8cpp.html#a40">00174</a> <span class="keyword">typedef</span> std::deque<command_t> <a class="code" href="modules_8cpp.html#a40">command_table</a>; +00175 +00176 +<a name="l00177"></a><a class="code" href="modules_8cpp.html#a41">00177</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a37">user_hash</a> <a class="code" href="modules_8cpp.html#a41">clientlist</a>; +<a name="l00178"></a><a class="code" href="modules_8cpp.html#a42">00178</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">chan_hash</a> <a class="code" href="modules_8cpp.html#a42">chanlist</a>; +<a name="l00179"></a><a class="code" href="modules_8cpp.html#a43">00179</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a37">user_hash</a> <a class="code" href="modules_8cpp.html#a43">whowas</a>; +<a name="l00180"></a><a class="code" href="modules_8cpp.html#a44">00180</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">command_table</a> <a class="code" href="modules_8cpp.html#a44">cmdlist</a>; +<a name="l00181"></a><a class="code" href="modules_8cpp.html#a45">00181</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a26">file_cache</a> <a class="code" href="modules_8cpp.html#a45">MOTD</a>; +<a name="l00182"></a><a class="code" href="modules_8cpp.html#a46">00182</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a26">file_cache</a> <a class="code" href="modules_8cpp.html#a46">RULES</a>; +<a name="l00183"></a><a class="code" href="modules_8cpp.html#a47">00183</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">address_cache</a> <a class="code" href="modules_8cpp.html#a47">IP</a>; +00184 +00185 +00186 <span class="comment">// class type for holding an extended mode character - internal to core</span> +00187 +<a name="l00188"></a><a class="code" href="classExtMode.html">00188</a> <span class="keyword">class </span><a class="code" href="classExtMode.html">ExtMode</a> : <span class="keyword">public</span> <a class="code" href="classclassbase.html">classbase</a> +00189 { +00190 <span class="keyword">public</span>: +<a name="l00191"></a><a class="code" href="classExtMode.html#o0">00191</a> <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#o0">modechar</a>; +<a name="l00192"></a><a class="code" href="classExtMode.html#o1">00192</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o1">type</a>; +<a name="l00193"></a><a class="code" href="classExtMode.html#o2">00193</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o2">params_when_on</a>; +<a name="l00194"></a><a class="code" href="classExtMode.html#o3">00194</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o3">params_when_off</a>; +<a name="l00195"></a><a class="code" href="classExtMode.html#o4">00195</a> <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#o4">needsoper</a>; +<a name="l00196"></a><a class="code" href="classExtMode.html#o5">00196</a> <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>; +<a name="l00197"></a><a class="code" href="classExtMode.html#a0">00197</a> <a class="code" href="classExtMode.html#a0">ExtMode</a>(<span class="keywordtype">char</span> mc, <span class="keywordtype">int</span> ty, <span class="keywordtype">bool</span> oper, <span class="keywordtype">int</span> p_on, <span class="keywordtype">int</span> p_off) : <a class="code" href="classExtMode.html#o0">modechar</a>(mc), <a class="code" href="classExtMode.html#o1">type</a>(ty), <a class="code" href="classExtMode.html#o4">needsoper</a>(oper), <a class="code" href="classExtMode.html#o2">params_when_on</a>(p_on), <a class="code" href="classExtMode.html#o3">params_when_off</a>(p_off) { }; +00198 }; +00199 +<a name="l00200"></a><a class="code" href="modules_8cpp.html#a48">00200</a> <span class="keyword">typedef</span> std::vector<ExtMode> <a class="code" href="modules_8cpp.html#a48">ExtModeList</a>; +<a name="l00201"></a><a class="code" href="modules_8cpp.html#a49">00201</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a>; +00202 +00203 +<a name="l00204"></a><a class="code" href="modules_8cpp.html#a50">00204</a> <a class="code" href="modules_8cpp.html#a48">ExtModeList</a> <a class="code" href="modules_8cpp.html#a50">EMode</a>; +00205 +00206 <span class="comment">// returns true if an extended mode character is in use</span> +<a name="l00207"></a><a class="code" href="modules_8cpp.html#a51">00207</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a51">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00208 { +00209 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size()); +00210 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) +00211 { +00212 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +00213 { +00214 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00215 } +00216 } +00217 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00218 } +00219 +<a name="l00220"></a><a class="code" href="modules_8cpp.html#a52">00220</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a52">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00221 { +00222 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size()); +00223 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) +00224 { +00225 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->list == <span class="keyword">true</span>)) +00226 { +00227 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00228 } +00229 } +00230 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00231 } +00232 +<a name="l00233"></a><a class="code" href="modules_8cpp.html#a53">00233</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00234 { +00235 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Size of extmodes vector is %d"</span>,<a class="code" href="modules_8cpp.html#a50">EMode</a>.size()); +00236 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) +00237 { +00238 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->needsoper == <span class="keyword">true</span>)) +00239 { +00240 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00241 } +00242 } +00243 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00244 } +00245 +00246 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> +<a name="l00247"></a><a class="code" href="modules_8cpp.html#a54">00247</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a54">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00248 { +00249 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) +00250 { +00251 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +00252 { +00253 <span class="keywordflow">return</span> i->params_when_on; +00254 } +00255 } +00256 <span class="keywordflow">return</span> 0; +00257 } +00258 +00259 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> +<a name="l00260"></a><a class="code" href="modules_8cpp.html#a55">00260</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00261 { +00262 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) +00263 { +00264 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +00265 { +00266 <span class="keywordflow">return</span> i->params_when_off; +00267 } +00268 } +00269 <span class="keywordflow">return</span> 0; +00270 } +00271 +00272 <span class="comment">// returns true if an extended mode character is in use</span> +<a name="l00273"></a><a class="code" href="modules_8cpp.html#a56">00273</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a56">DoAddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_on, <span class="keywordtype">int</span> params_off) +00274 { +00275 <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a51">ModeDefined</a>(modechar,type)) { +00276 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00277 } +00278 <a class="code" href="modules_8cpp.html#a50">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off)); +00279 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00280 } +00281 +00282 <span class="comment">// turns a mode into a listmode</span> +<a name="l00283"></a><a class="code" href="modules_8cpp.html#a57">00283</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a57">ModeMakeList</a>(<span class="keywordtype">char</span> modechar) +00284 { +00285 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a49">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a50">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a50">EMode</a>.end(); i++) +00286 { +00287 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == <a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>)) +00288 { +00289 i->list = <span class="keyword">true</span>; +00290 <span class="keywordflow">return</span>; +00291 } +00292 } +00293 <span class="keywordflow">return</span>; +00294 } +00295 +00296 <span class="comment">// version is a simple class for holding a modules version number</span> +00297 +<a name="l00298"></a><a class="code" href="classVersion.html#a0">00298</a> <a class="code" href="classVersion.html#a0">Version::Version</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> revision, <span class="keywordtype">int</span> build) : Major(major), Minor(minor), Revision(revision), Build(build) { }; +00299 +00300 <span class="comment">// admin is a simple class for holding a server's administrative info</span> +00301 +<a name="l00302"></a><a class="code" href="classAdmin.html#a0">00302</a> <a class="code" href="classAdmin.html#a0">Admin::Admin</a>(std::string name, std::string email, std::string nick) : Name(name), Email(email), Nick(nick) { }; +00303 +<a name="l00304"></a><a class="code" href="classModule.html#a0">00304</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { } +<a name="l00305"></a><a class="code" href="classModule.html#a1">00305</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { } +<a name="l00306"></a><a class="code" href="classModule.html#a3">00306</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a3">Module::OnUserConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00307"></a><a class="code" href="classModule.html#a4">00307</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a4">Module::OnUserQuit</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00308"></a><a class="code" href="classModule.html#a5">00308</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } +<a name="l00309"></a><a class="code" href="classModule.html#a6">00309</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } +<a name="l00310"></a><a class="code" href="classModule.html#a7">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnPacketTransmit</a>(<span class="keywordtype">char</span> *p) { } +<a name="l00311"></a><a class="code" href="classModule.html#a8">00311</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketReceive</a>(<span class="keywordtype">char</span> *p) { } +<a name="l00312"></a><a class="code" href="classModule.html#a9">00312</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnRehash</a>() { } +<a name="l00313"></a><a class="code" href="classModule.html#a10">00313</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnServerRaw</a>(std::string &raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00314"></a><a class="code" href="classModule.html#a12">00314</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; } +<a name="l00315"></a><a class="code" href="classModule.html#a11">00315</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a11">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; } +<a name="l00316"></a><a class="code" href="classModule.html#a2">00316</a> <a class="code" href="classVersion.html">Version</a> <a class="code" href="classModule.html#a2">Module::GetVersion</a>() { <span class="keywordflow">return</span> <a class="code" href="classVersion.html">Version</a>(1,0,0,0); } +<a name="l00317"></a><a class="code" href="classModule.html#a13">00317</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a13">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00318"></a><a class="code" href="classModule.html#a14">00318</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a14">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00319"></a><a class="code" href="classModule.html#a15">00319</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { }; +<a name="l00320"></a><a class="code" href="classModule.html#a16">00320</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a16">Module::OnUserPreInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel) { <span class="keywordflow">return</span> 0; }; +<a name="l00321"></a><a class="code" href="classModule.html#a17">00321</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a17">Module::OnUserPreMessage</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; +<a name="l00322"></a><a class="code" href="classModule.html#a18">00322</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a18">Module::OnUserPreNotice</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; +<a name="l00323"></a><a class="code" href="classModule.html#a19">00323</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; }; +<a name="l00324"></a><a class="code" href="classModule.html#a20">00324</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a20">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>; }; +<a name="l00325"></a><a class="code" href="classModule.html#a21">00325</a> <a class="code" href="modules_8h.html#a27">string_list</a> <a class="code" href="classModule.html#a21">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a27">string_list</a> empty; <span class="keywordflow">return</span> empty; } +<a name="l00326"></a><a class="code" href="classModule.html#a22">00326</a> <a class="code" href="modules_8h.html#a27">string_list</a> <a class="code" href="classModule.html#a22">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a27">string_list</a> empty; <span class="keywordflow">return</span> empty; } +<a name="l00327"></a><a class="code" href="classModule.html#a23">00327</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a23">Module::On005Numeric</a>(std::string &output) { }; +<a name="l00328"></a><a class="code" href="classModule.html#a24">00328</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a24">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; }; +<a name="l00329"></a><a class="code" href="classModule.html#a25">00329</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a25">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,std::string name) { }; +00330 +00331 +00332 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span> +00333 <span class="comment">// exports in the core</span> +00334 <span class="comment">//</span> +00335 +<a name="l00336"></a><a class="code" href="classServer.html#a0">00336</a> <a class="code" href="classServer.html#a0">Server::Server</a>() +00337 { +00338 } +00339 +<a name="l00340"></a><a class="code" href="classServer.html#a1">00340</a> <a class="code" href="classServer.html#a1">Server::~Server</a>() +00341 { +00342 } +00343 +<a name="l00344"></a><a class="code" href="classServer.html#a2">00344</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s) +00345 { +00346 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str()); +00347 } +00348 +<a name="l00349"></a><a class="code" href="classServer.html#a30">00349</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a30">Server::MatchText</a>(std::string sliteral, std::string spattern) +00350 { +00351 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF]; +00352 strlcpy(literal,sliteral.c_str(),MAXBUF); +00353 strlcpy(pattern,spattern.c_str(),MAXBUF); +00354 <span class="keywordflow">return</span> match(literal,pattern); 00355 } 00356 -<a name="l00357"></a><a class="code" href="classServer.html#a27">00357</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a27">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason) +<a name="l00357"></a><a class="code" href="classServer.html#a25">00357</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a25">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text) 00358 { -00359 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>); +00359 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str()); 00360 } 00361 -<a name="l00362"></a><a class="code" href="classServer.html#a35">00362</a> <a class="code" href="modules_8h.html#a28">chanuserlist</a> <a class="code" href="classServer.html#a35">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) +<a name="l00362"></a><a class="code" href="classServer.html#a26">00362</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a26">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key) 00363 { -00364 <a class="code" href="modules_8h.html#a28">chanuserlist</a> userl; -00365 userl.clear(); -00366 <span class="keywordflow">for</span> (user_hash::const_iterator i = <a class="code" href="modules_8cpp.html#a41">clientlist</a>.begin(); i != <a class="code" href="modules_8cpp.html#a41">clientlist</a>.end(); i++) -00367 { -00368 <span class="keywordflow">if</span> (i->second) -00369 { -00370 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a16">has_channel</a>(i->second,chan)) -00371 { -00372 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a13">isnick</a>(i->second->nick)) -00373 { -00374 userl.push_back(i->second); -00375 } -00376 } -00377 } -00378 } -00379 <span class="keywordflow">return</span> userl; -00380 } -<a name="l00381"></a><a class="code" href="classServer.html#a28">00381</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a28">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname) -00382 { -00383 force_nickchange(user,nickname.c_str()); -00384 } -00385 -<a name="l00386"></a><a class="code" href="classServer.html#a29">00386</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a29">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason) -00387 { -00388 <a class="code" href="message_8h.html#a19">send_network_quit</a>(user-><a class="code" href="classuserrec.html#o0">nick</a>,reason.c_str()); -00389 kill_link(user,reason.c_str()); +00364 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">true</span>); +00365 } +00366 +<a name="l00367"></a><a class="code" href="classServer.html#a27">00367</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a27">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason) +00368 { +00369 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>); +00370 } +00371 +<a name="l00372"></a><a class="code" href="classServer.html#a35">00372</a> <a class="code" href="modules_8h.html#a28">chanuserlist</a> <a class="code" href="classServer.html#a35">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) +00373 { +00374 <a class="code" href="modules_8h.html#a28">chanuserlist</a> userl; +00375 userl.clear(); +00376 <span class="keywordflow">for</span> (user_hash::const_iterator i = <a class="code" href="modules_8cpp.html#a41">clientlist</a>.begin(); i != <a class="code" href="modules_8cpp.html#a41">clientlist</a>.end(); i++) +00377 { +00378 <span class="keywordflow">if</span> (i->second) +00379 { +00380 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a16">has_channel</a>(i->second,chan)) +00381 { +00382 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a13">isnick</a>(i->second->nick)) +00383 { +00384 userl.push_back(i->second); +00385 } +00386 } +00387 } +00388 } +00389 <span class="keywordflow">return</span> userl; 00390 } -00391 -<a name="l00392"></a><a class="code" href="classServer.html#a34">00392</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a34">Server::IsUlined</a>(std::string server) -00393 { -00394 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a71">is_uline</a>(server.c_str()); -00395 } -00396 -<a name="l00397"></a><a class="code" href="classServer.html#a31">00397</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::CallCommandHandler</a>(std::string commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user) -00398 { -00399 call_handler(commandname.c_str(),parameters,pcnt,user); +<a name="l00391"></a><a class="code" href="classServer.html#a28">00391</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a28">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname) +00392 { +00393 force_nickchange(user,nickname.c_str()); +00394 } +00395 +<a name="l00396"></a><a class="code" href="classServer.html#a29">00396</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a29">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason) +00397 { +00398 <a class="code" href="message_8h.html#a19">send_network_quit</a>(user-><a class="code" href="classuserrec.html#o0">nick</a>,reason.c_str()); +00399 kill_link(user,reason.c_str()); 00400 } 00401 -<a name="l00402"></a><a class="code" href="classServer.html#a3">00402</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) +<a name="l00402"></a><a class="code" href="classServer.html#a34">00402</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a34">Server::IsUlined</a>(std::string server) 00403 { -00404 log(level,<span class="stringliteral">"%s"</span>,s.c_str()); +00404 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a71">is_uline</a>(server.c_str()); 00405 } 00406 -<a name="l00407"></a><a class="code" href="classServer.html#a23">00407</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a23">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams) +<a name="l00407"></a><a class="code" href="classServer.html#a31">00407</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::CallCommandHandler</a>(std::string commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user) 00408 { -00409 <a class="code" href="modules_8h.html#a30">createcommand</a>(cmd,f,flags,minparams); +00409 call_handler(commandname.c_str(),parameters,pcnt,user); 00410 } 00411 -<a name="l00412"></a><a class="code" href="classServer.html#a24">00412</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a24">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) +<a name="l00412"></a><a class="code" href="classServer.html#a3">00412</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) 00413 { -00414 <a class="code" href="modules_8h.html#a31">server_mode</a>(parameters,pcnt,user); +00414 log(level,<span class="stringliteral">"%s"</span>,s.c_str()); 00415 } 00416 -<a name="l00417"></a><a class="code" href="classServer.html#a4">00417</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) +<a name="l00417"></a><a class="code" href="classServer.html#a23">00417</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a23">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams) 00418 { -00419 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); +00419 <a class="code" href="modules_8h.html#a30">createcommand</a>(cmd,f,flags,minparams); 00420 } 00421 -<a name="l00422"></a><a class="code" href="classServer.html#a5">00422</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) +<a name="l00422"></a><a class="code" href="classServer.html#a24">00422</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a24">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) 00423 { -00424 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); +00424 <a class="code" href="modules_8h.html#a31">server_mode</a>(parameters,pcnt,user); 00425 } 00426 -<a name="l00427"></a><a class="code" href="classServer.html#a6">00427</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s) +<a name="l00427"></a><a class="code" href="classServer.html#a4">00427</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) 00428 { -00429 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str()); +00429 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); 00430 } 00431 -<a name="l00432"></a><a class="code" href="classServer.html#a7">00432</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s) +<a name="l00432"></a><a class="code" href="classServer.html#a5">00432</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) 00433 { -00434 <span class="keywordflow">if</span> (!Source) -00435 { -00436 <span class="comment">// if source is NULL, then the message originates from the local server</span> -00437 Write(Dest-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s %s"</span>,this->GetServerName().c_str(),s.c_str()); -00438 } -00439 <span class="keywordflow">else</span> -00440 { -00441 <span class="comment">// otherwise it comes from the user specified</span> -00442 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str()); -00443 } -00444 } -00445 -<a name="l00446"></a><a class="code" href="classServer.html#a8">00446</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender) -00447 { -00448 <span class="keywordflow">if</span> (IncludeSender) -00449 { -00450 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); -00451 } -00452 <span class="keywordflow">else</span> -00453 { -00454 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); -00455 } -00456 } -00457 -<a name="l00458"></a><a class="code" href="classServer.html#a9">00458</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a9">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2) -00459 { -00460 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0); -00461 } -00462 -<a name="l00463"></a><a class="code" href="classServer.html#a10">00463</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a10">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender) -00464 { -00465 <span class="keywordflow">if</span> (IncludeSender) -00466 { -00467 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str()); -00468 } -00469 <span class="keywordflow">else</span> -00470 { -00471 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str()); -00472 } -00473 } -00474 -<a name="l00475"></a><a class="code" href="classServer.html#a11">00475</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text) -00476 { -00477 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str()); -00478 } -00479 -<a name="l00480"></a><a class="code" href="classServer.html#a32">00480</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a32">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host) -00481 { -00482 <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str()); +00434 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); +00435 } +00436 +<a name="l00437"></a><a class="code" href="classServer.html#a6">00437</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s) +00438 { +00439 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str()); +00440 } +00441 +<a name="l00442"></a><a class="code" href="classServer.html#a7">00442</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s) +00443 { +00444 <span class="keywordflow">if</span> (!Source) +00445 { +00446 <span class="comment">// if source is NULL, then the message originates from the local server</span> +00447 Write(Dest-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s %s"</span>,this->GetServerName().c_str(),s.c_str()); +00448 } +00449 <span class="keywordflow">else</span> +00450 { +00451 <span class="comment">// otherwise it comes from the user specified</span> +00452 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str()); +00453 } +00454 } +00455 +<a name="l00456"></a><a class="code" href="classServer.html#a8">00456</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender) +00457 { +00458 <span class="keywordflow">if</span> (IncludeSender) +00459 { +00460 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); +00461 } +00462 <span class="keywordflow">else</span> +00463 { +00464 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); +00465 } +00466 } +00467 +<a name="l00468"></a><a class="code" href="classServer.html#a9">00468</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a9">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2) +00469 { +00470 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0); +00471 } +00472 +<a name="l00473"></a><a class="code" href="classServer.html#a10">00473</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a10">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender) +00474 { +00475 <span class="keywordflow">if</span> (IncludeSender) +00476 { +00477 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str()); +00478 } +00479 <span class="keywordflow">else</span> +00480 { +00481 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str()); +00482 } 00483 } 00484 -<a name="l00485"></a><a class="code" href="classServer.html#a33">00485</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a33">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos) +<a name="l00485"></a><a class="code" href="classServer.html#a11">00485</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text) 00486 { -00487 <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str()); +00487 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str()); 00488 } 00489 -<a name="l00490"></a><a class="code" href="classServer.html#a12">00490</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a12">Server::IsNick</a>(std::string nick) +<a name="l00490"></a><a class="code" href="classServer.html#a32">00490</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a32">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host) 00491 { -00492 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0); +00492 <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str()); 00493 } 00494 -<a name="l00495"></a><a class="code" href="classServer.html#a14">00495</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a14">Server::FindNick</a>(std::string nick) +<a name="l00495"></a><a class="code" href="classServer.html#a33">00495</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a33">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos) 00496 { -00497 <span class="keywordflow">return</span> Find(nick); +00497 <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str()); 00498 } 00499 -<a name="l00500"></a><a class="code" href="classServer.html#a15">00500</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a15">Server::FindChannel</a>(std::string channel) +<a name="l00500"></a><a class="code" href="classServer.html#a12">00500</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a12">Server::IsNick</a>(std::string nick) 00501 { -00502 <span class="keywordflow">return</span> FindChan(channel.c_str()); +00502 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0); 00503 } 00504 -<a name="l00505"></a><a class="code" href="classServer.html#a16">00505</a> std::string <a class="code" href="classServer.html#a16">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) +<a name="l00505"></a><a class="code" href="classServer.html#a14">00505</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a14">Server::FindNick</a>(std::string nick) 00506 { -00507 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan); +00507 <span class="keywordflow">return</span> Find(nick); 00508 } 00509 -<a name="l00510"></a><a class="code" href="classServer.html#a17">00510</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a17">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) +<a name="l00510"></a><a class="code" href="classServer.html#a15">00510</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a15">Server::FindChannel</a>(std::string channel) 00511 { -00512 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan); +00512 <span class="keywordflow">return</span> FindChan(channel.c_str()); 00513 } 00514 -<a name="l00515"></a><a class="code" href="classServer.html#a18">00515</a> std::string <a class="code" href="classServer.html#a18">Server::GetServerName</a>() +<a name="l00515"></a><a class="code" href="classServer.html#a16">00515</a> std::string <a class="code" href="classServer.html#a16">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) 00516 { -00517 <span class="keywordflow">return</span> getservername(); +00517 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan); 00518 } 00519 -<a name="l00520"></a><a class="code" href="classServer.html#a19">00520</a> std::string <a class="code" href="classServer.html#a19">Server::GetNetworkName</a>() +<a name="l00520"></a><a class="code" href="classServer.html#a17">00520</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a17">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) 00521 { -00522 <span class="keywordflow">return</span> getnetworkname(); +00522 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan); 00523 } 00524 -<a name="l00525"></a><a class="code" href="classServer.html#a20">00525</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a20">Server::GetAdmin</a>() +<a name="l00525"></a><a class="code" href="classServer.html#a18">00525</a> std::string <a class="code" href="classServer.html#a18">Server::GetServerName</a>() 00526 { -00527 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick()); +00527 <span class="keywordflow">return</span> getservername(); 00528 } 00529 -00530 -00531 -<a name="l00532"></a><a class="code" href="classServer.html#a21">00532</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a21">Server::AddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_when_on, <span class="keywordtype">int</span> params_when_off) -00533 { -00534 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>) -00535 { -00536 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>); -00537 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00538 } -00539 <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>)) -00540 { -00541 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>); -00542 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00543 } -00544 <span class="keywordflow">if</span> ((params_when_on>1) || (params_when_off>1)) +<a name="l00530"></a><a class="code" href="classServer.html#a19">00530</a> std::string <a class="code" href="classServer.html#a19">Server::GetNetworkName</a>() +00531 { +00532 <span class="keywordflow">return</span> getnetworkname(); +00533 } +00534 +<a name="l00535"></a><a class="code" href="classServer.html#a20">00535</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a20">Server::GetAdmin</a>() +00536 { +00537 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick()); +00538 } +00539 +00540 +00541 +<a name="l00542"></a><a class="code" href="classServer.html#a21">00542</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a21">Server::AddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_when_on, <span class="keywordtype">int</span> params_when_off) +00543 { +00544 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>) 00545 { -00546 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>); +00546 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>); 00547 <span class="keywordflow">return</span> <span class="keyword">false</span>; 00548 } -00549 <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a56">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off); -00550 } -00551 -<a name="l00552"></a><a class="code" href="classServer.html#a22">00552</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a22">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar) -00553 { -00554 <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a56">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1); -00555 <span class="keywordflow">if</span> (res) -00556 <a class="code" href="modules_8cpp.html#a57">ModeMakeList</a>(modechar); -00557 <span class="keywordflow">return</span> res; -00558 } -00559 -<a name="l00560"></a><a class="code" href="classServer.html#a13">00560</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a13">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c) -00561 { -00562 <span class="keywordflow">return</span> usercount(c); -00563 } -00564 -00565 -<a name="l00566"></a><a class="code" href="classConfigReader.html#a0">00566</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>() -00567 { -00568 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00569 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00570 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this->cache,this->errorlog); -00571 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) -00572 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a25">CONF_FILE_NOT_FOUND</a>; +00549 <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>)) +00550 { +00551 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>); +00552 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00553 } +00554 <span class="keywordflow">if</span> ((params_when_on>1) || (params_when_off>1)) +00555 { +00556 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>); +00557 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00558 } +00559 <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a56">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off); +00560 } +00561 +<a name="l00562"></a><a class="code" href="classServer.html#a22">00562</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a22">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar) +00563 { +00564 <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a56">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1); +00565 <span class="keywordflow">if</span> (res) +00566 <a class="code" href="modules_8cpp.html#a57">ModeMakeList</a>(modechar); +00567 <span class="keywordflow">return</span> res; +00568 } +00569 +<a name="l00570"></a><a class="code" href="classServer.html#a13">00570</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a13">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c) +00571 { +00572 <span class="keywordflow">return</span> usercount(c); 00573 } 00574 00575 -<a name="l00576"></a><a class="code" href="classConfigReader.html#a2">00576</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>() +<a name="l00576"></a><a class="code" href="classConfigReader.html#a0">00576</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>() 00577 { -00578 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p0">cache</a>) -00579 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p0">cache</a>; -00580 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p1">errorlog</a>) -00581 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p1">errorlog</a>; -00582 } -00583 +00578 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +00579 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +00580 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this->cache,this->errorlog); +00581 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) +00582 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a25">CONF_FILE_NOT_FOUND</a>; +00583 } 00584 -<a name="l00585"></a><a class="code" href="classConfigReader.html#a1">00585</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename) -00586 { -00587 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00588 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00589 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>); -00590 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) -00591 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a25">CONF_FILE_NOT_FOUND</a>; -00592 }; +00585 +<a name="l00586"></a><a class="code" href="classConfigReader.html#a2">00586</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>() +00587 { +00588 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p0">cache</a>) +00589 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p0">cache</a>; +00590 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p1">errorlog</a>) +00591 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p1">errorlog</a>; +00592 } 00593 -<a name="l00594"></a><a class="code" href="classConfigReader.html#a3">00594</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) -00595 { -00596 <span class="keywordtype">char</span> val[MAXBUF]; -00597 <span class="keywordtype">char</span> t[MAXBUF]; -00598 <span class="keywordtype">char</span> n[MAXBUF]; -00599 strlcpy(t,tag.c_str(),MAXBUF); -00600 strlcpy(n,name.c_str(),MAXBUF); -00601 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00602 <span class="keywordflow">if</span> (!res) -00603 { -00604 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>; -00605 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; -00606 } -00607 <span class="keywordflow">return</span> std::string(val); -00608 } -00609 -<a name="l00610"></a><a class="code" href="classConfigReader.html#a4">00610</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) -00611 { -00612 <span class="keywordtype">char</span> val[MAXBUF]; -00613 <span class="keywordtype">char</span> t[MAXBUF]; -00614 <span class="keywordtype">char</span> n[MAXBUF]; -00615 strlcpy(t,tag.c_str(),MAXBUF); -00616 strlcpy(n,name.c_str(),MAXBUF); -00617 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00618 <span class="keywordflow">if</span> (!res) -00619 { -00620 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>; -00621 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00622 } -00623 std::string s = val; -00624 <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>)); -00625 } -00626 -<a name="l00627"></a><a class="code" href="classConfigReader.html#a5">00627</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) -00628 { -00629 <span class="keywordtype">char</span> val[MAXBUF]; -00630 <span class="keywordtype">char</span> t[MAXBUF]; -00631 <span class="keywordtype">char</span> n[MAXBUF]; -00632 strlcpy(t,tag.c_str(),MAXBUF); -00633 strlcpy(n,name.c_str(),MAXBUF); -00634 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00635 <span class="keywordflow">if</span> (!res) -00636 { -00637 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>; -00638 <span class="keywordflow">return</span> 0; -00639 } -00640 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(val); i++) -00641 { -00642 <span class="keywordflow">if</span> (!isdigit(val[i])) -00643 { -00644 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a22">CONF_NOT_A_NUMBER</a>; -00645 <span class="keywordflow">return</span> 0; -00646 } -00647 } -00648 <span class="keywordflow">if</span> ((needs_unsigned) && (atoi(val)<0)) -00649 { -00650 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a23">CONF_NOT_UNSIGNED</a>; -00651 <span class="keywordflow">return</span> 0; -00652 } -00653 <span class="keywordflow">return</span> atoi(val); -00654 } -00655 -<a name="l00656"></a><a class="code" href="classConfigReader.html#a6">00656</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>() -00657 { -00658 <span class="keywordtype">long</span> olderr = this-><a class="code" href="classConfigReader.html#p3">error</a>; -00659 this->error = 0; -00660 <span class="keywordflow">return</span> olderr; -00661 } -00662 -<a name="l00663"></a><a class="code" href="classConfigReader.html#a9">00663</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) -00664 { -00665 <span class="keywordflow">if</span> (bail) -00666 { -00667 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()); -00668 exit(0); -00669 } -00670 <span class="keywordflow">else</span> -00671 { -00672 <span class="keywordtype">char</span> dataline[1024]; -00673 <span class="keywordflow">if</span> (user) -00674 { -00675 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>); -00676 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) -00677 { -00678 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); -00679 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); -00680 } -00681 } -00682 <span class="keywordflow">else</span> -00683 { -00684 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>); -00685 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) -00686 { -00687 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); -00688 WriteOpers(dataline); -00689 } -00690 } -00691 <span class="keywordflow">return</span>; -00692 } -00693 } -00694 -00695 -<a name="l00696"></a><a class="code" href="classConfigReader.html#a7">00696</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag) -00697 { -00698 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str()); -00699 } -00700 -<a name="l00701"></a><a class="code" href="classConfigReader.html#a10">00701</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) -00702 { -00703 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index); -00704 } +00594 +<a name="l00595"></a><a class="code" href="classConfigReader.html#a1">00595</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename) +00596 { +00597 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +00598 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +00599 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>); +00600 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) +00601 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a25">CONF_FILE_NOT_FOUND</a>; +00602 }; +00603 +<a name="l00604"></a><a class="code" href="classConfigReader.html#a3">00604</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) +00605 { +00606 <span class="keywordtype">char</span> val[MAXBUF]; +00607 <span class="keywordtype">char</span> t[MAXBUF]; +00608 <span class="keywordtype">char</span> n[MAXBUF]; +00609 strlcpy(t,tag.c_str(),MAXBUF); +00610 strlcpy(n,name.c_str(),MAXBUF); +00611 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); +00612 <span class="keywordflow">if</span> (!res) +00613 { +00614 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>; +00615 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; +00616 } +00617 <span class="keywordflow">return</span> std::string(val); +00618 } +00619 +<a name="l00620"></a><a class="code" href="classConfigReader.html#a4">00620</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) +00621 { +00622 <span class="keywordtype">char</span> val[MAXBUF]; +00623 <span class="keywordtype">char</span> t[MAXBUF]; +00624 <span class="keywordtype">char</span> n[MAXBUF]; +00625 strlcpy(t,tag.c_str(),MAXBUF); +00626 strlcpy(n,name.c_str(),MAXBUF); +00627 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); +00628 <span class="keywordflow">if</span> (!res) +00629 { +00630 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>; +00631 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00632 } +00633 std::string s = val; +00634 <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>)); +00635 } +00636 +<a name="l00637"></a><a class="code" href="classConfigReader.html#a5">00637</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) +00638 { +00639 <span class="keywordtype">char</span> val[MAXBUF]; +00640 <span class="keywordtype">char</span> t[MAXBUF]; +00641 <span class="keywordtype">char</span> n[MAXBUF]; +00642 strlcpy(t,tag.c_str(),MAXBUF); +00643 strlcpy(n,name.c_str(),MAXBUF); +00644 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); +00645 <span class="keywordflow">if</span> (!res) +00646 { +00647 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a24">CONF_VALUE_NOT_FOUND</a>; +00648 <span class="keywordflow">return</span> 0; +00649 } +00650 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(val); i++) +00651 { +00652 <span class="keywordflow">if</span> (!isdigit(val[i])) +00653 { +00654 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a22">CONF_NOT_A_NUMBER</a>; +00655 <span class="keywordflow">return</span> 0; +00656 } +00657 } +00658 <span class="keywordflow">if</span> ((needs_unsigned) && (atoi(val)<0)) +00659 { +00660 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a23">CONF_NOT_UNSIGNED</a>; +00661 <span class="keywordflow">return</span> 0; +00662 } +00663 <span class="keywordflow">return</span> atoi(val); +00664 } +00665 +<a name="l00666"></a><a class="code" href="classConfigReader.html#a6">00666</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>() +00667 { +00668 <span class="keywordtype">long</span> olderr = this-><a class="code" href="classConfigReader.html#p3">error</a>; +00669 this->error = 0; +00670 <span class="keywordflow">return</span> olderr; +00671 } +00672 +<a name="l00673"></a><a class="code" href="classConfigReader.html#a9">00673</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) +00674 { +00675 <span class="keywordflow">if</span> (bail) +00676 { +00677 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()); +00678 exit(0); +00679 } +00680 <span class="keywordflow">else</span> +00681 { +00682 <span class="keywordtype">char</span> dataline[1024]; +00683 <span class="keywordflow">if</span> (user) +00684 { +00685 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>); +00686 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) +00687 { +00688 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); +00689 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); +00690 } +00691 } +00692 <span class="keywordflow">else</span> +00693 { +00694 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>); +00695 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) +00696 { +00697 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); +00698 WriteOpers(dataline); +00699 } +00700 } +00701 <span class="keywordflow">return</span>; +00702 } +00703 } +00704 00705 -<a name="l00706"></a><a class="code" href="classConfigReader.html#a8">00706</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>() +<a name="l00706"></a><a class="code" href="classConfigReader.html#a7">00706</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag) 00707 { -00708 <span class="keywordflow">return</span> this-><a class="code" href="classConfigReader.html#p2">readerror</a>; +00708 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str()); 00709 } 00710 -00711 -<a name="l00712"></a><a class="code" href="classFileReader.html#a1">00712</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename) -00713 { -00714 <a class="code" href="modules_8h.html#a26">file_cache</a> c; -00715 readfile(c,filename.c_str()); -00716 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; -00717 } -00718 -<a name="l00719"></a><a class="code" href="classFileReader.html#a0">00719</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>() -00720 { -00721 } -00722 -<a name="l00723"></a><a class="code" href="classFileReader.html#a3">00723</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename) -00724 { -00725 <a class="code" href="modules_8h.html#a26">file_cache</a> c; -00726 readfile(c,filename.c_str()); -00727 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; -00728 } -00729 -00730 -<a name="l00731"></a><a class="code" href="classFileReader.html#a2">00731</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>() -00732 { -00733 } -00734 -<a name="l00735"></a><a class="code" href="classFileReader.html#a4">00735</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>() -00736 { -00737 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0) -00738 { -00739 <span class="keywordflow">return</span>(<span class="keyword">false</span>); -00740 } -00741 <span class="keywordflow">else</span> -00742 { -00743 <span class="keywordflow">return</span>(<span class="keyword">true</span>); -00744 } -00745 } -00746 -<a name="l00747"></a><a class="code" href="classFileReader.html#a5">00747</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x) -00748 { -00749 <span class="keywordflow">if</span> ((x<0) || (x><a class="code" href="classFileReader.html#r0">fc</a>.size())) -00750 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; -00751 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x]; -00752 } -00753 -<a name="l00754"></a><a class="code" href="classFileReader.html#a6">00754</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>() -00755 { -00756 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size(); -00757 } -00758 -00759 -00760 std::vector<Module*> <a class="code" href="modules_8cpp.html#a58">modules</a>(255); -00761 std::vector<ircd_module*> <a class="code" href="modules_8cpp.html#a59">factory</a>(255); -00762 -<a name="l00763"></a><a class="code" href="modules_8cpp.html#a1">00763</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a> = -1; -00764 -00765 -</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Mar 25 03:49:28 2005 for InspIRCd by +<a name="l00711"></a><a class="code" href="classConfigReader.html#a10">00711</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) +00712 { +00713 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index); +00714 } +00715 +<a name="l00716"></a><a class="code" href="classConfigReader.html#a8">00716</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>() +00717 { +00718 <span class="keywordflow">return</span> this-><a class="code" href="classConfigReader.html#p2">readerror</a>; +00719 } +00720 +00721 +<a name="l00722"></a><a class="code" href="classFileReader.html#a1">00722</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename) +00723 { +00724 <a class="code" href="modules_8h.html#a26">file_cache</a> c; +00725 readfile(c,filename.c_str()); +00726 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; +00727 } +00728 +<a name="l00729"></a><a class="code" href="classFileReader.html#a0">00729</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>() +00730 { +00731 } +00732 +<a name="l00733"></a><a class="code" href="classFileReader.html#a3">00733</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename) +00734 { +00735 <a class="code" href="modules_8h.html#a26">file_cache</a> c; +00736 readfile(c,filename.c_str()); +00737 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; +00738 } +00739 +00740 +<a name="l00741"></a><a class="code" href="classFileReader.html#a2">00741</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>() +00742 { +00743 } +00744 +<a name="l00745"></a><a class="code" href="classFileReader.html#a4">00745</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>() +00746 { +00747 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0) +00748 { +00749 <span class="keywordflow">return</span>(<span class="keyword">false</span>); +00750 } +00751 <span class="keywordflow">else</span> +00752 { +00753 <span class="keywordflow">return</span>(<span class="keyword">true</span>); +00754 } +00755 } +00756 +<a name="l00757"></a><a class="code" href="classFileReader.html#a5">00757</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x) +00758 { +00759 <span class="keywordflow">if</span> ((x<0) || (x><a class="code" href="classFileReader.html#r0">fc</a>.size())) +00760 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; +00761 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x]; +00762 } +00763 +<a name="l00764"></a><a class="code" href="classFileReader.html#a6">00764</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>() +00765 { +00766 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size(); +00767 } +00768 +00769 +00770 std::vector<Module*> <a class="code" href="modules_8cpp.html#a58">modules</a>(255); +00771 std::vector<ircd_module*> <a class="code" href="modules_8cpp.html#a59">factory</a>(255); +00772 +<a name="l00773"></a><a class="code" href="modules_8cpp.html#a1">00773</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a> = -1; +00774 +00775 +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 28 21:09:25 2005 for InspIRCd by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.3 </small></address> |