diff options
Diffstat (limited to 'docs/module-doc/modules_8cpp-source.html')
-rw-r--r-- | docs/module-doc/modules_8cpp-source.html | 2030 |
1 files changed, 1003 insertions, 1027 deletions
diff --git a/docs/module-doc/modules_8cpp-source.html b/docs/module-doc/modules_8cpp-source.html index 51b7ddda5..bfedc2754 100644 --- a/docs/module-doc/modules_8cpp-source.html +++ b/docs/module-doc/modules_8cpp-source.html @@ -1,1034 +1,1010 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>InspIRCd: modules.cpp Source File</title> <link href="inspircd.doxygen.css" rel="stylesheet" type="text/css"> </head><body> -<!-- Generated by Doxygen 1.3.3 --> -<div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Compound List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Compound Members</a> | <a class="qindex" href="globals.html">File Members</a></div> -<h1>modules.cpp</h1><a href="modules_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/* +------------------------------------+</span> -00002 <span class="comment"> * | Inspire Internet Relay Chat Daemon |</span> -00003 <span class="comment"> * +------------------------------------+</span> -00004 <span class="comment"> *</span> -00005 <span class="comment"> * Inspire is copyright (C) 2002-2004 ChatSpike-Dev.</span> -00006 <span class="comment"> * E-mail:</span> -00007 <span class="comment"> * <brain@chatspike.net></span> -00008 <span class="comment"> * <Craig@chatspike.net></span> -00009 <span class="comment"> * </span> -00010 <span class="comment"> * Written by Craig Edwards, Craig McLure, and others.</span> -00011 <span class="comment"> * This program is free but copyrighted software; see</span> -00012 <span class="comment"> * the file COPYING for details.</span> -00013 <span class="comment"> *</span> -00014 <span class="comment"> * ---------------------------------------------------</span> -00015 <span class="comment"> */</span> -00016 -00017 <span class="keyword">using</span> <span class="keyword">namespace </span>std; -00018 -00019 <span class="preprocessor">#include "inspircd_config.h"</span> -00020 <span class="preprocessor">#include "inspircd.h"</span> -00021 <span class="preprocessor">#include "inspircd_io.h"</span> -00022 <span class="preprocessor">#include "inspircd_util.h"</span> -00023 <span class="preprocessor">#include <unistd.h></span> -00024 <span class="preprocessor">#include <sys/errno.h></span> -00025 -00026 <span class="preprocessor">#ifdef USE_KQUEUE</span> -00027 <span class="preprocessor"></span><span class="preprocessor">#include <sys/types.h></span> -00028 <span class="preprocessor">#include <sys/event.h></span> -00029 <span class="preprocessor">#include <sys/time.h></span> -00030 <span class="preprocessor">#endif</span> -00031 <span class="preprocessor"></span> -00032 <span class="preprocessor">#ifdef USE_EPOLL</span> -00033 <span class="preprocessor"></span><span class="preprocessor">#include <sys/epoll.h></span> -00034 <span class="preprocessor">#endif</span> -00035 <span class="preprocessor"></span> -00036 <span class="preprocessor">#include <time.h></span> -00037 <span class="preprocessor">#include <string></span> -00038 <span class="preprocessor">#ifdef GCC3</span> -00039 <span class="preprocessor"></span><span class="preprocessor">#include <ext/hash_map></span> -00040 <span class="preprocessor">#else</span> -00041 <span class="preprocessor"></span><span class="preprocessor">#include <hash_map></span> -00042 <span class="preprocessor">#endif</span> -00043 <span class="preprocessor"></span><span class="preprocessor">#include <map></span> -00044 <span class="preprocessor">#include <sstream></span> -00045 <span class="preprocessor">#include <vector></span> -00046 <span class="preprocessor">#include <deque></span> -00047 <span class="preprocessor">#include "<a class="code" href="connection_8h.html">connection.h</a>"</span> -00048 <span class="preprocessor">#include "<a class="code" href="users_8h.html">users.h</a>"</span> -00049 <span class="preprocessor">#include "<a class="code" href="servers_8h.html">servers.h</a>"</span> -00050 <span class="preprocessor">#include "<a class="code" href="ctables_8h.html">ctables.h</a>"</span> -00051 <span class="preprocessor">#include "globals.h"</span> -00052 <span class="preprocessor">#include "<a class="code" href="modules_8h.html">modules.h</a>"</span> -00053 <span class="preprocessor">#include "dynamic.h"</span> -00054 <span class="preprocessor">#include "wildcard.h"</span> -00055 <span class="preprocessor">#include "<a class="code" href="message_8h.html">message.h</a>"</span> -00056 <span class="preprocessor">#include "<a class="code" href="mode_8h.html">mode.h</a>"</span> -00057 <span class="preprocessor">#include "<a class="code" href="xline_8h.html">xline.h</a>"</span> -00058 <span class="preprocessor">#include "<a class="code" href="commands_8h.html">commands.h</a>"</span> -00059 <span class="preprocessor">#include "inspstring.h"</span> -00060 <span class="preprocessor">#include "helperfuncs.h"</span> -00061 <span class="preprocessor">#include "<a class="code" href="hashcomp_8h.html">hashcomp.h</a>"</span> -00062 -00063 <span class="preprocessor">#ifdef USE_KQUEUE</span> -00064 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> kq; -00065 <span class="preprocessor">#endif</span> -00066 <span class="preprocessor"></span> -00067 <span class="preprocessor">#ifdef USE_EPOLL</span> -00068 <span class="preprocessor"></span><span class="keywordtype">int</span> ep; -00069 <span class="preprocessor">#endif</span> -00070 <span class="preprocessor"></span> -00071 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; -<a name="l00072"></a><a class="code" href="modules_8cpp.html#a1">00072</a> <span class="keyword">extern</span> std::vector<Module*> <a class="code" href="channels_8cpp.html#a2">modules</a>; -<a name="l00073"></a><a class="code" href="modules_8cpp.html#a2">00073</a> <span class="keyword">extern</span> std::vector<ircd_module*> <a class="code" href="channels_8cpp.html#a3">factory</a>; -00074 -<a name="l00075"></a><a class="code" href="modules_8cpp.html#a3">00075</a> <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="modules_8cpp.html#a3">include_stack</a>; -00076 -<a name="l00077"></a><a class="code" href="modules_8cpp.html#a4">00077</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a36">TIME</a>; -00078 -<a name="l00079"></a><a class="code" href="modules_8cpp.html#a5">00079</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>; -<a name="l00080"></a><a class="code" href="modules_8cpp.html#a6">00080</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF]; -<a name="l00081"></a><a class="code" href="modules_8cpp.html#a7">00081</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF]; -<a name="l00082"></a><a class="code" href="modules_8cpp.html#a8">00082</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF]; -<a name="l00083"></a><a class="code" href="modules_8cpp.html#a9">00083</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF]; -<a name="l00084"></a><a class="code" href="modules_8cpp.html#a10">00084</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF]; -<a name="l00085"></a><a class="code" href="modules_8cpp.html#a11">00085</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF]; -<a name="l00086"></a><a class="code" href="modules_8cpp.html#a12">00086</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF]; -<a name="l00087"></a><a class="code" href="modules_8cpp.html#a13">00087</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF]; -<a name="l00088"></a><a class="code" href="modules_8cpp.html#a14">00088</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF]; -<a name="l00089"></a><a class="code" href="modules_8cpp.html#a15">00089</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF]; -<a name="l00090"></a><a class="code" href="modules_8cpp.html#a16">00090</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF]; -<a name="l00091"></a><a class="code" href="modules_8cpp.html#a17">00091</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF]; -<a name="l00092"></a><a class="code" href="modules_8cpp.html#a18">00092</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF]; -00093 -<a name="l00094"></a><a class="code" href="modules_8cpp.html#a19">00094</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>; -<a name="l00095"></a><a class="code" href="modules_8cpp.html#a20">00095</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>; -<a name="l00096"></a><a class="code" href="modules_8cpp.html#a21">00096</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>; -<a name="l00097"></a><a class="code" href="modules_8cpp.html#a22">00097</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>; -<a name="l00098"></a><a class="code" href="modules_8cpp.html#a23">00098</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>; -<a name="l00099"></a><a class="code" href="modules_8cpp.html#a24">00099</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>; -<a name="l00100"></a><a class="code" href="modules_8cpp.html#a25">00100</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>; -<a name="l00101"></a><a class="code" href="modules_8cpp.html#a26">00101</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>; -00102 -<a name="l00103"></a><a class="code" href="modules_8cpp.html#a27">00103</a> <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="channels_8cpp.html#a26">module_names</a>; -00104 -<a name="l00105"></a><a class="code" href="modules_8cpp.html#a28">00105</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a27">boundPortCount</a>; -<a name="l00106"></a><a class="code" href="modules_8cpp.html#a29">00106</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a28">portCount</a>; -<a name="l00107"></a><a class="code" href="modules_8cpp.html#a30">00107</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">SERVERportCount</a>; -<a name="l00108"></a><a class="code" href="modules_8cpp.html#a31">00108</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">ports</a>[MAXSOCKS]; -<a name="l00109"></a><a class="code" href="modules_8cpp.html#a32">00109</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">defaultRoute</a>; -00110 -<a name="l00111"></a><a class="code" href="modules_8cpp.html#a33">00111</a> <span class="keyword">extern</span> std::vector<long> <a class="code" href="channels_8cpp.html#a32">auth_cookies</a>; -<a name="l00112"></a><a class="code" href="modules_8cpp.html#a34">00112</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a33">config_f</a>; -00113 -<a name="l00114"></a><a class="code" href="modules_8cpp.html#a35">00114</a> <span class="keyword">extern</span> <a class="code" href="classserverrec.html">serverrec</a>* <a class="code" href="channels_8cpp.html#a34">me</a>[32]; -00115 -<a name="l00116"></a><a class="code" href="modules_8cpp.html#a36">00116</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a35">log_file</a>; -00117 -<a name="l00118"></a><a class="code" href="modules_8cpp.html#a37">00118</a> <span class="keyword">extern</span> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="modules_8cpp.html#a37">fd_ref_table</a>[65536]; -00119 -<a name="l00120"></a><a class="code" href="modules_8cpp.html#a38">00120</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, userrec*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a38">user_hash</a>; -<a name="l00121"></a><a class="code" href="modules_8cpp.html#a39">00121</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, chanrec*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a39">chan_hash</a>; -<a name="l00122"></a><a class="code" href="modules_8cpp.html#a40">00122</a> <span class="keyword">typedef</span> nspace::hash_map<in_addr,string*, nspace::hash<in_addr>, <a class="code" href="structirc_1_1InAddr__HashComp.html">irc::InAddr_HashComp</a>> <a class="code" href="modules_8cpp.html#a40">address_cache</a>; -<a name="l00123"></a><a class="code" href="modules_8cpp.html#a41">00123</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, WhoWasUser*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a41">whowas_hash</a>; -<a name="l00124"></a><a class="code" href="modules_8cpp.html#a42">00124</a> <span class="keyword">typedef</span> std::deque<command_t> <a class="code" href="modules_8cpp.html#a42">command_table</a>; -00125 -00126 -<a name="l00127"></a><a class="code" href="modules_8cpp.html#a43">00127</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">user_hash</a> <a class="code" href="modules_8cpp.html#a43">clientlist</a>; -<a name="l00128"></a><a class="code" href="modules_8cpp.html#a44">00128</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">chan_hash</a> <a class="code" href="modules_8cpp.html#a44">chanlist</a>; -<a name="l00129"></a><a class="code" href="modules_8cpp.html#a45">00129</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a41">whowas_hash</a> <a class="code" href="modules_8cpp.html#a45">whowas</a>; -<a name="l00130"></a><a class="code" href="modules_8cpp.html#a46">00130</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a42">command_table</a> <a class="code" href="modules_8cpp.html#a46">cmdlist</a>; -<a name="l00131"></a><a class="code" href="modules_8cpp.html#a47">00131</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a47">MOTD</a>; -<a name="l00132"></a><a class="code" href="modules_8cpp.html#a48">00132</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a48">RULES</a>; -<a name="l00133"></a><a class="code" href="modules_8cpp.html#a49">00133</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">address_cache</a> <a class="code" href="modules_8cpp.html#a49">IP</a>; -00134 -00135 -00136 <span class="comment">// class type for holding an extended mode character - internal to core</span> -00137 -<a name="l00138"></a><a class="code" href="classExtMode.html">00138</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> -00139 { -00140 <span class="keyword">public</span>: -<a name="l00141"></a><a class="code" href="classExtMode.html#o0">00141</a> <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#o0">modechar</a>; -<a name="l00142"></a><a class="code" href="classExtMode.html#o1">00142</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o1">type</a>; -<a name="l00143"></a><a class="code" href="classExtMode.html#o2">00143</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o2">params_when_on</a>; -<a name="l00144"></a><a class="code" href="classExtMode.html#o3">00144</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o3">params_when_off</a>; -<a name="l00145"></a><a class="code" href="classExtMode.html#o4">00145</a> <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#o4">needsoper</a>; -<a name="l00146"></a><a class="code" href="classExtMode.html#o5">00146</a> <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>; -<a name="l00147"></a><a class="code" href="classExtMode.html#a0">00147</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) { }; -00148 }; -00149 -<a name="l00150"></a><a class="code" href="modules_8cpp.html#a50">00150</a> <span class="keyword">typedef</span> std::vector<ExtMode> <a class="code" href="modules_8cpp.html#a50">ExtModeList</a>; -<a name="l00151"></a><a class="code" href="modules_8cpp.html#a51">00151</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a>; -00152 -00153 -<a name="l00154"></a><a class="code" href="modules_8cpp.html#a52">00154</a> <a class="code" href="modules_8cpp.html#a50">ExtModeList</a> <a class="code" href="modules_8cpp.html#a52">EMode</a>; -00155 -00156 <span class="comment">// returns true if an extended mode character is in use</span> -<a name="l00157"></a><a class="code" href="modules_8cpp.html#a53">00157</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00158 { -00159 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00160 { -00161 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00162 { -00163 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00164 } -00165 } -00166 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00167 } -00168 -<a name="l00169"></a><a class="code" href="modules_8cpp.html#a54">00169</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a54">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00170 { -00171 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00172 { -00173 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->list == <span class="keyword">true</span>)) -00174 { -00175 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00176 } -00177 } -00178 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00179 } -00180 -<a name="l00181"></a><a class="code" href="modules_8cpp.html#a55">00181</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00182 { -00183 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00184 { -00185 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->needsoper == <span class="keyword">true</span>)) -00186 { -00187 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00188 } -00189 } -00190 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00191 } -00192 -00193 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> -<a name="l00194"></a><a class="code" href="modules_8cpp.html#a56">00194</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a56">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00195 { -00196 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00197 { -00198 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00199 { -00200 <span class="keywordflow">return</span> i->params_when_on; -00201 } -00202 } -00203 <span class="keywordflow">return</span> 0; -00204 } -00205 -00206 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> -<a name="l00207"></a><a class="code" href="modules_8cpp.html#a57">00207</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a57">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00208 { -00209 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00210 { -00211 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00212 { -00213 <span class="keywordflow">return</span> i->params_when_off; -00214 } -00215 } -00216 <span class="keywordflow">return</span> 0; -00217 } -00218 -00219 <span class="comment">// returns true if an extended mode character is in use</span> -<a name="l00220"></a><a class="code" href="modules_8cpp.html#a58">00220</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a58">DoAddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_on, <span class="keywordtype">int</span> params_off) -00221 { -00222 <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a53">ModeDefined</a>(modechar,type)) { -00223 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00224 } -00225 <a class="code" href="modules_8cpp.html#a52">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off)); -00226 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00227 } -00228 -00229 <span class="comment">// turns a mode into a listmode</span> -<a name="l00230"></a><a class="code" href="modules_8cpp.html#a59">00230</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a59">ModeMakeList</a>(<span class="keywordtype">char</span> modechar) -00231 { -00232 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00233 { -00234 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == <a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>)) -00235 { -00236 i->list = <span class="keyword">true</span>; -00237 <span class="keywordflow">return</span>; -00238 } -00239 } -00240 <span class="keywordflow">return</span>; -00241 } -00242 -00243 <span class="comment">// version is a simple class for holding a modules version number</span> -00244 -<a name="l00245"></a><a class="code" href="classVersion.html#a0">00245</a> <a class="code" href="classVersion.html#a0">Version::Version</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> revision, <span class="keywordtype">int</span> build, <span class="keywordtype">int</span> flags) : Major(major), Minor(minor), Revision(revision), Build(build), Flags(flags) { }; -00246 -00247 <span class="comment">// admin is a simple class for holding a server's administrative info</span> -00248 -<a name="l00249"></a><a class="code" href="classAdmin.html#a0">00249</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) { }; -00250 -<a name="l00251"></a><a class="code" href="classRequest.html#a0">00251</a> <a class="code" href="classRequest.html#a0">Request::Request</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, <a class="code" href="classModule.html">Module</a>* dst) : data(anydata), source(src), dest(dst) { }; -00252 -<a name="l00253"></a><a class="code" href="classRequest.html#a1">00253</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a1">Request::GetData</a>() -00254 { -00255 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p0">data</a>; -00256 } -00257 -<a name="l00258"></a><a class="code" href="classRequest.html#a2">00258</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a2">Request::GetSource</a>() -00259 { -00260 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p1">source</a>; -00261 } -00262 -<a name="l00263"></a><a class="code" href="classRequest.html#a3">00263</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a3">Request::GetDest</a>() -00264 { -00265 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p2">dest</a>; -00266 } -00267 -<a name="l00268"></a><a class="code" href="classRequest.html#a4">00268</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a4">Request::Send</a>() -00269 { -00270 <span class="keywordflow">if</span> (this-><a class="code" href="classRequest.html#p2">dest</a>) -00271 { -00272 <span class="keywordflow">return</span> <a class="code" href="classRequest.html#p2">dest</a>-><a class="code" href="classModule.html#a46">OnRequest</a>(<span class="keyword">this</span>); -00273 } -00274 <span class="keywordflow">else</span> -00275 { -00276 <span class="keywordflow">return</span> NULL; -00277 } -00278 } -00279 -<a name="l00280"></a><a class="code" href="classEvent.html#a0">00280</a> <a class="code" href="classEvent.html#a0">Event::Event</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, std::string eventid) : data(anydata), source(src), id(eventid) { }; -00281 -<a name="l00282"></a><a class="code" href="classEvent.html#a1">00282</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a1">Event::GetData</a>() -00283 { -00284 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p0">data</a>; -00285 } -00286 -<a name="l00287"></a><a class="code" href="classEvent.html#a2">00287</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classEvent.html#a2">Event::GetSource</a>() -00288 { -00289 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p1">source</a>; -00290 } -00291 -<a name="l00292"></a><a class="code" href="classEvent.html#a4">00292</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a4">Event::Send</a>() -00293 { -00294 <a class="code" href="modules_8h.html#a24">FOREACH_MOD</a> OnEvent(<span class="keyword">this</span>); -00295 <span class="keywordflow">return</span> NULL; -00296 } -00297 -<a name="l00298"></a><a class="code" href="classEvent.html#a3">00298</a> std::string <a class="code" href="classEvent.html#a3">Event::GetEventID</a>() -00299 { -00300 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p2">id</a>; -00301 } -00302 -00303 -00304 <span class="comment">// These declarations define the behavours of the base class Module (which does nothing at all)</span> -<a name="l00305"></a><a class="code" href="classModule.html#a0">00305</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { } -<a name="l00306"></a><a class="code" href="classModule.html#a1">00306</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { } -<a name="l00307"></a><a class="code" href="classModule.html#a3">00307</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="l00308"></a><a class="code" href="classModule.html#a4">00308</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="l00309"></a><a class="code" href="classModule.html#a5">00309</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserDisconnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } -<a name="l00310"></a><a class="code" href="classModule.html#a6">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } -<a name="l00311"></a><a class="code" href="classModule.html#a7">00311</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } -<a name="l00312"></a><a class="code" href="classModule.html#a8">00312</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketTransmit</a>(std::string &data, std::string serv) { } -<a name="l00313"></a><a class="code" href="classModule.html#a9">00313</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnPacketReceive</a>(std::string &data, std::string serv) { } -<a name="l00314"></a><a class="code" href="classModule.html#a10">00314</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnRehash</a>() { } -<a name="l00315"></a><a class="code" href="classModule.html#a11">00315</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a11">Module::OnServerRaw</a>(std::string &raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { } -<a name="l00316"></a><a class="code" href="classModule.html#a13">00316</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a13">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; } -<a name="l00317"></a><a class="code" href="classModule.html#a12">00317</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; } -<a name="l00318"></a><a class="code" href="classModule.html#a2">00318</a> <a class="code" href="classVersion.html">Version</a> <a class="code" href="classModule.html#a2">Module::GetVersion</a>() { <span class="keywordflow">return</span> <a class="code" href="classVersion.html">Version</a>(1,0,0,0,<a class="code" href="modules_8h.html#a21">VF_VENDOR</a>); } -<a name="l00319"></a><a class="code" href="classModule.html#a16">00319</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a16">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00320"></a><a class="code" href="classModule.html#a17">00320</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a17">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00321"></a><a class="code" href="classModule.html#a18">00321</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a18">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { }; -<a name="l00322"></a><a class="code" href="classModule.html#a19">00322</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnUserPreInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel) { <span class="keywordflow">return</span> 0; }; -<a name="l00323"></a><a class="code" href="classModule.html#a20">00323</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a20">Module::OnUserPreMessage</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; -<a name="l00324"></a><a class="code" href="classModule.html#a21">00324</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a21">Module::OnUserPreNotice</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; -<a name="l00325"></a><a class="code" href="classModule.html#a22">00325</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a22">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; }; -<a name="l00326"></a><a class="code" href="classModule.html#a23">00326</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a23">Module::OnUserPostNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string oldnick) { }; -<a name="l00327"></a><a class="code" href="classModule.html#a24">00327</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a24">Module::OnAccessCheck</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel,<span class="keywordtype">int</span> access_type) { <span class="keywordflow">return</span> <a class="code" href="modules_8h.html#a8">ACR_DEFAULT</a>; }; -<a name="l00328"></a><a class="code" href="classModule.html#a25">00328</a> <a class="code" href="modules_8h.html#a32">string_list</a> <a class="code" href="classModule.html#a25">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; } -<a name="l00329"></a><a class="code" href="classModule.html#a26">00329</a> <a class="code" href="modules_8h.html#a32">string_list</a> <a class="code" href="classModule.html#a26">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; } -<a name="l00330"></a><a class="code" href="classModule.html#a27">00330</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a27">Module::On005Numeric</a>(std::string &output) { }; -<a name="l00331"></a><a class="code" href="classModule.html#a28">00331</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a28">Module::OnKill</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest, std::string reason) { <span class="keywordflow">return</span> 0; }; -<a name="l00332"></a><a class="code" href="classModule.html#a29">00332</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a29">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,std::string name) { }; -<a name="l00333"></a><a class="code" href="classModule.html#a30">00333</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a30">Module::OnBackgroundTimer</a>(time_t curtime) { }; -<a name="l00334"></a><a class="code" href="classModule.html#a31">00334</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a31">Module::OnSendList</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel, <span class="keywordtype">char</span> mode) { }; -<a name="l00335"></a><a class="code" href="classModule.html#a32">00335</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a32">Module::OnPreCommand</a>(std::string command, <span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) { <span class="keywordflow">return</span> 0; }; -<a name="l00336"></a><a class="code" href="classModule.html#a33">00336</a> <span class="keywordtype">bool</span> <a class="code" href="classModule.html#a33">Module::OnCheckReady</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }; -<a name="l00337"></a><a class="code" href="classModule.html#a34">00337</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a34">Module::OnUserRegister</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00338"></a><a class="code" href="classModule.html#a14">00338</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a14">Module::OnUserPreKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { <span class="keywordflow">return</span> 0; }; -<a name="l00339"></a><a class="code" href="classModule.html#a15">00339</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnUserKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { }; -<a name="l00340"></a><a class="code" href="classModule.html#a35">00340</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a35">Module::OnRawMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keywordtype">char</span> mode, std::string param, <span class="keywordtype">bool</span> adding, <span class="keywordtype">int</span> pcnt) { <span class="keywordflow">return</span> 0; }; -<a name="l00341"></a><a class="code" href="classModule.html#a36">00341</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a36">Module::OnCheckInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; -<a name="l00342"></a><a class="code" href="classModule.html#a37">00342</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a37">Module::OnCheckKey</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string keygiven) { <span class="keywordflow">return</span> 0; }; -<a name="l00343"></a><a class="code" href="classModule.html#a38">00343</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a38">Module::OnCheckLimit</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; -<a name="l00344"></a><a class="code" href="classModule.html#a39">00344</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a39">Module::OnCheckBan</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; -<a name="l00345"></a><a class="code" href="classModule.html#a40">00345</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a40">Module::OnStats</a>(<span class="keywordtype">char</span> symbol) { }; -<a name="l00346"></a><a class="code" href="classModule.html#a41">00346</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a41">Module::OnChangeLocalUserHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; }; -<a name="l00347"></a><a class="code" href="classModule.html#a42">00347</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a42">Module::OnChangeLocalUserGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; }; -<a name="l00348"></a><a class="code" href="classModule.html#a43">00348</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a43">Module::OnLocalTopicChange</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string topic) { <span class="keywordflow">return</span> 0; }; -<a name="l00349"></a><a class="code" href="classModule.html#a44">00349</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a44">Module::OnMeshToken</a>(<span class="keywordtype">char</span> token,string_list params,<a class="code" href="classserverrec.html">serverrec</a>* source,<a class="code" href="classserverrec.html">serverrec</a>* reply, std::string tcp_host,std::string ipaddr,<span class="keywordtype">int</span> port) { <span class="keywordflow">return</span> 0; }; -<a name="l00350"></a><a class="code" href="classModule.html#a45">00350</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a45">Module::OnEvent</a>(<a class="code" href="classEvent.html">Event</a>* event) { <span class="keywordflow">return</span>; }; -<a name="l00351"></a><a class="code" href="classModule.html#a46">00351</a> <span class="keywordtype">char</span>* <a class="code" href="classModule.html#a46">Module::OnRequest</a>(<a class="code" href="classRequest.html">Request</a>* request) { <span class="keywordflow">return</span> NULL; }; -<a name="l00352"></a><a class="code" href="classModule.html#a47">00352</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a47">Module::OnOperCompare</a>(std::string password, std::string input) { <span class="keywordflow">return</span> 0; }; -<a name="l00353"></a><a class="code" href="classModule.html#a48">00353</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a48">Module::OnGlobalOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00354"></a><a class="code" href="classModule.html#a49">00354</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a49">Module::OnGlobalConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00355"></a><a class="code" href="classModule.html#a50">00355</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a50">Module::OnAddBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; }; -<a name="l00356"></a><a class="code" href="classModule.html#a51">00356</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a51">Module::OnDelBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; }; -<a name="l00357"></a><a class="code" href="classModule.html#a52">00357</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a52">Module::OnRawSocketAccept</a>(<span class="keywordtype">int</span> fd, std::string ip, <span class="keywordtype">int</span> localport) { }; -<a name="l00358"></a><a class="code" href="classModule.html#a53">00358</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a53">Module::OnRawSocketWrite</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">int</span> count) { <span class="keywordflow">return</span> 0; }; -<a name="l00359"></a><a class="code" href="classModule.html#a54">00359</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a54">Module::OnRawSocketClose</a>(<span class="keywordtype">int</span> fd) { }; -<a name="l00360"></a><a class="code" href="classModule.html#a55">00360</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a55">Module::OnRawSocketRead</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keywordtype">int</span> &readresult) { <span class="keywordflow">return</span> 0; }; -00361 -00362 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span> -00363 <span class="comment">// exports in the core</span> -00364 <span class="comment">//</span> -00365 -<a name="l00366"></a><a class="code" href="classServer.html#a0">00366</a> <a class="code" href="classServer.html#a0">Server::Server</a>() -00367 { -00368 } -00369 -<a name="l00370"></a><a class="code" href="classServer.html#a1">00370</a> <a class="code" href="classServer.html#a1">Server::~Server</a>() -00371 { -00372 } -00373 -<a name="l00374"></a><a class="code" href="classServer.html#a2">00374</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s) -00375 { -00376 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str()); -00377 } -00378 -<a name="l00379"></a><a class="code" href="classServer.html#a33">00379</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a33">Server::MatchText</a>(std::string sliteral, std::string spattern) -00380 { -00381 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF]; -00382 strlcpy(literal,sliteral.c_str(),MAXBUF); -00383 strlcpy(pattern,spattern.c_str(),MAXBUF); -00384 <span class="keywordflow">return</span> match(literal,pattern); -00385 } -00386 -<a name="l00387"></a><a class="code" href="classServer.html#a28">00387</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a28">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text) -00388 { -00389 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str()); -00390 } -00391 -<a name="l00392"></a><a class="code" href="classServer.html#a29">00392</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a29">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key) -00393 { -00394 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">false</span>); -00395 } -00396 -<a name="l00397"></a><a class="code" href="classServer.html#a30">00397</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a30">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason) -00398 { -00399 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>); -00400 } -00401 -<a name="l00402"></a><a class="code" href="classServer.html#a38">00402</a> <a class="code" href="modules_8h.html#a33">chanuserlist</a> <a class="code" href="classServer.html#a38">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) -00403 { -00404 <a class="code" href="modules_8h.html#a33">chanuserlist</a> userl; -00405 userl.clear(); -00406 std::vector<char*> *<a class="code" href="channels_8cpp.html#a15">list</a> = chan-><a class="code" href="classchanrec.html#a7">GetUsers</a>(); -00407 <span class="keywordflow">for</span> (std::vector<char*>::iterator i = <a class="code" href="channels_8cpp.html#a15">list</a>->begin(); i != <a class="code" href="channels_8cpp.html#a15">list</a>->end(); i++) -00408 { -00409 <span class="keywordtype">char</span>* o = *i; -00410 userl.push_back((<a class="code" href="classuserrec.html">userrec</a>*)o); -00411 } -00412 <span class="keywordflow">return</span> userl; -00413 } -<a name="l00414"></a><a class="code" href="classServer.html#a31">00414</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname) -00415 { -00416 force_nickchange(user,nickname.c_str()); -00417 } -00418 -<a name="l00419"></a><a class="code" href="classServer.html#a32">00419</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a32">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason) -00420 { -00421 kill_link(user,reason.c_str()); -00422 } -00423 -<a name="l00424"></a><a class="code" href="classServer.html#a37">00424</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a37">Server::IsUlined</a>(std::string server) -00425 { -00426 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a75">is_uline</a>(server.c_str()); -00427 } -00428 -<a name="l00429"></a><a class="code" href="classServer.html#a34">00429</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a34">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) -00430 { -00431 call_handler(commandname.c_str(),parameters,pcnt,user); -00432 } -00433 -<a name="l00434"></a><a class="code" href="classServer.html#a3">00434</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) -00435 { -00436 log(level,<span class="stringliteral">"%s"</span>,s.c_str()); -00437 } -00438 -<a name="l00439"></a><a class="code" href="classServer.html#a26">00439</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a26">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams, <span class="keywordtype">char</span>* source) -00440 { -00441 <a class="code" href="modules_8h.html#a35">createcommand</a>(cmd,f,flags,minparams,source); -00442 } -00443 -<a name="l00444"></a><a class="code" href="classServer.html#a27">00444</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a27">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) -00445 { -00446 <a class="code" href="modules_8h.html#a36">server_mode</a>(parameters,pcnt,user); -00447 } -00448 -<a name="l00449"></a><a class="code" href="classServer.html#a4">00449</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) -00450 { -00451 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); -00452 } -00453 -<a name="l00454"></a><a class="code" href="classServer.html#a5">00454</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) -00455 { -00456 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); -00457 } -00458 -<a name="l00459"></a><a class="code" href="classServer.html#a7">00459</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s) -00460 { -00461 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str()); -00462 } -00463 -<a name="l00464"></a><a class="code" href="classServer.html#a8">00464</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s) -00465 { -00466 <span class="keywordflow">if</span> (!Source) -00467 { -00468 <span class="comment">// if source is NULL, then the message originates from the local server</span> -00469 Write(Dest-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s %s"</span>,this->GetServerName().c_str(),s.c_str()); -00470 } -00471 <span class="keywordflow">else</span> -00472 { -00473 <span class="comment">// otherwise it comes from the user specified</span> -00474 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str()); -00475 } -00476 } -00477 -<a name="l00478"></a><a class="code" href="classServer.html#a6">00478</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendChannelServerNotice</a>(std::string ServName, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string text) -00479 { -00480 WriteChannelWithServ((<span class="keywordtype">char</span>*)ServName.c_str(), Channel, <span class="stringliteral">"%s"</span>, text.c_str()); -00481 } -00482 -<a name="l00483"></a><a class="code" href="classServer.html#a9">00483</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a9">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender) -00484 { -00485 <span class="keywordflow">if</span> (IncludeSender) -00486 { -00487 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); -00488 } -00489 <span class="keywordflow">else</span> -00490 { -00491 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); -00492 } -00493 } -00494 -<a name="l00495"></a><a class="code" href="classServer.html#a10">00495</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a10">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2) -00496 { -00497 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0); -00498 } -00499 -<a name="l00500"></a><a class="code" href="classServer.html#a11">00500</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender) -00501 { -00502 <span class="keywordflow">if</span> (IncludeSender) -00503 { -00504 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str()); -00505 } -00506 <span class="keywordflow">else</span> -00507 { -00508 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str()); -00509 } -00510 } -00511 -<a name="l00512"></a><a class="code" href="classServer.html#a12">00512</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a12">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text) -00513 { -00514 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str()); -00515 } -00516 -<a name="l00517"></a><a class="code" href="classServer.html#a35">00517</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a35">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host) -00518 { -00519 <a class="code" href="message_8h.html#a9">ChangeDisplayedHost</a>(user,host.c_str()); -00520 } -00521 -<a name="l00522"></a><a class="code" href="classServer.html#a36">00522</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a36">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos) -00523 { -00524 <a class="code" href="message_8h.html#a8">ChangeName</a>(user,gecos.c_str()); -00525 } -00526 -<a name="l00527"></a><a class="code" href="classServer.html#a13">00527</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a13">Server::IsNick</a>(std::string nick) -00528 { -00529 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a11">isnick</a>(nick.c_str()) != 0); -00530 } -00531 -<a name="l00532"></a><a class="code" href="classServer.html#a15">00532</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a15">Server::FindNick</a>(std::string nick) -00533 { -00534 <span class="keywordflow">return</span> Find(nick); -00535 } -00536 -<a name="l00537"></a><a class="code" href="classServer.html#a16">00537</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a16">Server::FindDescriptor</a>(<span class="keywordtype">int</span> socket) -00538 { -00539 <span class="keywordflow">return</span> (socket < 65536 ? <a class="code" href="modules_8cpp.html#a37">fd_ref_table</a>[socket] : NULL); -00540 } -00541 -<a name="l00542"></a><a class="code" href="classServer.html#a17">00542</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a17">Server::FindChannel</a>(std::string channel) -00543 { -00544 <span class="keywordflow">return</span> FindChan(channel.c_str()); -00545 } -00546 -<a name="l00547"></a><a class="code" href="classServer.html#a18">00547</a> std::string <a class="code" href="classServer.html#a18">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) -00548 { -00549 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a12">cmode</a>(User,Chan); -00550 } -00551 -<a name="l00552"></a><a class="code" href="classServer.html#a19">00552</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a19">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) -00553 { -00554 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">has_channel</a>(User,Chan); -00555 } -00556 -<a name="l00557"></a><a class="code" href="classServer.html#a20">00557</a> std::string <a class="code" href="classServer.html#a20">Server::GetServerName</a>() -00558 { -00559 <span class="keywordflow">return</span> getservername(); -00560 } -00561 -<a name="l00562"></a><a class="code" href="classServer.html#a21">00562</a> std::string <a class="code" href="classServer.html#a21">Server::GetNetworkName</a>() -00563 { -00564 <span class="keywordflow">return</span> getnetworkname(); -00565 } -00566 -<a name="l00567"></a><a class="code" href="classServer.html#a22">00567</a> std::string <a class="code" href="classServer.html#a22">Server::GetServerDescription</a>() -00568 { -00569 <span class="keywordflow">return</span> getserverdesc(); -00570 } -00571 -<a name="l00572"></a><a class="code" href="classServer.html#a23">00572</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a23">Server::GetAdmin</a>() -00573 { -00574 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick()); -00575 } -00576 -00577 -00578 -<a name="l00579"></a><a class="code" href="classServer.html#a24">00579</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a24">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) -00580 { -00581 <span class="keywordflow">if</span> (((modechar >= <span class="charliteral">'A'</span>) && (modechar <= 'Z')) || ((modechar >= <span class="charliteral">'a'</span>) && (modechar <= <span class="charliteral">'z'</span>))) -00582 { -00583 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>) -00584 { -00585 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>); -00586 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00587 } -00588 <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>)) -00589 { -00590 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>); -00591 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00592 } -00593 <span class="keywordflow">if</span> ((params_when_on>1) || (params_when_off>1)) -00594 { -00595 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>); -00596 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00597 } -00598 <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a58">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off); -00599 } -00600 <span class="keywordflow">else</span> -00601 { -00602 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Muppet modechar detected."</span>); -00603 } -00604 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00605 } -00606 -<a name="l00607"></a><a class="code" href="classServer.html#a25">00607</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a25">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar) -00608 { -00609 <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a58">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1); -00610 <span class="keywordflow">if</span> (res) -00611 <a class="code" href="modules_8cpp.html#a59">ModeMakeList</a>(modechar); -00612 <span class="keywordflow">return</span> res; -00613 } -00614 -<a name="l00615"></a><a class="code" href="classServer.html#a14">00615</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a14">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c) -00616 { -00617 <span class="keywordflow">return</span> usercount(c); -00618 } -00619 -00620 -<a name="l00621"></a><a class="code" href="classServer.html#a39">00621</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a39">Server::UserToPseudo</a>(<a class="code" href="classuserrec.html">userrec</a>* user,std::string message) -00622 { -00623 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_fd = user-><a class="code" href="classconnection.html#o0">fd</a>; -00624 user-><a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>; -00625 user-><a class="code" href="classuserrec.html#a11">ClearBuffer</a>(); -00626 Write(old_fd,<span class="stringliteral">"ERROR :Closing link (%s@%s) [%s]"</span>,user-><a class="code" href="classuserrec.html#o1">ident</a>,user-><a class="code" href="classconnection.html#o1">host</a>,message.c_str()); -00627 <span class="preprocessor">#ifdef USE_KQUEUE</span> -00628 <span class="preprocessor"></span> <span class="keyword">struct </span>kevent ke; -00629 EV_SET(&ke, old_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); -00630 <span class="keywordtype">int</span> i = kevent(kq, &ke, 1, 0, 0, NULL); -00631 <span class="keywordflow">if</span> (i == -1) -00632 { -00633 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"kqueue: Failed to remove user from queue!"</span>); -00634 } -00635 <span class="preprocessor">#endif</span> -00636 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_EPOLL</span> -00637 <span class="preprocessor"></span> <span class="keyword">struct </span>epoll_event ev; -00638 ev.events = EPOLLIN | EPOLLET; -00639 ev.data.fd = old_fd; -00640 <span class="keywordtype">int</span> i = epoll_ctl(ep, EPOLL_CTL_DEL, old_fd, &ev); -00641 <span class="keywordflow">if</span> (i < 0) -00642 { -00643 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"epoll: List deletion failure!"</span>); -00644 } -00645 <span class="preprocessor">#endif</span> -00646 <span class="preprocessor"></span> -00647 shutdown(old_fd,2); -00648 close(old_fd); -00649 } -00650 -<a name="l00651"></a><a class="code" href="classServer.html#a40">00651</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a40">Server::PseudoToUser</a>(<a class="code" href="classuserrec.html">userrec</a>* alive,<a class="code" href="classuserrec.html">userrec</a>* zombie,std::string message) -00652 { -00653 zombie-><a class="code" href="classconnection.html#o0">fd</a> = alive-><a class="code" href="classconnection.html#o0">fd</a>; -00654 alive-><a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>; -00655 alive-><a class="code" href="classuserrec.html#a11">ClearBuffer</a>(); -00656 Write(zombie-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s!%s@%s NICK %s"</span>,alive-><a class="code" href="classuserrec.html#o0">nick</a>,alive-><a class="code" href="classuserrec.html#o1">ident</a>,alive-><a class="code" href="classconnection.html#o1">host</a>,zombie-><a class="code" href="classuserrec.html#o0">nick</a>); -00657 kill_link(alive,message.c_str()); -00658 <a class="code" href="modules_8cpp.html#a37">fd_ref_table</a>[zombie-><a class="code" href="classconnection.html#o0">fd</a>] = zombie; -00659 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != MAXCHANS; i++) -00660 { -00661 <span class="keywordflow">if</span> (zombie->chans[i].channel != NULL) -00662 { -00663 <span class="keywordflow">if</span> (zombie->chans[i].channel->name) -00664 { -00665 <a class="code" href="classchanrec.html">chanrec</a>* Ptr = zombie-><a class="code" href="classuserrec.html#o5">chans</a>[i].<a class="code" href="classucrec.html#o1">channel</a>; -00666 WriteFrom(zombie->fd,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-><a class="code" href="classchanrec.html#o0">name</a>); -00667 <span class="keywordflow">if</span> (Ptr-><a class="code" href="classchanrec.html#o5">topicset</a>) -00668 { -00669 WriteServ(zombie->fd,<span class="stringliteral">"332 %s %s :%s"</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>, Ptr-><a class="code" href="classchanrec.html#o3">topic</a>); -00670 WriteServ(zombie->fd,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>, Ptr-><a class="code" href="classchanrec.html#o6">setby</a>, Ptr-><a class="code" href="classchanrec.html#o5">topicset</a>); -00671 } -00672 userlist(zombie,Ptr); -00673 WriteServ(zombie->fd,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>); -00674 -00675 } -00676 } -00677 } -00678 -00679 } -00680 -<a name="l00681"></a><a class="code" href="classServer.html#a41">00681</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a41">Server::AddGLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) -00682 { -00683 <a class="code" href="xline_8h.html#a1">add_gline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); -00684 } -00685 -<a name="l00686"></a><a class="code" href="classServer.html#a42">00686</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a42">Server::AddQLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string nickname) -00687 { -00688 <a class="code" href="xline_8h.html#a2">add_qline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), nickname.c_str()); -00689 } -00690 -<a name="l00691"></a><a class="code" href="classServer.html#a43">00691</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a43">Server::AddZLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string ipaddr) -00692 { -00693 <a class="code" href="xline_8h.html#a3">add_zline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), ipaddr.c_str()); -00694 } -00695 -<a name="l00696"></a><a class="code" href="classServer.html#a44">00696</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a44">Server::AddKLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) -00697 { -00698 <a class="code" href="xline_8h.html#a4">add_kline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); -00699 } -00700 -<a name="l00701"></a><a class="code" href="classServer.html#a45">00701</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a45">Server::AddELine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) -00702 { -00703 <a class="code" href="xline_8h.html#a5">add_eline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); -00704 } -00705 -<a name="l00706"></a><a class="code" href="classServer.html#a46">00706</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a46">Server::DelGLine</a>(std::string hostmask) -00707 { -00708 <a class="code" href="xline_8h.html#a6">del_gline</a>(hostmask.c_str()); -00709 } -00710 -<a name="l00711"></a><a class="code" href="classServer.html#a47">00711</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a47">Server::DelQLine</a>(std::string nickname) -00712 { -00713 <a class="code" href="xline_8h.html#a7">del_qline</a>(nickname.c_str()); -00714 } -00715 -<a name="l00716"></a><a class="code" href="classServer.html#a48">00716</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a48">Server::DelZLine</a>(std::string ipaddr) -00717 { -00718 <a class="code" href="xline_8h.html#a8">del_zline</a>(ipaddr.c_str()); -00719 } -00720 -<a name="l00721"></a><a class="code" href="classServer.html#a49">00721</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a49">Server::DelKLine</a>(std::string hostmask) -00722 { -00723 <a class="code" href="xline_8h.html#a9">del_kline</a>(hostmask.c_str()); -00724 } -00725 -<a name="l00726"></a><a class="code" href="classServer.html#a50">00726</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a50">Server::DelELine</a>(std::string hostmask) -00727 { -00728 <a class="code" href="xline_8h.html#a10">del_eline</a>(hostmask.c_str()); -00729 } -00730 -<a name="l00731"></a><a class="code" href="classServer.html#a51">00731</a> <span class="keywordtype">long</span> <a class="code" href="classServer.html#a51">Server::CalcDuration</a>(std::string delta) -00732 { -00733 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a76">duration</a>(delta.c_str()); -00734 } -00735 -<a name="l00736"></a><a class="code" href="classServer.html#a52">00736</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a52">Server::IsValidMask</a>(std::string mask) -00737 { -00738 <span class="keyword">const</span> <span class="keywordtype">char</span>* dest = mask.c_str(); -00739 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'!'</span>)==0) -00740 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00741 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'@'</span>)==0) -00742 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00743 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) -00744 <span class="keywordflow">if</span> (dest[i] < 32) -00745 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00746 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) -00747 <span class="keywordflow">if</span> (dest[i] > 126) -00748 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00749 <span class="keywordtype">int</span> c = 0; -00750 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) -00751 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'!'</span>) -00752 c++; -00753 <span class="keywordflow">if</span> (c>1) -00754 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00755 c = 0; -00756 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) -00757 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'@'</span>) -00758 c++; -00759 <span class="keywordflow">if</span> (c>1) -00760 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00761 -00762 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00763 } -00764 -<a name="l00765"></a><a class="code" href="classServer.html#a53">00765</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a53">Server::MeshSendAll</a>(std::string text) -00766 { -00767 NetSendToAll((<span class="keywordtype">char</span>*)text.c_str()); -00768 } -00769 -<a name="l00770"></a><a class="code" href="classServer.html#a54">00770</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a54">Server::MeshSendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string text) -00771 { -00772 <span class="keywordflow">if</span> (user) -00773 NetSendToCommon(user,(<span class="keywordtype">char</span>*)text.c_str()); -00774 } -00775 -<a name="l00776"></a><a class="code" href="classServer.html#a55">00776</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a55">Server::MeshSendAllAlive</a>(std::string text) -00777 { -00778 NetSendToAllAlive((<span class="keywordtype">char</span>*)text.c_str()); -00779 } -00780 -<a name="l00781"></a><a class="code" href="classServer.html#a56">00781</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a56">Server::MeshSendUnicast</a>(std::string destination, std::string text) -00782 { -00783 NetSendToOne((<span class="keywordtype">char</span>*)destination.c_str(),(<span class="keywordtype">char</span>*)text.c_str()); -00784 } -00785 -<a name="l00786"></a><a class="code" href="classServer.html#a57">00786</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a57">Server::MeshSendAllExcept</a>(std::string target, std::string text) -00787 { -00788 NetSendToAllExcept(target.c_str(),(<span class="keywordtype">char</span>*)text.c_str()); -00789 } -00790 -<a name="l00791"></a><a class="code" href="classServer.html#a58">00791</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a58">Server::MeshCheckChan</a>(<a class="code" href="classchanrec.html">chanrec</a> *c,std::string servername) -00792 { -00793 <span class="keywordflow">if</span> (c) -00794 { -00795 <span class="keywordflow">return</span> ChanAnyOnThisServer(c,(<span class="keywordtype">char</span>*)servername.c_str()); -00796 } -00797 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; -00798 } -00799 -<a name="l00800"></a><a class="code" href="classServer.html#a59">00800</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a59">Server::MeshCheckCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* u,std::string servername) -00801 { -00802 <span class="keywordflow">if</span> (u) -00803 { -00804 <span class="keywordflow">return</span> CommonOnThisServer(u,(<span class="keywordtype">char</span>*)servername.c_str()); -00805 } -00806 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; -00807 } -00808 -<a name="l00809"></a><a class="code" href="classServer.html#a60">00809</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classServer.html#a60">Server::FindModule</a>(std::string name) -00810 { -00811 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; i++) -00812 { -00813 <span class="keywordflow">if</span> (<a class="code" href="channels_8cpp.html#a26">module_names</a>[i] == name) -00814 { -00815 <span class="keywordflow">return</span> <a class="code" href="channels_8cpp.html#a2">modules</a>[i]; -00816 } -00817 } -00818 <span class="keywordflow">return</span> NULL; -00819 } -00820 -<a name="l00821"></a><a class="code" href="classConfigReader.html#a0">00821</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>() -00822 { -00823 <a class="code" href="modules_8cpp.html#a3">include_stack</a>.clear(); -00824 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00825 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00826 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this->cache,this->errorlog); -00827 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) -00828 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>; -00829 } -00830 -00831 -<a name="l00832"></a><a class="code" href="classConfigReader.html#a2">00832</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>() -00833 { -00834 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p0">cache</a>) -00835 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p0">cache</a>; -00836 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p1">errorlog</a>) -00837 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p1">errorlog</a>; -00838 } -00839 -00840 -<a name="l00841"></a><a class="code" href="classConfigReader.html#a1">00841</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename) -00842 { -00843 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00844 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00845 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>); -00846 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) -00847 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>; -00848 }; -00849 -<a name="l00850"></a><a class="code" href="classConfigReader.html#a3">00850</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) -00851 { -00852 <span class="keywordtype">char</span> val[MAXBUF]; -00853 <span class="keywordtype">char</span> t[MAXBUF]; -00854 <span class="keywordtype">char</span> n[MAXBUF]; -00855 strlcpy(t,tag.c_str(),MAXBUF); -00856 strlcpy(n,name.c_str(),MAXBUF); -00857 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00858 <span class="keywordflow">if</span> (!res) -00859 { -00860 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; -00861 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; -00862 } -00863 <span class="keywordflow">return</span> val; -00864 } -00865 -<a name="l00866"></a><a class="code" href="classConfigReader.html#a4">00866</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) -00867 { -00868 <span class="keywordtype">char</span> val[MAXBUF]; -00869 <span class="keywordtype">char</span> t[MAXBUF]; -00870 <span class="keywordtype">char</span> n[MAXBUF]; -00871 strlcpy(t,tag.c_str(),MAXBUF); -00872 strlcpy(n,name.c_str(),MAXBUF); -00873 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00874 <span class="keywordflow">if</span> (!res) -00875 { -00876 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; -00877 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00878 } -00879 std::string s = val; -00880 <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>)); -00881 } -00882 -<a name="l00883"></a><a class="code" href="classConfigReader.html#a5">00883</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) -00884 { -00885 <span class="keywordtype">char</span> val[MAXBUF]; -00886 <span class="keywordtype">char</span> t[MAXBUF]; -00887 <span class="keywordtype">char</span> n[MAXBUF]; -00888 strlcpy(t,tag.c_str(),MAXBUF); -00889 strlcpy(n,name.c_str(),MAXBUF); -00890 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00891 <span class="keywordflow">if</span> (!res) -00892 { -00893 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; -00894 <span class="keywordflow">return</span> 0; -00895 } -00896 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(val); i++) -00897 { -00898 <span class="keywordflow">if</span> (!isdigit(val[i])) -00899 { -00900 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a27">CONF_NOT_A_NUMBER</a>; -00901 <span class="keywordflow">return</span> 0; -00902 } -00903 } -00904 <span class="keywordflow">if</span> ((needs_unsigned) && (atoi(val)<0)) -00905 { -00906 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_NOT_UNSIGNED</a>; -00907 <span class="keywordflow">return</span> 0; -00908 } -00909 <span class="keywordflow">return</span> atoi(val); -00910 } -00911 -<a name="l00912"></a><a class="code" href="classConfigReader.html#a6">00912</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>() -00913 { -00914 <span class="keywordtype">long</span> olderr = this-><a class="code" href="classConfigReader.html#p3">error</a>; -00915 this->error = 0; -00916 <span class="keywordflow">return</span> olderr; -00917 } -00918 -<a name="l00919"></a><a class="code" href="classConfigReader.html#a9">00919</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) -00920 { -00921 <span class="keywordflow">if</span> (bail) -00922 { -00923 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()); -00924 exit(0); -00925 } -00926 <span class="keywordflow">else</span> -00927 { -00928 <span class="keywordtype">char</span> dataline[1024]; -00929 <span class="keywordflow">if</span> (user) -00930 { -00931 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>); -00932 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) -00933 { -00934 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); -00935 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); -00936 } -00937 } -00938 <span class="keywordflow">else</span> -00939 { -00940 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>); -00941 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) -00942 { -00943 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); -00944 WriteOpers(dataline); -00945 } -00946 } -00947 <span class="keywordflow">return</span>; -00948 } -00949 } -00950 -00951 -<a name="l00952"></a><a class="code" href="classConfigReader.html#a7">00952</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag) -00953 { -00954 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str()); -00955 } -00956 -<a name="l00957"></a><a class="code" href="classConfigReader.html#a10">00957</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) -00958 { -00959 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index); -00960 } -00961 -<a name="l00962"></a><a class="code" href="classConfigReader.html#a8">00962</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>() -00963 { -00964 <span class="keywordflow">return</span> this-><a class="code" href="classConfigReader.html#p2">readerror</a>; -00965 } -00966 -00967 -<a name="l00968"></a><a class="code" href="classFileReader.html#a1">00968</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename) -00969 { -00970 <a class="code" href="modules_8h.html#a31">file_cache</a> c; -00971 readfile(c,filename.c_str()); -00972 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; -00973 } -00974 -<a name="l00975"></a><a class="code" href="classFileReader.html#a0">00975</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>() -00976 { -00977 } -00978 -<a name="l00979"></a><a class="code" href="classFileReader.html#a3">00979</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename) -00980 { -00981 <a class="code" href="modules_8h.html#a31">file_cache</a> c; -00982 readfile(c,filename.c_str()); -00983 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; -00984 } -00985 -00986 -<a name="l00987"></a><a class="code" href="classFileReader.html#a2">00987</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>() -00988 { -00989 } -00990 -<a name="l00991"></a><a class="code" href="classFileReader.html#a4">00991</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>() -00992 { -00993 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0) -00994 { -00995 <span class="keywordflow">return</span>(<span class="keyword">false</span>); -00996 } -00997 <span class="keywordflow">else</span> -00998 { -00999 <span class="keywordflow">return</span>(<span class="keyword">true</span>); -01000 } -01001 } -01002 -<a name="l01003"></a><a class="code" href="classFileReader.html#a5">01003</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x) -01004 { -01005 <span class="keywordflow">if</span> ((x<0) || (x><a class="code" href="classFileReader.html#r0">fc</a>.size())) -01006 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; -01007 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x]; -01008 } -01009 -<a name="l01010"></a><a class="code" href="classFileReader.html#a6">01010</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>() -01011 { -01012 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size(); -01013 } -01014 -01015 -01016 std::vector<Module*> <a class="code" href="modules_8cpp.html#a60">modules</a>(255); -01017 std::vector<ircd_module*> <a class="code" href="modules_8cpp.html#a61">factory</a>(255); -01018 -<a name="l01019"></a><a class="code" href="modules_8cpp.html#a0">01019</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a> = -1; -01020 -01021 -</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon May 30 05:15:20 2005 for InspIRCd by +<!-- Generated by Doxygen 1.4.4-20050815 --> +<div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div> +<div class="nav"> +<a class="el" href="dir_000000.html">home</a> » <a class="el" href="dir_000001.html">brain</a> » <a class="el" href="dir_000002.html">inspircd-cvs</a> » <a class="el" href="dir_000003.html">inspircd</a> » <a class="el" href="dir_000005.html">src</a></div> +<h1>modules.cpp</h1><a href="modules_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +------------------------------------+</span> +<a name="l00002"></a>00002 <span class="comment"> * | Inspire Internet Relay Chat Daemon |</span> +<a name="l00003"></a>00003 <span class="comment"> * +------------------------------------+</span> +<a name="l00004"></a>00004 <span class="comment"> *</span> +<a name="l00005"></a>00005 <span class="comment"> * Inspire is copyright (C) 2002-2004 ChatSpike-Dev.</span> +<a name="l00006"></a>00006 <span class="comment"> * E-mail:</span> +<a name="l00007"></a>00007 <span class="comment"> * <brain@chatspike.net></span> +<a name="l00008"></a>00008 <span class="comment"> * <Craig@chatspike.net></span> +<a name="l00009"></a>00009 <span class="comment"> * </span> +<a name="l00010"></a>00010 <span class="comment"> * Written by Craig Edwards, Craig McLure, and others.</span> +<a name="l00011"></a>00011 <span class="comment"> * This program is free but copyrighted software; see</span> +<a name="l00012"></a>00012 <span class="comment"> * the file COPYING for details.</span> +<a name="l00013"></a>00013 <span class="comment"> *</span> +<a name="l00014"></a>00014 <span class="comment"> * ---------------------------------------------------</span> +<a name="l00015"></a>00015 <span class="comment"> */</span> +<a name="l00016"></a>00016 +<a name="l00017"></a>00017 <span class="keyword">using</span> <span class="keyword">namespace </span>std; +<a name="l00018"></a>00018 +<a name="l00019"></a>00019 <span class="preprocessor">#include "inspircd_config.h"</span> +<a name="l00020"></a>00020 <span class="preprocessor">#include "inspircd.h"</span> +<a name="l00021"></a>00021 <span class="preprocessor">#include "inspircd_io.h"</span> +<a name="l00022"></a>00022 <span class="preprocessor">#include "inspircd_util.h"</span> +<a name="l00023"></a>00023 <span class="preprocessor">#include <unistd.h></span> +<a name="l00024"></a>00024 <span class="preprocessor">#include <sys/errno.h></span> +<a name="l00025"></a>00025 +<a name="l00026"></a>00026 <span class="preprocessor">#ifdef USE_KQUEUE</span> +<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include <sys/types.h></span> +<a name="l00028"></a>00028 <span class="preprocessor">#include <sys/event.h></span> +<a name="l00029"></a>00029 <span class="preprocessor">#include <sys/time.h></span> +<a name="l00030"></a>00030 <span class="preprocessor">#endif</span> +<a name="l00031"></a>00031 <span class="preprocessor"></span> +<a name="l00032"></a>00032 <span class="preprocessor">#ifdef USE_EPOLL</span> +<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include <sys/epoll.h></span> +<a name="l00034"></a>00034 <span class="preprocessor">#endif</span> +<a name="l00035"></a>00035 <span class="preprocessor"></span> +<a name="l00036"></a>00036 <span class="preprocessor">#include <time.h></span> +<a name="l00037"></a>00037 <span class="preprocessor">#include <string></span> +<a name="l00038"></a>00038 <span class="preprocessor">#ifdef GCC3</span> +<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#include <ext/hash_map></span> +<a name="l00040"></a>00040 <span class="preprocessor">#else</span> +<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#include <hash_map></span> +<a name="l00042"></a>00042 <span class="preprocessor">#endif</span> +<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#include <map></span> +<a name="l00044"></a>00044 <span class="preprocessor">#include <sstream></span> +<a name="l00045"></a>00045 <span class="preprocessor">#include <vector></span> +<a name="l00046"></a>00046 <span class="preprocessor">#include <deque></span> +<a name="l00047"></a>00047 <span class="preprocessor">#include "<a class="code" href="users_8h.html">users.h</a>"</span> +<a name="l00048"></a>00048 <span class="preprocessor">#include "<a class="code" href="ctables_8h.html">ctables.h</a>"</span> +<a name="l00049"></a>00049 <span class="preprocessor">#include "globals.h"</span> +<a name="l00050"></a>00050 <span class="preprocessor">#include "<a class="code" href="modules_8h.html">modules.h</a>"</span> +<a name="l00051"></a>00051 <span class="preprocessor">#include "dynamic.h"</span> +<a name="l00052"></a>00052 <span class="preprocessor">#include "wildcard.h"</span> +<a name="l00053"></a>00053 <span class="preprocessor">#include "<a class="code" href="message_8h.html">message.h</a>"</span> +<a name="l00054"></a>00054 <span class="preprocessor">#include "<a class="code" href="mode_8h.html">mode.h</a>"</span> +<a name="l00055"></a>00055 <span class="preprocessor">#include "<a class="code" href="xline_8h.html">xline.h</a>"</span> +<a name="l00056"></a>00056 <span class="preprocessor">#include "<a class="code" href="commands_8h.html">commands.h</a>"</span> +<a name="l00057"></a>00057 <span class="preprocessor">#include "inspstring.h"</span> +<a name="l00058"></a>00058 <span class="preprocessor">#include "helperfuncs.h"</span> +<a name="l00059"></a>00059 <span class="preprocessor">#include "<a class="code" href="hashcomp_8h.html">hashcomp.h</a>"</span> +<a name="l00060"></a>00060 <span class="preprocessor">#include "<a class="code" href="socket_8h.html">socket.h</a>"</span> +<a name="l00061"></a>00061 +<a name="l00062"></a>00062 <span class="preprocessor">#ifdef USE_KQUEUE</span> +<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> kq; +<a name="l00064"></a>00064 <span class="preprocessor">#endif</span> +<a name="l00065"></a>00065 <span class="preprocessor"></span> +<a name="l00066"></a>00066 <span class="preprocessor">#ifdef USE_EPOLL</span> +<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="keywordtype">int</span> ep; +<a name="l00068"></a>00068 <span class="preprocessor">#endif</span> +<a name="l00069"></a>00069 <span class="preprocessor"></span> +<a name="l00070"></a>00070 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#MODCOUNT">MODCOUNT</a>; +<a name="l00071"></a>00071 <span class="keyword">extern</span> std::vector<Module*> <a class="code" href="channels_8cpp.html#modules">modules</a>; +<a name="l00072"></a>00072 <span class="keyword">extern</span> std::vector<ircd_module*> <a class="code" href="channels_8cpp.html#factory">factory</a>; +<a name="l00073"></a>00073 +<a name="l00074"></a>00074 <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="modules_8cpp.html#include_5Fstack">include_stack</a>; +<a name="l00075"></a>00075 +<a name="l00076"></a>00076 <span class="keyword">extern</span> std::vector<InspSocket*> <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>; +<a name="l00077"></a>00077 +<a name="l00078"></a>00078 <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#TIME">TIME</a>; +<a name="l00079"></a>00079 +<a name="l00080"></a>00080 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#LogLevel">LogLevel</a>; +<a name="l00081"></a>00081 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#ServerName_5BMAXBUF_5D">ServerName</a>[MAXBUF]; +<a name="l00082"></a>00082 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#Network_5BMAXBUF_5D">Network</a>[MAXBUF]; +<a name="l00083"></a>00083 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#ServerDesc_5BMAXBUF_5D">ServerDesc</a>[MAXBUF]; +<a name="l00084"></a>00084 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#AdminName_5BMAXBUF_5D">AdminName</a>[MAXBUF]; +<a name="l00085"></a>00085 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#AdminEmail_5BMAXBUF_5D">AdminEmail</a>[MAXBUF]; +<a name="l00086"></a>00086 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#AdminNick_5BMAXBUF_5D">AdminNick</a>[MAXBUF]; +<a name="l00087"></a>00087 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#diepass_5BMAXBUF_5D">diepass</a>[MAXBUF]; +<a name="l00088"></a>00088 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#restartpass_5BMAXBUF_5D">restartpass</a>[MAXBUF]; +<a name="l00089"></a>00089 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#motd_5BMAXBUF_5D">motd</a>[MAXBUF]; +<a name="l00090"></a>00090 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#rules_5BMAXBUF_5D">rules</a>[MAXBUF]; +<a name="l00091"></a>00091 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#list_5BMAXBUF_5D">list</a>[MAXBUF]; +<a name="l00092"></a>00092 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#PrefixQuit_5BMAXBUF_5D">PrefixQuit</a>[MAXBUF]; +<a name="l00093"></a>00093 <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#DieValue_5BMAXBUF_5D">DieValue</a>[MAXBUF]; +<a name="l00094"></a>00094 +<a name="l00095"></a>00095 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#debugging">debugging</a>; +<a name="l00096"></a>00096 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#WHOWAS_5FSTALE">WHOWAS_STALE</a>; +<a name="l00097"></a>00097 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#WHOWAS_5FMAX">WHOWAS_MAX</a>; +<a name="l00098"></a>00098 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#DieDelay">DieDelay</a>; +<a name="l00099"></a>00099 <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#startup_5Ftime">startup_time</a>; +<a name="l00100"></a>00100 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#NetBufferSize">NetBufferSize</a>; +<a name="l00101"></a>00101 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#MaxWhoResults">MaxWhoResults</a>; +<a name="l00102"></a>00102 <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#nb_5Fstart">nb_start</a>; +<a name="l00103"></a>00103 +<a name="l00104"></a>00104 <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="channels_8cpp.html#module_5Fnames">module_names</a>; +<a name="l00105"></a>00105 +<a name="l00106"></a>00106 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#boundPortCount">boundPortCount</a>; +<a name="l00107"></a>00107 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#portCount">portCount</a>; +<a name="l00108"></a>00108 +<a name="l00109"></a>00109 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#ports_5BMAXSOCKS_5D">ports</a>[MAXSOCKS]; +<a name="l00110"></a>00110 +<a name="l00111"></a>00111 +<a name="l00112"></a>00112 +<a name="l00113"></a>00113 <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#config_5Ff">config_f</a>; +<a name="l00114"></a>00114 +<a name="l00115"></a>00115 +<a name="l00116"></a>00116 +<a name="l00117"></a>00117 <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#log_5Ffile">log_file</a>; +<a name="l00118"></a>00118 +<a name="l00119"></a>00119 <span class="keyword">extern</span> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="modules_8cpp.html#fd_5Fref_5Ftable_5B_36_35_35_33_36_5D">fd_ref_table</a>[65536]; +<a name="l00120"></a>00120 +<a name="l00121"></a><a class="code" href="modules_8cpp.html#user_5Fhash">00121</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, userrec*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#user_5Fhash">user_hash</a>; +<a name="l00122"></a><a class="code" href="modules_8cpp.html#chan_5Fhash">00122</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, chanrec*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#chan_5Fhash">chan_hash</a>; +<a name="l00123"></a><a class="code" href="modules_8cpp.html#address_5Fcache">00123</a> <span class="keyword">typedef</span> nspace::hash_map<in_addr,string*, nspace::hash<in_addr>, <a class="code" href="structirc_1_1InAddr__HashComp.html">irc::InAddr_HashComp</a>> <a class="code" href="modules_8cpp.html#address_5Fcache">address_cache</a>; +<a name="l00124"></a><a class="code" href="modules_8cpp.html#whowas_5Fhash">00124</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, WhoWasUser*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#whowas_5Fhash">whowas_hash</a>; +<a name="l00125"></a><a class="code" href="modules_8cpp.html#command_5Ftable">00125</a> <span class="keyword">typedef</span> std::deque<command_t> <a class="code" href="modules_8cpp.html#command_5Ftable">command_table</a>; +<a name="l00126"></a>00126 +<a name="l00127"></a>00127 +<a name="l00128"></a>00128 <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#user_5Fhash">user_hash</a> <a class="code" href="modules_8cpp.html#clientlist">clientlist</a>; +<a name="l00129"></a>00129 <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#chan_5Fhash">chan_hash</a> <a class="code" href="modules_8cpp.html#chanlist">chanlist</a>; +<a name="l00130"></a>00130 <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#whowas_5Fhash">whowas_hash</a> <a class="code" href="modules_8cpp.html#whowas">whowas</a>; +<a name="l00131"></a>00131 <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#command_5Ftable">command_table</a> <a class="code" href="modules_8cpp.html#cmdlist">cmdlist</a>; +<a name="l00132"></a>00132 <span class="keyword">extern</span> <a class="code" href="modules_8h.html#file_5Fcache">file_cache</a> <a class="code" href="modules_8cpp.html#MOTD">MOTD</a>; +<a name="l00133"></a>00133 <span class="keyword">extern</span> <a class="code" href="modules_8h.html#file_5Fcache">file_cache</a> <a class="code" href="modules_8cpp.html#RULES">RULES</a>; +<a name="l00134"></a>00134 <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#address_5Fcache">address_cache</a> <a class="code" href="modules_8cpp.html#IP">IP</a>; +<a name="l00135"></a>00135 +<a name="l00136"></a>00136 +<a name="l00137"></a>00137 <span class="comment">// class type for holding an extended mode character - internal to core</span> +<a name="l00138"></a>00138 +<a name="l00139"></a><a class="code" href="classExtMode.html">00139</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> +<a name="l00140"></a>00140 { +<a name="l00141"></a>00141 <span class="keyword">public</span>: +<a name="l00142"></a><a class="code" href="classExtMode.html#modechar">00142</a> <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#modechar">modechar</a>; +<a name="l00143"></a><a class="code" href="classExtMode.html#type">00143</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#type">type</a>; +<a name="l00144"></a><a class="code" href="classExtMode.html#needsoper">00144</a> <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#needsoper">needsoper</a>; +<a name="l00145"></a><a class="code" href="classExtMode.html#params_5Fwhen_5Fon">00145</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#params_5Fwhen_5Fon">params_when_on</a>; +<a name="l00146"></a><a class="code" href="classExtMode.html#params_5Fwhen_5Foff">00146</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#params_5Fwhen_5Foff">params_when_off</a>; +<a name="l00147"></a><a class="code" href="classExtMode.html#list">00147</a> <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#list">list</a>; +<a name="l00148"></a><a class="code" href="classExtMode.html#ExtMode_28char_20mc_2C_20int_20ty_2C_20bool_20oper_2C_20int_20p_5Fon_2C_20int_20p_5Foff_29">00148</a> <a class="code" href="classExtMode.html#ExtMode_28char_20mc_2C_20int_20ty_2C_20bool_20oper_2C_20int_20p_5Fon_2C_20int_20p_5Foff_29">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#modechar">modechar</a>(mc), <a class="code" href="classExtMode.html#type">type</a>(ty), <a class="code" href="classExtMode.html#needsoper">needsoper</a>(oper), <a class="code" href="classExtMode.html#params_5Fwhen_5Fon">params_when_on</a>(p_on), <a class="code" href="classExtMode.html#params_5Fwhen_5Foff">params_when_off</a>(p_off) { }; +<a name="l00149"></a>00149 }; +<a name="l00150"></a>00150 +<a name="l00151"></a><a class="code" href="modules_8cpp.html#ExtModeList">00151</a> <span class="keyword">typedef</span> std::vector<ExtMode> <a class="code" href="modules_8cpp.html#ExtModeList">ExtModeList</a>; +<a name="l00152"></a><a class="code" href="modules_8cpp.html#ExtModeListIter">00152</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#ExtModeListIter">ExtModeListIter</a>; +<a name="l00153"></a>00153 +<a name="l00154"></a>00154 +<a name="l00155"></a><a class="code" href="modules_8cpp.html#EMode">00155</a> <a class="code" href="modules_8cpp.html#ExtModeList">ExtModeList</a> <a class="code" href="modules_8cpp.html#EMode">EMode</a>; +<a name="l00156"></a>00156 +<a name="l00157"></a>00157 <span class="comment">// returns true if an extended mode character is in use</span> +<a name="l00158"></a><a class="code" href="modules_8cpp.html#ModeDefined_28char_20modechar_2C_20int_20type_29">00158</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#ModeDefined_28char_20modechar_2C_20int_20type_29">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +<a name="l00159"></a>00159 { +<a name="l00160"></a>00160 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#ExtModeListIter">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#EMode">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#EMode">EMode</a>.end(); i++) +<a name="l00161"></a>00161 { +<a name="l00162"></a>00162 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +<a name="l00163"></a>00163 { +<a name="l00164"></a>00164 <span class="keywordflow">return</span> <span class="keyword">true</span>; +<a name="l00165"></a>00165 } +<a name="l00166"></a>00166 } +<a name="l00167"></a>00167 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00168"></a>00168 } +<a name="l00169"></a>00169 +<a name="l00170"></a><a class="code" href="modules_8cpp.html#ModeIsListMode_28char_20modechar_2C_20int_20type_29">00170</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#ModeIsListMode_28char_20modechar_2C_20int_20type_29">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +<a name="l00171"></a>00171 { +<a name="l00172"></a>00172 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#ExtModeListIter">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#EMode">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#EMode">EMode</a>.end(); i++) +<a name="l00173"></a>00173 { +<a name="l00174"></a>00174 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->list == <span class="keyword">true</span>)) +<a name="l00175"></a>00175 { +<a name="l00176"></a>00176 <span class="keywordflow">return</span> <span class="keyword">true</span>; +<a name="l00177"></a>00177 } +<a name="l00178"></a>00178 } +<a name="l00179"></a>00179 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00180"></a>00180 } +<a name="l00181"></a>00181 +<a name="l00182"></a><a class="code" href="modules_8cpp.html#ModeDefinedOper_28char_20modechar_2C_20int_20type_29">00182</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#ModeDefinedOper_28char_20modechar_2C_20int_20type_29">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +<a name="l00183"></a>00183 { +<a name="l00184"></a>00184 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#ExtModeListIter">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#EMode">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#EMode">EMode</a>.end(); i++) +<a name="l00185"></a>00185 { +<a name="l00186"></a>00186 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->needsoper == <span class="keyword">true</span>)) +<a name="l00187"></a>00187 { +<a name="l00188"></a>00188 <span class="keywordflow">return</span> <span class="keyword">true</span>; +<a name="l00189"></a>00189 } +<a name="l00190"></a>00190 } +<a name="l00191"></a>00191 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00192"></a>00192 } +<a name="l00193"></a>00193 +<a name="l00194"></a>00194 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> +<a name="l00195"></a><a class="code" href="modules_8cpp.html#ModeDefinedOn_28char_20modechar_2C_20int_20type_29">00195</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#ModeDefinedOn_28char_20modechar_2C_20int_20type_29">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +<a name="l00196"></a>00196 { +<a name="l00197"></a>00197 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#ExtModeListIter">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#EMode">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#EMode">EMode</a>.end(); i++) +<a name="l00198"></a>00198 { +<a name="l00199"></a>00199 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +<a name="l00200"></a>00200 { +<a name="l00201"></a>00201 <span class="keywordflow">return</span> i->params_when_on; +<a name="l00202"></a>00202 } +<a name="l00203"></a>00203 } +<a name="l00204"></a>00204 <span class="keywordflow">return</span> 0; +<a name="l00205"></a>00205 } +<a name="l00206"></a>00206 +<a name="l00207"></a>00207 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> +<a name="l00208"></a><a class="code" href="modules_8cpp.html#ModeDefinedOff_28char_20modechar_2C_20int_20type_29">00208</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#ModeDefinedOff_28char_20modechar_2C_20int_20type_29">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +<a name="l00209"></a>00209 { +<a name="l00210"></a>00210 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#ExtModeListIter">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#EMode">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#EMode">EMode</a>.end(); i++) +<a name="l00211"></a>00211 { +<a name="l00212"></a>00212 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +<a name="l00213"></a>00213 { +<a name="l00214"></a>00214 <span class="keywordflow">return</span> i->params_when_off; +<a name="l00215"></a>00215 } +<a name="l00216"></a>00216 } +<a name="l00217"></a>00217 <span class="keywordflow">return</span> 0; +<a name="l00218"></a>00218 } +<a name="l00219"></a>00219 +<a name="l00220"></a>00220 <span class="comment">// returns true if an extended mode character is in use</span> +<a name="l00221"></a><a class="code" href="modules_8cpp.html#DoAddExtendedMode_28char_20modechar_2C_20int_20type_2C_20bool_20requires_5Foper_2C_20int_20params_5Fon_2C_20int_20params_5Foff_29">00221</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#DoAddExtendedMode_28char_20modechar_2C_20int_20type_2C_20bool_20requires_5Foper_2C_20int_20params_5Fon_2C_20int_20params_5Foff_29">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) +<a name="l00222"></a>00222 { +<a name="l00223"></a>00223 <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#ModeDefined_28char_20modechar_2C_20int_20type_29">ModeDefined</a>(modechar,type)) { +<a name="l00224"></a>00224 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00225"></a>00225 } +<a name="l00226"></a>00226 <a class="code" href="modules_8cpp.html#EMode">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off)); +<a name="l00227"></a>00227 <span class="keywordflow">return</span> <span class="keyword">true</span>; +<a name="l00228"></a>00228 } +<a name="l00229"></a>00229 +<a name="l00230"></a>00230 <span class="comment">// turns a mode into a listmode</span> +<a name="l00231"></a><a class="code" href="modules_8cpp.html#ModeMakeList_28char_20modechar_29">00231</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#ModeMakeList_28char_20modechar_29">ModeMakeList</a>(<span class="keywordtype">char</span> modechar) +<a name="l00232"></a>00232 { +<a name="l00233"></a>00233 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#ExtModeListIter">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#EMode">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#EMode">EMode</a>.end(); i++) +<a name="l00234"></a>00234 { +<a name="l00235"></a>00235 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == <a class="code" href="modules_8h.html#MT_5FCHANNEL">MT_CHANNEL</a>)) +<a name="l00236"></a>00236 { +<a name="l00237"></a>00237 i->list = <span class="keyword">true</span>; +<a name="l00238"></a>00238 <span class="keywordflow">return</span>; +<a name="l00239"></a>00239 } +<a name="l00240"></a>00240 } +<a name="l00241"></a>00241 <span class="keywordflow">return</span>; +<a name="l00242"></a>00242 } +<a name="l00243"></a>00243 +<a name="l00244"></a>00244 <span class="comment">// version is a simple class for holding a modules version number</span> +<a name="l00245"></a>00245 +<a name="l00246"></a><a class="code" href="classVersion.html#Version_28int_20major_2C_20int_20minor_2C_20int_20revision_2C_20int_20build_2C_20int_20flags_29">00246</a> <a class="code" href="classVersion.html#Version_28int_20major_2C_20int_20minor_2C_20int_20revision_2C_20int_20build_2C_20int_20flags_29">Version::Version</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> revision, <span class="keywordtype">int</span> build, <span class="keywordtype">int</span> flags) : Major(major), Minor(minor), Revision(revision), Build(build), Flags(flags) { }; +<a name="l00247"></a>00247 +<a name="l00248"></a>00248 <span class="comment">// admin is a simple class for holding a server's administrative info</span> +<a name="l00249"></a>00249 +<a name="l00250"></a><a class="code" href="classAdmin.html#Admin_28std_3A_3Astring_20name_2C_20std_3A_3Astring_20email_2C_20std_3A_3Astring_20nick_29">00250</a> <a class="code" href="classAdmin.html#Admin_28std_3A_3Astring_20name_2C_20std_3A_3Astring_20email_2C_20std_3A_3Astring_20nick_29">Admin::Admin</a>(<a class="code" href="namespaceirc.html#string">std::string</a> name, <a class="code" href="namespaceirc.html#string">std::string</a> email, <a class="code" href="namespaceirc.html#string">std::string</a> nick) : Name(name), Email(email), Nick(nick) { }; +<a name="l00251"></a>00251 +<a name="l00252"></a><a class="code" href="classRequest.html#Request_28char_20_2Aanydata_2C_20Module_20_2Asrc_2C_20Module_20_2Adst_29">00252</a> <a class="code" href="classRequest.html#Request_28char_20_2Aanydata_2C_20Module_20_2Asrc_2C_20Module_20_2Adst_29">Request::Request</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, <a class="code" href="classModule.html">Module</a>* dst) : data(anydata), source(src), dest(dst) { }; +<a name="l00253"></a>00253 +<a name="l00254"></a><a class="code" href="classRequest.html#GetData_28_29">00254</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#GetData_28_29">Request::GetData</a>() +<a name="l00255"></a>00255 { +<a name="l00256"></a>00256 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#data">data</a>; +<a name="l00257"></a>00257 } +<a name="l00258"></a>00258 +<a name="l00259"></a><a class="code" href="classRequest.html#GetSource_28_29">00259</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#GetSource_28_29">Request::GetSource</a>() +<a name="l00260"></a>00260 { +<a name="l00261"></a>00261 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#source">source</a>; +<a name="l00262"></a>00262 } +<a name="l00263"></a>00263 +<a name="l00264"></a><a class="code" href="classRequest.html#GetDest_28_29">00264</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#GetDest_28_29">Request::GetDest</a>() +<a name="l00265"></a>00265 { +<a name="l00266"></a>00266 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#dest">dest</a>; +<a name="l00267"></a>00267 } +<a name="l00268"></a>00268 +<a name="l00269"></a><a class="code" href="classRequest.html#Send_28_29">00269</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#Send_28_29">Request::Send</a>() +<a name="l00270"></a>00270 { +<a name="l00271"></a>00271 <span class="keywordflow">if</span> (this->dest) +<a name="l00272"></a>00272 { +<a name="l00273"></a>00273 <span class="keywordflow">return</span> <a class="code" href="classRequest.html#dest">dest</a>-><a class="code" href="classModule.html#OnRequest_28Request_20_2Arequest_29">OnRequest</a>(<span class="keyword">this</span>); +<a name="l00274"></a>00274 } +<a name="l00275"></a>00275 <span class="keywordflow">else</span> +<a name="l00276"></a>00276 { +<a name="l00277"></a>00277 <span class="keywordflow">return</span> NULL; +<a name="l00278"></a>00278 } +<a name="l00279"></a>00279 } +<a name="l00280"></a>00280 +<a name="l00281"></a><a class="code" href="classEvent.html#Event_28char_20_2Aanydata_2C_20Module_20_2Asrc_2C_20std_3A_3Astring_20eventid_29">00281</a> <a class="code" href="classEvent.html#Event_28char_20_2Aanydata_2C_20Module_20_2Asrc_2C_20std_3A_3Astring_20eventid_29">Event::Event</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, <a class="code" href="namespaceirc.html#string">std::string</a> eventid) : data(anydata), source(src), id(eventid) { }; +<a name="l00282"></a>00282 +<a name="l00283"></a><a class="code" href="classEvent.html#GetData_28_29">00283</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#GetData_28_29">Event::GetData</a>() +<a name="l00284"></a>00284 { +<a name="l00285"></a>00285 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#data">data</a>; +<a name="l00286"></a>00286 } +<a name="l00287"></a>00287 +<a name="l00288"></a><a class="code" href="classEvent.html#GetSource_28_29">00288</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classEvent.html#GetSource_28_29">Event::GetSource</a>() +<a name="l00289"></a>00289 { +<a name="l00290"></a>00290 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#source">source</a>; +<a name="l00291"></a>00291 } +<a name="l00292"></a>00292 +<a name="l00293"></a><a class="code" href="classEvent.html#Send_28_29">00293</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#Send_28_29">Event::Send</a>() +<a name="l00294"></a>00294 { +<a name="l00295"></a>00295 <a class="code" href="modules_8h.html#FOREACH_5FMOD">FOREACH_MOD</a> OnEvent(<span class="keyword">this</span>); +<a name="l00296"></a>00296 <span class="keywordflow">return</span> NULL; +<a name="l00297"></a>00297 } +<a name="l00298"></a>00298 +<a name="l00299"></a><a class="code" href="classEvent.html#GetEventID_28_29">00299</a> <a class="code" href="namespaceirc.html#string">std::string</a> <a class="code" href="classEvent.html#GetEventID_28_29">Event::GetEventID</a>() +<a name="l00300"></a>00300 { +<a name="l00301"></a>00301 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#id">id</a>; +<a name="l00302"></a>00302 } +<a name="l00303"></a>00303 +<a name="l00304"></a>00304 +<a name="l00305"></a>00305 <span class="comment">// These declarations define the behavours of the base class Module (which does nothing at all)</span> +<a name="l00306"></a><a class="code" href="classModule.html#Module_28_29">00306</a> <a class="code" href="classModule.html#Module_28_29">Module::Module</a>() { } +<a name="l00307"></a><a class="code" href="classModule.html#_7EModule_28_29">00307</a> <a class="code" href="classModule.html#_7EModule_28_29">Module::~Module</a>() { } +<a name="l00308"></a><a class="code" href="classModule.html#OnUserConnect_28userrec_20_2Auser_29">00308</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserConnect_28userrec_20_2Auser_29">Module::OnUserConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00309"></a><a class="code" href="classModule.html#OnUserQuit_28userrec_20_2Auser_29">00309</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserQuit_28userrec_20_2Auser_29">Module::OnUserQuit</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00310"></a><a class="code" href="classModule.html#OnUserDisconnect_28userrec_20_2Auser_29">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserDisconnect_28userrec_20_2Auser_29">Module::OnUserDisconnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00311"></a><a class="code" href="classModule.html#OnUserJoin_28userrec_20_2Auser_2C_20chanrec_20_2Achannel_29">00311</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserJoin_28userrec_20_2Auser_2C_20chanrec_20_2Achannel_29">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } +<a name="l00312"></a><a class="code" href="classModule.html#OnUserPart_28userrec_20_2Auser_2C_20chanrec_20_2Achannel_29">00312</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserPart_28userrec_20_2Auser_2C_20chanrec_20_2Achannel_29">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } +<a name="l00313"></a><a class="code" href="classModule.html#OnPacketTransmit_28std_3A_3Astring_20_26data_2C_20std_3A_3Astring_20serv_29">00313</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnPacketTransmit_28std_3A_3Astring_20_26data_2C_20std_3A_3Astring_20serv_29">Module::OnPacketTransmit</a>(<a class="code" href="namespaceirc.html#string">std::string</a> &data, <a class="code" href="namespaceirc.html#string">std::string</a> serv) { } +<a name="l00314"></a><a class="code" href="classModule.html#OnPacketReceive_28std_3A_3Astring_20_26data_2C_20std_3A_3Astring_20serv_29">00314</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnPacketReceive_28std_3A_3Astring_20_26data_2C_20std_3A_3Astring_20serv_29">Module::OnPacketReceive</a>(<a class="code" href="namespaceirc.html#string">std::string</a> &data, <a class="code" href="namespaceirc.html#string">std::string</a> serv) { } +<a name="l00315"></a><a class="code" href="classModule.html#OnRehash_28_29">00315</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnRehash_28_29">Module::OnRehash</a>() { } +<a name="l00316"></a><a class="code" href="classModule.html#OnServerRaw_28std_3A_3Astring_20_26raw_2C_20bool_20inbound_2C_20userrec_20_2Auser_29">00316</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnServerRaw_28std_3A_3Astring_20_26raw_2C_20bool_20inbound_2C_20userrec_20_2Auser_29">Module::OnServerRaw</a>(<a class="code" href="namespaceirc.html#string">std::string</a> &raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00317"></a><a class="code" href="classModule.html#OnUserPreJoin_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20const_20char_20_2Acname_29">00317</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnUserPreJoin_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20const_20char_20_2Acname_29">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="l00318"></a><a class="code" href="classModule.html#OnExtendedMode_28userrec_20_2Auser_2C_20void_20_2Atarget_2C_20char_20modechar_2C_20int_20type_2C_20bool_20mode_5Fon_2C_20string_5Flist_20_26params_29">00318</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnExtendedMode_28userrec_20_2Auser_2C_20void_20_2Atarget_2C_20char_20modechar_2C_20int_20type_2C_20bool_20mode_5Fon_2C_20string_5Flist_20_26params_29">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, <a class="code" href="modules_8h.html#string_5Flist">string_list</a> &params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; } +<a name="l00319"></a><a class="code" href="classModule.html#GetVersion_28_29">00319</a> <a class="code" href="classVersion.html">Version</a> <a class="code" href="classModule.html#GetVersion_28_29">Module::GetVersion</a>() { <span class="keywordflow">return</span> <a class="code" href="classVersion.html">Version</a>(1,0,0,0,<a class="code" href="modules_8h.html#VF_5FVENDOR">VF_VENDOR</a>); } +<a name="l00320"></a><a class="code" href="classModule.html#OnOper_28userrec_20_2Auser_29">00320</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnOper_28userrec_20_2Auser_29">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00321"></a><a class="code" href="classModule.html#OnInfo_28userrec_20_2Auser_29">00321</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnInfo_28userrec_20_2Auser_29">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00322"></a><a class="code" href="classModule.html#OnWhois_28userrec_20_2Asource_2C_20userrec_20_2Adest_29">00322</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnWhois_28userrec_20_2Asource_2C_20userrec_20_2Adest_29">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { }; +<a name="l00323"></a><a class="code" href="classModule.html#OnUserPreInvite_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20chanrec_20_2Achannel_29">00323</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnUserPreInvite_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20chanrec_20_2Achannel_29">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="l00324"></a><a class="code" href="classModule.html#OnUserPreMessage_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20_26text_29">00324</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnUserPreMessage_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20_26text_29">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, <a class="code" href="namespaceirc.html#string">std::string</a> &text) { <span class="keywordflow">return</span> 0; }; +<a name="l00325"></a><a class="code" href="classModule.html#OnUserPreNotice_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20_26text_29">00325</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnUserPreNotice_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20_26text_29">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, <a class="code" href="namespaceirc.html#string">std::string</a> &text) { <span class="keywordflow">return</span> 0; }; +<a name="l00326"></a><a class="code" href="classModule.html#OnUserPreNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20newnick_29">00326</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnUserPreNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20newnick_29">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> newnick) { <span class="keywordflow">return</span> 0; }; +<a name="l00327"></a><a class="code" href="classModule.html#OnUserPostNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20oldnick_29">00327</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserPostNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20oldnick_29">Module::OnUserPostNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> oldnick) { }; +<a name="l00328"></a><a class="code" href="classModule.html#OnAccessCheck_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20chanrec_20_2Achannel_2C_20int_20access_5Ftype_29">00328</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnAccessCheck_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20chanrec_20_2Achannel_2C_20int_20access_5Ftype_29">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#ACR_5FDEFAULT">ACR_DEFAULT</a>; }; +<a name="l00329"></a><a class="code" href="classModule.html#OnUserSync_28userrec_20_2Auser_29">00329</a> <a class="code" href="modules_8h.html#string_5Flist">string_list</a> <a class="code" href="classModule.html#OnUserSync_28userrec_20_2Auser_29">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#string_5Flist">string_list</a> empty; <span class="keywordflow">return</span> empty; } +<a name="l00330"></a><a class="code" href="classModule.html#OnChannelSync_28chanrec_20_2Achan_29">00330</a> <a class="code" href="modules_8h.html#string_5Flist">string_list</a> <a class="code" href="classModule.html#OnChannelSync_28chanrec_20_2Achan_29">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#string_5Flist">string_list</a> empty; <span class="keywordflow">return</span> empty; } +<a name="l00331"></a><a class="code" href="classModule.html#On_30_30_35Numeric_28std_3A_3Astring_20_26output_29">00331</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#On_30_30_35Numeric_28std_3A_3Astring_20_26output_29">Module::On005Numeric</a>(<a class="code" href="namespaceirc.html#string">std::string</a> &output) { }; +<a name="l00332"></a><a class="code" href="classModule.html#OnKill_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20std_3A_3Astring_20reason_29">00332</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnKill_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20std_3A_3Astring_20reason_29">Module::OnKill</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest, <a class="code" href="namespaceirc.html#string">std::string</a> reason) { <span class="keywordflow">return</span> 0; }; +<a name="l00333"></a><a class="code" href="classModule.html#OnLoadModule_28Module_20_2Amod_2C_20std_3A_3Astring_20name_29">00333</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnLoadModule_28Module_20_2Amod_2C_20std_3A_3Astring_20name_29">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,<a class="code" href="namespaceirc.html#string">std::string</a> name) { }; +<a name="l00334"></a><a class="code" href="classModule.html#OnUnloadModule_28Module_20_2Amod_2C_20std_3A_3Astring_20name_29">00334</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUnloadModule_28Module_20_2Amod_2C_20std_3A_3Astring_20name_29">Module::OnUnloadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,<a class="code" href="namespaceirc.html#string">std::string</a> name) { }; +<a name="l00335"></a><a class="code" href="classModule.html#OnBackgroundTimer_28time_5Ft_20curtime_29">00335</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnBackgroundTimer_28time_5Ft_20curtime_29">Module::OnBackgroundTimer</a>(time_t curtime) { }; +<a name="l00336"></a><a class="code" href="classModule.html#OnSendList_28userrec_20_2Auser_2C_20chanrec_20_2Achannel_2C_20char_20mode_29">00336</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnSendList_28userrec_20_2Auser_2C_20chanrec_20_2Achannel_2C_20char_20mode_29">Module::OnSendList</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel, <span class="keywordtype">char</span> mode) { }; +<a name="l00337"></a><a class="code" href="classModule.html#OnPreCommand_28std_3A_3Astring_20command_2C_20char_20_2A_2Aparameters_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">00337</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnPreCommand_28std_3A_3Astring_20command_2C_20char_20_2A_2Aparameters_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">Module::OnPreCommand</a>(<a class="code" href="namespaceirc.html#string">std::string</a> command, <span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) { <span class="keywordflow">return</span> 0; }; +<a name="l00338"></a><a class="code" href="classModule.html#OnCheckReady_28userrec_20_2Auser_29">00338</a> <span class="keywordtype">bool</span> <a class="code" href="classModule.html#OnCheckReady_28userrec_20_2Auser_29">Module::OnCheckReady</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }; +<a name="l00339"></a><a class="code" href="classModule.html#OnUserRegister_28userrec_20_2Auser_29">00339</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserRegister_28userrec_20_2Auser_29">Module::OnUserRegister</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00340"></a><a class="code" href="classModule.html#OnUserPreKick_28userrec_20_2Asource_2C_20userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20reason_29">00340</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnUserPreKick_28userrec_20_2Asource_2C_20userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20reason_29">Module::OnUserPreKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <a class="code" href="namespaceirc.html#string">std::string</a> reason) { <span class="keywordflow">return</span> 0; }; +<a name="l00341"></a><a class="code" href="classModule.html#OnUserKick_28userrec_20_2Asource_2C_20userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20reason_29">00341</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserKick_28userrec_20_2Asource_2C_20userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20reason_29">Module::OnUserKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <a class="code" href="namespaceirc.html#string">std::string</a> reason) { }; +<a name="l00342"></a><a class="code" href="classModule.html#OnRawMode_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20char_20mode_2C_20std_3A_3Astring_20param_2C_20bool_20adding_2C_20int_20pcnt_29">00342</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnRawMode_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20char_20mode_2C_20std_3A_3Astring_20param_2C_20bool_20adding_2C_20int_20pcnt_29">Module::OnRawMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keywordtype">char</span> mode, <a class="code" href="namespaceirc.html#string">std::string</a> param, <span class="keywordtype">bool</span> adding, <span class="keywordtype">int</span> pcnt) { <span class="keywordflow">return</span> 0; }; +<a name="l00343"></a><a class="code" href="classModule.html#OnCheckInvite_28userrec_20_2Auser_2C_20chanrec_20_2Achan_29">00343</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnCheckInvite_28userrec_20_2Auser_2C_20chanrec_20_2Achan_29">Module::OnCheckInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; +<a name="l00344"></a><a class="code" href="classModule.html#OnCheckKey_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20keygiven_29">00344</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnCheckKey_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20keygiven_29">Module::OnCheckKey</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <a class="code" href="namespaceirc.html#string">std::string</a> keygiven) { <span class="keywordflow">return</span> 0; }; +<a name="l00345"></a><a class="code" href="classModule.html#OnCheckLimit_28userrec_20_2Auser_2C_20chanrec_20_2Achan_29">00345</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnCheckLimit_28userrec_20_2Auser_2C_20chanrec_20_2Achan_29">Module::OnCheckLimit</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; +<a name="l00346"></a><a class="code" href="classModule.html#OnCheckBan_28userrec_20_2Auser_2C_20chanrec_20_2Achan_29">00346</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnCheckBan_28userrec_20_2Auser_2C_20chanrec_20_2Achan_29">Module::OnCheckBan</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; +<a name="l00347"></a><a class="code" href="classModule.html#OnStats_28char_20symbol_29">00347</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnStats_28char_20symbol_29">Module::OnStats</a>(<span class="keywordtype">char</span> symbol) { }; +<a name="l00348"></a><a class="code" href="classModule.html#OnChangeLocalUserHost_28userrec_20_2Auser_2C_20std_3A_3Astring_20newhost_29">00348</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnChangeLocalUserHost_28userrec_20_2Auser_2C_20std_3A_3Astring_20newhost_29">Module::OnChangeLocalUserHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> newhost) { <span class="keywordflow">return</span> 0; }; +<a name="l00349"></a><a class="code" href="classModule.html#OnChangeLocalUserGECOS_28userrec_20_2Auser_2C_20std_3A_3Astring_20newhost_29">00349</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnChangeLocalUserGECOS_28userrec_20_2Auser_2C_20std_3A_3Astring_20newhost_29">Module::OnChangeLocalUserGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> newhost) { <span class="keywordflow">return</span> 0; }; +<a name="l00350"></a><a class="code" href="classModule.html#OnLocalTopicChange_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20topic_29">00350</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnLocalTopicChange_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20topic_29">Module::OnLocalTopicChange</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <a class="code" href="namespaceirc.html#string">std::string</a> topic) { <span class="keywordflow">return</span> 0; }; +<a name="l00351"></a><a class="code" href="classModule.html#OnEvent_28Event_20_2Aevent_29">00351</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnEvent_28Event_20_2Aevent_29">Module::OnEvent</a>(<a class="code" href="classEvent.html">Event</a>* event) { <span class="keywordflow">return</span>; }; +<a name="l00352"></a><a class="code" href="classModule.html#OnRequest_28Request_20_2Arequest_29">00352</a> <span class="keywordtype">char</span>* <a class="code" href="classModule.html#OnRequest_28Request_20_2Arequest_29">Module::OnRequest</a>(<a class="code" href="classRequest.html">Request</a>* request) { <span class="keywordflow">return</span> NULL; }; +<a name="l00353"></a><a class="code" href="classModule.html#OnOperCompare_28std_3A_3Astring_20password_2C_20std_3A_3Astring_20input_29">00353</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnOperCompare_28std_3A_3Astring_20password_2C_20std_3A_3Astring_20input_29">Module::OnOperCompare</a>(<a class="code" href="namespaceirc.html#string">std::string</a> password, <a class="code" href="namespaceirc.html#string">std::string</a> input) { <span class="keywordflow">return</span> 0; }; +<a name="l00354"></a><a class="code" href="classModule.html#OnGlobalOper_28userrec_20_2Auser_29">00354</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnGlobalOper_28userrec_20_2Auser_29">Module::OnGlobalOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00355"></a><a class="code" href="classModule.html#OnGlobalConnect_28userrec_20_2Auser_29">00355</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnGlobalConnect_28userrec_20_2Auser_29">Module::OnGlobalConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00356"></a><a class="code" href="classModule.html#OnAddBan_28userrec_20_2Asource_2C_20chanrec_20_2Achannel_2C_20std_3A_3Astring_20banmask_29">00356</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnAddBan_28userrec_20_2Asource_2C_20chanrec_20_2Achannel_2C_20std_3A_3Astring_20banmask_29">Module::OnAddBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,<a class="code" href="namespaceirc.html#string">std::string</a> banmask) { <span class="keywordflow">return</span> 0; }; +<a name="l00357"></a><a class="code" href="classModule.html#OnDelBan_28userrec_20_2Asource_2C_20chanrec_20_2Achannel_2C_20std_3A_3Astring_20banmask_29">00357</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnDelBan_28userrec_20_2Asource_2C_20chanrec_20_2Achannel_2C_20std_3A_3Astring_20banmask_29">Module::OnDelBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,<a class="code" href="namespaceirc.html#string">std::string</a> banmask) { <span class="keywordflow">return</span> 0; }; +<a name="l00358"></a><a class="code" href="classModule.html#OnRawSocketAccept_28int_20fd_2C_20std_3A_3Astring_20ip_2C_20int_20localport_29">00358</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnRawSocketAccept_28int_20fd_2C_20std_3A_3Astring_20ip_2C_20int_20localport_29">Module::OnRawSocketAccept</a>(<span class="keywordtype">int</span> fd, <a class="code" href="namespaceirc.html#string">std::string</a> ip, <span class="keywordtype">int</span> localport) { }; +<a name="l00359"></a><a class="code" href="classModule.html#OnRawSocketWrite_28int_20fd_2C_20char_20_2Abuffer_2C_20int_20count_29">00359</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnRawSocketWrite_28int_20fd_2C_20char_20_2Abuffer_2C_20int_20count_29">Module::OnRawSocketWrite</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">int</span> count) { <span class="keywordflow">return</span> 0; }; +<a name="l00360"></a><a class="code" href="classModule.html#OnRawSocketClose_28int_20fd_29">00360</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnRawSocketClose_28int_20fd_29">Module::OnRawSocketClose</a>(<span class="keywordtype">int</span> fd) { }; +<a name="l00361"></a><a class="code" href="classModule.html#OnRawSocketRead_28int_20fd_2C_20char_20_2Abuffer_2C_20unsigned_20int_20count_2C_20int_20_26readresult_29">00361</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#OnRawSocketRead_28int_20fd_2C_20char_20_2Abuffer_2C_20unsigned_20int_20count_2C_20int_20_26readresult_29">Module::OnRawSocketRead</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keywordtype">int</span> &readresult) { <span class="keywordflow">return</span> 0; }; +<a name="l00362"></a>00362 +<a name="l00363"></a>00363 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span> +<a name="l00364"></a>00364 <span class="comment">// exports in the core</span> +<a name="l00365"></a>00365 <span class="comment">//</span> +<a name="l00366"></a>00366 +<a name="l00367"></a><a class="code" href="classServer.html#Server_28_29">00367</a> <a class="code" href="classServer.html#Server_28_29">Server::Server</a>() +<a name="l00368"></a>00368 { +<a name="l00369"></a>00369 } +<a name="l00370"></a>00370 +<a name="l00371"></a><a class="code" href="classServer.html#_7EServer_28_29">00371</a> <a class="code" href="classServer.html#_7EServer_28_29">Server::~Server</a>() +<a name="l00372"></a>00372 { +<a name="l00373"></a>00373 } +<a name="l00374"></a>00374 +<a name="l00375"></a><a class="code" href="classServer.html#AddSocket_28InspSocket_20_2Asock_29">00375</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#AddSocket_28InspSocket_20_2Asock_29">Server::AddSocket</a>(<a class="code" href="classInspSocket.html">InspSocket</a>* sock) +<a name="l00376"></a>00376 { +<a name="l00377"></a>00377 <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.push_back(sock); +<a name="l00378"></a>00378 } +<a name="l00379"></a>00379 +<a name="l00380"></a><a class="code" href="classServer.html#DelSocket_28InspSocket_20_2Asock_29">00380</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#DelSocket_28InspSocket_20_2Asock_29">Server::DelSocket</a>(<a class="code" href="classInspSocket.html">InspSocket</a>* sock) +<a name="l00381"></a>00381 { +<a name="l00382"></a>00382 <span class="keywordflow">for</span> (std::vector<InspSocket*>::iterator a = <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.begin(); a < <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.end(); a++) +<a name="l00383"></a>00383 { +<a name="l00384"></a>00384 <span class="keywordflow">if</span> (*a == sock) +<a name="l00385"></a>00385 { +<a name="l00386"></a>00386 <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.erase(a); +<a name="l00387"></a>00387 <span class="keywordflow">return</span>; +<a name="l00388"></a>00388 } +<a name="l00389"></a>00389 } +<a name="l00390"></a>00390 } +<a name="l00391"></a>00391 +<a name="l00392"></a><a class="code" href="classServer.html#SendOpers_28std_3A_3Astring_20s_29">00392</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendOpers_28std_3A_3Astring_20s_29">Server::SendOpers</a>(<a class="code" href="namespaceirc.html#string">std::string</a> s) +<a name="l00393"></a>00393 { +<a name="l00394"></a>00394 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00395"></a>00395 } +<a name="l00396"></a>00396 +<a name="l00397"></a><a class="code" href="classServer.html#MatchText_28std_3A_3Astring_20sliteral_2C_20std_3A_3Astring_20spattern_29">00397</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#MatchText_28std_3A_3Astring_20sliteral_2C_20std_3A_3Astring_20spattern_29">Server::MatchText</a>(<a class="code" href="namespaceirc.html#string">std::string</a> sliteral, <a class="code" href="namespaceirc.html#string">std::string</a> spattern) +<a name="l00398"></a>00398 { +<a name="l00399"></a>00399 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF]; +<a name="l00400"></a>00400 strlcpy(literal,sliteral.c_str(),MAXBUF); +<a name="l00401"></a>00401 strlcpy(pattern,spattern.c_str(),MAXBUF); +<a name="l00402"></a>00402 <span class="keywordflow">return</span> match(literal,pattern); +<a name="l00403"></a>00403 } +<a name="l00404"></a>00404 +<a name="l00405"></a><a class="code" href="classServer.html#SendToModeMask_28std_3A_3Astring_20modes_2C_20int_20flags_2C_20std_3A_3Astring_20text_29">00405</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendToModeMask_28std_3A_3Astring_20modes_2C_20int_20flags_2C_20std_3A_3Astring_20text_29">Server::SendToModeMask</a>(<a class="code" href="namespaceirc.html#string">std::string</a> modes, <span class="keywordtype">int</span> flags, <a class="code" href="namespaceirc.html#string">std::string</a> text) +<a name="l00406"></a>00406 { +<a name="l00407"></a>00407 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str()); +<a name="l00408"></a>00408 } +<a name="l00409"></a>00409 +<a name="l00410"></a><a class="code" href="classServer.html#JoinUserToChannel_28userrec_20_2Auser_2C_20std_3A_3Astring_20cname_2C_20std_3A_3Astring_20key_29">00410</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#JoinUserToChannel_28userrec_20_2Auser_2C_20std_3A_3Astring_20cname_2C_20std_3A_3Astring_20key_29">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> cname, <a class="code" href="namespaceirc.html#string">std::string</a> key) +<a name="l00411"></a>00411 { +<a name="l00412"></a>00412 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">false</span>); +<a name="l00413"></a>00413 } +<a name="l00414"></a>00414 +<a name="l00415"></a><a class="code" href="classServer.html#PartUserFromChannel_28userrec_20_2Auser_2C_20std_3A_3Astring_20cname_2C_20std_3A_3Astring_20reason_29">00415</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#PartUserFromChannel_28userrec_20_2Auser_2C_20std_3A_3Astring_20cname_2C_20std_3A_3Astring_20reason_29">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> cname, <a class="code" href="namespaceirc.html#string">std::string</a> reason) +<a name="l00416"></a>00416 { +<a name="l00417"></a>00417 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>); +<a name="l00418"></a>00418 } +<a name="l00419"></a>00419 +<a name="l00420"></a><a class="code" href="classServer.html#GetUsers_28chanrec_20_2Achan_29">00420</a> <a class="code" href="modules_8h.html#chanuserlist">chanuserlist</a> <a class="code" href="classServer.html#GetUsers_28chanrec_20_2Achan_29">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) +<a name="l00421"></a>00421 { +<a name="l00422"></a>00422 <a class="code" href="modules_8h.html#chanuserlist">chanuserlist</a> userl; +<a name="l00423"></a>00423 userl.clear(); +<a name="l00424"></a>00424 std::vector<char*> *<a class="code" href="channels_8cpp.html#list_5BMAXBUF_5D">list</a> = chan-><a class="code" href="classchanrec.html#GetUsers_28_29">GetUsers</a>(); +<a name="l00425"></a>00425 <span class="keywordflow">for</span> (std::vector<char*>::iterator i = list->begin(); i != list->end(); i++) +<a name="l00426"></a>00426 { +<a name="l00427"></a>00427 <span class="keywordtype">char</span>* o = *i; +<a name="l00428"></a>00428 userl.push_back((<a class="code" href="classuserrec.html">userrec</a>*)o); +<a name="l00429"></a>00429 } +<a name="l00430"></a>00430 <span class="keywordflow">return</span> userl; +<a name="l00431"></a>00431 } +<a name="l00432"></a><a class="code" href="classServer.html#ChangeUserNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20nickname_29">00432</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#ChangeUserNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20nickname_29">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> nickname) +<a name="l00433"></a>00433 { +<a name="l00434"></a>00434 force_nickchange(user,nickname.c_str()); +<a name="l00435"></a>00435 } +<a name="l00436"></a>00436 +<a name="l00437"></a><a class="code" href="classServer.html#QuitUser_28userrec_20_2Auser_2C_20std_3A_3Astring_20reason_29">00437</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#QuitUser_28userrec_20_2Auser_2C_20std_3A_3Astring_20reason_29">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> reason) +<a name="l00438"></a>00438 { +<a name="l00439"></a>00439 kill_link(user,reason.c_str()); +<a name="l00440"></a>00440 } +<a name="l00441"></a>00441 +<a name="l00442"></a><a class="code" href="classServer.html#IsUlined_28std_3A_3Astring_20server_29">00442</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#IsUlined_28std_3A_3Astring_20server_29">Server::IsUlined</a>(<a class="code" href="namespaceirc.html#string">std::string</a> server) +<a name="l00443"></a>00443 { +<a name="l00444"></a>00444 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#is_5Fuline_28const_20char_20_2Aserver_29">is_uline</a>(server.c_str()); +<a name="l00445"></a>00445 } +<a name="l00446"></a>00446 +<a name="l00447"></a><a class="code" href="classServer.html#CallCommandHandler_28std_3A_3Astring_20commandname_2C_20char_20_2A_2Aparameters_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">00447</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#CallCommandHandler_28std_3A_3Astring_20commandname_2C_20char_20_2A_2Aparameters_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">Server::CallCommandHandler</a>(<a class="code" href="namespaceirc.html#string">std::string</a> commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user) +<a name="l00448"></a>00448 { +<a name="l00449"></a>00449 call_handler(commandname.c_str(),parameters,pcnt,user); +<a name="l00450"></a>00450 } +<a name="l00451"></a>00451 +<a name="l00452"></a><a class="code" href="classServer.html#Log_28int_20level_2C_20std_3A_3Astring_20s_29">00452</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#Log_28int_20level_2C_20std_3A_3Astring_20s_29">Server::Log</a>(<span class="keywordtype">int</span> level, <a class="code" href="namespaceirc.html#string">std::string</a> s) +<a name="l00453"></a>00453 { +<a name="l00454"></a>00454 log(level,<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00455"></a>00455 } +<a name="l00456"></a>00456 +<a name="l00457"></a><a class="code" href="classServer.html#AddCommand_28char_20_2Acmd_2C_20handlerfunc_20f_2C_20char_20flags_2C_20int_20minparams_2C_20char_20_2Asource_29">00457</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#AddCommand_28char_20_2Acmd_2C_20handlerfunc_20f_2C_20char_20flags_2C_20int_20minparams_2C_20char_20_2Asource_29">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams, <span class="keywordtype">char</span>* source) +<a name="l00458"></a>00458 { +<a name="l00459"></a>00459 <a class="code" href="modules_8h.html#createcommand_28char_20_2Acmd_2C_20handlerfunc_20f_2C_20char_20flags_2C_20int_20minparams_2C_20char_20_2Asource_29">createcommand</a>(cmd,f,flags,minparams,source); +<a name="l00460"></a>00460 } +<a name="l00461"></a>00461 +<a name="l00462"></a><a class="code" href="classServer.html#SendMode_28char_20_2A_2Aparameters_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">00462</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendMode_28char_20_2A_2Aparameters_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">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="l00463"></a>00463 { +<a name="l00464"></a>00464 <a class="code" href="mode_8h.html#server_5Fmode_28char_20_2A_2Aparameters_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">server_mode</a>(parameters,pcnt,user); +<a name="l00465"></a>00465 } +<a name="l00466"></a>00466 +<a name="l00467"></a><a class="code" href="classServer.html#Send_28int_20Socket_2C_20std_3A_3Astring_20s_29">00467</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#Send_28int_20Socket_2C_20std_3A_3Astring_20s_29">Server::Send</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="namespaceirc.html#string">std::string</a> s) +<a name="l00468"></a>00468 { +<a name="l00469"></a>00469 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00470"></a>00470 } +<a name="l00471"></a>00471 +<a name="l00472"></a><a class="code" href="classServer.html#SendServ_28int_20Socket_2C_20std_3A_3Astring_20s_29">00472</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendServ_28int_20Socket_2C_20std_3A_3Astring_20s_29">Server::SendServ</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="namespaceirc.html#string">std::string</a> s) +<a name="l00473"></a>00473 { +<a name="l00474"></a>00474 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00475"></a>00475 } +<a name="l00476"></a>00476 +<a name="l00477"></a><a class="code" href="classServer.html#SendFrom_28int_20Socket_2C_20userrec_20_2AUser_2C_20std_3A_3Astring_20s_29">00477</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendFrom_28int_20Socket_2C_20userrec_20_2AUser_2C_20std_3A_3Astring_20s_29">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="namespaceirc.html#string">std::string</a> s) +<a name="l00478"></a>00478 { +<a name="l00479"></a>00479 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00480"></a>00480 } +<a name="l00481"></a>00481 +<a name="l00482"></a><a class="code" href="classServer.html#SendTo_28userrec_20_2ASource_2C_20userrec_20_2ADest_2C_20std_3A_3Astring_20s_29">00482</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendTo_28userrec_20_2ASource_2C_20userrec_20_2ADest_2C_20std_3A_3Astring_20s_29">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, <a class="code" href="namespaceirc.html#string">std::string</a> s) +<a name="l00483"></a>00483 { +<a name="l00484"></a>00484 <span class="keywordflow">if</span> (!Source) +<a name="l00485"></a>00485 { +<a name="l00486"></a>00486 <span class="comment">// if source is NULL, then the message originates from the local server</span> +<a name="l00487"></a>00487 Write(Dest-><a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">":%s %s"</span>,this->GetServerName().c_str(),s.c_str()); +<a name="l00488"></a>00488 } +<a name="l00489"></a>00489 <span class="keywordflow">else</span> +<a name="l00490"></a>00490 { +<a name="l00491"></a>00491 <span class="comment">// otherwise it comes from the user specified</span> +<a name="l00492"></a>00492 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00493"></a>00493 } +<a name="l00494"></a>00494 } +<a name="l00495"></a>00495 +<a name="l00496"></a><a class="code" href="classServer.html#SendChannelServerNotice_28std_3A_3Astring_20ServName_2C_20chanrec_20_2AChannel_2C_20std_3A_3Astring_20text_29">00496</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendChannelServerNotice_28std_3A_3Astring_20ServName_2C_20chanrec_20_2AChannel_2C_20std_3A_3Astring_20text_29">Server::SendChannelServerNotice</a>(<a class="code" href="namespaceirc.html#string">std::string</a> ServName, <a class="code" href="classchanrec.html">chanrec</a>* Channel, <a class="code" href="namespaceirc.html#string">std::string</a> text) +<a name="l00497"></a>00497 { +<a name="l00498"></a>00498 WriteChannelWithServ((<span class="keywordtype">char</span>*)ServName.c_str(), Channel, <span class="stringliteral">"%s"</span>, text.c_str()); +<a name="l00499"></a>00499 } +<a name="l00500"></a>00500 +<a name="l00501"></a><a class="code" href="classServer.html#SendChannel_28userrec_20_2AUser_2C_20chanrec_20_2AChannel_2C_20std_3A_3Astring_20s_2C_20bool_20IncludeSender_29">00501</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendChannel_28userrec_20_2AUser_2C_20chanrec_20_2AChannel_2C_20std_3A_3Astring_20s_2C_20bool_20IncludeSender_29">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, <a class="code" href="namespaceirc.html#string">std::string</a> s,<span class="keywordtype">bool</span> IncludeSender) +<a name="l00502"></a>00502 { +<a name="l00503"></a>00503 <span class="keywordflow">if</span> (IncludeSender) +<a name="l00504"></a>00504 { +<a name="l00505"></a>00505 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00506"></a>00506 } +<a name="l00507"></a>00507 <span class="keywordflow">else</span> +<a name="l00508"></a>00508 { +<a name="l00509"></a>00509 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00510"></a>00510 } +<a name="l00511"></a>00511 } +<a name="l00512"></a>00512 +<a name="l00513"></a><a class="code" href="classServer.html#CommonChannels_28userrec_20_2Au_31_2C_20userrec_20_2Au_32_29">00513</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#CommonChannels_28userrec_20_2Au_31_2C_20userrec_20_2Au_32_29">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2) +<a name="l00514"></a>00514 { +<a name="l00515"></a>00515 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#common_5Fchannels_28userrec_20_2Au_2C_20userrec_20_2Au_32_29">common_channels</a>(u1,u2) != 0); +<a name="l00516"></a>00516 } +<a name="l00517"></a>00517 +<a name="l00518"></a><a class="code" href="classServer.html#SendCommon_28userrec_20_2AUser_2C_20std_3A_3Astring_20text_2C_20bool_20IncludeSender_29">00518</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendCommon_28userrec_20_2AUser_2C_20std_3A_3Astring_20text_2C_20bool_20IncludeSender_29">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="namespaceirc.html#string">std::string</a> text,<span class="keywordtype">bool</span> IncludeSender) +<a name="l00519"></a>00519 { +<a name="l00520"></a>00520 <span class="keywordflow">if</span> (IncludeSender) +<a name="l00521"></a>00521 { +<a name="l00522"></a>00522 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str()); +<a name="l00523"></a>00523 } +<a name="l00524"></a>00524 <span class="keywordflow">else</span> +<a name="l00525"></a>00525 { +<a name="l00526"></a>00526 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str()); +<a name="l00527"></a>00527 } +<a name="l00528"></a>00528 } +<a name="l00529"></a>00529 +<a name="l00530"></a><a class="code" href="classServer.html#SendWallops_28userrec_20_2AUser_2C_20std_3A_3Astring_20text_29">00530</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#SendWallops_28userrec_20_2AUser_2C_20std_3A_3Astring_20text_29">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="namespaceirc.html#string">std::string</a> text) +<a name="l00531"></a>00531 { +<a name="l00532"></a>00532 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str()); +<a name="l00533"></a>00533 } +<a name="l00534"></a>00534 +<a name="l00535"></a><a class="code" href="classServer.html#ChangeHost_28userrec_20_2Auser_2C_20std_3A_3Astring_20host_29">00535</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#ChangeHost_28userrec_20_2Auser_2C_20std_3A_3Astring_20host_29">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> host) +<a name="l00536"></a>00536 { +<a name="l00537"></a>00537 <a class="code" href="message_8h.html#ChangeDisplayedHost_28userrec_20_2Auser_2C_20const_20char_20_2Ahost_29">ChangeDisplayedHost</a>(user,host.c_str()); +<a name="l00538"></a>00538 } +<a name="l00539"></a>00539 +<a name="l00540"></a><a class="code" href="classServer.html#ChangeGECOS_28userrec_20_2Auser_2C_20std_3A_3Astring_20gecos_29">00540</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#ChangeGECOS_28userrec_20_2Auser_2C_20std_3A_3Astring_20gecos_29">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> gecos) +<a name="l00541"></a>00541 { +<a name="l00542"></a>00542 <a class="code" href="message_8h.html#ChangeName_28userrec_20_2Auser_2C_20const_20char_20_2Agecos_29">ChangeName</a>(user,gecos.c_str()); +<a name="l00543"></a>00543 } +<a name="l00544"></a>00544 +<a name="l00545"></a><a class="code" href="classServer.html#IsNick_28std_3A_3Astring_20nick_29">00545</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#IsNick_28std_3A_3Astring_20nick_29">Server::IsNick</a>(<a class="code" href="namespaceirc.html#string">std::string</a> nick) +<a name="l00546"></a>00546 { +<a name="l00547"></a>00547 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#isnick_28const_20char_20_2An_29">isnick</a>(nick.c_str()) != 0); +<a name="l00548"></a>00548 } +<a name="l00549"></a>00549 +<a name="l00550"></a><a class="code" href="classServer.html#FindNick_28std_3A_3Astring_20nick_29">00550</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#FindNick_28std_3A_3Astring_20nick_29">Server::FindNick</a>(<a class="code" href="namespaceirc.html#string">std::string</a> nick) +<a name="l00551"></a>00551 { +<a name="l00552"></a>00552 <span class="keywordflow">return</span> Find(nick); +<a name="l00553"></a>00553 } +<a name="l00554"></a>00554 +<a name="l00555"></a><a class="code" href="classServer.html#FindDescriptor_28int_20socket_29">00555</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#FindDescriptor_28int_20socket_29">Server::FindDescriptor</a>(<span class="keywordtype">int</span> socket) +<a name="l00556"></a>00556 { +<a name="l00557"></a>00557 <span class="keywordflow">return</span> (socket < 65536 ? fd_ref_table[socket] : NULL); +<a name="l00558"></a>00558 } +<a name="l00559"></a>00559 +<a name="l00560"></a><a class="code" href="classServer.html#FindChannel_28std_3A_3Astring_20channel_29">00560</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#FindChannel_28std_3A_3Astring_20channel_29">Server::FindChannel</a>(<a class="code" href="namespaceirc.html#string">std::string</a> channel) +<a name="l00561"></a>00561 { +<a name="l00562"></a>00562 <span class="keywordflow">return</span> FindChan(channel.c_str()); +<a name="l00563"></a>00563 } +<a name="l00564"></a>00564 +<a name="l00565"></a><a class="code" href="classServer.html#ChanMode_28userrec_20_2AUser_2C_20chanrec_20_2AChan_29">00565</a> <a class="code" href="namespaceirc.html#string">std::string</a> <a class="code" href="classServer.html#ChanMode_28userrec_20_2AUser_2C_20chanrec_20_2AChan_29">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) +<a name="l00566"></a>00566 { +<a name="l00567"></a>00567 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#cmode_28userrec_20_2Auser_2C_20chanrec_20_2Achan_29">cmode</a>(User,Chan); +<a name="l00568"></a>00568 } +<a name="l00569"></a>00569 +<a name="l00570"></a><a class="code" href="classServer.html#IsOnChannel_28userrec_20_2AUser_2C_20chanrec_20_2AChan_29">00570</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#IsOnChannel_28userrec_20_2AUser_2C_20chanrec_20_2AChan_29">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) +<a name="l00571"></a>00571 { +<a name="l00572"></a>00572 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#has_5Fchannel_28userrec_20_2Au_2C_20chanrec_20_2Ac_29">has_channel</a>(User,Chan); +<a name="l00573"></a>00573 } +<a name="l00574"></a>00574 +<a name="l00575"></a><a class="code" href="classServer.html#GetServerName_28_29">00575</a> <a class="code" href="namespaceirc.html#string">std::string</a> <a class="code" href="classServer.html#GetServerName_28_29">Server::GetServerName</a>() +<a name="l00576"></a>00576 { +<a name="l00577"></a>00577 <span class="keywordflow">return</span> getservername(); +<a name="l00578"></a>00578 } +<a name="l00579"></a>00579 +<a name="l00580"></a><a class="code" href="classServer.html#GetNetworkName_28_29">00580</a> <a class="code" href="namespaceirc.html#string">std::string</a> <a class="code" href="classServer.html#GetNetworkName_28_29">Server::GetNetworkName</a>() +<a name="l00581"></a>00581 { +<a name="l00582"></a>00582 <span class="keywordflow">return</span> getnetworkname(); +<a name="l00583"></a>00583 } +<a name="l00584"></a>00584 +<a name="l00585"></a><a class="code" href="classServer.html#GetServerDescription_28_29">00585</a> <a class="code" href="namespaceirc.html#string">std::string</a> <a class="code" href="classServer.html#GetServerDescription_28_29">Server::GetServerDescription</a>() +<a name="l00586"></a>00586 { +<a name="l00587"></a>00587 <span class="keywordflow">return</span> getserverdesc(); +<a name="l00588"></a>00588 } +<a name="l00589"></a>00589 +<a name="l00590"></a><a class="code" href="classServer.html#GetAdmin_28_29">00590</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#GetAdmin_28_29">Server::GetAdmin</a>() +<a name="l00591"></a>00591 { +<a name="l00592"></a>00592 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick()); +<a name="l00593"></a>00593 } +<a name="l00594"></a>00594 +<a name="l00595"></a>00595 +<a name="l00596"></a>00596 +<a name="l00597"></a><a class="code" href="classServer.html#AddExtendedMode_28char_20modechar_2C_20int_20type_2C_20bool_20requires_5Foper_2C_20int_20params_5Fwhen_5Fon_2C_20int_20params_5Fwhen_5Foff_29">00597</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#AddExtendedMode_28char_20modechar_2C_20int_20type_2C_20bool_20requires_5Foper_2C_20int_20params_5Fwhen_5Fon_2C_20int_20params_5Fwhen_5Foff_29">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) +<a name="l00598"></a>00598 { +<a name="l00599"></a>00599 <span class="keywordflow">if</span> (((modechar >= <span class="charliteral">'A'</span>) && (modechar <= <span class="charliteral">'Z'</span>)) || ((modechar >= <span class="charliteral">'a'</span>) && (modechar <= <span class="charliteral">'z'</span>))) +<a name="l00600"></a>00600 { +<a name="l00601"></a>00601 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#MT_5FSERVER">MT_SERVER</a>) +<a name="l00602"></a>00602 { +<a name="l00603"></a>00603 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Modes of type MT_SERVER are reserved for future expansion"</span>); +<a name="l00604"></a>00604 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00605"></a>00605 } +<a name="l00606"></a>00606 <span class="keywordflow">if</span> (((params_when_on>0) || (params_when_off>0)) && (type == <a class="code" href="modules_8h.html#MT_5FCLIENT">MT_CLIENT</a>)) +<a name="l00607"></a>00607 { +<a name="l00608"></a>00608 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Parameters on MT_CLIENT modes are not supported"</span>); +<a name="l00609"></a>00609 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00610"></a>00610 } +<a name="l00611"></a>00611 <span class="keywordflow">if</span> ((params_when_on>1) || (params_when_off>1)) +<a name="l00612"></a>00612 { +<a name="l00613"></a>00613 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"</span>); +<a name="l00614"></a>00614 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00615"></a>00615 } +<a name="l00616"></a>00616 <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#DoAddExtendedMode_28char_20modechar_2C_20int_20type_2C_20bool_20requires_5Foper_2C_20int_20params_5Fon_2C_20int_20params_5Foff_29">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off); +<a name="l00617"></a>00617 } +<a name="l00618"></a>00618 <span class="keywordflow">else</span> +<a name="l00619"></a>00619 { +<a name="l00620"></a>00620 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Muppet modechar detected."</span>); +<a name="l00621"></a>00621 } +<a name="l00622"></a>00622 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00623"></a>00623 } +<a name="l00624"></a>00624 +<a name="l00625"></a><a class="code" href="classServer.html#AddExtendedListMode_28char_20modechar_29">00625</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#AddExtendedListMode_28char_20modechar_29">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar) +<a name="l00626"></a>00626 { +<a name="l00627"></a>00627 <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#DoAddExtendedMode_28char_20modechar_2C_20int_20type_2C_20bool_20requires_5Foper_2C_20int_20params_5Fon_2C_20int_20params_5Foff_29">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#MT_5FCHANNEL">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1); +<a name="l00628"></a>00628 <span class="keywordflow">if</span> (res) +<a name="l00629"></a>00629 <a class="code" href="modules_8cpp.html#ModeMakeList_28char_20modechar_29">ModeMakeList</a>(modechar); +<a name="l00630"></a>00630 <span class="keywordflow">return</span> res; +<a name="l00631"></a>00631 } +<a name="l00632"></a>00632 +<a name="l00633"></a><a class="code" href="classServer.html#CountUsers_28chanrec_20_2Ac_29">00633</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#CountUsers_28chanrec_20_2Ac_29">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c) +<a name="l00634"></a>00634 { +<a name="l00635"></a>00635 <span class="keywordflow">return</span> usercount(c); +<a name="l00636"></a>00636 } +<a name="l00637"></a>00637 +<a name="l00638"></a>00638 +<a name="l00639"></a><a class="code" href="classServer.html#UserToPseudo_28userrec_20_2Auser_2C_20std_3A_3Astring_20message_29">00639</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#UserToPseudo_28userrec_20_2Auser_2C_20std_3A_3Astring_20message_29">Server::UserToPseudo</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<a class="code" href="namespaceirc.html#string">std::string</a> message) +<a name="l00640"></a>00640 { +<a name="l00641"></a>00641 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_fd = user-><a class="code" href="classconnection.html#fd">fd</a>; +<a name="l00642"></a>00642 user-><a class="code" href="classconnection.html#fd">fd</a> = <a class="code" href="modules_8h.html#FD_5FMAGIC_5FNUMBER">FD_MAGIC_NUMBER</a>; +<a name="l00643"></a>00643 user-><a class="code" href="classuserrec.html#ClearBuffer_28_29">ClearBuffer</a>(); +<a name="l00644"></a>00644 Write(old_fd,<span class="stringliteral">"ERROR :Closing link (%s@%s) [%s]"</span>,user-><a class="code" href="classuserrec.html#ident_5BIDENTMAX_2B_32_5D">ident</a>,user-><a class="code" href="classconnection.html#host_5B_31_36_30_5D">host</a>,message.c_str()); +<a name="l00645"></a>00645 <span class="preprocessor">#ifdef USE_KQUEUE</span> +<a name="l00646"></a>00646 <span class="preprocessor"></span> <span class="keyword">struct </span>kevent ke; +<a name="l00647"></a>00647 EV_SET(&ke, old_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); +<a name="l00648"></a>00648 <span class="keywordtype">int</span> i = kevent(kq, &ke, 1, 0, 0, NULL); +<a name="l00649"></a>00649 <span class="keywordflow">if</span> (i == -1) +<a name="l00650"></a>00650 { +<a name="l00651"></a>00651 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"kqueue: Failed to remove user from queue!"</span>); +<a name="l00652"></a>00652 } +<a name="l00653"></a>00653 <span class="preprocessor">#endif</span> +<a name="l00654"></a>00654 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_EPOLL</span> +<a name="l00655"></a>00655 <span class="preprocessor"></span> <span class="keyword">struct </span>epoll_event ev; +<a name="l00656"></a>00656 ev.events = EPOLLIN | EPOLLET; +<a name="l00657"></a>00657 ev.data.fd = old_fd; +<a name="l00658"></a>00658 <span class="keywordtype">int</span> i = epoll_ctl(ep, EPOLL_CTL_DEL, old_fd, &ev); +<a name="l00659"></a>00659 <span class="keywordflow">if</span> (i < 0) +<a name="l00660"></a>00660 { +<a name="l00661"></a>00661 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"epoll: List deletion failure!"</span>); +<a name="l00662"></a>00662 } +<a name="l00663"></a>00663 <span class="preprocessor">#endif</span> +<a name="l00664"></a>00664 <span class="preprocessor"></span> +<a name="l00665"></a>00665 shutdown(old_fd,2); +<a name="l00666"></a>00666 close(old_fd); +<a name="l00667"></a>00667 <span class="keywordflow">return</span> <span class="keyword">true</span>; +<a name="l00668"></a>00668 } +<a name="l00669"></a>00669 +<a name="l00670"></a><a class="code" href="classServer.html#PseudoToUser_28userrec_20_2Aalive_2C_20userrec_20_2Azombie_2C_20std_3A_3Astring_20message_29">00670</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#PseudoToUser_28userrec_20_2Aalive_2C_20userrec_20_2Azombie_2C_20std_3A_3Astring_20message_29">Server::PseudoToUser</a>(<a class="code" href="classuserrec.html">userrec</a>* alive,<a class="code" href="classuserrec.html">userrec</a>* zombie,<a class="code" href="namespaceirc.html#string">std::string</a> message) +<a name="l00671"></a>00671 { +<a name="l00672"></a>00672 zombie-><a class="code" href="classconnection.html#fd">fd</a> = alive-><a class="code" href="classconnection.html#fd">fd</a>; +<a name="l00673"></a>00673 alive-><a class="code" href="classconnection.html#fd">fd</a> = <a class="code" href="modules_8h.html#FD_5FMAGIC_5FNUMBER">FD_MAGIC_NUMBER</a>; +<a name="l00674"></a>00674 alive-><a class="code" href="classuserrec.html#ClearBuffer_28_29">ClearBuffer</a>(); +<a name="l00675"></a>00675 Write(zombie-><a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">":%s!%s@%s NICK %s"</span>,alive-><a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>,alive-><a class="code" href="classuserrec.html#ident_5BIDENTMAX_2B_32_5D">ident</a>,alive-><a class="code" href="classconnection.html#host_5B_31_36_30_5D">host</a>,zombie-><a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>); +<a name="l00676"></a>00676 kill_link(alive,message.c_str()); +<a name="l00677"></a>00677 fd_ref_table[zombie-><a class="code" href="classconnection.html#fd">fd</a>] = zombie; +<a name="l00678"></a>00678 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != MAXCHANS; i++) +<a name="l00679"></a>00679 { +<a name="l00680"></a>00680 <span class="keywordflow">if</span> (zombie-><a class="code" href="classuserrec.html#chans_5BMAXCHANS_5D">chans</a>[i].<a class="code" href="classucrec.html#channel">channel</a> != NULL) +<a name="l00681"></a>00681 { +<a name="l00682"></a>00682 <span class="keywordflow">if</span> (zombie-><a class="code" href="classuserrec.html#chans_5BMAXCHANS_5D">chans</a>[i].<a class="code" href="classucrec.html#channel">channel</a>-><a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>) +<a name="l00683"></a>00683 { +<a name="l00684"></a>00684 <a class="code" href="classchanrec.html">chanrec</a>* Ptr = zombie-><a class="code" href="classuserrec.html#chans_5BMAXCHANS_5D">chans</a>[i].<a class="code" href="classucrec.html#channel">channel</a>; +<a name="l00685"></a>00685 WriteFrom(zombie-><a class="code" href="classconnection.html#fd">fd</a>,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-><a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>); +<a name="l00686"></a>00686 <span class="keywordflow">if</span> (Ptr-><a class="code" href="classchanrec.html#topicset">topicset</a>) +<a name="l00687"></a>00687 { +<a name="l00688"></a>00688 WriteServ(zombie-><a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"332 %s %s :%s"</span>, zombie-><a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-><a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>, Ptr-><a class="code" href="classchanrec.html#topic_5BMAXBUF_5D">topic</a>); +<a name="l00689"></a>00689 WriteServ(zombie-><a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie-><a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-><a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>, Ptr-><a class="code" href="classchanrec.html#setby_5BNICKMAX_5D">setby</a>, Ptr-><a class="code" href="classchanrec.html#topicset">topicset</a>); +<a name="l00690"></a>00690 } +<a name="l00691"></a>00691 userlist(zombie,Ptr); +<a name="l00692"></a>00692 WriteServ(zombie-><a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie-><a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-><a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>); +<a name="l00693"></a>00693 +<a name="l00694"></a>00694 } +<a name="l00695"></a>00695 } +<a name="l00696"></a>00696 } +<a name="l00697"></a>00697 <span class="keywordflow">return</span> <span class="keyword">true</span>; +<a name="l00698"></a>00698 } +<a name="l00699"></a>00699 +<a name="l00700"></a><a class="code" href="classServer.html#AddGLine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">00700</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#AddGLine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">Server::AddGLine</a>(<span class="keywordtype">long</span> <a class="code" href="commands_8h.html#duration_28const_20char_20_2Astr_29">duration</a>, <a class="code" href="namespaceirc.html#string">std::string</a> source, <a class="code" href="namespaceirc.html#string">std::string</a> reason, <a class="code" href="namespaceirc.html#string">std::string</a> hostmask) +<a name="l00701"></a>00701 { +<a name="l00702"></a>00702 <a class="code" href="xline_8h.html#add_5Fgline_28long_20duration_2C_20const_20char_20_2Asource_2C_20const_20char_20_2Areason_2C_20const_20char_20_2Ahostmask_29">add_gline</a>(duration, source.c_str(), reason.c_str(), hostmask.c_str()); +<a name="l00703"></a>00703 } +<a name="l00704"></a>00704 +<a name="l00705"></a><a class="code" href="classServer.html#AddQLine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20nickname_29">00705</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#AddQLine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20nickname_29">Server::AddQLine</a>(<span class="keywordtype">long</span> <a class="code" href="commands_8h.html#duration_28const_20char_20_2Astr_29">duration</a>, <a class="code" href="namespaceirc.html#string">std::string</a> source, <a class="code" href="namespaceirc.html#string">std::string</a> reason, <a class="code" href="namespaceirc.html#string">std::string</a> nickname) +<a name="l00706"></a>00706 { +<a name="l00707"></a>00707 <a class="code" href="xline_8h.html#add_5Fqline_28long_20duration_2C_20const_20char_20_2Asource_2C_20const_20char_20_2Areason_2C_20const_20char_20_2Anickname_29">add_qline</a>(duration, source.c_str(), reason.c_str(), nickname.c_str()); +<a name="l00708"></a>00708 } +<a name="l00709"></a>00709 +<a name="l00710"></a><a class="code" href="classServer.html#AddZLine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20ipaddr_29">00710</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#AddZLine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20ipaddr_29">Server::AddZLine</a>(<span class="keywordtype">long</span> <a class="code" href="commands_8h.html#duration_28const_20char_20_2Astr_29">duration</a>, <a class="code" href="namespaceirc.html#string">std::string</a> source, <a class="code" href="namespaceirc.html#string">std::string</a> reason, <a class="code" href="namespaceirc.html#string">std::string</a> ipaddr) +<a name="l00711"></a>00711 { +<a name="l00712"></a>00712 <a class="code" href="xline_8h.html#add_5Fzline_28long_20duration_2C_20const_20char_20_2Asource_2C_20const_20char_20_2Areason_2C_20const_20char_20_2Aipaddr_29">add_zline</a>(duration, source.c_str(), reason.c_str(), ipaddr.c_str()); +<a name="l00713"></a>00713 } +<a name="l00714"></a>00714 +<a name="l00715"></a><a class="code" href="classServer.html#AddKLine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">00715</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#AddKLine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">Server::AddKLine</a>(<span class="keywordtype">long</span> <a class="code" href="commands_8h.html#duration_28const_20char_20_2Astr_29">duration</a>, <a class="code" href="namespaceirc.html#string">std::string</a> source, <a class="code" href="namespaceirc.html#string">std::string</a> reason, <a class="code" href="namespaceirc.html#string">std::string</a> hostmask) +<a name="l00716"></a>00716 { +<a name="l00717"></a>00717 <a class="code" href="xline_8h.html#add_5Fkline_28long_20duration_2C_20const_20char_20_2Asource_2C_20const_20char_20_2Areason_2C_20const_20char_20_2Ahostmask_29">add_kline</a>(duration, source.c_str(), reason.c_str(), hostmask.c_str()); +<a name="l00718"></a>00718 } +<a name="l00719"></a>00719 +<a name="l00720"></a><a class="code" href="classServer.html#AddELine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">00720</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#AddELine_28long_20duration_2C_20std_3A_3Astring_20source_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">Server::AddELine</a>(<span class="keywordtype">long</span> <a class="code" href="commands_8h.html#duration_28const_20char_20_2Astr_29">duration</a>, <a class="code" href="namespaceirc.html#string">std::string</a> source, <a class="code" href="namespaceirc.html#string">std::string</a> reason, <a class="code" href="namespaceirc.html#string">std::string</a> hostmask) +<a name="l00721"></a>00721 { +<a name="l00722"></a>00722 <a class="code" href="xline_8h.html#add_5Feline_28long_20duration_2C_20const_20char_20_2Asource_2C_20const_20char_20_2Areason_2C_20const_20char_20_2Ahostmask_29">add_eline</a>(duration, source.c_str(), reason.c_str(), hostmask.c_str()); +<a name="l00723"></a>00723 } +<a name="l00724"></a>00724 +<a name="l00725"></a><a class="code" href="classServer.html#DelGLine_28std_3A_3Astring_20hostmask_29">00725</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#DelGLine_28std_3A_3Astring_20hostmask_29">Server::DelGLine</a>(<a class="code" href="namespaceirc.html#string">std::string</a> hostmask) +<a name="l00726"></a>00726 { +<a name="l00727"></a>00727 <span class="keywordflow">return</span> <a class="code" href="xline_8h.html#del_5Fgline_28const_20char_20_2Ahostmask_29">del_gline</a>(hostmask.c_str()); +<a name="l00728"></a>00728 } +<a name="l00729"></a>00729 +<a name="l00730"></a><a class="code" href="classServer.html#DelQLine_28std_3A_3Astring_20nickname_29">00730</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#DelQLine_28std_3A_3Astring_20nickname_29">Server::DelQLine</a>(<a class="code" href="namespaceirc.html#string">std::string</a> nickname) +<a name="l00731"></a>00731 { +<a name="l00732"></a>00732 <span class="keywordflow">return</span> <a class="code" href="xline_8h.html#del_5Fqline_28const_20char_20_2Anickname_29">del_qline</a>(nickname.c_str()); +<a name="l00733"></a>00733 } +<a name="l00734"></a>00734 +<a name="l00735"></a><a class="code" href="classServer.html#DelZLine_28std_3A_3Astring_20ipaddr_29">00735</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#DelZLine_28std_3A_3Astring_20ipaddr_29">Server::DelZLine</a>(<a class="code" href="namespaceirc.html#string">std::string</a> ipaddr) +<a name="l00736"></a>00736 { +<a name="l00737"></a>00737 <span class="keywordflow">return</span> <a class="code" href="xline_8h.html#del_5Fzline_28const_20char_20_2Aipaddr_29">del_zline</a>(ipaddr.c_str()); +<a name="l00738"></a>00738 } +<a name="l00739"></a>00739 +<a name="l00740"></a><a class="code" href="classServer.html#DelKLine_28std_3A_3Astring_20hostmask_29">00740</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#DelKLine_28std_3A_3Astring_20hostmask_29">Server::DelKLine</a>(<a class="code" href="namespaceirc.html#string">std::string</a> hostmask) +<a name="l00741"></a>00741 { +<a name="l00742"></a>00742 <span class="keywordflow">return</span> <a class="code" href="xline_8h.html#del_5Fkline_28const_20char_20_2Ahostmask_29">del_kline</a>(hostmask.c_str()); +<a name="l00743"></a>00743 } +<a name="l00744"></a>00744 +<a name="l00745"></a><a class="code" href="classServer.html#DelELine_28std_3A_3Astring_20hostmask_29">00745</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#DelELine_28std_3A_3Astring_20hostmask_29">Server::DelELine</a>(<a class="code" href="namespaceirc.html#string">std::string</a> hostmask) +<a name="l00746"></a>00746 { +<a name="l00747"></a>00747 <span class="keywordflow">return</span> <a class="code" href="xline_8h.html#del_5Feline_28const_20char_20_2Ahostmask_29">del_eline</a>(hostmask.c_str()); +<a name="l00748"></a>00748 } +<a name="l00749"></a>00749 +<a name="l00750"></a><a class="code" href="classServer.html#CalcDuration_28std_3A_3Astring_20duration_29">00750</a> <span class="keywordtype">long</span> <a class="code" href="classServer.html#CalcDuration_28std_3A_3Astring_20duration_29">Server::CalcDuration</a>(<a class="code" href="namespaceirc.html#string">std::string</a> delta) +<a name="l00751"></a>00751 { +<a name="l00752"></a>00752 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#duration_28const_20char_20_2Astr_29">duration</a>(delta.c_str()); +<a name="l00753"></a>00753 } +<a name="l00754"></a>00754 +<a name="l00755"></a><a class="code" href="classServer.html#IsValidMask_28std_3A_3Astring_20mask_29">00755</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#IsValidMask_28std_3A_3Astring_20mask_29">Server::IsValidMask</a>(<a class="code" href="namespaceirc.html#string">std::string</a> mask) +<a name="l00756"></a>00756 { +<a name="l00757"></a>00757 <span class="keyword">const</span> <span class="keywordtype">char</span>* dest = mask.c_str(); +<a name="l00758"></a>00758 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'!'</span>)==0) +<a name="l00759"></a>00759 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00760"></a>00760 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'@'</span>)==0) +<a name="l00761"></a>00761 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00762"></a>00762 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) +<a name="l00763"></a>00763 <span class="keywordflow">if</span> (dest[i] < 32) +<a name="l00764"></a>00764 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00765"></a>00765 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) +<a name="l00766"></a>00766 <span class="keywordflow">if</span> (dest[i] > 126) +<a name="l00767"></a>00767 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00768"></a>00768 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; +<a name="l00769"></a>00769 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) +<a name="l00770"></a>00770 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'!'</span>) +<a name="l00771"></a>00771 c++; +<a name="l00772"></a>00772 <span class="keywordflow">if</span> (c>1) +<a name="l00773"></a>00773 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00774"></a>00774 c = 0; +<a name="l00775"></a>00775 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) +<a name="l00776"></a>00776 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'@'</span>) +<a name="l00777"></a>00777 c++; +<a name="l00778"></a>00778 <span class="keywordflow">if</span> (c>1) +<a name="l00779"></a>00779 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00780"></a>00780 +<a name="l00781"></a>00781 <span class="keywordflow">return</span> <span class="keyword">true</span>; +<a name="l00782"></a>00782 } +<a name="l00783"></a>00783 +<a name="l00784"></a><a class="code" href="classServer.html#FindModule_28std_3A_3Astring_20name_29">00784</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classServer.html#FindModule_28std_3A_3Astring_20name_29">Server::FindModule</a>(<a class="code" href="namespaceirc.html#string">std::string</a> name) +<a name="l00785"></a>00785 { +<a name="l00786"></a>00786 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= <a class="code" href="channels_8cpp.html#MODCOUNT">MODCOUNT</a>; i++) +<a name="l00787"></a>00787 { +<a name="l00788"></a>00788 <span class="keywordflow">if</span> (<a class="code" href="channels_8cpp.html#module_5Fnames">module_names</a>[i] == name) +<a name="l00789"></a>00789 { +<a name="l00790"></a>00790 <span class="keywordflow">return</span> <a class="code" href="channels_8cpp.html#modules">modules</a>[i]; +<a name="l00791"></a>00791 } +<a name="l00792"></a>00792 } +<a name="l00793"></a>00793 <span class="keywordflow">return</span> NULL; +<a name="l00794"></a>00794 } +<a name="l00795"></a>00795 +<a name="l00796"></a><a class="code" href="classConfigReader.html#ConfigReader_28_29">00796</a> <a class="code" href="classConfigReader.html#ConfigReader_28_29">ConfigReader::ConfigReader</a>() +<a name="l00797"></a>00797 { +<a name="l00798"></a>00798 <a class="code" href="modules_8cpp.html#include_5Fstack">include_stack</a>.clear(); +<a name="l00799"></a>00799 this-><a class="code" href="classConfigReader.html#cache">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +<a name="l00800"></a>00800 this-><a class="code" href="classConfigReader.html#errorlog">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +<a name="l00801"></a>00801 this-><a class="code" href="classConfigReader.html#readerror">readerror</a> = LoadConf(CONFIG_FILE,this->cache,this->errorlog); +<a name="l00802"></a>00802 <span class="keywordflow">if</span> (!this->readerror) +<a name="l00803"></a>00803 this-><a class="code" href="classConfigReader.html#error">error</a> = <a class="code" href="modules_8h.html#CONF_5FFILE_5FNOT_5FFOUND">CONF_FILE_NOT_FOUND</a>; +<a name="l00804"></a>00804 } +<a name="l00805"></a>00805 +<a name="l00806"></a>00806 +<a name="l00807"></a><a class="code" href="classConfigReader.html#_7EConfigReader_28_29">00807</a> <a class="code" href="classConfigReader.html#_7EConfigReader_28_29">ConfigReader::~ConfigReader</a>() +<a name="l00808"></a>00808 { +<a name="l00809"></a>00809 <span class="keywordflow">if</span> (this->cache) +<a name="l00810"></a>00810 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#cache">cache</a>; +<a name="l00811"></a>00811 <span class="keywordflow">if</span> (this->errorlog) +<a name="l00812"></a>00812 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#errorlog">errorlog</a>; +<a name="l00813"></a>00813 } +<a name="l00814"></a>00814 +<a name="l00815"></a>00815 +<a name="l00816"></a><a class="code" href="classConfigReader.html#ConfigReader_28std_3A_3Astring_20filename_29">00816</a> <a class="code" href="classConfigReader.html#ConfigReader_28_29">ConfigReader::ConfigReader</a>(<a class="code" href="namespaceirc.html#string">std::string</a> filename) +<a name="l00817"></a>00817 { +<a name="l00818"></a>00818 this-><a class="code" href="classConfigReader.html#cache">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +<a name="l00819"></a>00819 this-><a class="code" href="classConfigReader.html#errorlog">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +<a name="l00820"></a>00820 this-><a class="code" href="classConfigReader.html#readerror">readerror</a> = LoadConf(filename.c_str(),this-><a class="code" href="classConfigReader.html#cache">cache</a>,this-><a class="code" href="classConfigReader.html#errorlog">errorlog</a>); +<a name="l00821"></a>00821 <span class="keywordflow">if</span> (!this->readerror) +<a name="l00822"></a>00822 this-><a class="code" href="classConfigReader.html#error">error</a> = <a class="code" href="modules_8h.html#CONF_5FFILE_5FNOT_5FFOUND">CONF_FILE_NOT_FOUND</a>; +<a name="l00823"></a>00823 }; +<a name="l00824"></a>00824 +<a name="l00825"></a><a class="code" href="classConfigReader.html#ReadValue_28std_3A_3Astring_20tag_2C_20std_3A_3Astring_20name_2C_20int_20index_29">00825</a> <a class="code" href="namespaceirc.html#string">std::string</a> <a class="code" href="classConfigReader.html#ReadValue_28std_3A_3Astring_20tag_2C_20std_3A_3Astring_20name_2C_20int_20index_29">ConfigReader::ReadValue</a>(<a class="code" href="namespaceirc.html#string">std::string</a> tag, <a class="code" href="namespaceirc.html#string">std::string</a> name, <span class="keywordtype">int</span> index) +<a name="l00826"></a>00826 { +<a name="l00827"></a>00827 <span class="keywordtype">char</span> val[MAXBUF]; +<a name="l00828"></a>00828 <span class="keywordtype">char</span> t[MAXBUF]; +<a name="l00829"></a>00829 <span class="keywordtype">char</span> n[MAXBUF]; +<a name="l00830"></a>00830 strlcpy(t,tag.c_str(),MAXBUF); +<a name="l00831"></a>00831 strlcpy(n,name.c_str(),MAXBUF); +<a name="l00832"></a>00832 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#cache">cache</a>,t,n,index,val); +<a name="l00833"></a>00833 <span class="keywordflow">if</span> (!res) +<a name="l00834"></a>00834 { +<a name="l00835"></a>00835 this-><a class="code" href="classConfigReader.html#error">error</a> = <a class="code" href="modules_8h.html#CONF_5FVALUE_5FNOT_5FFOUND">CONF_VALUE_NOT_FOUND</a>; +<a name="l00836"></a>00836 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; +<a name="l00837"></a>00837 } +<a name="l00838"></a>00838 <span class="keywordflow">return</span> val; +<a name="l00839"></a>00839 } +<a name="l00840"></a>00840 +<a name="l00841"></a><a class="code" href="classConfigReader.html#ReadFlag_28std_3A_3Astring_20tag_2C_20std_3A_3Astring_20name_2C_20int_20index_29">00841</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#ReadFlag_28std_3A_3Astring_20tag_2C_20std_3A_3Astring_20name_2C_20int_20index_29">ConfigReader::ReadFlag</a>(<a class="code" href="namespaceirc.html#string">std::string</a> tag, <a class="code" href="namespaceirc.html#string">std::string</a> name, <span class="keywordtype">int</span> index) +<a name="l00842"></a>00842 { +<a name="l00843"></a>00843 <span class="keywordtype">char</span> val[MAXBUF]; +<a name="l00844"></a>00844 <span class="keywordtype">char</span> t[MAXBUF]; +<a name="l00845"></a>00845 <span class="keywordtype">char</span> n[MAXBUF]; +<a name="l00846"></a>00846 strlcpy(t,tag.c_str(),MAXBUF); +<a name="l00847"></a>00847 strlcpy(n,name.c_str(),MAXBUF); +<a name="l00848"></a>00848 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#cache">cache</a>,t,n,index,val); +<a name="l00849"></a>00849 <span class="keywordflow">if</span> (!res) +<a name="l00850"></a>00850 { +<a name="l00851"></a>00851 this-><a class="code" href="classConfigReader.html#error">error</a> = <a class="code" href="modules_8h.html#CONF_5FVALUE_5FNOT_5FFOUND">CONF_VALUE_NOT_FOUND</a>; +<a name="l00852"></a>00852 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00853"></a>00853 } +<a name="l00854"></a>00854 <a class="code" href="namespaceirc.html#string">std::string</a> s = val; +<a name="l00855"></a>00855 <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>)); +<a name="l00856"></a>00856 } +<a name="l00857"></a>00857 +<a name="l00858"></a><a class="code" href="classConfigReader.html#ReadInteger_28std_3A_3Astring_20tag_2C_20std_3A_3Astring_20name_2C_20int_20index_2C_20bool_20needs_5Funsigned_29">00858</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#ReadInteger_28std_3A_3Astring_20tag_2C_20std_3A_3Astring_20name_2C_20int_20index_2C_20bool_20needs_5Funsigned_29">ConfigReader::ReadInteger</a>(<a class="code" href="namespaceirc.html#string">std::string</a> tag, <a class="code" href="namespaceirc.html#string">std::string</a> name, <span class="keywordtype">int</span> index, <span class="keywordtype">bool</span> needs_unsigned) +<a name="l00859"></a>00859 { +<a name="l00860"></a>00860 <span class="keywordtype">char</span> val[MAXBUF]; +<a name="l00861"></a>00861 <span class="keywordtype">char</span> t[MAXBUF]; +<a name="l00862"></a>00862 <span class="keywordtype">char</span> n[MAXBUF]; +<a name="l00863"></a>00863 strlcpy(t,tag.c_str(),MAXBUF); +<a name="l00864"></a>00864 strlcpy(n,name.c_str(),MAXBUF); +<a name="l00865"></a>00865 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#cache">cache</a>,t,n,index,val); +<a name="l00866"></a>00866 <span class="keywordflow">if</span> (!res) +<a name="l00867"></a>00867 { +<a name="l00868"></a>00868 this-><a class="code" href="classConfigReader.html#error">error</a> = <a class="code" href="modules_8h.html#CONF_5FVALUE_5FNOT_5FFOUND">CONF_VALUE_NOT_FOUND</a>; +<a name="l00869"></a>00869 <span class="keywordflow">return</span> 0; +<a name="l00870"></a>00870 } +<a name="l00871"></a>00871 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < strlen(val); i++) +<a name="l00872"></a>00872 { +<a name="l00873"></a>00873 <span class="keywordflow">if</span> (!isdigit(val[i])) +<a name="l00874"></a>00874 { +<a name="l00875"></a>00875 this-><a class="code" href="classConfigReader.html#error">error</a> = <a class="code" href="modules_8h.html#CONF_5FNOT_5FA_5FNUMBER">CONF_NOT_A_NUMBER</a>; +<a name="l00876"></a>00876 <span class="keywordflow">return</span> 0; +<a name="l00877"></a>00877 } +<a name="l00878"></a>00878 } +<a name="l00879"></a>00879 <span class="keywordflow">if</span> ((needs_unsigned) && (atoi(val)<0)) +<a name="l00880"></a>00880 { +<a name="l00881"></a>00881 this-><a class="code" href="classConfigReader.html#error">error</a> = <a class="code" href="modules_8h.html#CONF_5FNOT_5FUNSIGNED">CONF_NOT_UNSIGNED</a>; +<a name="l00882"></a>00882 <span class="keywordflow">return</span> 0; +<a name="l00883"></a>00883 } +<a name="l00884"></a>00884 <span class="keywordflow">return</span> atoi(val); +<a name="l00885"></a>00885 } +<a name="l00886"></a>00886 +<a name="l00887"></a><a class="code" href="classConfigReader.html#GetError_28_29">00887</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#GetError_28_29">ConfigReader::GetError</a>() +<a name="l00888"></a>00888 { +<a name="l00889"></a>00889 <span class="keywordtype">long</span> olderr = this-><a class="code" href="classConfigReader.html#error">error</a>; +<a name="l00890"></a>00890 this-><a class="code" href="classConfigReader.html#error">error</a> = 0; +<a name="l00891"></a>00891 <span class="keywordflow">return</span> olderr; +<a name="l00892"></a>00892 } +<a name="l00893"></a>00893 +<a name="l00894"></a><a class="code" href="classConfigReader.html#DumpErrors_28bool_20bail_2C_20userrec_20_2Auser_29">00894</a> <span class="keywordtype">void</span> <a class="code" href="classConfigReader.html#DumpErrors_28bool_20bail_2C_20userrec_20_2Auser_29">ConfigReader::DumpErrors</a>(<span class="keywordtype">bool</span> bail, <a class="code" href="classuserrec.html">userrec</a>* user) +<a name="l00895"></a>00895 { +<a name="l00896"></a>00896 <span class="keywordflow">if</span> (bail) +<a name="l00897"></a>00897 { +<a name="l00898"></a>00898 printf(<span class="stringliteral">"There were errors in your configuration:\n%s"</span>,<a class="code" href="classConfigReader.html#errorlog">errorlog</a>->str().c_str()); +<a name="l00899"></a>00899 exit(0); +<a name="l00900"></a>00900 } +<a name="l00901"></a>00901 <span class="keywordflow">else</span> +<a name="l00902"></a>00902 { +<a name="l00903"></a>00903 <span class="keywordtype">char</span> dataline[1024]; +<a name="l00904"></a>00904 <span class="keywordflow">if</span> (user) +<a name="l00905"></a>00905 { +<a name="l00906"></a>00906 WriteServ(user-><a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"NOTICE %s :There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>); +<a name="l00907"></a>00907 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#errorlog">errorlog</a>->eof()) +<a name="l00908"></a>00908 { +<a name="l00909"></a>00909 <a class="code" href="classConfigReader.html#errorlog">errorlog</a>->getline(dataline,1024); +<a name="l00910"></a>00910 WriteServ(user-><a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"NOTICE %s :%s"</span>,user-><a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>,dataline); +<a name="l00911"></a>00911 } +<a name="l00912"></a>00912 } +<a name="l00913"></a>00913 <span class="keywordflow">else</span> +<a name="l00914"></a>00914 { +<a name="l00915"></a>00915 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>); +<a name="l00916"></a>00916 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#errorlog">errorlog</a>->eof()) +<a name="l00917"></a>00917 { +<a name="l00918"></a>00918 <a class="code" href="classConfigReader.html#errorlog">errorlog</a>->getline(dataline,1024); +<a name="l00919"></a>00919 WriteOpers(dataline); +<a name="l00920"></a>00920 } +<a name="l00921"></a>00921 } +<a name="l00922"></a>00922 <span class="keywordflow">return</span>; +<a name="l00923"></a>00923 } +<a name="l00924"></a>00924 } +<a name="l00925"></a>00925 +<a name="l00926"></a>00926 +<a name="l00927"></a><a class="code" href="classConfigReader.html#Enumerate_28std_3A_3Astring_20tag_29">00927</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#Enumerate_28std_3A_3Astring_20tag_29">ConfigReader::Enumerate</a>(<a class="code" href="namespaceirc.html#string">std::string</a> tag) +<a name="l00928"></a>00928 { +<a name="l00929"></a>00929 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#cache">cache</a>,tag.c_str()); +<a name="l00930"></a>00930 } +<a name="l00931"></a>00931 +<a name="l00932"></a><a class="code" href="classConfigReader.html#EnumerateValues_28std_3A_3Astring_20tag_2C_20int_20index_29">00932</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#EnumerateValues_28std_3A_3Astring_20tag_2C_20int_20index_29">ConfigReader::EnumerateValues</a>(<a class="code" href="namespaceirc.html#string">std::string</a> tag, <span class="keywordtype">int</span> index) +<a name="l00933"></a>00933 { +<a name="l00934"></a>00934 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#cache">cache</a>, tag.c_str(), index); +<a name="l00935"></a>00935 } +<a name="l00936"></a>00936 +<a name="l00937"></a><a class="code" href="classConfigReader.html#Verify_28_29">00937</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#Verify_28_29">ConfigReader::Verify</a>() +<a name="l00938"></a>00938 { +<a name="l00939"></a>00939 <span class="keywordflow">return</span> this-><a class="code" href="classConfigReader.html#readerror">readerror</a>; +<a name="l00940"></a>00940 } +<a name="l00941"></a>00941 +<a name="l00942"></a>00942 +<a name="l00943"></a><a class="code" href="classFileReader.html#FileReader_28std_3A_3Astring_20filename_29">00943</a> <a class="code" href="classFileReader.html#FileReader_28_29">FileReader::FileReader</a>(<a class="code" href="namespaceirc.html#string">std::string</a> filename) +<a name="l00944"></a>00944 { +<a name="l00945"></a>00945 <a class="code" href="modules_8h.html#file_5Fcache">file_cache</a> c; +<a name="l00946"></a>00946 readfile(c,filename.c_str()); +<a name="l00947"></a>00947 this-><a class="code" href="classFileReader.html#fc">fc</a> = c; +<a name="l00948"></a>00948 } +<a name="l00949"></a>00949 +<a name="l00950"></a><a class="code" href="classFileReader.html#FileReader_28_29">00950</a> <a class="code" href="classFileReader.html#FileReader_28_29">FileReader::FileReader</a>() +<a name="l00951"></a>00951 { +<a name="l00952"></a>00952 } +<a name="l00953"></a>00953 +<a name="l00954"></a><a class="code" href="classFileReader.html#LoadFile_28std_3A_3Astring_20filename_29">00954</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#LoadFile_28std_3A_3Astring_20filename_29">FileReader::LoadFile</a>(<a class="code" href="namespaceirc.html#string">std::string</a> filename) +<a name="l00955"></a>00955 { +<a name="l00956"></a>00956 <a class="code" href="modules_8h.html#file_5Fcache">file_cache</a> c; +<a name="l00957"></a>00957 readfile(c,filename.c_str()); +<a name="l00958"></a>00958 this-><a class="code" href="classFileReader.html#fc">fc</a> = c; +<a name="l00959"></a>00959 } +<a name="l00960"></a>00960 +<a name="l00961"></a>00961 +<a name="l00962"></a><a class="code" href="classFileReader.html#_7EFileReader_28_29">00962</a> <a class="code" href="classFileReader.html#_7EFileReader_28_29">FileReader::~FileReader</a>() +<a name="l00963"></a>00963 { +<a name="l00964"></a>00964 } +<a name="l00965"></a>00965 +<a name="l00966"></a><a class="code" href="classFileReader.html#Exists_28_29">00966</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#Exists_28_29">FileReader::Exists</a>() +<a name="l00967"></a>00967 { +<a name="l00968"></a>00968 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#fc">fc</a>.size() == 0) +<a name="l00969"></a>00969 { +<a name="l00970"></a>00970 <span class="keywordflow">return</span>(<span class="keyword">false</span>); +<a name="l00971"></a>00971 } +<a name="l00972"></a>00972 <span class="keywordflow">else</span> +<a name="l00973"></a>00973 { +<a name="l00974"></a>00974 <span class="keywordflow">return</span>(<span class="keyword">true</span>); +<a name="l00975"></a>00975 } +<a name="l00976"></a>00976 } +<a name="l00977"></a>00977 +<a name="l00978"></a><a class="code" href="classFileReader.html#GetLine_28int_20x_29">00978</a> <a class="code" href="namespaceirc.html#string">std::string</a> <a class="code" href="classFileReader.html#GetLine_28int_20x_29">FileReader::GetLine</a>(<span class="keywordtype">int</span> x) +<a name="l00979"></a>00979 { +<a name="l00980"></a>00980 <span class="keywordflow">if</span> ((x<0) || ((<span class="keywordtype">unsigned</span>)x><a class="code" href="classFileReader.html#fc">fc</a>.size())) +<a name="l00981"></a>00981 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; +<a name="l00982"></a>00982 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#fc">fc</a>[x]; +<a name="l00983"></a>00983 } +<a name="l00984"></a>00984 +<a name="l00985"></a><a class="code" href="classFileReader.html#FileSize_28_29">00985</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#FileSize_28_29">FileReader::FileSize</a>() +<a name="l00986"></a>00986 { +<a name="l00987"></a>00987 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#fc">fc</a>.size(); +<a name="l00988"></a>00988 } +<a name="l00989"></a>00989 +<a name="l00990"></a>00990 +<a name="l00991"></a>00991 std::vector<Module*> <a class="code" href="channels_8cpp.html#modules">modules</a>(255); +<a name="l00992"></a>00992 std::vector<ircd_module*> <a class="code" href="channels_8cpp.html#factory">factory</a>(255); +<a name="l00993"></a>00993 +<a name="l00994"></a><a class="code" href="modules_8cpp.html#MODCOUNT">00994</a> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#MODCOUNT">MODCOUNT</a> = -1; +<a name="l00995"></a>00995 +<a name="l00996"></a>00996 +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Nov 27 01:43:24 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> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4-20050815 </small></address> </body> </html> |