summaryrefslogtreecommitdiff
path: root/docs/module-doc/modules_8cpp-source.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/module-doc/modules_8cpp-source.html')
-rw-r--r--docs/module-doc/modules_8cpp-source.html1350
1 files changed, 694 insertions, 656 deletions
diff --git a/docs/module-doc/modules_8cpp-source.html b/docs/module-doc/modules_8cpp-source.html
index bfedc2754..9298996f8 100644
--- a/docs/module-doc/modules_8cpp-source.html
+++ b/docs/module-doc/modules_8cpp-source.html
@@ -117,7 +117,7 @@
<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="l00111"></a>00111 <span class="keyword">class </span><a class="code" href="classServer.html">Server</a>;
<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
@@ -312,31 +312,31 @@
<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> &amp;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> &amp;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> &amp;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> &amp;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> &amp;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> &amp;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="l00306"></a>00306
+<a name="l00307"></a><a class="code" href="classModule.html#Module_28Server_20_2AMe_29">00307</a> <a class="code" href="classModule.html#Module_28Server_20_2AMe_29">Module::Module</a>(<a class="code" href="classServer.html">Server</a>* Me) { }
+<a name="l00308"></a><a class="code" href="classModule.html#_7EModule_28_29">00308</a> <a class="code" href="classModule.html#_7EModule_28_29">Module::~Module</a>() { }
+<a name="l00309"></a><a class="code" href="classModule.html#OnUserConnect_28userrec_20_2Auser_29">00309</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="l00310"></a><a class="code" href="classModule.html#OnUserQuit_28userrec_20_2Auser_2C_20std_3A_3Astring_20message_29">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserQuit_28userrec_20_2Auser_2C_20std_3A_3Astring_20message_29">Module::OnUserQuit</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> message) { }
+<a name="l00311"></a><a class="code" href="classModule.html#OnUserDisconnect_28userrec_20_2Auser_29">00311</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="l00312"></a><a class="code" href="classModule.html#OnUserJoin_28userrec_20_2Auser_2C_20chanrec_20_2Achannel_29">00312</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="l00313"></a><a class="code" href="classModule.html#OnUserPart_28userrec_20_2Auser_2C_20chanrec_20_2Achannel_29">00313</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="l00314"></a>00314 <span class="keywordtype">void</span> Module::OnPacketTransmit(<a class="code" href="namespaceirc.html#string">std::string</a> &amp;data, <a class="code" href="namespaceirc.html#string">std::string</a> serv) { }
+<a name="l00315"></a>00315 <span class="keywordtype">void</span> Module::OnPacketReceive(<a class="code" href="namespaceirc.html#string">std::string</a> &amp;data, <a class="code" href="namespaceirc.html#string">std::string</a> serv) { }
+<a name="l00316"></a><a class="code" href="classModule.html#OnRehash_28std_3A_3Astring_20parameter_29">00316</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnRehash_28std_3A_3Astring_20parameter_29">Module::OnRehash</a>(<a class="code" href="namespaceirc.html#string">std::string</a> parameter) { }
+<a name="l00317"></a><a class="code" href="classModule.html#OnServerRaw_28std_3A_3Astring_20_26raw_2C_20bool_20inbound_2C_20userrec_20_2Auser_29">00317</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> &amp;raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { }
+<a name="l00318"></a><a class="code" href="classModule.html#OnUserPreJoin_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20const_20char_20_2Acname_29">00318</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="l00319"></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">00319</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> &amp;params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00320"></a><a class="code" href="classModule.html#OnMode_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20text_29">00320</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnMode_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20text_29">Module::OnMode</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) { };
+<a name="l00321"></a><a class="code" href="classModule.html#GetVersion_28_29">00321</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="l00322"></a><a class="code" href="classModule.html#OnOper_28userrec_20_2Auser_2C_20std_3A_3Astring_20opertype_29">00322</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnOper_28userrec_20_2Auser_2C_20std_3A_3Astring_20opertype_29">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> opertype) { };
+<a name="l00323"></a><a class="code" href="classModule.html#OnInfo_28userrec_20_2Auser_29">00323</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="l00324"></a><a class="code" href="classModule.html#OnWhois_28userrec_20_2Asource_2C_20userrec_20_2Adest_29">00324</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="l00325"></a><a class="code" href="classModule.html#OnUserPreInvite_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20chanrec_20_2Achannel_29">00325</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="l00326"></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">00326</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> &amp;text) { <span class="keywordflow">return</span> 0; };
+<a name="l00327"></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">00327</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> &amp;text) { <span class="keywordflow">return</span> 0; };
+<a name="l00328"></a><a class="code" href="classModule.html#OnUserPreNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20newnick_29">00328</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="l00329"></a><a class="code" href="classModule.html#OnUserPostNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20oldnick_29">00329</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="l00330"></a><a class="code" href="classModule.html#OnAccessCheck_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20chanrec_20_2Achannel_2C_20int_20access_5Ftype_29">00330</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="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> &amp;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) { };
@@ -368,642 +368,680 @@
<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> &amp;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&lt;InspSocket*&gt;::iterator a = <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.begin(); a &lt; <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&lt;char*&gt; *<a class="code" href="channels_8cpp.html#list_5BMAXBUF_5D">list</a> = chan-&gt;<a class="code" href="classchanrec.html#GetUsers_28_29">GetUsers</a>();
-<a name="l00425"></a>00425 <span class="keywordflow">for</span> (std::vector&lt;char*&gt;::iterator i = list-&gt;begin(); i != list-&gt;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-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">":%s %s"</span>,this-&gt;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 &lt; 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 &gt;= <span class="charliteral">'A'</span>) &amp;&amp; (modechar &lt;= <span class="charliteral">'Z'</span>)) || ((modechar &gt;= <span class="charliteral">'a'</span>) &amp;&amp; (modechar &lt;= <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&gt;0) || (params_when_off&gt;0)) &amp;&amp; (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&gt;1) || (params_when_off&gt;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="l00362"></a><a class="code" href="classModule.html#OnUserMessage_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20text_29">00362</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserMessage_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20text_29">Module::OnUserMessage</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) { };
+<a name="l00363"></a><a class="code" href="classModule.html#OnUserNotice_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20text_29">00363</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserNotice_28userrec_20_2Auser_2C_20void_20_2Adest_2C_20int_20target_5Ftype_2C_20std_3A_3Astring_20text_29">Module::OnUserNotice</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) { };
+<a name="l00364"></a><a class="code" href="classModule.html#OnRemoteKill_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20std_3A_3Astring_20reason_29">00364</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnRemoteKill_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20std_3A_3Astring_20reason_29">Module::OnRemoteKill</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) { };
+<a name="l00365"></a><a class="code" href="classModule.html#OnUserInvite_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20chanrec_20_2Achannel_29">00365</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnUserInvite_28userrec_20_2Asource_2C_20userrec_20_2Adest_2C_20chanrec_20_2Achannel_29">Module::OnUserInvite</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) { };
+<a name="l00366"></a><a class="code" href="classModule.html#OnPostLocalTopicChange_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20topic_29">00366</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnPostLocalTopicChange_28userrec_20_2Auser_2C_20chanrec_20_2Achan_2C_20std_3A_3Astring_20topic_29">Module::OnPostLocalTopicChange</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) { };
+<a name="l00367"></a><a class="code" href="classModule.html#OnGetServerDescription_28std_3A_3Astring_20servername_2C_20std_3A_3Astring_20_26description_29">00367</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnGetServerDescription_28std_3A_3Astring_20servername_2C_20std_3A_3Astring_20_26description_29">Module::OnGetServerDescription</a>(<a class="code" href="namespaceirc.html#string">std::string</a> servername,<a class="code" href="namespaceirc.html#string">std::string</a> &amp;description) { };
+<a name="l00368"></a><a class="code" href="classModule.html#OnSyncUser_28userrec_20_2Auser_2C_20Module_20_2Aproto_2C_20void_20_2Aopaque_29">00368</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnSyncUser_28userrec_20_2Auser_2C_20Module_20_2Aproto_2C_20void_20_2Aopaque_29">Module::OnSyncUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classModule.html">Module</a>* proto, <span class="keywordtype">void</span>* opaque) { };
+<a name="l00369"></a><a class="code" href="classModule.html#OnSyncChannel_28chanrec_20_2Achan_2C_20Module_20_2Aproto_2C_20void_20_2Aopaque_29">00369</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnSyncChannel_28chanrec_20_2Achan_2C_20Module_20_2Aproto_2C_20void_20_2Aopaque_29">Module::OnSyncChannel</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan, <a class="code" href="classModule.html">Module</a>* proto, <span class="keywordtype">void</span>* opaque) { };
+<a name="l00370"></a><a class="code" href="classModule.html#ProtoSendMode_28void_20_2Aopaque_2C_20int_20target_5Ftype_2C_20void_20_2Atarget_2C_20std_3A_3Astring_20modeline_29">00370</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#ProtoSendMode_28void_20_2Aopaque_2C_20int_20target_5Ftype_2C_20void_20_2Atarget_2C_20std_3A_3Astring_20modeline_29">Module::ProtoSendMode</a>(<span class="keywordtype">void</span>* opaque, <span class="keywordtype">int</span> target_type, <span class="keywordtype">void</span>* target, <a class="code" href="namespaceirc.html#string">std::string</a> modeline) { };
+<a name="l00371"></a><a class="code" href="classModule.html#OnSyncChannelMetaData_28chanrec_20_2Achan_2C_20Module_20_2Aproto_2C_20void_20_2Aopaque_2C_20std_3A_3Astring_20extname_29">00371</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnSyncChannelMetaData_28chanrec_20_2Achan_2C_20Module_20_2Aproto_2C_20void_20_2Aopaque_2C_20std_3A_3Astring_20extname_29">Module::OnSyncChannelMetaData</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan, <a class="code" href="classModule.html">Module</a>* proto,<span class="keywordtype">void</span>* opaque, <a class="code" href="namespaceirc.html#string">std::string</a> extname) { };
+<a name="l00372"></a><a class="code" href="classModule.html#OnSyncUserMetaData_28userrec_20_2Auser_2C_20Module_20_2Aproto_2C_20void_20_2Aopaque_2C_20std_3A_3Astring_20extname_29">00372</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnSyncUserMetaData_28userrec_20_2Auser_2C_20Module_20_2Aproto_2C_20void_20_2Aopaque_2C_20std_3A_3Astring_20extname_29">Module::OnSyncUserMetaData</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classModule.html">Module</a>* proto,<span class="keywordtype">void</span>* opaque, <a class="code" href="namespaceirc.html#string">std::string</a> extname) { };
+<a name="l00373"></a><a class="code" href="classModule.html#OnDecodeMetaData_28int_20target_5Ftype_2C_20void_20_2Atarget_2C_20std_3A_3Astring_20extname_2C_20std_3A_3Astring_20extdata_29">00373</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnDecodeMetaData_28int_20target_5Ftype_2C_20void_20_2Atarget_2C_20std_3A_3Astring_20extname_2C_20std_3A_3Astring_20extdata_29">Module::OnDecodeMetaData</a>(<span class="keywordtype">int</span> target_type, <span class="keywordtype">void</span>* target, <a class="code" href="namespaceirc.html#string">std::string</a> extname, <a class="code" href="namespaceirc.html#string">std::string</a> extdata) { };
+<a name="l00374"></a><a class="code" href="classModule.html#ProtoSendMetaData_28void_20_2Aopaque_2C_20int_20target_5Ftype_2C_20void_20_2Atarget_2C_20std_3A_3Astring_20extname_2C_20std_3A_3Astring_20extdata_29">00374</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#ProtoSendMetaData_28void_20_2Aopaque_2C_20int_20target_5Ftype_2C_20void_20_2Atarget_2C_20std_3A_3Astring_20extname_2C_20std_3A_3Astring_20extdata_29">Module::ProtoSendMetaData</a>(<span class="keywordtype">void</span>* opaque, <span class="keywordtype">int</span> target_type, <span class="keywordtype">void</span>* target, <a class="code" href="namespaceirc.html#string">std::string</a> extname, <a class="code" href="namespaceirc.html#string">std::string</a> extdata) { };
+<a name="l00375"></a><a class="code" href="classModule.html#OnWallops_28userrec_20_2Auser_2C_20std_3A_3Astring_20text_29">00375</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnWallops_28userrec_20_2Auser_2C_20std_3A_3Astring_20text_29">Module::OnWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> text) { };
+<a name="l00376"></a><a class="code" href="classModule.html#OnChangeHost_28userrec_20_2Auser_2C_20std_3A_3Astring_20newhost_29">00376</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnChangeHost_28userrec_20_2Auser_2C_20std_3A_3Astring_20newhost_29">Module::OnChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> newhost) { };
+<a name="l00377"></a><a class="code" href="classModule.html#OnChangeName_28userrec_20_2Auser_2C_20std_3A_3Astring_20gecos_29">00377</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnChangeName_28userrec_20_2Auser_2C_20std_3A_3Astring_20gecos_29">Module::OnChangeName</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="namespaceirc.html#string">std::string</a> gecos) { };
+<a name="l00378"></a><a class="code" href="classModule.html#OnAddGLine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">00378</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnAddGLine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">Module::OnAddGLine</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="classuserrec.html">userrec</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="l00379"></a><a class="code" href="classModule.html#OnAddZLine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20ipmask_29">00379</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnAddZLine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20ipmask_29">Module::OnAddZLine</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="classuserrec.html">userrec</a>* source, <a class="code" href="namespaceirc.html#string">std::string</a> reason, <a class="code" href="namespaceirc.html#string">std::string</a> ipmask) { };
+<a name="l00380"></a><a class="code" href="classModule.html#OnAddKLine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">00380</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnAddKLine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">Module::OnAddKLine</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="classuserrec.html">userrec</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="l00381"></a><a class="code" href="classModule.html#OnAddQLine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20nickmask_29">00381</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnAddQLine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20nickmask_29">Module::OnAddQLine</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="classuserrec.html">userrec</a>* source, <a class="code" href="namespaceirc.html#string">std::string</a> reason, <a class="code" href="namespaceirc.html#string">std::string</a> nickmask) { };
+<a name="l00382"></a><a class="code" href="classModule.html#OnAddELine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">00382</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnAddELine_28long_20duration_2C_20userrec_20_2Asource_2C_20std_3A_3Astring_20reason_2C_20std_3A_3Astring_20hostmask_29">Module::OnAddELine</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="classuserrec.html">userrec</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="l00383"></a><a class="code" href="classModule.html#OnDelGLine_28userrec_20_2Asource_2C_20std_3A_3Astring_20hostmask_29">00383</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnDelGLine_28userrec_20_2Asource_2C_20std_3A_3Astring_20hostmask_29">Module::OnDelGLine</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="namespaceirc.html#string">std::string</a> hostmask) { };
+<a name="l00384"></a><a class="code" href="classModule.html#OnDelZLine_28userrec_20_2Asource_2C_20std_3A_3Astring_20ipmask_29">00384</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnDelZLine_28userrec_20_2Asource_2C_20std_3A_3Astring_20ipmask_29">Module::OnDelZLine</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="namespaceirc.html#string">std::string</a> ipmask) { };
+<a name="l00385"></a><a class="code" href="classModule.html#OnDelKLine_28userrec_20_2Asource_2C_20std_3A_3Astring_20hostmask_29">00385</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnDelKLine_28userrec_20_2Asource_2C_20std_3A_3Astring_20hostmask_29">Module::OnDelKLine</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="namespaceirc.html#string">std::string</a> hostmask) { };
+<a name="l00386"></a><a class="code" href="classModule.html#OnDelQLine_28userrec_20_2Asource_2C_20std_3A_3Astring_20nickmask_29">00386</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnDelQLine_28userrec_20_2Asource_2C_20std_3A_3Astring_20nickmask_29">Module::OnDelQLine</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="namespaceirc.html#string">std::string</a> nickmask) { };
+<a name="l00387"></a><a class="code" href="classModule.html#OnDelELine_28userrec_20_2Asource_2C_20std_3A_3Astring_20hostmask_29">00387</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnDelELine_28userrec_20_2Asource_2C_20std_3A_3Astring_20hostmask_29">Module::OnDelELine</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="namespaceirc.html#string">std::string</a> hostmask) { };
+<a name="l00388"></a><a class="code" href="classModule.html#OnCleanup_28int_20target_5Ftype_2C_20void_20_2Aitem_29">00388</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#OnCleanup_28int_20target_5Ftype_2C_20void_20_2Aitem_29">Module::OnCleanup</a>(<span class="keywordtype">int</span> target_type, <span class="keywordtype">void</span>* item) { };
+<a name="l00389"></a>00389
+<a name="l00390"></a>00390 <span class="comment">/* server is a wrapper class that provides methods to all of the C-style</span>
+<a name="l00391"></a>00391 <span class="comment"> * exports in the core</span>
+<a name="l00392"></a>00392 <span class="comment"> */</span>
+<a name="l00393"></a>00393
+<a name="l00394"></a><a class="code" href="classServer.html#Server_28_29">00394</a> <a class="code" href="classServer.html#Server_28_29">Server::Server</a>()
+<a name="l00395"></a>00395 {
+<a name="l00396"></a>00396 }
+<a name="l00397"></a>00397
+<a name="l00398"></a><a class="code" href="classServer.html#_7EServer_28_29">00398</a> <a class="code" href="classServer.html#_7EServer_28_29">Server::~Server</a>()
+<a name="l00399"></a>00399 {
+<a name="l00400"></a>00400 }
+<a name="l00401"></a>00401
+<a name="l00402"></a><a class="code" href="classServer.html#AddSocket_28InspSocket_20_2Asock_29">00402</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="l00403"></a>00403 {
+<a name="l00404"></a>00404 <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.push_back(sock);
+<a name="l00405"></a>00405 }
+<a name="l00406"></a>00406
+<a name="l00407"></a><a class="code" href="classServer.html#RehashServer_28_29">00407</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#RehashServer_28_29">Server::RehashServer</a>()
+<a name="l00408"></a>00408 {
+<a name="l00409"></a>00409 WriteOpers(<span class="stringliteral">"*** Rehashing config file"</span>);
+<a name="l00410"></a>00410 ReadConfig(<span class="keyword">false</span>,NULL);
+<a name="l00411"></a>00411 }
+<a name="l00412"></a>00412
+<a name="l00413"></a><a class="code" href="classServer.html#DelSocket_28InspSocket_20_2Asock_29">00413</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="l00414"></a>00414 {
+<a name="l00415"></a>00415 <span class="keywordflow">for</span> (std::vector&lt;InspSocket*&gt;::iterator a = <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.begin(); a &lt; <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.end(); a++)
+<a name="l00416"></a>00416 {
+<a name="l00417"></a>00417 <span class="keywordflow">if</span> (*a == sock)
+<a name="l00418"></a>00418 {
+<a name="l00419"></a>00419 <a class="code" href="modules_8cpp.html#module_5Fsockets">module_sockets</a>.erase(a);
+<a name="l00420"></a>00420 <span class="keywordflow">return</span>;
+<a name="l00421"></a>00421 }
+<a name="l00422"></a>00422 }
+<a name="l00423"></a>00423 }
+<a name="l00424"></a>00424
+<a name="l00425"></a><a class="code" href="classServer.html#SendOpers_28std_3A_3Astring_20s_29">00425</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="l00426"></a>00426 {
+<a name="l00427"></a>00427 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str());
+<a name="l00428"></a>00428 }
+<a name="l00429"></a>00429
+<a name="l00430"></a><a class="code" href="classServer.html#MatchText_28std_3A_3Astring_20sliteral_2C_20std_3A_3Astring_20spattern_29">00430</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="l00431"></a>00431 {
+<a name="l00432"></a>00432 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF];
+<a name="l00433"></a>00433 strlcpy(literal,sliteral.c_str(),MAXBUF);
+<a name="l00434"></a>00434 strlcpy(pattern,spattern.c_str(),MAXBUF);
+<a name="l00435"></a>00435 <span class="keywordflow">return</span> match(literal,pattern);
+<a name="l00436"></a>00436 }
+<a name="l00437"></a>00437
+<a name="l00438"></a><a class="code" href="classServer.html#SendToModeMask_28std_3A_3Astring_20modes_2C_20int_20flags_2C_20std_3A_3Astring_20text_29">00438</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="l00439"></a>00439 {
+<a name="l00440"></a>00440 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str());
+<a name="l00441"></a>00441 }
+<a name="l00442"></a>00442
+<a name="l00443"></a><a class="code" href="classServer.html#JoinUserToChannel_28userrec_20_2Auser_2C_20std_3A_3Astring_20cname_2C_20std_3A_3Astring_20key_29">00443</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="l00444"></a>00444 {
+<a name="l00445"></a>00445 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">false</span>);
+<a name="l00446"></a>00446 }
+<a name="l00447"></a>00447
+<a name="l00448"></a><a class="code" href="classServer.html#PartUserFromChannel_28userrec_20_2Auser_2C_20std_3A_3Astring_20cname_2C_20std_3A_3Astring_20reason_29">00448</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="l00449"></a>00449 {
+<a name="l00450"></a>00450 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>);
+<a name="l00451"></a>00451 }
+<a name="l00452"></a>00452
+<a name="l00453"></a><a class="code" href="classServer.html#GetUsers_28chanrec_20_2Achan_29">00453</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="l00454"></a>00454 {
+<a name="l00455"></a>00455 <a class="code" href="modules_8h.html#chanuserlist">chanuserlist</a> userl;
+<a name="l00456"></a>00456 userl.clear();
+<a name="l00457"></a>00457 std::vector&lt;char*&gt; *<a class="code" href="channels_8cpp.html#list_5BMAXBUF_5D">list</a> = chan-&gt;<a class="code" href="classchanrec.html#GetUsers_28_29">GetUsers</a>();
+<a name="l00458"></a>00458 <span class="keywordflow">for</span> (std::vector&lt;char*&gt;::iterator i = list-&gt;begin(); i != list-&gt;end(); i++)
+<a name="l00459"></a>00459 {
+<a name="l00460"></a>00460 <span class="keywordtype">char</span>* o = *i;
+<a name="l00461"></a>00461 userl.push_back((<a class="code" href="classuserrec.html">userrec</a>*)o);
+<a name="l00462"></a>00462 }
+<a name="l00463"></a>00463 <span class="keywordflow">return</span> userl;
+<a name="l00464"></a>00464 }
+<a name="l00465"></a><a class="code" href="classServer.html#ChangeUserNick_28userrec_20_2Auser_2C_20std_3A_3Astring_20nickname_29">00465</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="l00466"></a>00466 {
+<a name="l00467"></a>00467 force_nickchange(user,nickname.c_str());
+<a name="l00468"></a>00468 }
+<a name="l00469"></a>00469
+<a name="l00470"></a><a class="code" href="classServer.html#QuitUser_28userrec_20_2Auser_2C_20std_3A_3Astring_20reason_29">00470</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="l00471"></a>00471 {
+<a name="l00472"></a>00472 kill_link(user,reason.c_str());
+<a name="l00473"></a>00473 }
+<a name="l00474"></a>00474
+<a name="l00475"></a><a class="code" href="classServer.html#IsUlined_28std_3A_3Astring_20server_29">00475</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="l00476"></a>00476 {
+<a name="l00477"></a>00477 <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="l00478"></a>00478 }
+<a name="l00479"></a>00479
+<a name="l00480"></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">00480</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="l00481"></a>00481 {
+<a name="l00482"></a>00482 call_handler(commandname.c_str(),parameters,pcnt,user);
+<a name="l00483"></a>00483 }
+<a name="l00484"></a>00484
+<a name="l00485"></a><a class="code" href="classServer.html#IsValidModuleCommand_28std_3A_3Astring_20commandname_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">00485</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#IsValidModuleCommand_28std_3A_3Astring_20commandname_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">Server::IsValidModuleCommand</a>(<a class="code" href="namespaceirc.html#string">std::string</a> commandname, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user)
+<a name="l00486"></a>00486 {
+<a name="l00487"></a>00487 <span class="keywordflow">return</span> is_valid_cmd(commandname.c_str(), pcnt, user);
+<a name="l00488"></a>00488 }
+<a name="l00489"></a>00489
+<a name="l00490"></a><a class="code" href="classServer.html#Log_28int_20level_2C_20std_3A_3Astring_20s_29">00490</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="l00491"></a>00491 {
+<a name="l00492"></a>00492 log(level,<span class="stringliteral">"%s"</span>,s.c_str());
+<a name="l00493"></a>00493 }
+<a name="l00494"></a>00494
+<a name="l00495"></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">00495</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="l00496"></a>00496 {
+<a name="l00497"></a>00497 <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="l00498"></a>00498 }
+<a name="l00499"></a>00499
+<a name="l00500"></a><a class="code" href="classServer.html#SendMode_28char_20_2A_2Aparameters_2C_20int_20pcnt_2C_20userrec_20_2Auser_29">00500</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="l00501"></a>00501 {
+<a name="l00502"></a>00502 <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="l00503"></a>00503 }
+<a name="l00504"></a>00504
+<a name="l00505"></a><a class="code" href="classServer.html#Send_28int_20Socket_2C_20std_3A_3Astring_20s_29">00505</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="l00506"></a>00506 {
+<a name="l00507"></a>00507 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
+<a name="l00508"></a>00508 }
+<a name="l00509"></a>00509
+<a name="l00510"></a><a class="code" href="classServer.html#SendServ_28int_20Socket_2C_20std_3A_3Astring_20s_29">00510</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="l00511"></a>00511 {
+<a name="l00512"></a>00512 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
+<a name="l00513"></a>00513 }
+<a name="l00514"></a>00514
+<a name="l00515"></a><a class="code" href="classServer.html#SendFrom_28int_20Socket_2C_20userrec_20_2AUser_2C_20std_3A_3Astring_20s_29">00515</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="l00516"></a>00516 {
+<a name="l00517"></a>00517 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str());
+<a name="l00518"></a>00518 }
+<a name="l00519"></a>00519
+<a name="l00520"></a><a class="code" href="classServer.html#SendTo_28userrec_20_2ASource_2C_20userrec_20_2ADest_2C_20std_3A_3Astring_20s_29">00520</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="l00521"></a>00521 {
+<a name="l00522"></a>00522 <span class="keywordflow">if</span> (!Source)
+<a name="l00523"></a>00523 {
+<a name="l00524"></a>00524 <span class="comment">// if source is NULL, then the message originates from the local server</span>
+<a name="l00525"></a>00525 Write(Dest-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">":%s %s"</span>,this-&gt;GetServerName().c_str(),s.c_str());
+<a name="l00526"></a>00526 }
+<a name="l00527"></a>00527 <span class="keywordflow">else</span>
+<a name="l00528"></a>00528 {
+<a name="l00529"></a>00529 <span class="comment">// otherwise it comes from the user specified</span>
+<a name="l00530"></a>00530 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str());
+<a name="l00531"></a>00531 }
+<a name="l00532"></a>00532 }
+<a name="l00533"></a>00533
+<a name="l00534"></a><a class="code" href="classServer.html#SendChannelServerNotice_28std_3A_3Astring_20ServName_2C_20chanrec_20_2AChannel_2C_20std_3A_3Astring_20text_29">00534</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="l00535"></a>00535 {
+<a name="l00536"></a>00536 WriteChannelWithServ((<span class="keywordtype">char</span>*)ServName.c_str(), Channel, <span class="stringliteral">"%s"</span>, text.c_str());
+<a name="l00537"></a>00537 }
+<a name="l00538"></a>00538
+<a name="l00539"></a><a class="code" href="classServer.html#SendChannel_28userrec_20_2AUser_2C_20chanrec_20_2AChannel_2C_20std_3A_3Astring_20s_2C_20bool_20IncludeSender_29">00539</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="l00540"></a>00540 {
+<a name="l00541"></a>00541 <span class="keywordflow">if</span> (IncludeSender)
+<a name="l00542"></a>00542 {
+<a name="l00543"></a>00543 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
+<a name="l00544"></a>00544 }
+<a name="l00545"></a>00545 <span class="keywordflow">else</span>
+<a name="l00546"></a>00546 {
+<a name="l00547"></a>00547 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
+<a name="l00548"></a>00548 }
+<a name="l00549"></a>00549 }
+<a name="l00550"></a>00550
+<a name="l00551"></a><a class="code" href="classServer.html#CommonChannels_28userrec_20_2Au_31_2C_20userrec_20_2Au_32_29">00551</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="l00552"></a>00552 {
+<a name="l00553"></a>00553 <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="l00554"></a>00554 }
+<a name="l00555"></a>00555
+<a name="l00556"></a><a class="code" href="classServer.html#SendCommon_28userrec_20_2AUser_2C_20std_3A_3Astring_20text_2C_20bool_20IncludeSender_29">00556</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="l00557"></a>00557 {
+<a name="l00558"></a>00558 <span class="keywordflow">if</span> (IncludeSender)
+<a name="l00559"></a>00559 {
+<a name="l00560"></a>00560 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str());
+<a name="l00561"></a>00561 }
+<a name="l00562"></a>00562 <span class="keywordflow">else</span>
+<a name="l00563"></a>00563 {
+<a name="l00564"></a>00564 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str());
+<a name="l00565"></a>00565 }
+<a name="l00566"></a>00566 }
+<a name="l00567"></a>00567
+<a name="l00568"></a><a class="code" href="classServer.html#SendWallops_28userrec_20_2AUser_2C_20std_3A_3Astring_20text_29">00568</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="l00569"></a>00569 {
+<a name="l00570"></a>00570 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str());
+<a name="l00571"></a>00571 }
+<a name="l00572"></a>00572
+<a name="l00573"></a><a class="code" href="classServer.html#ChangeHost_28userrec_20_2Auser_2C_20std_3A_3Astring_20host_29">00573</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="l00574"></a>00574 {
+<a name="l00575"></a>00575 <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="l00576"></a>00576 }
+<a name="l00577"></a>00577
+<a name="l00578"></a><a class="code" href="classServer.html#ChangeGECOS_28userrec_20_2Auser_2C_20std_3A_3Astring_20gecos_29">00578</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="l00579"></a>00579 {
+<a name="l00580"></a>00580 <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="l00581"></a>00581 }
+<a name="l00582"></a>00582
+<a name="l00583"></a><a class="code" href="classServer.html#IsNick_28std_3A_3Astring_20nick_29">00583</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="l00584"></a>00584 {
+<a name="l00585"></a>00585 <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="l00586"></a>00586 }
+<a name="l00587"></a>00587
+<a name="l00588"></a><a class="code" href="classServer.html#FindNick_28std_3A_3Astring_20nick_29">00588</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="l00589"></a>00589 {
+<a name="l00590"></a>00590 <span class="keywordflow">return</span> Find(nick);
+<a name="l00591"></a>00591 }
+<a name="l00592"></a>00592
+<a name="l00593"></a><a class="code" href="classServer.html#FindDescriptor_28int_20socket_29">00593</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="l00594"></a>00594 {
+<a name="l00595"></a>00595 <span class="keywordflow">return</span> (socket &lt; 65536 ? fd_ref_table[socket] : NULL);
+<a name="l00596"></a>00596 }
+<a name="l00597"></a>00597
+<a name="l00598"></a><a class="code" href="classServer.html#FindChannel_28std_3A_3Astring_20channel_29">00598</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="l00599"></a>00599 {
+<a name="l00600"></a>00600 <span class="keywordflow">return</span> FindChan(channel.c_str());
+<a name="l00601"></a>00601 }
+<a name="l00602"></a>00602
+<a name="l00603"></a><a class="code" href="classServer.html#ChanMode_28userrec_20_2AUser_2C_20chanrec_20_2AChan_29">00603</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="l00604"></a>00604 {
+<a name="l00605"></a>00605 <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="l00606"></a>00606 }
+<a name="l00607"></a>00607
+<a name="l00608"></a><a class="code" href="classServer.html#IsOnChannel_28userrec_20_2AUser_2C_20chanrec_20_2AChan_29">00608</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="l00609"></a>00609 {
+<a name="l00610"></a>00610 <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="l00611"></a>00611 }
+<a name="l00612"></a>00612
+<a name="l00613"></a><a class="code" href="classServer.html#GetServerName_28_29">00613</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="l00614"></a>00614 {
+<a name="l00615"></a>00615 <span class="keywordflow">return</span> getservername();
+<a name="l00616"></a>00616 }
+<a name="l00617"></a>00617
+<a name="l00618"></a><a class="code" href="classServer.html#GetNetworkName_28_29">00618</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="l00619"></a>00619 {
+<a name="l00620"></a>00620 <span class="keywordflow">return</span> getnetworkname();
+<a name="l00621"></a>00621 }
+<a name="l00622"></a>00622
+<a name="l00623"></a><a class="code" href="classServer.html#GetServerDescription_28_29">00623</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="l00624"></a>00624 {
+<a name="l00625"></a>00625 <span class="keywordflow">return</span> getserverdesc();
+<a name="l00626"></a>00626 }
+<a name="l00627"></a>00627
+<a name="l00628"></a><a class="code" href="classServer.html#GetAdmin_28_29">00628</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#GetAdmin_28_29">Server::GetAdmin</a>()
+<a name="l00629"></a>00629 {
+<a name="l00630"></a>00630 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick());
<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-&gt;<a class="code" href="classconnection.html#fd">fd</a>;
-<a name="l00642"></a>00642 user-&gt;<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-&gt;<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-&gt;<a class="code" href="classuserrec.html#ident_5BIDENTMAX_2B_32_5D">ident</a>,user-&gt;<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(&amp;ke, old_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
-<a name="l00648"></a>00648 <span class="keywordtype">int</span> i = kevent(kq, &amp;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, &amp;ev);
-<a name="l00659"></a>00659 <span class="keywordflow">if</span> (i &lt; 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-&gt;<a class="code" href="classconnection.html#fd">fd</a> = alive-&gt;<a class="code" href="classconnection.html#fd">fd</a>;
-<a name="l00673"></a>00673 alive-&gt;<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-&gt;<a class="code" href="classuserrec.html#ClearBuffer_28_29">ClearBuffer</a>();
-<a name="l00675"></a>00675 Write(zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">":%s!%s@%s NICK %s"</span>,alive-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>,alive-&gt;<a class="code" href="classuserrec.html#ident_5BIDENTMAX_2B_32_5D">ident</a>,alive-&gt;<a class="code" href="classconnection.html#host_5B_31_36_30_5D">host</a>,zombie-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="classuserrec.html#chans_5BMAXCHANS_5D">chans</a>[i].<a class="code" href="classucrec.html#channel">channel</a>-&gt;<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-&gt;<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-&gt;<a class="code" href="classconnection.html#fd">fd</a>,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-&gt;<a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>);
-<a name="l00686"></a>00686 <span class="keywordflow">if</span> (Ptr-&gt;<a class="code" href="classchanrec.html#topicset">topicset</a>)
-<a name="l00687"></a>00687 {
-<a name="l00688"></a>00688 WriteServ(zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"332 %s %s :%s"</span>, zombie-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#topic_5BMAXBUF_5D">topic</a>);
-<a name="l00689"></a>00689 WriteServ(zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#setby_5BNICKMAX_5D">setby</a>, Ptr-&gt;<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-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-&gt;<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 &lt; strlen(dest); i++)
-<a name="l00763"></a>00763 <span class="keywordflow">if</span> (dest[i] &lt; 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 &lt; strlen(dest); i++)
-<a name="l00766"></a>00766 <span class="keywordflow">if</span> (dest[i] &gt; 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 &lt; 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&gt;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 &lt; 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&gt;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 &lt;= <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-&gt;<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-&gt;<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-&gt;<a class="code" href="classConfigReader.html#readerror">readerror</a> = LoadConf(CONFIG_FILE,this-&gt;cache,this-&gt;errorlog);
-<a name="l00802"></a>00802 <span class="keywordflow">if</span> (!this-&gt;readerror)
-<a name="l00803"></a>00803 this-&gt;<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-&gt;cache)
-<a name="l00810"></a>00810 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#cache">cache</a>;
-<a name="l00811"></a>00811 <span class="keywordflow">if</span> (this-&gt;errorlog)
-<a name="l00812"></a>00812 <span class="keyword">delete</span> this-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="classConfigReader.html#readerror">readerror</a> = LoadConf(filename.c_str(),this-&gt;<a class="code" href="classConfigReader.html#cache">cache</a>,this-&gt;<a class="code" href="classConfigReader.html#errorlog">errorlog</a>);
-<a name="l00821"></a>00821 <span class="keywordflow">if</span> (!this-&gt;readerror)
-<a name="l00822"></a>00822 this-&gt;<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-&gt;<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-&gt;<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-&gt;<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 &lt; strlen(val); i++)
+<a name="l00633"></a>00633
+<a name="l00634"></a>00634
+<a name="l00635"></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">00635</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="l00636"></a>00636 {
+<a name="l00637"></a>00637 <span class="keywordflow">if</span> (((modechar &gt;= <span class="charliteral">'A'</span>) &amp;&amp; (modechar &lt;= <span class="charliteral">'Z'</span>)) || ((modechar &gt;= <span class="charliteral">'a'</span>) &amp;&amp; (modechar &lt;= <span class="charliteral">'z'</span>)))
+<a name="l00638"></a>00638 {
+<a name="l00639"></a>00639 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#MT_5FSERVER">MT_SERVER</a>)
+<a name="l00640"></a>00640 {
+<a name="l00641"></a>00641 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="l00642"></a>00642 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00643"></a>00643 }
+<a name="l00644"></a>00644 <span class="keywordflow">if</span> (((params_when_on&gt;0) || (params_when_off&gt;0)) &amp;&amp; (type == <a class="code" href="modules_8h.html#MT_5FCLIENT">MT_CLIENT</a>))
+<a name="l00645"></a>00645 {
+<a name="l00646"></a>00646 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="l00647"></a>00647 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00648"></a>00648 }
+<a name="l00649"></a>00649 <span class="keywordflow">if</span> ((params_when_on&gt;1) || (params_when_off&gt;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">"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"</span>);
+<a name="l00652"></a>00652 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00653"></a>00653 }
+<a name="l00654"></a>00654 <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="l00655"></a>00655 }
+<a name="l00656"></a>00656 <span class="keywordflow">else</span>
+<a name="l00657"></a>00657 {
+<a name="l00658"></a>00658 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Muppet modechar detected."</span>);
+<a name="l00659"></a>00659 }
+<a name="l00660"></a>00660 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00661"></a>00661 }
+<a name="l00662"></a>00662
+<a name="l00663"></a><a class="code" href="classServer.html#AddExtendedListMode_28char_20modechar_29">00663</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="l00664"></a>00664 {
+<a name="l00665"></a>00665 <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="l00666"></a>00666 <span class="keywordflow">if</span> (res)
+<a name="l00667"></a>00667 <a class="code" href="modules_8cpp.html#ModeMakeList_28char_20modechar_29">ModeMakeList</a>(modechar);
+<a name="l00668"></a>00668 <span class="keywordflow">return</span> res;
+<a name="l00669"></a>00669 }
+<a name="l00670"></a>00670
+<a name="l00671"></a><a class="code" href="classServer.html#CountUsers_28chanrec_20_2Ac_29">00671</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="l00672"></a>00672 {
+<a name="l00673"></a>00673 <span class="keywordflow">return</span> usercount(c);
+<a name="l00674"></a>00674 }
+<a name="l00675"></a>00675
+<a name="l00676"></a>00676
+<a name="l00677"></a><a class="code" href="classServer.html#UserToPseudo_28userrec_20_2Auser_2C_20std_3A_3Astring_20message_29">00677</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="l00678"></a>00678 {
+<a name="l00679"></a>00679 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_fd = user-&gt;<a class="code" href="classconnection.html#fd">fd</a>;
+<a name="l00680"></a>00680 user-&gt;<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="l00681"></a>00681 user-&gt;<a class="code" href="classuserrec.html#ClearBuffer_28_29">ClearBuffer</a>();
+<a name="l00682"></a>00682 Write(old_fd,<span class="stringliteral">"ERROR :Closing link (%s@%s) [%s]"</span>,user-&gt;<a class="code" href="classuserrec.html#ident_5BIDENTMAX_2B_32_5D">ident</a>,user-&gt;<a class="code" href="classconnection.html#host_5B_31_36_30_5D">host</a>,message.c_str());
+<a name="l00683"></a>00683 <span class="preprocessor">#ifdef USE_KQUEUE</span>
+<a name="l00684"></a>00684 <span class="preprocessor"></span> <span class="keyword">struct </span>kevent ke;
+<a name="l00685"></a>00685 EV_SET(&amp;ke, old_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
+<a name="l00686"></a>00686 <span class="keywordtype">int</span> i = kevent(kq, &amp;ke, 1, 0, 0, NULL);
+<a name="l00687"></a>00687 <span class="keywordflow">if</span> (i == -1)
+<a name="l00688"></a>00688 {
+<a name="l00689"></a>00689 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"kqueue: Failed to remove user from queue!"</span>);
+<a name="l00690"></a>00690 }
+<a name="l00691"></a>00691 <span class="preprocessor">#endif</span>
+<a name="l00692"></a>00692 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_EPOLL</span>
+<a name="l00693"></a>00693 <span class="preprocessor"></span> <span class="keyword">struct </span>epoll_event ev;
+<a name="l00694"></a>00694 ev.events = EPOLLIN | EPOLLET;
+<a name="l00695"></a>00695 ev.data.fd = old_fd;
+<a name="l00696"></a>00696 <span class="keywordtype">int</span> i = epoll_ctl(ep, EPOLL_CTL_DEL, old_fd, &amp;ev);
+<a name="l00697"></a>00697 <span class="keywordflow">if</span> (i &lt; 0)
+<a name="l00698"></a>00698 {
+<a name="l00699"></a>00699 log(<a class="code" href="modules_8h.html#DEBUG">DEBUG</a>,<span class="stringliteral">"epoll: List deletion failure!"</span>);
+<a name="l00700"></a>00700 }
+<a name="l00701"></a>00701 <span class="preprocessor">#endif</span>
+<a name="l00702"></a>00702 <span class="preprocessor"></span>
+<a name="l00703"></a>00703 shutdown(old_fd,2);
+<a name="l00704"></a>00704 close(old_fd);
+<a name="l00705"></a>00705 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00706"></a>00706 }
+<a name="l00707"></a>00707
+<a name="l00708"></a><a class="code" href="classServer.html#PseudoToUser_28userrec_20_2Aalive_2C_20userrec_20_2Azombie_2C_20std_3A_3Astring_20message_29">00708</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="l00709"></a>00709 {
+<a name="l00710"></a>00710 zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a> = alive-&gt;<a class="code" href="classconnection.html#fd">fd</a>;
+<a name="l00711"></a>00711 alive-&gt;<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="l00712"></a>00712 alive-&gt;<a class="code" href="classuserrec.html#ClearBuffer_28_29">ClearBuffer</a>();
+<a name="l00713"></a>00713 Write(zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">":%s!%s@%s NICK %s"</span>,alive-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>,alive-&gt;<a class="code" href="classuserrec.html#ident_5BIDENTMAX_2B_32_5D">ident</a>,alive-&gt;<a class="code" href="classconnection.html#host_5B_31_36_30_5D">host</a>,zombie-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>);
+<a name="l00714"></a>00714 kill_link(alive,message.c_str());
+<a name="l00715"></a>00715 fd_ref_table[zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>] = zombie;
+<a name="l00716"></a>00716 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != MAXCHANS; i++)
+<a name="l00717"></a>00717 {
+<a name="l00718"></a>00718 <span class="keywordflow">if</span> (zombie-&gt;<a class="code" href="classuserrec.html#chans_5BMAXCHANS_5D">chans</a>[i].<a class="code" href="classucrec.html#channel">channel</a> != NULL)
+<a name="l00719"></a>00719 {
+<a name="l00720"></a>00720 <span class="keywordflow">if</span> (zombie-&gt;<a class="code" href="classuserrec.html#chans_5BMAXCHANS_5D">chans</a>[i].<a class="code" href="classucrec.html#channel">channel</a>-&gt;<a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>)
+<a name="l00721"></a>00721 {
+<a name="l00722"></a>00722 <a class="code" href="classchanrec.html">chanrec</a>* Ptr = zombie-&gt;<a class="code" href="classuserrec.html#chans_5BMAXCHANS_5D">chans</a>[i].<a class="code" href="classucrec.html#channel">channel</a>;
+<a name="l00723"></a>00723 WriteFrom(zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-&gt;<a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>);
+<a name="l00724"></a>00724 <span class="keywordflow">if</span> (Ptr-&gt;<a class="code" href="classchanrec.html#topicset">topicset</a>)
+<a name="l00725"></a>00725 {
+<a name="l00726"></a>00726 WriteServ(zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"332 %s %s :%s"</span>, zombie-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#topic_5BMAXBUF_5D">topic</a>);
+<a name="l00727"></a>00727 WriteServ(zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>, Ptr-&gt;<a class="code" href="classchanrec.html#setby_5BNICKMAX_5D">setby</a>, Ptr-&gt;<a class="code" href="classchanrec.html#topicset">topicset</a>);
+<a name="l00728"></a>00728 }
+<a name="l00729"></a>00729 userlist(zombie,Ptr);
+<a name="l00730"></a>00730 WriteServ(zombie-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>, Ptr-&gt;<a class="code" href="classchanrec.html#name_5BCHANMAX_5D">name</a>);
+<a name="l00731"></a>00731
+<a name="l00732"></a>00732 }
+<a name="l00733"></a>00733 }
+<a name="l00734"></a>00734 }
+<a name="l00735"></a>00735 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00736"></a>00736 }
+<a name="l00737"></a>00737
+<a name="l00738"></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">00738</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="l00739"></a>00739 {
+<a name="l00740"></a>00740 <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="l00741"></a>00741 }
+<a name="l00742"></a>00742
+<a name="l00743"></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">00743</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="l00744"></a>00744 {
+<a name="l00745"></a>00745 <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="l00746"></a>00746 }
+<a name="l00747"></a>00747
+<a name="l00748"></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">00748</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="l00749"></a>00749 {
+<a name="l00750"></a>00750 <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="l00751"></a>00751 }
+<a name="l00752"></a>00752
+<a name="l00753"></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">00753</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="l00754"></a>00754 {
+<a name="l00755"></a>00755 <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="l00756"></a>00756 }
+<a name="l00757"></a>00757
+<a name="l00758"></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">00758</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="l00759"></a>00759 {
+<a name="l00760"></a>00760 <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="l00761"></a>00761 }
+<a name="l00762"></a>00762
+<a name="l00763"></a><a class="code" href="classServer.html#DelGLine_28std_3A_3Astring_20hostmask_29">00763</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="l00764"></a>00764 {
+<a name="l00765"></a>00765 <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="l00766"></a>00766 }
+<a name="l00767"></a>00767
+<a name="l00768"></a><a class="code" href="classServer.html#DelQLine_28std_3A_3Astring_20nickname_29">00768</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="l00769"></a>00769 {
+<a name="l00770"></a>00770 <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="l00771"></a>00771 }
+<a name="l00772"></a>00772
+<a name="l00773"></a><a class="code" href="classServer.html#DelZLine_28std_3A_3Astring_20ipaddr_29">00773</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="l00774"></a>00774 {
+<a name="l00775"></a>00775 <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="l00776"></a>00776 }
+<a name="l00777"></a>00777
+<a name="l00778"></a><a class="code" href="classServer.html#DelKLine_28std_3A_3Astring_20hostmask_29">00778</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="l00779"></a>00779 {
+<a name="l00780"></a>00780 <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="l00781"></a>00781 }
+<a name="l00782"></a>00782
+<a name="l00783"></a><a class="code" href="classServer.html#DelELine_28std_3A_3Astring_20hostmask_29">00783</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="l00784"></a>00784 {
+<a name="l00785"></a>00785 <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="l00786"></a>00786 }
+<a name="l00787"></a>00787
+<a name="l00788"></a><a class="code" href="classServer.html#CalcDuration_28std_3A_3Astring_20duration_29">00788</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="l00789"></a>00789 {
+<a name="l00790"></a>00790 <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="l00791"></a>00791 }
+<a name="l00792"></a>00792
+<a name="l00793"></a><a class="code" href="classServer.html#IsValidMask_28std_3A_3Astring_20mask_29">00793</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="l00794"></a>00794 {
+<a name="l00795"></a>00795 <span class="keyword">const</span> <span class="keywordtype">char</span>* dest = mask.c_str();
+<a name="l00796"></a>00796 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'!'</span>)==0)
+<a name="l00797"></a>00797 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00798"></a>00798 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'@'</span>)==0)
+<a name="l00799"></a>00799 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00800"></a>00800 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; strlen(dest); i++)
+<a name="l00801"></a>00801 <span class="keywordflow">if</span> (dest[i] &lt; 32)
+<a name="l00802"></a>00802 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00803"></a>00803 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; strlen(dest); i++)
+<a name="l00804"></a>00804 <span class="keywordflow">if</span> (dest[i] &gt; 126)
+<a name="l00805"></a>00805 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00806"></a>00806 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0;
+<a name="l00807"></a>00807 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; strlen(dest); i++)
+<a name="l00808"></a>00808 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'!'</span>)
+<a name="l00809"></a>00809 c++;
+<a name="l00810"></a>00810 <span class="keywordflow">if</span> (c&gt;1)
+<a name="l00811"></a>00811 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00812"></a>00812 c = 0;
+<a name="l00813"></a>00813 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; strlen(dest); i++)
+<a name="l00814"></a>00814 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'@'</span>)
+<a name="l00815"></a>00815 c++;
+<a name="l00816"></a>00816 <span class="keywordflow">if</span> (c&gt;1)
+<a name="l00817"></a>00817 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00818"></a>00818
+<a name="l00819"></a>00819 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00820"></a>00820 }
+<a name="l00821"></a>00821
+<a name="l00822"></a><a class="code" href="classServer.html#FindModule_28std_3A_3Astring_20name_29">00822</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="l00823"></a>00823 {
+<a name="l00824"></a>00824 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt;= <a class="code" href="channels_8cpp.html#MODCOUNT">MODCOUNT</a>; i++)
+<a name="l00825"></a>00825 {
+<a name="l00826"></a>00826 <span class="keywordflow">if</span> (<a class="code" href="channels_8cpp.html#module_5Fnames">module_names</a>[i] == name)
+<a name="l00827"></a>00827 {
+<a name="l00828"></a>00828 <span class="keywordflow">return</span> <a class="code" href="channels_8cpp.html#modules">modules</a>[i];
+<a name="l00829"></a>00829 }
+<a name="l00830"></a>00830 }
+<a name="l00831"></a>00831 <span class="keywordflow">return</span> NULL;
+<a name="l00832"></a>00832 }
+<a name="l00833"></a>00833
+<a name="l00834"></a><a class="code" href="classConfigReader.html#ConfigReader_28_29">00834</a> <a class="code" href="classConfigReader.html#ConfigReader_28_29">ConfigReader::ConfigReader</a>()
+<a name="l00835"></a>00835 {
+<a name="l00836"></a>00836 <a class="code" href="modules_8cpp.html#include_5Fstack">include_stack</a>.clear();
+<a name="l00837"></a>00837 this-&gt;<a class="code" href="classConfigReader.html#cache">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
+<a name="l00838"></a>00838 this-&gt;<a class="code" href="classConfigReader.html#errorlog">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
+<a name="l00839"></a>00839 this-&gt;<a class="code" href="classConfigReader.html#readerror">readerror</a> = LoadConf(CONFIG_FILE,this-&gt;cache,this-&gt;errorlog);
+<a name="l00840"></a>00840 <span class="keywordflow">if</span> (!this-&gt;readerror)
+<a name="l00841"></a>00841 this-&gt;<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="l00842"></a>00842 }
+<a name="l00843"></a>00843
+<a name="l00844"></a>00844
+<a name="l00845"></a><a class="code" href="classConfigReader.html#_7EConfigReader_28_29">00845</a> <a class="code" href="classConfigReader.html#_7EConfigReader_28_29">ConfigReader::~ConfigReader</a>()
+<a name="l00846"></a>00846 {
+<a name="l00847"></a>00847 <span class="keywordflow">if</span> (this-&gt;cache)
+<a name="l00848"></a>00848 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#cache">cache</a>;
+<a name="l00849"></a>00849 <span class="keywordflow">if</span> (this-&gt;errorlog)
+<a name="l00850"></a>00850 <span class="keyword">delete</span> this-&gt;<a class="code" href="classConfigReader.html#errorlog">errorlog</a>;
+<a name="l00851"></a>00851 }
+<a name="l00852"></a>00852
+<a name="l00853"></a>00853
+<a name="l00854"></a><a class="code" href="classConfigReader.html#ConfigReader_28std_3A_3Astring_20filename_29">00854</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="l00855"></a>00855 {
+<a name="l00856"></a>00856 this-&gt;<a class="code" href="classConfigReader.html#cache">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
+<a name="l00857"></a>00857 this-&gt;<a class="code" href="classConfigReader.html#errorlog">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
+<a name="l00858"></a>00858 this-&gt;<a class="code" href="classConfigReader.html#readerror">readerror</a> = LoadConf(filename.c_str(),this-&gt;<a class="code" href="classConfigReader.html#cache">cache</a>,this-&gt;<a class="code" href="classConfigReader.html#errorlog">errorlog</a>);
+<a name="l00859"></a>00859 <span class="keywordflow">if</span> (!this-&gt;readerror)
+<a name="l00860"></a>00860 this-&gt;<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="l00861"></a>00861 };
+<a name="l00862"></a>00862
+<a name="l00863"></a><a class="code" href="classConfigReader.html#ReadValue_28std_3A_3Astring_20tag_2C_20std_3A_3Astring_20name_2C_20int_20index_29">00863</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="l00864"></a>00864 {
+<a name="l00865"></a>00865 <span class="keywordtype">char</span> val[MAXBUF];
+<a name="l00866"></a>00866 <span class="keywordtype">char</span> t[MAXBUF];
+<a name="l00867"></a>00867 <span class="keywordtype">char</span> n[MAXBUF];
+<a name="l00868"></a>00868 strlcpy(t,tag.c_str(),MAXBUF);
+<a name="l00869"></a>00869 strlcpy(n,name.c_str(),MAXBUF);
+<a name="l00870"></a>00870 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#cache">cache</a>,t,n,index,val);
+<a name="l00871"></a>00871 <span class="keywordflow">if</span> (!res)
<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-&gt;<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) &amp;&amp; (atoi(val)&lt;0))
-<a name="l00880"></a>00880 {
-<a name="l00881"></a>00881 this-&gt;<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-&gt;<a class="code" href="classConfigReader.html#error">error</a>;
-<a name="l00890"></a>00890 this-&gt;<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>-&gt;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-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"NOTICE %s :There were errors in the configuration file:"</span>,user-&gt;<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>-&gt;eof())
-<a name="l00908"></a>00908 {
-<a name="l00909"></a>00909 <a class="code" href="classConfigReader.html#errorlog">errorlog</a>-&gt;getline(dataline,1024);
-<a name="l00910"></a>00910 WriteServ(user-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"NOTICE %s :%s"</span>,user-&gt;<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-&gt;<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>-&gt;eof())
-<a name="l00917"></a>00917 {
-<a name="l00918"></a>00918 <a class="code" href="classConfigReader.html#errorlog">errorlog</a>-&gt;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="l00873"></a>00873 this-&gt;<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="l00874"></a>00874 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
+<a name="l00875"></a>00875 }
+<a name="l00876"></a>00876 <span class="keywordflow">return</span> val;
+<a name="l00877"></a>00877 }
+<a name="l00878"></a>00878
+<a name="l00879"></a><a class="code" href="classConfigReader.html#ReadFlag_28std_3A_3Astring_20tag_2C_20std_3A_3Astring_20name_2C_20int_20index_29">00879</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="l00880"></a>00880 {
+<a name="l00881"></a>00881 <span class="keywordtype">char</span> val[MAXBUF];
+<a name="l00882"></a>00882 <span class="keywordtype">char</span> t[MAXBUF];
+<a name="l00883"></a>00883 <span class="keywordtype">char</span> n[MAXBUF];
+<a name="l00884"></a>00884 strlcpy(t,tag.c_str(),MAXBUF);
+<a name="l00885"></a>00885 strlcpy(n,name.c_str(),MAXBUF);
+<a name="l00886"></a>00886 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#cache">cache</a>,t,n,index,val);
+<a name="l00887"></a>00887 <span class="keywordflow">if</span> (!res)
+<a name="l00888"></a>00888 {
+<a name="l00889"></a>00889 this-&gt;<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="l00890"></a>00890 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00891"></a>00891 }
+<a name="l00892"></a>00892 <a class="code" href="namespaceirc.html#string">std::string</a> s = val;
+<a name="l00893"></a>00893 <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="l00894"></a>00894 }
+<a name="l00895"></a>00895
+<a name="l00896"></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">00896</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="l00897"></a>00897 {
+<a name="l00898"></a>00898 <span class="keywordtype">char</span> val[MAXBUF];
+<a name="l00899"></a>00899 <span class="keywordtype">char</span> t[MAXBUF];
+<a name="l00900"></a>00900 <span class="keywordtype">char</span> n[MAXBUF];
+<a name="l00901"></a>00901 strlcpy(t,tag.c_str(),MAXBUF);
+<a name="l00902"></a>00902 strlcpy(n,name.c_str(),MAXBUF);
+<a name="l00903"></a>00903 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#cache">cache</a>,t,n,index,val);
+<a name="l00904"></a>00904 <span class="keywordflow">if</span> (!res)
+<a name="l00905"></a>00905 {
+<a name="l00906"></a>00906 this-&gt;<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="l00907"></a>00907 <span class="keywordflow">return</span> 0;
+<a name="l00908"></a>00908 }
+<a name="l00909"></a>00909 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; strlen(val); i++)
+<a name="l00910"></a>00910 {
+<a name="l00911"></a>00911 <span class="keywordflow">if</span> (!isdigit(val[i]))
+<a name="l00912"></a>00912 {
+<a name="l00913"></a>00913 this-&gt;<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="l00914"></a>00914 <span class="keywordflow">return</span> 0;
+<a name="l00915"></a>00915 }
+<a name="l00916"></a>00916 }
+<a name="l00917"></a>00917 <span class="keywordflow">if</span> ((needs_unsigned) &amp;&amp; (atoi(val)&lt;0))
+<a name="l00918"></a>00918 {
+<a name="l00919"></a>00919 this-&gt;<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="l00920"></a>00920 <span class="keywordflow">return</span> 0;
+<a name="l00921"></a>00921 }
+<a name="l00922"></a>00922 <span class="keywordflow">return</span> atoi(val);
+<a name="l00923"></a>00923 }
+<a name="l00924"></a>00924
+<a name="l00925"></a><a class="code" href="classConfigReader.html#GetError_28_29">00925</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#GetError_28_29">ConfigReader::GetError</a>()
+<a name="l00926"></a>00926 {
+<a name="l00927"></a>00927 <span class="keywordtype">long</span> olderr = this-&gt;<a class="code" href="classConfigReader.html#error">error</a>;
+<a name="l00928"></a>00928 this-&gt;<a class="code" href="classConfigReader.html#error">error</a> = 0;
+<a name="l00929"></a>00929 <span class="keywordflow">return</span> olderr;
<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="l00932"></a><a class="code" href="classConfigReader.html#DumpErrors_28bool_20bail_2C_20userrec_20_2Auser_29">00932</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="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-&gt;<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-&gt;<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-&gt;<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&lt;0) || ((<span class="keywordtype">unsigned</span>)x&gt;<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&lt;Module*&gt; <a class="code" href="channels_8cpp.html#modules">modules</a>(255);
-<a name="l00992"></a>00992 std::vector&lt;ircd_module*&gt; <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&nbsp;
+<a name="l00934"></a>00934 <span class="keywordflow">if</span> (bail)
+<a name="l00935"></a>00935 {
+<a name="l00936"></a>00936 printf(<span class="stringliteral">"There were errors in your configuration:\n%s"</span>,<a class="code" href="classConfigReader.html#errorlog">errorlog</a>-&gt;str().c_str());
+<a name="l00937"></a>00937 exit(0);
+<a name="l00938"></a>00938 }
+<a name="l00939"></a>00939 <span class="keywordflow">else</span>
+<a name="l00940"></a>00940 {
+<a name="l00941"></a>00941 <span class="keywordtype">char</span> dataline[1024];
+<a name="l00942"></a>00942 <span class="keywordflow">if</span> (user)
+<a name="l00943"></a>00943 {
+<a name="l00944"></a>00944 WriteServ(user-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"NOTICE %s :There were errors in the configuration file:"</span>,user-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>);
+<a name="l00945"></a>00945 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#errorlog">errorlog</a>-&gt;eof())
+<a name="l00946"></a>00946 {
+<a name="l00947"></a>00947 <a class="code" href="classConfigReader.html#errorlog">errorlog</a>-&gt;getline(dataline,1024);
+<a name="l00948"></a>00948 WriteServ(user-&gt;<a class="code" href="classconnection.html#fd">fd</a>,<span class="stringliteral">"NOTICE %s :%s"</span>,user-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>,dataline);
+<a name="l00949"></a>00949 }
+<a name="l00950"></a>00950 }
+<a name="l00951"></a>00951 <span class="keywordflow">else</span>
+<a name="l00952"></a>00952 {
+<a name="l00953"></a>00953 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-&gt;<a class="code" href="classuserrec.html#nick_5BNICKMAX_5D">nick</a>);
+<a name="l00954"></a>00954 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#errorlog">errorlog</a>-&gt;eof())
+<a name="l00955"></a>00955 {
+<a name="l00956"></a>00956 <a class="code" href="classConfigReader.html#errorlog">errorlog</a>-&gt;getline(dataline,1024);
+<a name="l00957"></a>00957 WriteOpers(dataline);
+<a name="l00958"></a>00958 }
+<a name="l00959"></a>00959 }
+<a name="l00960"></a>00960 <span class="keywordflow">return</span>;
+<a name="l00961"></a>00961 }
+<a name="l00962"></a>00962 }
+<a name="l00963"></a>00963
+<a name="l00964"></a>00964
+<a name="l00965"></a><a class="code" href="classConfigReader.html#Enumerate_28std_3A_3Astring_20tag_29">00965</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="l00966"></a>00966 {
+<a name="l00967"></a>00967 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#cache">cache</a>,tag.c_str());
+<a name="l00968"></a>00968 }
+<a name="l00969"></a>00969
+<a name="l00970"></a><a class="code" href="classConfigReader.html#EnumerateValues_28std_3A_3Astring_20tag_2C_20int_20index_29">00970</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="l00971"></a>00971 {
+<a name="l00972"></a>00972 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#cache">cache</a>, tag.c_str(), index);
+<a name="l00973"></a>00973 }
+<a name="l00974"></a>00974
+<a name="l00975"></a><a class="code" href="classConfigReader.html#Verify_28_29">00975</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#Verify_28_29">ConfigReader::Verify</a>()
+<a name="l00976"></a>00976 {
+<a name="l00977"></a>00977 <span class="keywordflow">return</span> this-&gt;<a class="code" href="classConfigReader.html#readerror">readerror</a>;
+<a name="l00978"></a>00978 }
+<a name="l00979"></a>00979
+<a name="l00980"></a>00980
+<a name="l00981"></a><a class="code" href="classFileReader.html#FileReader_28std_3A_3Astring_20filename_29">00981</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="l00982"></a>00982 {
+<a name="l00983"></a>00983 <a class="code" href="modules_8h.html#file_5Fcache">file_cache</a> c;
+<a name="l00984"></a>00984 readfile(c,filename.c_str());
+<a name="l00985"></a>00985 this-&gt;<a class="code" href="classFileReader.html#fc">fc</a> = c;
+<a name="l00986"></a>00986 }
+<a name="l00987"></a>00987
+<a name="l00988"></a><a class="code" href="classFileReader.html#FileReader_28_29">00988</a> <a class="code" href="classFileReader.html#FileReader_28_29">FileReader::FileReader</a>()
+<a name="l00989"></a>00989 {
+<a name="l00990"></a>00990 }
+<a name="l00991"></a>00991
+<a name="l00992"></a><a class="code" href="classFileReader.html#LoadFile_28std_3A_3Astring_20filename_29">00992</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="l00993"></a>00993 {
+<a name="l00994"></a>00994 <a class="code" href="modules_8h.html#file_5Fcache">file_cache</a> c;
+<a name="l00995"></a>00995 readfile(c,filename.c_str());
+<a name="l00996"></a>00996 this-&gt;<a class="code" href="classFileReader.html#fc">fc</a> = c;
+<a name="l00997"></a>00997 }
+<a name="l00998"></a>00998
+<a name="l00999"></a>00999
+<a name="l01000"></a><a class="code" href="classFileReader.html#_7EFileReader_28_29">01000</a> <a class="code" href="classFileReader.html#_7EFileReader_28_29">FileReader::~FileReader</a>()
+<a name="l01001"></a>01001 {
+<a name="l01002"></a>01002 }
+<a name="l01003"></a>01003
+<a name="l01004"></a><a class="code" href="classFileReader.html#Exists_28_29">01004</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#Exists_28_29">FileReader::Exists</a>()
+<a name="l01005"></a>01005 {
+<a name="l01006"></a>01006 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#fc">fc</a>.size() == 0)
+<a name="l01007"></a>01007 {
+<a name="l01008"></a>01008 <span class="keywordflow">return</span>(<span class="keyword">false</span>);
+<a name="l01009"></a>01009 }
+<a name="l01010"></a>01010 <span class="keywordflow">else</span>
+<a name="l01011"></a>01011 {
+<a name="l01012"></a>01012 <span class="keywordflow">return</span>(<span class="keyword">true</span>);
+<a name="l01013"></a>01013 }
+<a name="l01014"></a>01014 }
+<a name="l01015"></a>01015
+<a name="l01016"></a><a class="code" href="classFileReader.html#GetLine_28int_20x_29">01016</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="l01017"></a>01017 {
+<a name="l01018"></a>01018 <span class="keywordflow">if</span> ((x&lt;0) || ((<span class="keywordtype">unsigned</span>)x&gt;<a class="code" href="classFileReader.html#fc">fc</a>.size()))
+<a name="l01019"></a>01019 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
+<a name="l01020"></a>01020 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#fc">fc</a>[x];
+<a name="l01021"></a>01021 }
+<a name="l01022"></a>01022
+<a name="l01023"></a><a class="code" href="classFileReader.html#FileSize_28_29">01023</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#FileSize_28_29">FileReader::FileSize</a>()
+<a name="l01024"></a>01024 {
+<a name="l01025"></a>01025 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#fc">fc</a>.size();
+<a name="l01026"></a>01026 }
+<a name="l01027"></a>01027
+<a name="l01028"></a>01028
+<a name="l01029"></a>01029 std::vector&lt;Module*&gt; <a class="code" href="channels_8cpp.html#modules">modules</a>(255);
+<a name="l01030"></a>01030 std::vector&lt;ircd_module*&gt; <a class="code" href="channels_8cpp.html#factory">factory</a>(255);
+<a name="l01031"></a>01031
+<a name="l01032"></a><a class="code" href="modules_8cpp.html#MODCOUNT">01032</a> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#MODCOUNT">MODCOUNT</a> = -1;
+<a name="l01033"></a>01033
+<a name="l01034"></a>01034
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Dec 9 20:20:03 2005 for InspIRCd by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.4-20050815 </small></address>
</body>