diff options
Diffstat (limited to 'docs/module-doc/modules_8cpp-source.html')
-rw-r--r-- | docs/module-doc/modules_8cpp-source.html | 1910 |
1 files changed, 965 insertions, 945 deletions
diff --git a/docs/module-doc/modules_8cpp-source.html b/docs/module-doc/modules_8cpp-source.html index 10b371c07..8492f387e 100644 --- a/docs/module-doc/modules_8cpp-source.html +++ b/docs/module-doc/modules_8cpp-source.html @@ -21,989 +21,1009 @@ 00014 <span class="comment"> * ---------------------------------------------------</span> 00015 <span class="comment"> */</span> 00016 -00017 <span class="preprocessor">#include "inspircd.h"</span> -00018 <span class="preprocessor">#include "inspircd_io.h"</span> -00019 <span class="preprocessor">#include "inspircd_util.h"</span> -00020 <span class="preprocessor">#include "inspircd_config.h"</span> -00021 <span class="preprocessor">#include <unistd.h></span> -00022 <span class="preprocessor">#include <sys/errno.h></span> -00023 <span class="preprocessor">#ifdef USE_KQUEUE</span> -00024 <span class="preprocessor"></span><span class="preprocessor">#include <sys/types.h></span> -00025 <span class="preprocessor">#include <sys/event.h></span> -00026 <span class="preprocessor">#include <sys/time.h></span> -00027 <span class="preprocessor">#endif</span> -00028 <span class="preprocessor"></span><span class="preprocessor">#include <time.h></span> -00029 <span class="preprocessor">#include <string></span> -00030 <span class="preprocessor">#ifdef GCC3</span> -00031 <span class="preprocessor"></span><span class="preprocessor">#include <ext/hash_map></span> -00032 <span class="preprocessor">#else</span> -00033 <span class="preprocessor"></span><span class="preprocessor">#include <hash_map></span> +00017 <span class="keyword">using</span> <span class="keyword">namespace </span>std; +00018 +00019 <span class="preprocessor">#include "inspircd.h"</span> +00020 <span class="preprocessor">#include "inspircd_io.h"</span> +00021 <span class="preprocessor">#include "inspircd_util.h"</span> +00022 <span class="preprocessor">#include "inspircd_config.h"</span> +00023 <span class="preprocessor">#include <unistd.h></span> +00024 <span class="preprocessor">#include <sys/errno.h></span> +00025 +00026 <span class="preprocessor">#ifdef USE_KQUEUE</span> +00027 <span class="preprocessor"></span><span class="preprocessor">#include <sys/types.h></span> +00028 <span class="preprocessor">#include <sys/event.h></span> +00029 <span class="preprocessor">#include <sys/time.h></span> +00030 <span class="preprocessor">#endif</span> +00031 <span class="preprocessor"></span> +00032 <span class="preprocessor">#ifdef USE_EPOLL</span> +00033 <span class="preprocessor"></span><span class="preprocessor">#include <sys/epoll.h></span> 00034 <span class="preprocessor">#endif</span> -00035 <span class="preprocessor"></span><span class="preprocessor">#include <map></span> -00036 <span class="preprocessor">#include <sstream></span> -00037 <span class="preprocessor">#include <vector></span> -00038 <span class="preprocessor">#include <deque></span> -00039 <span class="preprocessor">#include "<a class="code" href="connection_8h.html">connection.h</a>"</span> -00040 <span class="preprocessor">#include "<a class="code" href="users_8h.html">users.h</a>"</span> -00041 <span class="preprocessor">#include "<a class="code" href="servers_8h.html">servers.h</a>"</span> -00042 <span class="preprocessor">#include "<a class="code" href="ctables_8h.html">ctables.h</a>"</span> -00043 <span class="preprocessor">#include "globals.h"</span> -00044 <span class="preprocessor">#include "<a class="code" href="modules_8h.html">modules.h</a>"</span> -00045 <span class="preprocessor">#include "dynamic.h"</span> -00046 <span class="preprocessor">#include "wildcard.h"</span> -00047 <span class="preprocessor">#include "<a class="code" href="message_8h.html">message.h</a>"</span> -00048 <span class="preprocessor">#include "<a class="code" href="mode_8h.html">mode.h</a>"</span> -00049 <span class="preprocessor">#include "<a class="code" href="xline_8h.html">xline.h</a>"</span> -00050 <span class="preprocessor">#include "<a class="code" href="commands_8h.html">commands.h</a>"</span> -00051 <span class="preprocessor">#include "inspstring.h"</span> -00052 <span class="preprocessor">#include "helperfuncs.h"</span> -00053 <span class="preprocessor">#include "<a class="code" href="hashcomp_8h.html">hashcomp.h</a>"</span> -00054 -00055 <span class="keyword">using</span> <span class="keyword">namespace </span>std; -00056 -00057 <span class="preprocessor">#ifdef USE_KQUEUE</span> -00058 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> kq; -00059 <span class="preprocessor">#endif</span> -00060 <span class="preprocessor"></span> -00061 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; -<a name="l00062"></a><a class="code" href="modules_8cpp.html#a1">00062</a> <span class="keyword">extern</span> std::vector<Module*> <a class="code" href="channels_8cpp.html#a2">modules</a>; -<a name="l00063"></a><a class="code" href="modules_8cpp.html#a2">00063</a> <span class="keyword">extern</span> std::vector<ircd_module*> <a class="code" href="channels_8cpp.html#a3">factory</a>; -00064 -<a name="l00065"></a><a class="code" href="modules_8cpp.html#a3">00065</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a37">TIME</a>; -00066 -<a name="l00067"></a><a class="code" href="modules_8cpp.html#a4">00067</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>; -<a name="l00068"></a><a class="code" href="modules_8cpp.html#a5">00068</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF]; -<a name="l00069"></a><a class="code" href="modules_8cpp.html#a6">00069</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF]; -<a name="l00070"></a><a class="code" href="modules_8cpp.html#a7">00070</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF]; -<a name="l00071"></a><a class="code" href="modules_8cpp.html#a8">00071</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF]; -<a name="l00072"></a><a class="code" href="modules_8cpp.html#a9">00072</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF]; -<a name="l00073"></a><a class="code" href="modules_8cpp.html#a10">00073</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF]; -<a name="l00074"></a><a class="code" href="modules_8cpp.html#a11">00074</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF]; -<a name="l00075"></a><a class="code" href="modules_8cpp.html#a12">00075</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF]; -<a name="l00076"></a><a class="code" href="modules_8cpp.html#a13">00076</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF]; -<a name="l00077"></a><a class="code" href="modules_8cpp.html#a14">00077</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF]; -<a name="l00078"></a><a class="code" href="modules_8cpp.html#a15">00078</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF]; -<a name="l00079"></a><a class="code" href="modules_8cpp.html#a16">00079</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF]; -<a name="l00080"></a><a class="code" href="modules_8cpp.html#a17">00080</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF]; -00081 -<a name="l00082"></a><a class="code" href="modules_8cpp.html#a18">00082</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>; -<a name="l00083"></a><a class="code" href="modules_8cpp.html#a19">00083</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>; -<a name="l00084"></a><a class="code" href="modules_8cpp.html#a20">00084</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>; -<a name="l00085"></a><a class="code" href="modules_8cpp.html#a21">00085</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>; -<a name="l00086"></a><a class="code" href="modules_8cpp.html#a22">00086</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>; -<a name="l00087"></a><a class="code" href="modules_8cpp.html#a23">00087</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>; -<a name="l00088"></a><a class="code" href="modules_8cpp.html#a24">00088</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>; -<a name="l00089"></a><a class="code" href="modules_8cpp.html#a25">00089</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>; -00090 -<a name="l00091"></a><a class="code" href="modules_8cpp.html#a26">00091</a> <span class="keyword">extern</span> std::vector<int> <a class="code" href="channels_8cpp.html#a26">fd_reap</a>; -<a name="l00092"></a><a class="code" href="modules_8cpp.html#a27">00092</a> <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="channels_8cpp.html#a27">module_names</a>; -00093 -<a name="l00094"></a><a class="code" href="modules_8cpp.html#a28">00094</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a28">boundPortCount</a>; -<a name="l00095"></a><a class="code" href="modules_8cpp.html#a29">00095</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">portCount</a>; -<a name="l00096"></a><a class="code" href="modules_8cpp.html#a30">00096</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">SERVERportCount</a>; -<a name="l00097"></a><a class="code" href="modules_8cpp.html#a31">00097</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">ports</a>[MAXSOCKS]; -<a name="l00098"></a><a class="code" href="modules_8cpp.html#a32">00098</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a32">defaultRoute</a>; -00099 -<a name="l00100"></a><a class="code" href="modules_8cpp.html#a33">00100</a> <span class="keyword">extern</span> std::vector<long> <a class="code" href="channels_8cpp.html#a33">auth_cookies</a>; -<a name="l00101"></a><a class="code" href="modules_8cpp.html#a34">00101</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a34">config_f</a>; +00035 <span class="preprocessor"></span> +00036 <span class="preprocessor">#include <time.h></span> +00037 <span class="preprocessor">#include <string></span> +00038 <span class="preprocessor">#ifdef GCC3</span> +00039 <span class="preprocessor"></span><span class="preprocessor">#include <ext/hash_map></span> +00040 <span class="preprocessor">#else</span> +00041 <span class="preprocessor"></span><span class="preprocessor">#include <hash_map></span> +00042 <span class="preprocessor">#endif</span> +00043 <span class="preprocessor"></span><span class="preprocessor">#include <map></span> +00044 <span class="preprocessor">#include <sstream></span> +00045 <span class="preprocessor">#include <vector></span> +00046 <span class="preprocessor">#include <deque></span> +00047 <span class="preprocessor">#include "<a class="code" href="connection_8h.html">connection.h</a>"</span> +00048 <span class="preprocessor">#include "<a class="code" href="users_8h.html">users.h</a>"</span> +00049 <span class="preprocessor">#include "<a class="code" href="servers_8h.html">servers.h</a>"</span> +00050 <span class="preprocessor">#include "<a class="code" href="ctables_8h.html">ctables.h</a>"</span> +00051 <span class="preprocessor">#include "globals.h"</span> +00052 <span class="preprocessor">#include "<a class="code" href="modules_8h.html">modules.h</a>"</span> +00053 <span class="preprocessor">#include "dynamic.h"</span> +00054 <span class="preprocessor">#include "wildcard.h"</span> +00055 <span class="preprocessor">#include "<a class="code" href="message_8h.html">message.h</a>"</span> +00056 <span class="preprocessor">#include "<a class="code" href="mode_8h.html">mode.h</a>"</span> +00057 <span class="preprocessor">#include "<a class="code" href="xline_8h.html">xline.h</a>"</span> +00058 <span class="preprocessor">#include "<a class="code" href="commands_8h.html">commands.h</a>"</span> +00059 <span class="preprocessor">#include "inspstring.h"</span> +00060 <span class="preprocessor">#include "helperfuncs.h"</span> +00061 <span class="preprocessor">#include "<a class="code" href="hashcomp_8h.html">hashcomp.h</a>"</span> +00062 +00063 <span class="preprocessor">#ifdef USE_KQUEUE</span> +00064 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> kq; +00065 <span class="preprocessor">#endif</span> +00066 <span class="preprocessor"></span> +00067 <span class="preprocessor">#ifdef USE_EPOLL</span> +00068 <span class="preprocessor"></span><span class="keywordtype">int</span> ep; +00069 <span class="preprocessor">#endif</span> +00070 <span class="preprocessor"></span> +00071 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; +<a name="l00072"></a><a class="code" href="modules_8cpp.html#a1">00072</a> <span class="keyword">extern</span> std::vector<Module*> <a class="code" href="channels_8cpp.html#a2">modules</a>; +<a name="l00073"></a><a class="code" href="modules_8cpp.html#a2">00073</a> <span class="keyword">extern</span> std::vector<ircd_module*> <a class="code" href="channels_8cpp.html#a3">factory</a>; +00074 +<a name="l00075"></a><a class="code" href="modules_8cpp.html#a3">00075</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a36">TIME</a>; +00076 +<a name="l00077"></a><a class="code" href="modules_8cpp.html#a4">00077</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a4">LogLevel</a>; +<a name="l00078"></a><a class="code" href="modules_8cpp.html#a5">00078</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a5">ServerName</a>[MAXBUF]; +<a name="l00079"></a><a class="code" href="modules_8cpp.html#a6">00079</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a6">Network</a>[MAXBUF]; +<a name="l00080"></a><a class="code" href="modules_8cpp.html#a7">00080</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a7">ServerDesc</a>[MAXBUF]; +<a name="l00081"></a><a class="code" href="modules_8cpp.html#a8">00081</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a8">AdminName</a>[MAXBUF]; +<a name="l00082"></a><a class="code" href="modules_8cpp.html#a9">00082</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a9">AdminEmail</a>[MAXBUF]; +<a name="l00083"></a><a class="code" href="modules_8cpp.html#a10">00083</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a10">AdminNick</a>[MAXBUF]; +<a name="l00084"></a><a class="code" href="modules_8cpp.html#a11">00084</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a11">diepass</a>[MAXBUF]; +<a name="l00085"></a><a class="code" href="modules_8cpp.html#a12">00085</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a12">restartpass</a>[MAXBUF]; +<a name="l00086"></a><a class="code" href="modules_8cpp.html#a13">00086</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a13">motd</a>[MAXBUF]; +<a name="l00087"></a><a class="code" href="modules_8cpp.html#a14">00087</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a14">rules</a>[MAXBUF]; +<a name="l00088"></a><a class="code" href="modules_8cpp.html#a15">00088</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a15">list</a>[MAXBUF]; +<a name="l00089"></a><a class="code" href="modules_8cpp.html#a16">00089</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a16">PrefixQuit</a>[MAXBUF]; +<a name="l00090"></a><a class="code" href="modules_8cpp.html#a17">00090</a> <span class="keyword">extern</span> <span class="keywordtype">char</span> <a class="code" href="channels_8cpp.html#a17">DieValue</a>[MAXBUF]; +00091 +<a name="l00092"></a><a class="code" href="modules_8cpp.html#a18">00092</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a18">debugging</a>; +<a name="l00093"></a><a class="code" href="modules_8cpp.html#a19">00093</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a19">WHOWAS_STALE</a>; +<a name="l00094"></a><a class="code" href="modules_8cpp.html#a20">00094</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a20">WHOWAS_MAX</a>; +<a name="l00095"></a><a class="code" href="modules_8cpp.html#a21">00095</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a21">DieDelay</a>; +<a name="l00096"></a><a class="code" href="modules_8cpp.html#a22">00096</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a22">startup_time</a>; +<a name="l00097"></a><a class="code" href="modules_8cpp.html#a23">00097</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a23">NetBufferSize</a>; +<a name="l00098"></a><a class="code" href="modules_8cpp.html#a24">00098</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a24">MaxWhoResults</a>; +<a name="l00099"></a><a class="code" href="modules_8cpp.html#a25">00099</a> <span class="keyword">extern</span> time_t <a class="code" href="channels_8cpp.html#a25">nb_start</a>; +00100 +<a name="l00101"></a><a class="code" href="modules_8cpp.html#a26">00101</a> <span class="keyword">extern</span> std::vector<std::string> <a class="code" href="channels_8cpp.html#a26">module_names</a>; 00102 -<a name="l00103"></a><a class="code" href="modules_8cpp.html#a35">00103</a> <span class="keyword">extern</span> <a class="code" href="classserverrec.html">serverrec</a>* <a class="code" href="channels_8cpp.html#a35">me</a>[32]; -00104 -<a name="l00105"></a><a class="code" href="modules_8cpp.html#a36">00105</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a36">log_file</a>; -00106 -<a name="l00107"></a><a class="code" href="modules_8cpp.html#a37">00107</a> <span class="keyword">extern</span> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="modules_8cpp.html#a37">fd_ref_table</a>[65536]; +<a name="l00103"></a><a class="code" href="modules_8cpp.html#a27">00103</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a27">boundPortCount</a>; +<a name="l00104"></a><a class="code" href="modules_8cpp.html#a28">00104</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a28">portCount</a>; +<a name="l00105"></a><a class="code" href="modules_8cpp.html#a29">00105</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a29">SERVERportCount</a>; +<a name="l00106"></a><a class="code" href="modules_8cpp.html#a30">00106</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a30">ports</a>[MAXSOCKS]; +<a name="l00107"></a><a class="code" href="modules_8cpp.html#a31">00107</a> <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="channels_8cpp.html#a31">defaultRoute</a>; 00108 -<a name="l00109"></a><a class="code" href="modules_8cpp.html#a38">00109</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, userrec*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a38">user_hash</a>; -<a name="l00110"></a><a class="code" href="modules_8cpp.html#a39">00110</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, chanrec*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a39">chan_hash</a>; -<a name="l00111"></a><a class="code" href="modules_8cpp.html#a40">00111</a> <span class="keyword">typedef</span> nspace::hash_map<in_addr,string*, nspace::hash<in_addr>, <a class="code" href="structirc_1_1InAddr__HashComp.html">irc::InAddr_HashComp</a>> <a class="code" href="modules_8cpp.html#a40">address_cache</a>; -<a name="l00112"></a><a class="code" href="modules_8cpp.html#a41">00112</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, WhoWasUser*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a41">whowas_hash</a>; -<a name="l00113"></a><a class="code" href="modules_8cpp.html#a42">00113</a> <span class="keyword">typedef</span> std::deque<command_t> <a class="code" href="modules_8cpp.html#a42">command_table</a>; -00114 +<a name="l00109"></a><a class="code" href="modules_8cpp.html#a32">00109</a> <span class="keyword">extern</span> std::vector<long> <a class="code" href="channels_8cpp.html#a32">auth_cookies</a>; +<a name="l00110"></a><a class="code" href="modules_8cpp.html#a33">00110</a> <span class="keyword">extern</span> std::stringstream <a class="code" href="channels_8cpp.html#a33">config_f</a>; +00111 +<a name="l00112"></a><a class="code" href="modules_8cpp.html#a34">00112</a> <span class="keyword">extern</span> <a class="code" href="classserverrec.html">serverrec</a>* <a class="code" href="channels_8cpp.html#a34">me</a>[32]; +00113 +<a name="l00114"></a><a class="code" href="modules_8cpp.html#a35">00114</a> <span class="keyword">extern</span> FILE *<a class="code" href="channels_8cpp.html#a35">log_file</a>; 00115 -<a name="l00116"></a><a class="code" href="modules_8cpp.html#a43">00116</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">user_hash</a> <a class="code" href="modules_8cpp.html#a43">clientlist</a>; -<a name="l00117"></a><a class="code" href="modules_8cpp.html#a44">00117</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">chan_hash</a> <a class="code" href="modules_8cpp.html#a44">chanlist</a>; -<a name="l00118"></a><a class="code" href="modules_8cpp.html#a45">00118</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a41">whowas_hash</a> <a class="code" href="modules_8cpp.html#a45">whowas</a>; -<a name="l00119"></a><a class="code" href="modules_8cpp.html#a46">00119</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a42">command_table</a> <a class="code" href="modules_8cpp.html#a46">cmdlist</a>; -<a name="l00120"></a><a class="code" href="modules_8cpp.html#a47">00120</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a47">MOTD</a>; -<a name="l00121"></a><a class="code" href="modules_8cpp.html#a48">00121</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a48">RULES</a>; -<a name="l00122"></a><a class="code" href="modules_8cpp.html#a49">00122</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">address_cache</a> <a class="code" href="modules_8cpp.html#a49">IP</a>; +<a name="l00116"></a><a class="code" href="modules_8cpp.html#a36">00116</a> <span class="keyword">extern</span> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="modules_8cpp.html#a36">fd_ref_table</a>[65536]; +00117 +<a name="l00118"></a><a class="code" href="modules_8cpp.html#a37">00118</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, userrec*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a37">user_hash</a>; +<a name="l00119"></a><a class="code" href="modules_8cpp.html#a38">00119</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, chanrec*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a38">chan_hash</a>; +<a name="l00120"></a><a class="code" href="modules_8cpp.html#a39">00120</a> <span class="keyword">typedef</span> nspace::hash_map<in_addr,string*, nspace::hash<in_addr>, <a class="code" href="structirc_1_1InAddr__HashComp.html">irc::InAddr_HashComp</a>> <a class="code" href="modules_8cpp.html#a39">address_cache</a>; +<a name="l00121"></a><a class="code" href="modules_8cpp.html#a40">00121</a> <span class="keyword">typedef</span> nspace::hash_map<std::string, WhoWasUser*, nspace::hash<string>, <a class="code" href="structirc_1_1StrHashComp.html">irc::StrHashComp</a>> <a class="code" href="modules_8cpp.html#a40">whowas_hash</a>; +<a name="l00122"></a><a class="code" href="modules_8cpp.html#a41">00122</a> <span class="keyword">typedef</span> std::deque<command_t> <a class="code" href="modules_8cpp.html#a41">command_table</a>; 00123 00124 -00125 <span class="comment">// class type for holding an extended mode character - internal to core</span> -00126 -<a name="l00127"></a><a class="code" href="classExtMode.html">00127</a> <span class="keyword">class </span><a class="code" href="classExtMode.html">ExtMode</a> : <span class="keyword">public</span> <a class="code" href="classclassbase.html">classbase</a> -00128 { -00129 <span class="keyword">public</span>: -<a name="l00130"></a><a class="code" href="classExtMode.html#o0">00130</a> <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#o0">modechar</a>; -<a name="l00131"></a><a class="code" href="classExtMode.html#o1">00131</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o1">type</a>; -<a name="l00132"></a><a class="code" href="classExtMode.html#o2">00132</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o2">params_when_on</a>; -<a name="l00133"></a><a class="code" href="classExtMode.html#o3">00133</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o3">params_when_off</a>; -<a name="l00134"></a><a class="code" href="classExtMode.html#o4">00134</a> <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#o4">needsoper</a>; -<a name="l00135"></a><a class="code" href="classExtMode.html#o5">00135</a> <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>; -<a name="l00136"></a><a class="code" href="classExtMode.html#a0">00136</a> <a class="code" href="classExtMode.html#a0">ExtMode</a>(<span class="keywordtype">char</span> mc, <span class="keywordtype">int</span> ty, <span class="keywordtype">bool</span> oper, <span class="keywordtype">int</span> p_on, <span class="keywordtype">int</span> p_off) : <a class="code" href="classExtMode.html#o0">modechar</a>(mc), <a class="code" href="classExtMode.html#o1">type</a>(ty), <a class="code" href="classExtMode.html#o4">needsoper</a>(oper), <a class="code" href="classExtMode.html#o2">params_when_on</a>(p_on), <a class="code" href="classExtMode.html#o3">params_when_off</a>(p_off) { }; -00137 }; -00138 -<a name="l00139"></a><a class="code" href="modules_8cpp.html#a50">00139</a> <span class="keyword">typedef</span> std::vector<ExtMode> <a class="code" href="modules_8cpp.html#a50">ExtModeList</a>; -<a name="l00140"></a><a class="code" href="modules_8cpp.html#a51">00140</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a>; -00141 -00142 -<a name="l00143"></a><a class="code" href="modules_8cpp.html#a52">00143</a> <a class="code" href="modules_8cpp.html#a50">ExtModeList</a> <a class="code" href="modules_8cpp.html#a52">EMode</a>; -00144 -00145 <span class="comment">// returns true if an extended mode character is in use</span> -<a name="l00146"></a><a class="code" href="modules_8cpp.html#a53">00146</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00147 { -00148 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00149 { -00150 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00151 { -00152 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00153 } -00154 } -00155 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00156 } -00157 -<a name="l00158"></a><a class="code" href="modules_8cpp.html#a54">00158</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a54">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00159 { -00160 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00161 { -00162 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->list == <span class="keyword">true</span>)) -00163 { -00164 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00165 } -00166 } -00167 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00168 } -00169 -<a name="l00170"></a><a class="code" href="modules_8cpp.html#a55">00170</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00171 { -00172 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00173 { -00174 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->needsoper == <span class="keyword">true</span>)) -00175 { -00176 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00177 } -00178 } -00179 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00180 } -00181 -00182 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> -<a name="l00183"></a><a class="code" href="modules_8cpp.html#a56">00183</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a56">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00184 { -00185 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00186 { -00187 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00188 { -00189 <span class="keywordflow">return</span> i->params_when_on; -00190 } -00191 } -00192 <span class="keywordflow">return</span> 0; -00193 } -00194 -00195 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> -<a name="l00196"></a><a class="code" href="modules_8cpp.html#a57">00196</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a57">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) -00197 { -00198 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00199 { -00200 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) -00201 { -00202 <span class="keywordflow">return</span> i->params_when_off; -00203 } -00204 } -00205 <span class="keywordflow">return</span> 0; -00206 } -00207 -00208 <span class="comment">// returns true if an extended mode character is in use</span> -<a name="l00209"></a><a class="code" href="modules_8cpp.html#a58">00209</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a58">DoAddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_on, <span class="keywordtype">int</span> params_off) -00210 { -00211 <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a53">ModeDefined</a>(modechar,type)) { -00212 <span class="keywordflow">return</span> <span class="keyword">false</span>; +<a name="l00125"></a><a class="code" href="modules_8cpp.html#a42">00125</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a37">user_hash</a> <a class="code" href="modules_8cpp.html#a42">clientlist</a>; +<a name="l00126"></a><a class="code" href="modules_8cpp.html#a43">00126</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a38">chan_hash</a> <a class="code" href="modules_8cpp.html#a43">chanlist</a>; +<a name="l00127"></a><a class="code" href="modules_8cpp.html#a44">00127</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a40">whowas_hash</a> <a class="code" href="modules_8cpp.html#a44">whowas</a>; +<a name="l00128"></a><a class="code" href="modules_8cpp.html#a45">00128</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a41">command_table</a> <a class="code" href="modules_8cpp.html#a45">cmdlist</a>; +<a name="l00129"></a><a class="code" href="modules_8cpp.html#a46">00129</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a46">MOTD</a>; +<a name="l00130"></a><a class="code" href="modules_8cpp.html#a47">00130</a> <span class="keyword">extern</span> <a class="code" href="modules_8h.html#a31">file_cache</a> <a class="code" href="modules_8cpp.html#a47">RULES</a>; +<a name="l00131"></a><a class="code" href="modules_8cpp.html#a48">00131</a> <span class="keyword">extern</span> <a class="code" href="modules_8cpp.html#a39">address_cache</a> <a class="code" href="modules_8cpp.html#a48">IP</a>; +00132 +00133 +00134 <span class="comment">// class type for holding an extended mode character - internal to core</span> +00135 +<a name="l00136"></a><a class="code" href="classExtMode.html">00136</a> <span class="keyword">class </span><a class="code" href="classExtMode.html">ExtMode</a> : <span class="keyword">public</span> <a class="code" href="classclassbase.html">classbase</a> +00137 { +00138 <span class="keyword">public</span>: +<a name="l00139"></a><a class="code" href="classExtMode.html#o0">00139</a> <span class="keywordtype">char</span> <a class="code" href="classExtMode.html#o0">modechar</a>; +<a name="l00140"></a><a class="code" href="classExtMode.html#o1">00140</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o1">type</a>; +<a name="l00141"></a><a class="code" href="classExtMode.html#o2">00141</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o2">params_when_on</a>; +<a name="l00142"></a><a class="code" href="classExtMode.html#o3">00142</a> <span class="keywordtype">int</span> <a class="code" href="classExtMode.html#o3">params_when_off</a>; +<a name="l00143"></a><a class="code" href="classExtMode.html#o4">00143</a> <span class="keywordtype">bool</span> <a class="code" href="classExtMode.html#o4">needsoper</a>; +<a name="l00144"></a><a class="code" href="classExtMode.html#o5">00144</a> <span class="keywordtype">bool</span> <a class="code" href="channels_8cpp.html#a15">list</a>; +<a name="l00145"></a><a class="code" href="classExtMode.html#a0">00145</a> <a class="code" href="classExtMode.html#a0">ExtMode</a>(<span class="keywordtype">char</span> mc, <span class="keywordtype">int</span> ty, <span class="keywordtype">bool</span> oper, <span class="keywordtype">int</span> p_on, <span class="keywordtype">int</span> p_off) : <a class="code" href="classExtMode.html#o0">modechar</a>(mc), <a class="code" href="classExtMode.html#o1">type</a>(ty), <a class="code" href="classExtMode.html#o4">needsoper</a>(oper), <a class="code" href="classExtMode.html#o2">params_when_on</a>(p_on), <a class="code" href="classExtMode.html#o3">params_when_off</a>(p_off) { }; +00146 }; +00147 +<a name="l00148"></a><a class="code" href="modules_8cpp.html#a49">00148</a> <span class="keyword">typedef</span> std::vector<ExtMode> <a class="code" href="modules_8cpp.html#a49">ExtModeList</a>; +<a name="l00149"></a><a class="code" href="modules_8cpp.html#a50">00149</a> <span class="keyword">typedef</span> ExtModeList::iterator <a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a>; +00150 +00151 +<a name="l00152"></a><a class="code" href="modules_8cpp.html#a51">00152</a> <a class="code" href="modules_8cpp.html#a49">ExtModeList</a> <a class="code" href="modules_8cpp.html#a51">EMode</a>; +00153 +00154 <span class="comment">// returns true if an extended mode character is in use</span> +<a name="l00155"></a><a class="code" href="modules_8cpp.html#a52">00155</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a52">ModeDefined</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00156 { +00157 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++) +00158 { +00159 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +00160 { +00161 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00162 } +00163 } +00164 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00165 } +00166 +<a name="l00167"></a><a class="code" href="modules_8cpp.html#a53">00167</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a53">ModeIsListMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00168 { +00169 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++) +00170 { +00171 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->list == <span class="keyword">true</span>)) +00172 { +00173 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00174 } +00175 } +00176 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00177 } +00178 +<a name="l00179"></a><a class="code" href="modules_8cpp.html#a54">00179</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a54">ModeDefinedOper</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00180 { +00181 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++) +00182 { +00183 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type) && (i->needsoper == <span class="keyword">true</span>)) +00184 { +00185 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00186 } +00187 } +00188 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00189 } +00190 +00191 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> +<a name="l00192"></a><a class="code" href="modules_8cpp.html#a55">00192</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a55">ModeDefinedOn</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00193 { +00194 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++) +00195 { +00196 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +00197 { +00198 <span class="keywordflow">return</span> i->params_when_on; +00199 } +00200 } +00201 <span class="keywordflow">return</span> 0; +00202 } +00203 +00204 <span class="comment">// returns number of parameters for a custom mode when it is switched on</span> +<a name="l00205"></a><a class="code" href="modules_8cpp.html#a56">00205</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a56">ModeDefinedOff</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type) +00206 { +00207 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++) +00208 { +00209 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == type)) +00210 { +00211 <span class="keywordflow">return</span> i->params_when_off; +00212 } 00213 } -00214 <a class="code" href="modules_8cpp.html#a52">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off)); -00215 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00216 } -00217 -00218 <span class="comment">// turns a mode into a listmode</span> -<a name="l00219"></a><a class="code" href="modules_8cpp.html#a59">00219</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a59">ModeMakeList</a>(<span class="keywordtype">char</span> modechar) -00220 { -00221 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a51">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a52">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a52">EMode</a>.end(); i++) -00222 { -00223 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == <a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>)) -00224 { -00225 i->list = <span class="keyword">true</span>; -00226 <span class="keywordflow">return</span>; -00227 } -00228 } -00229 <span class="keywordflow">return</span>; -00230 } -00231 -00232 <span class="comment">// version is a simple class for holding a modules version number</span> -00233 -<a name="l00234"></a><a class="code" href="classVersion.html#a0">00234</a> <a class="code" href="classVersion.html#a0">Version::Version</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> revision, <span class="keywordtype">int</span> build, <span class="keywordtype">int</span> flags) : Major(major), Minor(minor), Revision(revision), Build(build), Flags(flags) { }; -00235 -00236 <span class="comment">// admin is a simple class for holding a server's administrative info</span> -00237 -<a name="l00238"></a><a class="code" href="classAdmin.html#a0">00238</a> <a class="code" href="classAdmin.html#a0">Admin::Admin</a>(std::string name, std::string email, std::string nick) : Name(name), Email(email), Nick(nick) { }; -00239 -<a name="l00240"></a><a class="code" href="classRequest.html#a0">00240</a> <a class="code" href="classRequest.html#a0">Request::Request</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, <a class="code" href="classModule.html">Module</a>* dst) : data(anydata), source(src), dest(dst) { }; -00241 -<a name="l00242"></a><a class="code" href="classRequest.html#a1">00242</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a1">Request::GetData</a>() -00243 { -00244 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p0">data</a>; -00245 } +00214 <span class="keywordflow">return</span> 0; +00215 } +00216 +00217 <span class="comment">// returns true if an extended mode character is in use</span> +<a name="l00218"></a><a class="code" href="modules_8cpp.html#a57">00218</a> <span class="keywordtype">bool</span> <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_on, <span class="keywordtype">int</span> params_off) +00219 { +00220 <span class="keywordflow">if</span> (<a class="code" href="modules_8cpp.html#a52">ModeDefined</a>(modechar,type)) { +00221 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00222 } +00223 <a class="code" href="modules_8cpp.html#a51">EMode</a>.push_back(<a class="code" href="classExtMode.html">ExtMode</a>(modechar,type,requires_oper,params_on,params_off)); +00224 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00225 } +00226 +00227 <span class="comment">// turns a mode into a listmode</span> +<a name="l00228"></a><a class="code" href="modules_8cpp.html#a58">00228</a> <span class="keywordtype">void</span> <a class="code" href="modules_8cpp.html#a58">ModeMakeList</a>(<span class="keywordtype">char</span> modechar) +00229 { +00230 <span class="keywordflow">for</span> (<a class="code" href="modules_8cpp.html#a50">ExtModeListIter</a> i = <a class="code" href="modules_8cpp.html#a51">EMode</a>.begin(); i < <a class="code" href="modules_8cpp.html#a51">EMode</a>.end(); i++) +00231 { +00232 <span class="keywordflow">if</span> ((i->modechar == modechar) && (i->type == <a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>)) +00233 { +00234 i->list = <span class="keyword">true</span>; +00235 <span class="keywordflow">return</span>; +00236 } +00237 } +00238 <span class="keywordflow">return</span>; +00239 } +00240 +00241 <span class="comment">// version is a simple class for holding a modules version number</span> +00242 +<a name="l00243"></a><a class="code" href="classVersion.html#a0">00243</a> <a class="code" href="classVersion.html#a0">Version::Version</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> revision, <span class="keywordtype">int</span> build, <span class="keywordtype">int</span> flags) : Major(major), Minor(minor), Revision(revision), Build(build), Flags(flags) { }; +00244 +00245 <span class="comment">// admin is a simple class for holding a server's administrative info</span> 00246 -<a name="l00247"></a><a class="code" href="classRequest.html#a2">00247</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a2">Request::GetSource</a>() -00248 { -00249 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p1">source</a>; -00250 } -00251 -<a name="l00252"></a><a class="code" href="classRequest.html#a3">00252</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a3">Request::GetDest</a>() -00253 { -00254 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p2">dest</a>; -00255 } -00256 -<a name="l00257"></a><a class="code" href="classRequest.html#a4">00257</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a4">Request::Send</a>() -00258 { -00259 <span class="keywordflow">if</span> (this-><a class="code" href="classRequest.html#p2">dest</a>) -00260 { -00261 <span class="keywordflow">return</span> <a class="code" href="classRequest.html#p2">dest</a>-><a class="code" href="classModule.html#a46">OnRequest</a>(<span class="keyword">this</span>); -00262 } -00263 <span class="keywordflow">else</span> -00264 { -00265 <span class="keywordflow">return</span> NULL; -00266 } -00267 } -00268 -<a name="l00269"></a><a class="code" href="classEvent.html#a0">00269</a> <a class="code" href="classEvent.html#a0">Event::Event</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, std::string eventid) : data(anydata), source(src), id(eventid) { }; -00270 -<a name="l00271"></a><a class="code" href="classEvent.html#a1">00271</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a1">Event::GetData</a>() -00272 { -00273 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p0">data</a>; -00274 } -00275 -<a name="l00276"></a><a class="code" href="classEvent.html#a2">00276</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classEvent.html#a2">Event::GetSource</a>() -00277 { -00278 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p1">source</a>; -00279 } -00280 -<a name="l00281"></a><a class="code" href="classEvent.html#a4">00281</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a4">Event::Send</a>() -00282 { -00283 <a class="code" href="modules_8h.html#a24">FOREACH_MOD</a> OnEvent(<span class="keyword">this</span>); -00284 <span class="keywordflow">return</span> NULL; -00285 } -00286 -<a name="l00287"></a><a class="code" href="classEvent.html#a3">00287</a> std::string <a class="code" href="classEvent.html#a3">Event::GetEventID</a>() -00288 { -00289 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p2">id</a>; -00290 } -00291 -00292 -00293 <span class="comment">// These declarations define the behavours of the base class Module (which does nothing at all)</span> -<a name="l00294"></a><a class="code" href="classModule.html#a0">00294</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { } -<a name="l00295"></a><a class="code" href="classModule.html#a1">00295</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { } -<a name="l00296"></a><a class="code" href="classModule.html#a3">00296</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a3">Module::OnUserConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } -<a name="l00297"></a><a class="code" href="classModule.html#a4">00297</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a4">Module::OnUserQuit</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } -<a name="l00298"></a><a class="code" href="classModule.html#a5">00298</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserDisconnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } -<a name="l00299"></a><a class="code" href="classModule.html#a6">00299</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } -<a name="l00300"></a><a class="code" href="classModule.html#a7">00300</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } -<a name="l00301"></a><a class="code" href="classModule.html#a8">00301</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketTransmit</a>(std::string &data, std::string serv) { } -<a name="l00302"></a><a class="code" href="classModule.html#a9">00302</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnPacketReceive</a>(std::string &data, std::string serv) { } -<a name="l00303"></a><a class="code" href="classModule.html#a10">00303</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnRehash</a>() { } -<a name="l00304"></a><a class="code" href="classModule.html#a11">00304</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a11">Module::OnServerRaw</a>(std::string &raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { } -<a name="l00305"></a><a class="code" href="classModule.html#a13">00305</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a13">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; } -<a name="l00306"></a><a class="code" href="classModule.html#a12">00306</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; } -<a name="l00307"></a><a class="code" href="classModule.html#a2">00307</a> <a class="code" href="classVersion.html">Version</a> <a class="code" href="classModule.html#a2">Module::GetVersion</a>() { <span class="keywordflow">return</span> <a class="code" href="classVersion.html">Version</a>(1,0,0,0,<a class="code" href="modules_8h.html#a21">VF_VENDOR</a>); } -<a name="l00308"></a><a class="code" href="classModule.html#a16">00308</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a16">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00309"></a><a class="code" href="classModule.html#a17">00309</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a17">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00310"></a><a class="code" href="classModule.html#a18">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a18">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { }; -<a name="l00311"></a><a class="code" href="classModule.html#a19">00311</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnUserPreInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel) { <span class="keywordflow">return</span> 0; }; -<a name="l00312"></a><a class="code" href="classModule.html#a20">00312</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a20">Module::OnUserPreMessage</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; -<a name="l00313"></a><a class="code" href="classModule.html#a21">00313</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a21">Module::OnUserPreNotice</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; -<a name="l00314"></a><a class="code" href="classModule.html#a22">00314</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a22">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; }; -<a name="l00315"></a><a class="code" href="classModule.html#a23">00315</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a23">Module::OnUserPostNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string oldnick) { }; -<a name="l00316"></a><a class="code" href="classModule.html#a24">00316</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a24">Module::OnAccessCheck</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel,<span class="keywordtype">int</span> access_type) { <span class="keywordflow">return</span> <a class="code" href="modules_8h.html#a8">ACR_DEFAULT</a>; }; -<a name="l00317"></a><a class="code" href="classModule.html#a25">00317</a> <a class="code" href="modules_8h.html#a32">string_list</a> <a class="code" href="classModule.html#a25">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; } -<a name="l00318"></a><a class="code" href="classModule.html#a26">00318</a> <a class="code" href="modules_8h.html#a32">string_list</a> <a class="code" href="classModule.html#a26">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; } -<a name="l00319"></a><a class="code" href="classModule.html#a27">00319</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a27">Module::On005Numeric</a>(std::string &output) { }; -<a name="l00320"></a><a class="code" href="classModule.html#a28">00320</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a28">Module::OnKill</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest, std::string reason) { <span class="keywordflow">return</span> 0; }; -<a name="l00321"></a><a class="code" href="classModule.html#a29">00321</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a29">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,std::string name) { }; -<a name="l00322"></a><a class="code" href="classModule.html#a30">00322</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a30">Module::OnBackgroundTimer</a>(time_t curtime) { }; -<a name="l00323"></a><a class="code" href="classModule.html#a31">00323</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a31">Module::OnSendList</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel, <span class="keywordtype">char</span> mode) { }; -<a name="l00324"></a><a class="code" href="classModule.html#a32">00324</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a32">Module::OnPreCommand</a>(std::string command, <span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) { <span class="keywordflow">return</span> 0; }; -<a name="l00325"></a><a class="code" href="classModule.html#a33">00325</a> <span class="keywordtype">bool</span> <a class="code" href="classModule.html#a33">Module::OnCheckReady</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }; -<a name="l00326"></a><a class="code" href="classModule.html#a34">00326</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a34">Module::OnUserRegister</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00327"></a><a class="code" href="classModule.html#a14">00327</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a14">Module::OnUserPreKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { <span class="keywordflow">return</span> 0; }; -<a name="l00328"></a><a class="code" href="classModule.html#a15">00328</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnUserKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { }; -<a name="l00329"></a><a class="code" href="classModule.html#a35">00329</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a35">Module::OnRawMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keywordtype">char</span> mode, std::string param, <span class="keywordtype">bool</span> adding, <span class="keywordtype">int</span> pcnt) { <span class="keywordflow">return</span> 0; }; -<a name="l00330"></a><a class="code" href="classModule.html#a36">00330</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a36">Module::OnCheckInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; -<a name="l00331"></a><a class="code" href="classModule.html#a37">00331</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a37">Module::OnCheckKey</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string keygiven) { <span class="keywordflow">return</span> 0; }; -<a name="l00332"></a><a class="code" href="classModule.html#a38">00332</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a38">Module::OnCheckLimit</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; -<a name="l00333"></a><a class="code" href="classModule.html#a39">00333</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a39">Module::OnCheckBan</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; -<a name="l00334"></a><a class="code" href="classModule.html#a40">00334</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a40">Module::OnStats</a>(<span class="keywordtype">char</span> symbol) { }; -<a name="l00335"></a><a class="code" href="classModule.html#a41">00335</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a41">Module::OnChangeLocalUserHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; }; -<a name="l00336"></a><a class="code" href="classModule.html#a42">00336</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a42">Module::OnChangeLocalUserGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; }; -<a name="l00337"></a><a class="code" href="classModule.html#a43">00337</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a43">Module::OnLocalTopicChange</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string topic) { <span class="keywordflow">return</span> 0; }; -<a name="l00338"></a><a class="code" href="classModule.html#a44">00338</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a44">Module::OnMeshToken</a>(<span class="keywordtype">char</span> token,string_list params,<a class="code" href="classserverrec.html">serverrec</a>* source,<a class="code" href="classserverrec.html">serverrec</a>* reply, std::string tcp_host,std::string ipaddr,<span class="keywordtype">int</span> port) { <span class="keywordflow">return</span> 0; }; -<a name="l00339"></a><a class="code" href="classModule.html#a45">00339</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a45">Module::OnEvent</a>(<a class="code" href="classEvent.html">Event</a>* event) { <span class="keywordflow">return</span>; }; -<a name="l00340"></a><a class="code" href="classModule.html#a46">00340</a> <span class="keywordtype">char</span>* <a class="code" href="classModule.html#a46">Module::OnRequest</a>(<a class="code" href="classRequest.html">Request</a>* request) { <span class="keywordflow">return</span> NULL; }; -<a name="l00341"></a><a class="code" href="classModule.html#a47">00341</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a47">Module::OnOperCompare</a>(std::string password, std::string input) { <span class="keywordflow">return</span> 0; }; -<a name="l00342"></a><a class="code" href="classModule.html#a48">00342</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a48">Module::OnGlobalOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00343"></a><a class="code" href="classModule.html#a49">00343</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a49">Module::OnGlobalConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; -<a name="l00344"></a><a class="code" href="classModule.html#a50">00344</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a50">Module::OnAddBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; }; -<a name="l00345"></a><a class="code" href="classModule.html#a51">00345</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a51">Module::OnDelBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; }; -<a name="l00346"></a><a class="code" href="classModule.html#a52">00346</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a52">Module::OnRawSocketAccept</a>(<span class="keywordtype">int</span> fd, std::string ip, <span class="keywordtype">int</span> localport) { }; -<a name="l00347"></a><a class="code" href="classModule.html#a53">00347</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a53">Module::OnRawSocketWrite</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">int</span> count) { <span class="keywordflow">return</span> 0; }; -<a name="l00348"></a><a class="code" href="classModule.html#a54">00348</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a54">Module::OnRawSocketClose</a>(<span class="keywordtype">int</span> fd) { }; -<a name="l00349"></a><a class="code" href="classModule.html#a55">00349</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a55">Module::OnRawSocketRead</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keywordtype">int</span> &readresult) { <span class="keywordflow">return</span> 0; }; -00350 -00351 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span> -00352 <span class="comment">// exports in the core</span> -00353 <span class="comment">//</span> -00354 -<a name="l00355"></a><a class="code" href="classServer.html#a0">00355</a> <a class="code" href="classServer.html#a0">Server::Server</a>() -00356 { -00357 } -00358 -<a name="l00359"></a><a class="code" href="classServer.html#a1">00359</a> <a class="code" href="classServer.html#a1">Server::~Server</a>() -00360 { -00361 } -00362 -<a name="l00363"></a><a class="code" href="classServer.html#a2">00363</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s) -00364 { -00365 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str()); +<a name="l00247"></a><a class="code" href="classAdmin.html#a0">00247</a> <a class="code" href="classAdmin.html#a0">Admin::Admin</a>(std::string name, std::string email, std::string nick) : Name(name), Email(email), Nick(nick) { }; +00248 +<a name="l00249"></a><a class="code" href="classRequest.html#a0">00249</a> <a class="code" href="classRequest.html#a0">Request::Request</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, <a class="code" href="classModule.html">Module</a>* dst) : data(anydata), source(src), dest(dst) { }; +00250 +<a name="l00251"></a><a class="code" href="classRequest.html#a1">00251</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a1">Request::GetData</a>() +00252 { +00253 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p0">data</a>; +00254 } +00255 +<a name="l00256"></a><a class="code" href="classRequest.html#a2">00256</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a2">Request::GetSource</a>() +00257 { +00258 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p1">source</a>; +00259 } +00260 +<a name="l00261"></a><a class="code" href="classRequest.html#a3">00261</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classRequest.html#a3">Request::GetDest</a>() +00262 { +00263 <span class="keywordflow">return</span> this-><a class="code" href="classRequest.html#p2">dest</a>; +00264 } +00265 +<a name="l00266"></a><a class="code" href="classRequest.html#a4">00266</a> <span class="keywordtype">char</span>* <a class="code" href="classRequest.html#a4">Request::Send</a>() +00267 { +00268 <span class="keywordflow">if</span> (this-><a class="code" href="classRequest.html#p2">dest</a>) +00269 { +00270 <span class="keywordflow">return</span> <a class="code" href="classRequest.html#p2">dest</a>-><a class="code" href="classModule.html#a46">OnRequest</a>(<span class="keyword">this</span>); +00271 } +00272 <span class="keywordflow">else</span> +00273 { +00274 <span class="keywordflow">return</span> NULL; +00275 } +00276 } +00277 +<a name="l00278"></a><a class="code" href="classEvent.html#a0">00278</a> <a class="code" href="classEvent.html#a0">Event::Event</a>(<span class="keywordtype">char</span>* anydata, <a class="code" href="classModule.html">Module</a>* src, std::string eventid) : data(anydata), source(src), id(eventid) { }; +00279 +<a name="l00280"></a><a class="code" href="classEvent.html#a1">00280</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a1">Event::GetData</a>() +00281 { +00282 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p0">data</a>; +00283 } +00284 +<a name="l00285"></a><a class="code" href="classEvent.html#a2">00285</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classEvent.html#a2">Event::GetSource</a>() +00286 { +00287 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p1">source</a>; +00288 } +00289 +<a name="l00290"></a><a class="code" href="classEvent.html#a4">00290</a> <span class="keywordtype">char</span>* <a class="code" href="classEvent.html#a4">Event::Send</a>() +00291 { +00292 <a class="code" href="modules_8h.html#a24">FOREACH_MOD</a> OnEvent(<span class="keyword">this</span>); +00293 <span class="keywordflow">return</span> NULL; +00294 } +00295 +<a name="l00296"></a><a class="code" href="classEvent.html#a3">00296</a> std::string <a class="code" href="classEvent.html#a3">Event::GetEventID</a>() +00297 { +00298 <span class="keywordflow">return</span> this-><a class="code" href="classEvent.html#p2">id</a>; +00299 } +00300 +00301 +00302 <span class="comment">// These declarations define the behavours of the base class Module (which does nothing at all)</span> +<a name="l00303"></a><a class="code" href="classModule.html#a0">00303</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { } +<a name="l00304"></a><a class="code" href="classModule.html#a1">00304</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { } +<a name="l00305"></a><a class="code" href="classModule.html#a3">00305</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a3">Module::OnUserConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00306"></a><a class="code" href="classModule.html#a4">00306</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a4">Module::OnUserQuit</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00307"></a><a class="code" href="classModule.html#a5">00307</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserDisconnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00308"></a><a class="code" href="classModule.html#a6">00308</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } +<a name="l00309"></a><a class="code" href="classModule.html#a7">00309</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { } +<a name="l00310"></a><a class="code" href="classModule.html#a8">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketTransmit</a>(std::string &data, std::string serv) { } +<a name="l00311"></a><a class="code" href="classModule.html#a9">00311</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnPacketReceive</a>(std::string &data, std::string serv) { } +<a name="l00312"></a><a class="code" href="classModule.html#a10">00312</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnRehash</a>() { } +<a name="l00313"></a><a class="code" href="classModule.html#a11">00313</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a11">Module::OnServerRaw</a>(std::string &raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { } +<a name="l00314"></a><a class="code" href="classModule.html#a13">00314</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a13">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; } +<a name="l00315"></a><a class="code" href="classModule.html#a12">00315</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; } +<a name="l00316"></a><a class="code" href="classModule.html#a2">00316</a> <a class="code" href="classVersion.html">Version</a> <a class="code" href="classModule.html#a2">Module::GetVersion</a>() { <span class="keywordflow">return</span> <a class="code" href="classVersion.html">Version</a>(1,0,0,0,<a class="code" href="modules_8h.html#a21">VF_VENDOR</a>); } +<a name="l00317"></a><a class="code" href="classModule.html#a16">00317</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a16">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00318"></a><a class="code" href="classModule.html#a17">00318</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a17">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00319"></a><a class="code" href="classModule.html#a18">00319</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a18">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { }; +<a name="l00320"></a><a class="code" href="classModule.html#a19">00320</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnUserPreInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel) { <span class="keywordflow">return</span> 0; }; +<a name="l00321"></a><a class="code" href="classModule.html#a20">00321</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a20">Module::OnUserPreMessage</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; +<a name="l00322"></a><a class="code" href="classModule.html#a21">00322</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a21">Module::OnUserPreNotice</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; }; +<a name="l00323"></a><a class="code" href="classModule.html#a22">00323</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a22">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; }; +<a name="l00324"></a><a class="code" href="classModule.html#a23">00324</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a23">Module::OnUserPostNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string oldnick) { }; +<a name="l00325"></a><a class="code" href="classModule.html#a24">00325</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a24">Module::OnAccessCheck</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel,<span class="keywordtype">int</span> access_type) { <span class="keywordflow">return</span> <a class="code" href="modules_8h.html#a8">ACR_DEFAULT</a>; }; +<a name="l00326"></a><a class="code" href="classModule.html#a25">00326</a> <a class="code" href="modules_8h.html#a32">string_list</a> <a class="code" href="classModule.html#a25">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; } +<a name="l00327"></a><a class="code" href="classModule.html#a26">00327</a> <a class="code" href="modules_8h.html#a32">string_list</a> <a class="code" href="classModule.html#a26">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a32">string_list</a> empty; <span class="keywordflow">return</span> empty; } +<a name="l00328"></a><a class="code" href="classModule.html#a27">00328</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a27">Module::On005Numeric</a>(std::string &output) { }; +<a name="l00329"></a><a class="code" href="classModule.html#a28">00329</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a28">Module::OnKill</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest, std::string reason) { <span class="keywordflow">return</span> 0; }; +<a name="l00330"></a><a class="code" href="classModule.html#a29">00330</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a29">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,std::string name) { }; +<a name="l00331"></a><a class="code" href="classModule.html#a30">00331</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a30">Module::OnBackgroundTimer</a>(time_t curtime) { }; +<a name="l00332"></a><a class="code" href="classModule.html#a31">00332</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a31">Module::OnSendList</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel, <span class="keywordtype">char</span> mode) { }; +<a name="l00333"></a><a class="code" href="classModule.html#a32">00333</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a32">Module::OnPreCommand</a>(std::string command, <span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) { <span class="keywordflow">return</span> 0; }; +<a name="l00334"></a><a class="code" href="classModule.html#a33">00334</a> <span class="keywordtype">bool</span> <a class="code" href="classModule.html#a33">Module::OnCheckReady</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }; +<a name="l00335"></a><a class="code" href="classModule.html#a34">00335</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a34">Module::OnUserRegister</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00336"></a><a class="code" href="classModule.html#a14">00336</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a14">Module::OnUserPreKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { <span class="keywordflow">return</span> 0; }; +<a name="l00337"></a><a class="code" href="classModule.html#a15">00337</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnUserKick</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string reason) { }; +<a name="l00338"></a><a class="code" href="classModule.html#a35">00338</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a35">Module::OnRawMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keywordtype">char</span> mode, std::string param, <span class="keywordtype">bool</span> adding, <span class="keywordtype">int</span> pcnt) { <span class="keywordflow">return</span> 0; }; +<a name="l00339"></a><a class="code" href="classModule.html#a36">00339</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a36">Module::OnCheckInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; +<a name="l00340"></a><a class="code" href="classModule.html#a37">00340</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a37">Module::OnCheckKey</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string keygiven) { <span class="keywordflow">return</span> 0; }; +<a name="l00341"></a><a class="code" href="classModule.html#a38">00341</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a38">Module::OnCheckLimit</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; +<a name="l00342"></a><a class="code" href="classModule.html#a39">00342</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a39">Module::OnCheckBan</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan) { <span class="keywordflow">return</span> 0; }; +<a name="l00343"></a><a class="code" href="classModule.html#a40">00343</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a40">Module::OnStats</a>(<span class="keywordtype">char</span> symbol) { }; +<a name="l00344"></a><a class="code" href="classModule.html#a41">00344</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a41">Module::OnChangeLocalUserHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; }; +<a name="l00345"></a><a class="code" href="classModule.html#a42">00345</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a42">Module::OnChangeLocalUserGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newhost) { <span class="keywordflow">return</span> 0; }; +<a name="l00346"></a><a class="code" href="classModule.html#a43">00346</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a43">Module::OnLocalTopicChange</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, std::string topic) { <span class="keywordflow">return</span> 0; }; +<a name="l00347"></a><a class="code" href="classModule.html#a44">00347</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a44">Module::OnMeshToken</a>(<span class="keywordtype">char</span> token,string_list params,<a class="code" href="classserverrec.html">serverrec</a>* source,<a class="code" href="classserverrec.html">serverrec</a>* reply, std::string tcp_host,std::string ipaddr,<span class="keywordtype">int</span> port) { <span class="keywordflow">return</span> 0; }; +<a name="l00348"></a><a class="code" href="classModule.html#a45">00348</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a45">Module::OnEvent</a>(<a class="code" href="classEvent.html">Event</a>* event) { <span class="keywordflow">return</span>; }; +<a name="l00349"></a><a class="code" href="classModule.html#a46">00349</a> <span class="keywordtype">char</span>* <a class="code" href="classModule.html#a46">Module::OnRequest</a>(<a class="code" href="classRequest.html">Request</a>* request) { <span class="keywordflow">return</span> NULL; }; +<a name="l00350"></a><a class="code" href="classModule.html#a47">00350</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a47">Module::OnOperCompare</a>(std::string password, std::string input) { <span class="keywordflow">return</span> 0; }; +<a name="l00351"></a><a class="code" href="classModule.html#a48">00351</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a48">Module::OnGlobalOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00352"></a><a class="code" href="classModule.html#a49">00352</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a49">Module::OnGlobalConnect</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { }; +<a name="l00353"></a><a class="code" href="classModule.html#a50">00353</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a50">Module::OnAddBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; }; +<a name="l00354"></a><a class="code" href="classModule.html#a51">00354</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a51">Module::OnDelBan</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classchanrec.html">chanrec</a>* channel,std::string banmask) { <span class="keywordflow">return</span> 0; }; +<a name="l00355"></a><a class="code" href="classModule.html#a52">00355</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a52">Module::OnRawSocketAccept</a>(<span class="keywordtype">int</span> fd, std::string ip, <span class="keywordtype">int</span> localport) { }; +<a name="l00356"></a><a class="code" href="classModule.html#a53">00356</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a53">Module::OnRawSocketWrite</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">int</span> count) { <span class="keywordflow">return</span> 0; }; +<a name="l00357"></a><a class="code" href="classModule.html#a54">00357</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a54">Module::OnRawSocketClose</a>(<span class="keywordtype">int</span> fd) { }; +<a name="l00358"></a><a class="code" href="classModule.html#a55">00358</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a55">Module::OnRawSocketRead</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">char</span>* buffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, <span class="keywordtype">int</span> &readresult) { <span class="keywordflow">return</span> 0; }; +00359 +00360 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span> +00361 <span class="comment">// exports in the core</span> +00362 <span class="comment">//</span> +00363 +<a name="l00364"></a><a class="code" href="classServer.html#a0">00364</a> <a class="code" href="classServer.html#a0">Server::Server</a>() +00365 { 00366 } 00367 -<a name="l00368"></a><a class="code" href="classServer.html#a33">00368</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a33">Server::MatchText</a>(std::string sliteral, std::string spattern) +<a name="l00368"></a><a class="code" href="classServer.html#a1">00368</a> <a class="code" href="classServer.html#a1">Server::~Server</a>() 00369 { -00370 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF]; -00371 strlcpy(literal,sliteral.c_str(),MAXBUF); -00372 strlcpy(pattern,spattern.c_str(),MAXBUF); -00373 <span class="keywordflow">return</span> match(literal,pattern); -00374 } -00375 -<a name="l00376"></a><a class="code" href="classServer.html#a28">00376</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a28">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text) -00377 { -00378 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str()); -00379 } -00380 -<a name="l00381"></a><a class="code" href="classServer.html#a29">00381</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a29">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key) -00382 { -00383 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">false</span>); -00384 } -00385 -<a name="l00386"></a><a class="code" href="classServer.html#a30">00386</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a30">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason) -00387 { -00388 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>); -00389 } -00390 -<a name="l00391"></a><a class="code" href="classServer.html#a38">00391</a> <a class="code" href="modules_8h.html#a33">chanuserlist</a> <a class="code" href="classServer.html#a38">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) -00392 { -00393 <a class="code" href="modules_8h.html#a33">chanuserlist</a> userl; -00394 userl.clear(); -00395 std::vector<char*> *<a class="code" href="channels_8cpp.html#a15">list</a> = chan-><a class="code" href="classchanrec.html#a7">GetUsers</a>(); -00396 <span class="keywordflow">for</span> (std::vector<char*>::iterator i = <a class="code" href="channels_8cpp.html#a15">list</a>->begin(); i != <a class="code" href="channels_8cpp.html#a15">list</a>->end(); i++) -00397 { -00398 <span class="keywordtype">char</span>* o = *i; -00399 userl.push_back((<a class="code" href="classuserrec.html">userrec</a>*)o); -00400 } -00401 <span class="keywordflow">return</span> userl; -00402 } -<a name="l00403"></a><a class="code" href="classServer.html#a31">00403</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname) -00404 { -00405 force_nickchange(user,nickname.c_str()); -00406 } -00407 -<a name="l00408"></a><a class="code" href="classServer.html#a32">00408</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a32">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason) -00409 { -00410 kill_link(user,reason.c_str()); +00370 } +00371 +<a name="l00372"></a><a class="code" href="classServer.html#a2">00372</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s) +00373 { +00374 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str()); +00375 } +00376 +<a name="l00377"></a><a class="code" href="classServer.html#a33">00377</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a33">Server::MatchText</a>(std::string sliteral, std::string spattern) +00378 { +00379 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF]; +00380 strlcpy(literal,sliteral.c_str(),MAXBUF); +00381 strlcpy(pattern,spattern.c_str(),MAXBUF); +00382 <span class="keywordflow">return</span> match(literal,pattern); +00383 } +00384 +<a name="l00385"></a><a class="code" href="classServer.html#a28">00385</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a28">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text) +00386 { +00387 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str()); +00388 } +00389 +<a name="l00390"></a><a class="code" href="classServer.html#a29">00390</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a29">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key) +00391 { +00392 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">false</span>); +00393 } +00394 +<a name="l00395"></a><a class="code" href="classServer.html#a30">00395</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a30">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason) +00396 { +00397 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>); +00398 } +00399 +<a name="l00400"></a><a class="code" href="classServer.html#a38">00400</a> <a class="code" href="modules_8h.html#a33">chanuserlist</a> <a class="code" href="classServer.html#a38">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) +00401 { +00402 <a class="code" href="modules_8h.html#a33">chanuserlist</a> userl; +00403 userl.clear(); +00404 std::vector<char*> *<a class="code" href="channels_8cpp.html#a15">list</a> = chan-><a class="code" href="classchanrec.html#a7">GetUsers</a>(); +00405 <span class="keywordflow">for</span> (std::vector<char*>::iterator i = <a class="code" href="channels_8cpp.html#a15">list</a>->begin(); i != <a class="code" href="channels_8cpp.html#a15">list</a>->end(); i++) +00406 { +00407 <span class="keywordtype">char</span>* o = *i; +00408 userl.push_back((<a class="code" href="classuserrec.html">userrec</a>*)o); +00409 } +00410 <span class="keywordflow">return</span> userl; 00411 } -00412 -<a name="l00413"></a><a class="code" href="classServer.html#a37">00413</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a37">Server::IsUlined</a>(std::string server) -00414 { -00415 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a74">is_uline</a>(server.c_str()); -00416 } -00417 -<a name="l00418"></a><a class="code" href="classServer.html#a34">00418</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a34">Server::CallCommandHandler</a>(std::string commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user) -00419 { -00420 call_handler(commandname.c_str(),parameters,pcnt,user); -00421 } -00422 -<a name="l00423"></a><a class="code" href="classServer.html#a3">00423</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a3">Server::Log</a>(<span class="keywordtype">int</span> level, std::string s) -00424 { -00425 log(level,<span class="stringliteral">"%s"</span>,s.c_str()); -00426 } -00427 -<a name="l00428"></a><a class="code" href="classServer.html#a26">00428</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a26">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams, <span class="keywordtype">char</span>* source) -00429 { -00430 <a class="code" href="modules_8h.html#a35">createcommand</a>(cmd,f,flags,minparams,source); -00431 } -00432 -<a name="l00433"></a><a class="code" href="classServer.html#a27">00433</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a27">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) -00434 { -00435 <a class="code" href="modules_8h.html#a36">server_mode</a>(parameters,pcnt,user); -00436 } -00437 -<a name="l00438"></a><a class="code" href="classServer.html#a4">00438</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a4">Server::Send</a>(<span class="keywordtype">int</span> Socket, std::string s) -00439 { -00440 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); -00441 } -00442 -<a name="l00443"></a><a class="code" href="classServer.html#a5">00443</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a5">Server::SendServ</a>(<span class="keywordtype">int</span> Socket, std::string s) -00444 { -00445 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); -00446 } -00447 -<a name="l00448"></a><a class="code" href="classServer.html#a7">00448</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s) -00449 { -00450 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str()); -00451 } -00452 -<a name="l00453"></a><a class="code" href="classServer.html#a8">00453</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s) -00454 { -00455 <span class="keywordflow">if</span> (!Source) -00456 { -00457 <span class="comment">// if source is NULL, then the message originates from the local server</span> -00458 Write(Dest-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s %s"</span>,this->GetServerName().c_str(),s.c_str()); -00459 } -00460 <span class="keywordflow">else</span> -00461 { -00462 <span class="comment">// otherwise it comes from the user specified</span> -00463 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str()); -00464 } -00465 } -00466 -<a name="l00467"></a><a class="code" href="classServer.html#a6">00467</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendChannelServerNotice</a>(std::string ServName, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string text) -00468 { -00469 WriteChannelWithServ((<span class="keywordtype">char</span>*)ServName.c_str(), Channel, <span class="stringliteral">"%s"</span>, text.c_str()); -00470 } -00471 -<a name="l00472"></a><a class="code" href="classServer.html#a9">00472</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a9">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender) -00473 { -00474 <span class="keywordflow">if</span> (IncludeSender) -00475 { -00476 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); -00477 } -00478 <span class="keywordflow">else</span> -00479 { -00480 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); -00481 } -00482 } -00483 -<a name="l00484"></a><a class="code" href="classServer.html#a10">00484</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a10">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2) -00485 { -00486 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0); -00487 } -00488 -<a name="l00489"></a><a class="code" href="classServer.html#a11">00489</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender) -00490 { -00491 <span class="keywordflow">if</span> (IncludeSender) -00492 { -00493 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str()); -00494 } -00495 <span class="keywordflow">else</span> -00496 { -00497 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str()); -00498 } -00499 } -00500 -<a name="l00501"></a><a class="code" href="classServer.html#a12">00501</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a12">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text) -00502 { -00503 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str()); -00504 } -00505 -<a name="l00506"></a><a class="code" href="classServer.html#a35">00506</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a35">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host) -00507 { -00508 <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str()); -00509 } -00510 -<a name="l00511"></a><a class="code" href="classServer.html#a36">00511</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a36">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos) -00512 { -00513 <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str()); -00514 } -00515 -<a name="l00516"></a><a class="code" href="classServer.html#a13">00516</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a13">Server::IsNick</a>(std::string nick) -00517 { -00518 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0); -00519 } -00520 -<a name="l00521"></a><a class="code" href="classServer.html#a15">00521</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a15">Server::FindNick</a>(std::string nick) -00522 { -00523 <span class="keywordflow">return</span> Find(nick); -00524 } -00525 -<a name="l00526"></a><a class="code" href="classServer.html#a16">00526</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a16">Server::FindDescriptor</a>(<span class="keywordtype">int</span> socket) -00527 { -00528 <span class="keywordflow">return</span> (socket < 65536 ? <a class="code" href="modules_8cpp.html#a37">fd_ref_table</a>[socket] : NULL); -00529 } -00530 -<a name="l00531"></a><a class="code" href="classServer.html#a17">00531</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a17">Server::FindChannel</a>(std::string channel) -00532 { -00533 <span class="keywordflow">return</span> FindChan(channel.c_str()); -00534 } -00535 -<a name="l00536"></a><a class="code" href="classServer.html#a18">00536</a> std::string <a class="code" href="classServer.html#a18">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) -00537 { -00538 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan); -00539 } -00540 -<a name="l00541"></a><a class="code" href="classServer.html#a19">00541</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a19">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) -00542 { -00543 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan); -00544 } -00545 -<a name="l00546"></a><a class="code" href="classServer.html#a20">00546</a> std::string <a class="code" href="classServer.html#a20">Server::GetServerName</a>() -00547 { -00548 <span class="keywordflow">return</span> getservername(); -00549 } -00550 -<a name="l00551"></a><a class="code" href="classServer.html#a21">00551</a> std::string <a class="code" href="classServer.html#a21">Server::GetNetworkName</a>() -00552 { -00553 <span class="keywordflow">return</span> getnetworkname(); -00554 } -00555 -<a name="l00556"></a><a class="code" href="classServer.html#a22">00556</a> std::string <a class="code" href="classServer.html#a22">Server::GetServerDescription</a>() -00557 { -00558 <span class="keywordflow">return</span> getserverdesc(); -00559 } -00560 -<a name="l00561"></a><a class="code" href="classServer.html#a23">00561</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a23">Server::GetAdmin</a>() -00562 { -00563 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick()); -00564 } -00565 -00566 -00567 -<a name="l00568"></a><a class="code" href="classServer.html#a24">00568</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a24">Server::AddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_when_on, <span class="keywordtype">int</span> params_when_off) -00569 { -00570 <span class="keywordflow">if</span> (((modechar >= <span class="charliteral">'A'</span>) && (modechar <= 'Z')) || ((modechar >= <span class="charliteral">'a'</span>) && (modechar <= <span class="charliteral">'z'</span>))) -00571 { -00572 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>) -00573 { -00574 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Modes of type MT_SERVER are reserved for future expansion"</span>); -00575 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00576 } -00577 <span class="keywordflow">if</span> (((params_when_on>0) || (params_when_off>0)) && (type == <a class="code" href="modules_8h.html#a6">MT_CLIENT</a>)) -00578 { -00579 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Parameters on MT_CLIENT modes are not supported"</span>); -00580 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00581 } -00582 <span class="keywordflow">if</span> ((params_when_on>1) || (params_when_off>1)) -00583 { -00584 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"</span>); -00585 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00586 } -00587 <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a58">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off); -00588 } -00589 <span class="keywordflow">else</span> -00590 { -00591 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Muppet modechar detected."</span>); -00592 } -00593 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00594 } -00595 -<a name="l00596"></a><a class="code" href="classServer.html#a25">00596</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a25">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar) -00597 { -00598 <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a58">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1); -00599 <span class="keywordflow">if</span> (res) -00600 <a class="code" href="modules_8cpp.html#a59">ModeMakeList</a>(modechar); -00601 <span class="keywordflow">return</span> res; -00602 } -00603 -<a name="l00604"></a><a class="code" href="classServer.html#a14">00604</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a14">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c) -00605 { -00606 <span class="keywordflow">return</span> usercount(c); -00607 } -00608 -00609 -<a name="l00610"></a><a class="code" href="classServer.html#a39">00610</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a39">Server::UserToPseudo</a>(<a class="code" href="classuserrec.html">userrec</a>* user,std::string message) -00611 { -00612 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_fd = user-><a class="code" href="classconnection.html#o0">fd</a>; -00613 user-><a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>; -00614 user-><a class="code" href="classuserrec.html#a10">ClearBuffer</a>(); -00615 Write(old_fd,<span class="stringliteral">"ERROR :Closing link (%s@%s) [%s]"</span>,user-><a class="code" href="classuserrec.html#o1">ident</a>,user-><a class="code" href="classconnection.html#o1">host</a>,message.c_str()); -00616 <span class="preprocessor">#ifdef USE_KQUEUE</span> -00617 <span class="preprocessor"></span> <span class="keyword">struct </span>kevent ke; -00618 EV_SET(&ke, old_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); -00619 <span class="keywordtype">int</span> i = kevent(kq, &ke, 1, 0, 0, NULL); -00620 <span class="keywordflow">if</span> (i == -1) -00621 { -00622 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"kqueue: Failed to remove user from queue!"</span>); -00623 } -00624 <span class="preprocessor">#endif</span> -00625 <span class="preprocessor"></span> shutdown(old_fd,2); -00626 close(old_fd); -00627 } -00628 -<a name="l00629"></a><a class="code" href="classServer.html#a40">00629</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a40">Server::PseudoToUser</a>(<a class="code" href="classuserrec.html">userrec</a>* alive,<a class="code" href="classuserrec.html">userrec</a>* zombie,std::string message) -00630 { -00631 zombie-><a class="code" href="classconnection.html#o0">fd</a> = alive-><a class="code" href="classconnection.html#o0">fd</a>; -00632 alive-><a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>; -00633 alive-><a class="code" href="classuserrec.html#a10">ClearBuffer</a>(); -00634 Write(zombie-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s!%s@%s NICK %s"</span>,alive-><a class="code" href="classuserrec.html#o0">nick</a>,alive-><a class="code" href="classuserrec.html#o1">ident</a>,alive-><a class="code" href="classconnection.html#o1">host</a>,zombie-><a class="code" href="classuserrec.html#o0">nick</a>); -00635 kill_link(alive,message.c_str()); -00636 <a class="code" href="modules_8cpp.html#a37">fd_ref_table</a>[zombie-><a class="code" href="classconnection.html#o0">fd</a>] = zombie; -00637 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != MAXCHANS; i++) -00638 { -00639 <span class="keywordflow">if</span> (zombie->chans[i].channel != NULL) -00640 { -00641 <span class="keywordflow">if</span> (zombie->chans[i].channel->name) -00642 { -00643 <a class="code" href="classchanrec.html">chanrec</a>* Ptr = zombie-><a class="code" href="classuserrec.html#o5">chans</a>[i].<a class="code" href="classucrec.html#o1">channel</a>; -00644 WriteFrom(zombie->fd,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-><a class="code" href="classchanrec.html#o0">name</a>); -00645 <span class="keywordflow">if</span> (Ptr-><a class="code" href="classchanrec.html#o5">topicset</a>) -00646 { -00647 WriteServ(zombie->fd,<span class="stringliteral">"332 %s %s :%s"</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>, Ptr-><a class="code" href="classchanrec.html#o3">topic</a>); -00648 WriteServ(zombie->fd,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>, Ptr-><a class="code" href="classchanrec.html#o6">setby</a>, Ptr-><a class="code" href="classchanrec.html#o5">topicset</a>); -00649 } -00650 userlist(zombie,Ptr); -00651 WriteServ(zombie->fd,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>); -00652 -00653 } -00654 } -00655 } -00656 -00657 } -00658 -<a name="l00659"></a><a class="code" href="classServer.html#a41">00659</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a41">Server::AddGLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) -00660 { -00661 <a class="code" href="xline_8h.html#a1">add_gline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); -00662 } -00663 -<a name="l00664"></a><a class="code" href="classServer.html#a42">00664</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a42">Server::AddQLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string nickname) -00665 { -00666 <a class="code" href="xline_8h.html#a2">add_qline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), nickname.c_str()); -00667 } -00668 -<a name="l00669"></a><a class="code" href="classServer.html#a43">00669</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a43">Server::AddZLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string ipaddr) -00670 { -00671 <a class="code" href="xline_8h.html#a3">add_zline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), ipaddr.c_str()); -00672 } -00673 -<a name="l00674"></a><a class="code" href="classServer.html#a44">00674</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a44">Server::AddKLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) -00675 { -00676 <a class="code" href="xline_8h.html#a4">add_kline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); +<a name="l00412"></a><a class="code" href="classServer.html#a31">00412</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname) +00413 { +00414 force_nickchange(user,nickname.c_str()); +00415 } +00416 +<a name="l00417"></a><a class="code" href="classServer.html#a32">00417</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a32">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason) +00418 { +00419 kill_link(user,reason.c_str()); +00420 } +00421 +<a name="l00422"></a><a class="code" href="classServer.html#a37">00422</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a37">Server::IsUlined</a>(std::string server) +00423 { +00424 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a75">is_uline</a>(server.c_str()); +00425 } +00426 +<a name="l00427"></a><a class="code" href="classServer.html#a34">00427</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a34">Server::CallCommandHandler</a>(std::string commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user) +00428 { +00429 call_handler(commandname.c_str(),parameters,pcnt,user); +00430 } +00431 +<a name="l00432"></a><a class="code" href="classServer.html#a3">00432</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a3">Server::Log</a>(<span class="keywordtype">int</span> level, std::string s) +00433 { +00434 log(level,<span class="stringliteral">"%s"</span>,s.c_str()); +00435 } +00436 +<a name="l00437"></a><a class="code" href="classServer.html#a26">00437</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a26">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams, <span class="keywordtype">char</span>* source) +00438 { +00439 <a class="code" href="modules_8h.html#a35">createcommand</a>(cmd,f,flags,minparams,source); +00440 } +00441 +<a name="l00442"></a><a class="code" href="classServer.html#a27">00442</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a27">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user) +00443 { +00444 <a class="code" href="modules_8h.html#a36">server_mode</a>(parameters,pcnt,user); +00445 } +00446 +<a name="l00447"></a><a class="code" href="classServer.html#a4">00447</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a4">Server::Send</a>(<span class="keywordtype">int</span> Socket, std::string s) +00448 { +00449 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); +00450 } +00451 +<a name="l00452"></a><a class="code" href="classServer.html#a5">00452</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a5">Server::SendServ</a>(<span class="keywordtype">int</span> Socket, std::string s) +00453 { +00454 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str()); +00455 } +00456 +<a name="l00457"></a><a class="code" href="classServer.html#a7">00457</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s) +00458 { +00459 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str()); +00460 } +00461 +<a name="l00462"></a><a class="code" href="classServer.html#a8">00462</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s) +00463 { +00464 <span class="keywordflow">if</span> (!Source) +00465 { +00466 <span class="comment">// if source is NULL, then the message originates from the local server</span> +00467 Write(Dest-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s %s"</span>,this->GetServerName().c_str(),s.c_str()); +00468 } +00469 <span class="keywordflow">else</span> +00470 { +00471 <span class="comment">// otherwise it comes from the user specified</span> +00472 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str()); +00473 } +00474 } +00475 +<a name="l00476"></a><a class="code" href="classServer.html#a6">00476</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendChannelServerNotice</a>(std::string ServName, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string text) +00477 { +00478 WriteChannelWithServ((<span class="keywordtype">char</span>*)ServName.c_str(), Channel, <span class="stringliteral">"%s"</span>, text.c_str()); +00479 } +00480 +<a name="l00481"></a><a class="code" href="classServer.html#a9">00481</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a9">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender) +00482 { +00483 <span class="keywordflow">if</span> (IncludeSender) +00484 { +00485 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); +00486 } +00487 <span class="keywordflow">else</span> +00488 { +00489 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str()); +00490 } +00491 } +00492 +<a name="l00493"></a><a class="code" href="classServer.html#a10">00493</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a10">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2) +00494 { +00495 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0); +00496 } +00497 +<a name="l00498"></a><a class="code" href="classServer.html#a11">00498</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender) +00499 { +00500 <span class="keywordflow">if</span> (IncludeSender) +00501 { +00502 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str()); +00503 } +00504 <span class="keywordflow">else</span> +00505 { +00506 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str()); +00507 } +00508 } +00509 +<a name="l00510"></a><a class="code" href="classServer.html#a12">00510</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a12">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text) +00511 { +00512 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str()); +00513 } +00514 +<a name="l00515"></a><a class="code" href="classServer.html#a35">00515</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a35">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host) +00516 { +00517 <a class="code" href="message_8h.html#a9">ChangeDisplayedHost</a>(user,host.c_str()); +00518 } +00519 +<a name="l00520"></a><a class="code" href="classServer.html#a36">00520</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a36">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos) +00521 { +00522 <a class="code" href="message_8h.html#a8">ChangeName</a>(user,gecos.c_str()); +00523 } +00524 +<a name="l00525"></a><a class="code" href="classServer.html#a13">00525</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a13">Server::IsNick</a>(std::string nick) +00526 { +00527 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a11">isnick</a>(nick.c_str()) != 0); +00528 } +00529 +<a name="l00530"></a><a class="code" href="classServer.html#a15">00530</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a15">Server::FindNick</a>(std::string nick) +00531 { +00532 <span class="keywordflow">return</span> Find(nick); +00533 } +00534 +<a name="l00535"></a><a class="code" href="classServer.html#a16">00535</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a16">Server::FindDescriptor</a>(<span class="keywordtype">int</span> socket) +00536 { +00537 <span class="keywordflow">return</span> (socket < 65536 ? <a class="code" href="modules_8cpp.html#a36">fd_ref_table</a>[socket] : NULL); +00538 } +00539 +<a name="l00540"></a><a class="code" href="classServer.html#a17">00540</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a17">Server::FindChannel</a>(std::string channel) +00541 { +00542 <span class="keywordflow">return</span> FindChan(channel.c_str()); +00543 } +00544 +<a name="l00545"></a><a class="code" href="classServer.html#a18">00545</a> std::string <a class="code" href="classServer.html#a18">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) +00546 { +00547 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a12">cmode</a>(User,Chan); +00548 } +00549 +<a name="l00550"></a><a class="code" href="classServer.html#a19">00550</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a19">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan) +00551 { +00552 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">has_channel</a>(User,Chan); +00553 } +00554 +<a name="l00555"></a><a class="code" href="classServer.html#a20">00555</a> std::string <a class="code" href="classServer.html#a20">Server::GetServerName</a>() +00556 { +00557 <span class="keywordflow">return</span> getservername(); +00558 } +00559 +<a name="l00560"></a><a class="code" href="classServer.html#a21">00560</a> std::string <a class="code" href="classServer.html#a21">Server::GetNetworkName</a>() +00561 { +00562 <span class="keywordflow">return</span> getnetworkname(); +00563 } +00564 +<a name="l00565"></a><a class="code" href="classServer.html#a22">00565</a> std::string <a class="code" href="classServer.html#a22">Server::GetServerDescription</a>() +00566 { +00567 <span class="keywordflow">return</span> getserverdesc(); +00568 } +00569 +<a name="l00570"></a><a class="code" href="classServer.html#a23">00570</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a23">Server::GetAdmin</a>() +00571 { +00572 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick()); +00573 } +00574 +00575 +00576 +<a name="l00577"></a><a class="code" href="classServer.html#a24">00577</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a24">Server::AddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_when_on, <span class="keywordtype">int</span> params_when_off) +00578 { +00579 <span class="keywordflow">if</span> (((modechar >= <span class="charliteral">'A'</span>) && (modechar <= 'Z')) || ((modechar >= <span class="charliteral">'a'</span>) && (modechar <= <span class="charliteral">'z'</span>))) +00580 { +00581 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>) +00582 { +00583 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Modes of type MT_SERVER are reserved for future expansion"</span>); +00584 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00585 } +00586 <span class="keywordflow">if</span> (((params_when_on>0) || (params_when_off>0)) && (type == <a class="code" href="modules_8h.html#a6">MT_CLIENT</a>)) +00587 { +00588 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Parameters on MT_CLIENT modes are not supported"</span>); +00589 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00590 } +00591 <span class="keywordflow">if</span> ((params_when_on>1) || (params_when_off>1)) +00592 { +00593 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"</span>); +00594 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00595 } +00596 <span class="keywordflow">return</span> <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(modechar,type,requires_oper,params_when_on,params_when_off); +00597 } +00598 <span class="keywordflow">else</span> +00599 { +00600 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"*** API ERROR *** Muppet modechar detected."</span>); +00601 } +00602 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00603 } +00604 +<a name="l00605"></a><a class="code" href="classServer.html#a25">00605</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a25">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar) +00606 { +00607 <span class="keywordtype">bool</span> res = <a class="code" href="modules_8cpp.html#a57">DoAddExtendedMode</a>(modechar,<a class="code" href="modules_8h.html#a5">MT_CHANNEL</a>,<span class="keyword">false</span>,1,1); +00608 <span class="keywordflow">if</span> (res) +00609 <a class="code" href="modules_8cpp.html#a58">ModeMakeList</a>(modechar); +00610 <span class="keywordflow">return</span> res; +00611 } +00612 +<a name="l00613"></a><a class="code" href="classServer.html#a14">00613</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a14">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c) +00614 { +00615 <span class="keywordflow">return</span> usercount(c); +00616 } +00617 +00618 +<a name="l00619"></a><a class="code" href="classServer.html#a39">00619</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a39">Server::UserToPseudo</a>(<a class="code" href="classuserrec.html">userrec</a>* user,std::string message) +00620 { +00621 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_fd = user-><a class="code" href="classconnection.html#o0">fd</a>; +00622 user-><a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>; +00623 user-><a class="code" href="classuserrec.html#a11">ClearBuffer</a>(); +00624 Write(old_fd,<span class="stringliteral">"ERROR :Closing link (%s@%s) [%s]"</span>,user-><a class="code" href="classuserrec.html#o1">ident</a>,user-><a class="code" href="classconnection.html#o1">host</a>,message.c_str()); +00625 <span class="preprocessor">#ifdef USE_KQUEUE</span> +00626 <span class="preprocessor"></span> <span class="keyword">struct </span>kevent ke; +00627 EV_SET(&ke, old_fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); +00628 <span class="keywordtype">int</span> i = kevent(kq, &ke, 1, 0, 0, NULL); +00629 <span class="keywordflow">if</span> (i == -1) +00630 { +00631 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"kqueue: Failed to remove user from queue!"</span>); +00632 } +00633 <span class="preprocessor">#endif</span> +00634 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_EPOLL</span> +00635 <span class="preprocessor"></span> <span class="keyword">struct </span>epoll_event ev; +00636 ev.events = EPOLLIN | EPOLLET; +00637 ev.data.fd = old_fd; +00638 <span class="keywordtype">int</span> i = epoll_ctl(ep, EPOLL_CTL_DEL, old_fd, &ev); +00639 <span class="keywordflow">if</span> (i < 0) +00640 { +00641 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"epoll: List deletion failure!"</span>); +00642 } +00643 <span class="preprocessor">#endif</span> +00644 <span class="preprocessor"></span> +00645 shutdown(old_fd,2); +00646 close(old_fd); +00647 } +00648 +<a name="l00649"></a><a class="code" href="classServer.html#a40">00649</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a40">Server::PseudoToUser</a>(<a class="code" href="classuserrec.html">userrec</a>* alive,<a class="code" href="classuserrec.html">userrec</a>* zombie,std::string message) +00650 { +00651 zombie-><a class="code" href="classconnection.html#o0">fd</a> = alive-><a class="code" href="classconnection.html#o0">fd</a>; +00652 alive-><a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="modules_8h.html#a26">FD_MAGIC_NUMBER</a>; +00653 alive-><a class="code" href="classuserrec.html#a11">ClearBuffer</a>(); +00654 Write(zombie-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s!%s@%s NICK %s"</span>,alive-><a class="code" href="classuserrec.html#o0">nick</a>,alive-><a class="code" href="classuserrec.html#o1">ident</a>,alive-><a class="code" href="classconnection.html#o1">host</a>,zombie-><a class="code" href="classuserrec.html#o0">nick</a>); +00655 kill_link(alive,message.c_str()); +00656 <a class="code" href="modules_8cpp.html#a36">fd_ref_table</a>[zombie-><a class="code" href="classconnection.html#o0">fd</a>] = zombie; +00657 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != MAXCHANS; i++) +00658 { +00659 <span class="keywordflow">if</span> (zombie->chans[i].channel != NULL) +00660 { +00661 <span class="keywordflow">if</span> (zombie->chans[i].channel->name) +00662 { +00663 <a class="code" href="classchanrec.html">chanrec</a>* Ptr = zombie-><a class="code" href="classuserrec.html#o5">chans</a>[i].<a class="code" href="classucrec.html#o1">channel</a>; +00664 WriteFrom(zombie->fd,zombie,<span class="stringliteral">"JOIN %s"</span>,Ptr-><a class="code" href="classchanrec.html#o0">name</a>); +00665 <span class="keywordflow">if</span> (Ptr-><a class="code" href="classchanrec.html#o5">topicset</a>) +00666 { +00667 WriteServ(zombie->fd,<span class="stringliteral">"332 %s %s :%s"</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>, Ptr-><a class="code" href="classchanrec.html#o3">topic</a>); +00668 WriteServ(zombie->fd,<span class="stringliteral">"333 %s %s %s %d"</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>, Ptr-><a class="code" href="classchanrec.html#o6">setby</a>, Ptr-><a class="code" href="classchanrec.html#o5">topicset</a>); +00669 } +00670 userlist(zombie,Ptr); +00671 WriteServ(zombie->fd,<span class="stringliteral">"366 %s %s :End of /NAMES list."</span>, zombie->nick, Ptr-><a class="code" href="classchanrec.html#o0">name</a>); +00672 +00673 } +00674 } +00675 } +00676 00677 } 00678 -<a name="l00679"></a><a class="code" href="classServer.html#a45">00679</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a45">Server::AddELine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) +<a name="l00679"></a><a class="code" href="classServer.html#a41">00679</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a41">Server::AddGLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) 00680 { -00681 <a class="code" href="xline_8h.html#a5">add_eline</a>(<a class="code" href="commands_8h.html#a75">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); +00681 <a class="code" href="xline_8h.html#a1">add_gline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); 00682 } 00683 -<a name="l00684"></a><a class="code" href="classServer.html#a46">00684</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a46">Server::DelGLine</a>(std::string hostmask) +<a name="l00684"></a><a class="code" href="classServer.html#a42">00684</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a42">Server::AddQLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string nickname) 00685 { -00686 <a class="code" href="xline_8h.html#a6">del_gline</a>(hostmask.c_str()); +00686 <a class="code" href="xline_8h.html#a2">add_qline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), nickname.c_str()); 00687 } 00688 -<a name="l00689"></a><a class="code" href="classServer.html#a47">00689</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a47">Server::DelQLine</a>(std::string nickname) +<a name="l00689"></a><a class="code" href="classServer.html#a43">00689</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a43">Server::AddZLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string ipaddr) 00690 { -00691 <a class="code" href="xline_8h.html#a7">del_qline</a>(nickname.c_str()); +00691 <a class="code" href="xline_8h.html#a3">add_zline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), ipaddr.c_str()); 00692 } 00693 -<a name="l00694"></a><a class="code" href="classServer.html#a48">00694</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a48">Server::DelZLine</a>(std::string ipaddr) +<a name="l00694"></a><a class="code" href="classServer.html#a44">00694</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a44">Server::AddKLine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) 00695 { -00696 <a class="code" href="xline_8h.html#a8">del_zline</a>(ipaddr.c_str()); +00696 <a class="code" href="xline_8h.html#a4">add_kline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); 00697 } 00698 -<a name="l00699"></a><a class="code" href="classServer.html#a49">00699</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a49">Server::DelKLine</a>(std::string hostmask) +<a name="l00699"></a><a class="code" href="classServer.html#a45">00699</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a45">Server::AddELine</a>(<span class="keywordtype">long</span> duration, std::string source, std::string reason, std::string hostmask) 00700 { -00701 <a class="code" href="xline_8h.html#a9">del_kline</a>(hostmask.c_str()); +00701 <a class="code" href="xline_8h.html#a5">add_eline</a>(<a class="code" href="commands_8h.html#a76">duration</a>, source.c_str(), reason.c_str(), hostmask.c_str()); 00702 } 00703 -<a name="l00704"></a><a class="code" href="classServer.html#a50">00704</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a50">Server::DelELine</a>(std::string hostmask) +<a name="l00704"></a><a class="code" href="classServer.html#a46">00704</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a46">Server::DelGLine</a>(std::string hostmask) 00705 { -00706 <a class="code" href="xline_8h.html#a10">del_eline</a>(hostmask.c_str()); +00706 <a class="code" href="xline_8h.html#a6">del_gline</a>(hostmask.c_str()); 00707 } 00708 -<a name="l00709"></a><a class="code" href="classServer.html#a51">00709</a> <span class="keywordtype">long</span> <a class="code" href="classServer.html#a51">Server::CalcDuration</a>(std::string delta) +<a name="l00709"></a><a class="code" href="classServer.html#a47">00709</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a47">Server::DelQLine</a>(std::string nickname) 00710 { -00711 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a75">duration</a>(delta.c_str()); +00711 <a class="code" href="xline_8h.html#a7">del_qline</a>(nickname.c_str()); 00712 } 00713 -<a name="l00714"></a><a class="code" href="classServer.html#a52">00714</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a52">Server::IsValidMask</a>(std::string mask) +<a name="l00714"></a><a class="code" href="classServer.html#a48">00714</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a48">Server::DelZLine</a>(std::string ipaddr) 00715 { -00716 <span class="keyword">const</span> <span class="keywordtype">char</span>* dest = mask.c_str(); -00717 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'!'</span>)==0) -00718 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00719 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'@'</span>)==0) -00720 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00721 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) -00722 <span class="keywordflow">if</span> (dest[i] < 32) -00723 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00724 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) -00725 <span class="keywordflow">if</span> (dest[i] > 126) -00726 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00727 <span class="keywordtype">int</span> c = 0; -00728 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) -00729 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'!'</span>) -00730 c++; -00731 <span class="keywordflow">if</span> (c>1) -00732 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00733 c = 0; -00734 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) -00735 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'@'</span>) -00736 c++; -00737 <span class="keywordflow">if</span> (c>1) +00716 <a class="code" href="xline_8h.html#a8">del_zline</a>(ipaddr.c_str()); +00717 } +00718 +<a name="l00719"></a><a class="code" href="classServer.html#a49">00719</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a49">Server::DelKLine</a>(std::string hostmask) +00720 { +00721 <a class="code" href="xline_8h.html#a9">del_kline</a>(hostmask.c_str()); +00722 } +00723 +<a name="l00724"></a><a class="code" href="classServer.html#a50">00724</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a50">Server::DelELine</a>(std::string hostmask) +00725 { +00726 <a class="code" href="xline_8h.html#a10">del_eline</a>(hostmask.c_str()); +00727 } +00728 +<a name="l00729"></a><a class="code" href="classServer.html#a51">00729</a> <span class="keywordtype">long</span> <a class="code" href="classServer.html#a51">Server::CalcDuration</a>(std::string delta) +00730 { +00731 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a76">duration</a>(delta.c_str()); +00732 } +00733 +<a name="l00734"></a><a class="code" href="classServer.html#a52">00734</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a52">Server::IsValidMask</a>(std::string mask) +00735 { +00736 <span class="keyword">const</span> <span class="keywordtype">char</span>* dest = mask.c_str(); +00737 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'!'</span>)==0) 00738 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00739 -00740 <span class="keywordflow">return</span> <span class="keyword">true</span>; -00741 } -00742 -<a name="l00743"></a><a class="code" href="classServer.html#a53">00743</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a53">Server::MeshSendAll</a>(std::string text) -00744 { -00745 NetSendToAll((<span class="keywordtype">char</span>*)text.c_str()); -00746 } -00747 -<a name="l00748"></a><a class="code" href="classServer.html#a54">00748</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a54">Server::MeshSendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string text) -00749 { -00750 <span class="keywordflow">if</span> (user) -00751 NetSendToCommon(user,(<span class="keywordtype">char</span>*)text.c_str()); -00752 } -00753 -<a name="l00754"></a><a class="code" href="classServer.html#a55">00754</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a55">Server::MeshSendAllAlive</a>(std::string text) -00755 { -00756 NetSendToAllAlive((<span class="keywordtype">char</span>*)text.c_str()); -00757 } -00758 -<a name="l00759"></a><a class="code" href="classServer.html#a56">00759</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a56">Server::MeshSendUnicast</a>(std::string destination, std::string text) -00760 { -00761 NetSendToOne((<span class="keywordtype">char</span>*)destination.c_str(),(<span class="keywordtype">char</span>*)text.c_str()); -00762 } -00763 -<a name="l00764"></a><a class="code" href="classServer.html#a57">00764</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a57">Server::MeshSendAllExcept</a>(std::string target, std::string text) -00765 { -00766 NetSendToAllExcept(target.c_str(),(<span class="keywordtype">char</span>*)text.c_str()); -00767 } -00768 -<a name="l00769"></a><a class="code" href="classServer.html#a58">00769</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a58">Server::MeshCheckChan</a>(<a class="code" href="classchanrec.html">chanrec</a> *c,std::string servername) -00770 { -00771 <span class="keywordflow">if</span> (c) -00772 { -00773 <span class="keywordflow">return</span> ChanAnyOnThisServer(c,(<span class="keywordtype">char</span>*)servername.c_str()); -00774 } -00775 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; -00776 } -00777 -<a name="l00778"></a><a class="code" href="classServer.html#a59">00778</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a59">Server::MeshCheckCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* u,std::string servername) -00779 { -00780 <span class="keywordflow">if</span> (u) -00781 { -00782 <span class="keywordflow">return</span> CommonOnThisServer(u,(<span class="keywordtype">char</span>*)servername.c_str()); -00783 } -00784 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; -00785 } -00786 -<a name="l00787"></a><a class="code" href="classServer.html#a60">00787</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classServer.html#a60">Server::FindModule</a>(std::string name) -00788 { -00789 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; i++) -00790 { -00791 <span class="keywordflow">if</span> (<a class="code" href="channels_8cpp.html#a27">module_names</a>[i] == name) -00792 { -00793 <span class="keywordflow">return</span> <a class="code" href="channels_8cpp.html#a2">modules</a>[i]; -00794 } -00795 } -00796 <span class="keywordflow">return</span> NULL; -00797 } -00798 -<a name="l00799"></a><a class="code" href="classConfigReader.html#a0">00799</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>() -00800 { -00801 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00802 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00803 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this->cache,this->errorlog); -00804 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) -00805 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>; -00806 } -00807 -00808 -<a name="l00809"></a><a class="code" href="classConfigReader.html#a2">00809</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>() -00810 { -00811 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p0">cache</a>) -00812 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p0">cache</a>; -00813 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p1">errorlog</a>) -00814 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p1">errorlog</a>; -00815 } -00816 -00817 -<a name="l00818"></a><a class="code" href="classConfigReader.html#a1">00818</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename) -00819 { -00820 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00821 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); -00822 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(filename.c_str(),this-><a class="code" href="classConfigReader.html#p0">cache</a>,this-><a class="code" href="classConfigReader.html#p1">errorlog</a>); -00823 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) -00824 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>; -00825 }; -00826 -<a name="l00827"></a><a class="code" href="classConfigReader.html#a3">00827</a> std::string <a class="code" href="classConfigReader.html#a3">ConfigReader::ReadValue</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index) -00828 { -00829 <span class="keywordtype">char</span> val[MAXBUF]; -00830 <span class="keywordtype">char</span> t[MAXBUF]; -00831 <span class="keywordtype">char</span> n[MAXBUF]; -00832 strlcpy(t,tag.c_str(),MAXBUF); -00833 strlcpy(n,name.c_str(),MAXBUF); -00834 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00835 <span class="keywordflow">if</span> (!res) -00836 { -00837 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; -00838 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; -00839 } -00840 <span class="keywordflow">return</span> val; -00841 } -00842 -<a name="l00843"></a><a class="code" href="classConfigReader.html#a4">00843</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a4">ConfigReader::ReadFlag</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index) -00844 { -00845 <span class="keywordtype">char</span> val[MAXBUF]; -00846 <span class="keywordtype">char</span> t[MAXBUF]; -00847 <span class="keywordtype">char</span> n[MAXBUF]; -00848 strlcpy(t,tag.c_str(),MAXBUF); -00849 strlcpy(n,name.c_str(),MAXBUF); -00850 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00851 <span class="keywordflow">if</span> (!res) -00852 { -00853 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; -00854 <span class="keywordflow">return</span> <span class="keyword">false</span>; -00855 } -00856 std::string s = val; -00857 <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>)); -00858 } -00859 -<a name="l00860"></a><a class="code" href="classConfigReader.html#a5">00860</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a5">ConfigReader::ReadInteger</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index, <span class="keywordtype">bool</span> needs_unsigned) -00861 { -00862 <span class="keywordtype">char</span> val[MAXBUF]; -00863 <span class="keywordtype">char</span> t[MAXBUF]; -00864 <span class="keywordtype">char</span> n[MAXBUF]; -00865 strlcpy(t,tag.c_str(),MAXBUF); -00866 strlcpy(n,name.c_str(),MAXBUF); -00867 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); -00868 <span class="keywordflow">if</span> (!res) -00869 { -00870 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; -00871 <span class="keywordflow">return</span> 0; -00872 } -00873 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(val); i++) -00874 { -00875 <span class="keywordflow">if</span> (!isdigit(val[i])) -00876 { -00877 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a27">CONF_NOT_A_NUMBER</a>; -00878 <span class="keywordflow">return</span> 0; -00879 } -00880 } -00881 <span class="keywordflow">if</span> ((needs_unsigned) && (atoi(val)<0)) -00882 { -00883 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_NOT_UNSIGNED</a>; -00884 <span class="keywordflow">return</span> 0; -00885 } -00886 <span class="keywordflow">return</span> atoi(val); -00887 } -00888 -<a name="l00889"></a><a class="code" href="classConfigReader.html#a6">00889</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>() -00890 { -00891 <span class="keywordtype">long</span> olderr = this-><a class="code" href="classConfigReader.html#p3">error</a>; -00892 this->error = 0; -00893 <span class="keywordflow">return</span> olderr; -00894 } -00895 -<a name="l00896"></a><a class="code" href="classConfigReader.html#a9">00896</a> <span class="keywordtype">void</span> <a class="code" href="classConfigReader.html#a9">ConfigReader::DumpErrors</a>(<span class="keywordtype">bool</span> bail, <a class="code" href="classuserrec.html">userrec</a>* user) -00897 { -00898 <span class="keywordflow">if</span> (bail) -00899 { -00900 printf(<span class="stringliteral">"There were errors in your configuration:\n%s"</span>,<a class="code" href="classConfigReader.html#p1">errorlog</a>->str().c_str()); -00901 exit(0); -00902 } -00903 <span class="keywordflow">else</span> -00904 { -00905 <span class="keywordtype">char</span> dataline[1024]; -00906 <span class="keywordflow">if</span> (user) -00907 { -00908 WriteServ(user-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"NOTICE %s :There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>); -00909 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) -00910 { -00911 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); -00912 WriteServ(user-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"NOTICE %s :%s"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>,dataline); -00913 } -00914 } -00915 <span class="keywordflow">else</span> -00916 { -00917 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>); -00918 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) -00919 { -00920 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); -00921 WriteOpers(dataline); -00922 } -00923 } -00924 <span class="keywordflow">return</span>; -00925 } -00926 } -00927 -00928 -<a name="l00929"></a><a class="code" href="classConfigReader.html#a7">00929</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag) -00930 { -00931 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str()); -00932 } -00933 -<a name="l00934"></a><a class="code" href="classConfigReader.html#a10">00934</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a10">ConfigReader::EnumerateValues</a>(std::string tag, <span class="keywordtype">int</span> index) -00935 { -00936 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index); -00937 } -00938 -<a name="l00939"></a><a class="code" href="classConfigReader.html#a8">00939</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>() -00940 { -00941 <span class="keywordflow">return</span> this-><a class="code" href="classConfigReader.html#p2">readerror</a>; -00942 } -00943 -00944 -<a name="l00945"></a><a class="code" href="classFileReader.html#a1">00945</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename) -00946 { -00947 <a class="code" href="modules_8h.html#a31">file_cache</a> c; -00948 readfile(c,filename.c_str()); -00949 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; -00950 } -00951 -<a name="l00952"></a><a class="code" href="classFileReader.html#a0">00952</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>() -00953 { -00954 } -00955 -<a name="l00956"></a><a class="code" href="classFileReader.html#a3">00956</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename) -00957 { -00958 <a class="code" href="modules_8h.html#a31">file_cache</a> c; -00959 readfile(c,filename.c_str()); -00960 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; -00961 } -00962 +00739 <span class="keywordflow">if</span> (strchr(dest,<span class="charliteral">'@'</span>)==0) +00740 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00741 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) +00742 <span class="keywordflow">if</span> (dest[i] < 32) +00743 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00744 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) +00745 <span class="keywordflow">if</span> (dest[i] > 126) +00746 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00747 <span class="keywordtype">int</span> c = 0; +00748 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) +00749 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'!'</span>) +00750 c++; +00751 <span class="keywordflow">if</span> (c>1) +00752 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00753 c = 0; +00754 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(dest); i++) +00755 <span class="keywordflow">if</span> (dest[i] == <span class="charliteral">'@'</span>) +00756 c++; +00757 <span class="keywordflow">if</span> (c>1) +00758 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00759 +00760 <span class="keywordflow">return</span> <span class="keyword">true</span>; +00761 } +00762 +<a name="l00763"></a><a class="code" href="classServer.html#a53">00763</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a53">Server::MeshSendAll</a>(std::string text) +00764 { +00765 NetSendToAll((<span class="keywordtype">char</span>*)text.c_str()); +00766 } +00767 +<a name="l00768"></a><a class="code" href="classServer.html#a54">00768</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a54">Server::MeshSendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string text) +00769 { +00770 <span class="keywordflow">if</span> (user) +00771 NetSendToCommon(user,(<span class="keywordtype">char</span>*)text.c_str()); +00772 } +00773 +<a name="l00774"></a><a class="code" href="classServer.html#a55">00774</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a55">Server::MeshSendAllAlive</a>(std::string text) +00775 { +00776 NetSendToAllAlive((<span class="keywordtype">char</span>*)text.c_str()); +00777 } +00778 +<a name="l00779"></a><a class="code" href="classServer.html#a56">00779</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a56">Server::MeshSendUnicast</a>(std::string destination, std::string text) +00780 { +00781 NetSendToOne((<span class="keywordtype">char</span>*)destination.c_str(),(<span class="keywordtype">char</span>*)text.c_str()); +00782 } +00783 +<a name="l00784"></a><a class="code" href="classServer.html#a57">00784</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a57">Server::MeshSendAllExcept</a>(std::string target, std::string text) +00785 { +00786 NetSendToAllExcept(target.c_str(),(<span class="keywordtype">char</span>*)text.c_str()); +00787 } +00788 +<a name="l00789"></a><a class="code" href="classServer.html#a58">00789</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a58">Server::MeshCheckChan</a>(<a class="code" href="classchanrec.html">chanrec</a> *c,std::string servername) +00790 { +00791 <span class="keywordflow">if</span> (c) +00792 { +00793 <span class="keywordflow">return</span> ChanAnyOnThisServer(c,(<span class="keywordtype">char</span>*)servername.c_str()); +00794 } +00795 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; +00796 } +00797 +<a name="l00798"></a><a class="code" href="classServer.html#a59">00798</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a59">Server::MeshCheckCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* u,std::string servername) +00799 { +00800 <span class="keywordflow">if</span> (u) +00801 { +00802 <span class="keywordflow">return</span> CommonOnThisServer(u,(<span class="keywordtype">char</span>*)servername.c_str()); +00803 } +00804 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>; +00805 } +00806 +<a name="l00807"></a><a class="code" href="classServer.html#a60">00807</a> <a class="code" href="classModule.html">Module</a>* <a class="code" href="classServer.html#a60">Server::FindModule</a>(std::string name) +00808 { +00809 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i <= <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a>; i++) +00810 { +00811 <span class="keywordflow">if</span> (<a class="code" href="channels_8cpp.html#a26">module_names</a>[i] == name) +00812 { +00813 <span class="keywordflow">return</span> <a class="code" href="channels_8cpp.html#a2">modules</a>[i]; +00814 } +00815 } +00816 <span class="keywordflow">return</span> NULL; +00817 } +00818 +<a name="l00819"></a><a class="code" href="classConfigReader.html#a0">00819</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>() +00820 { +00821 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +00822 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +00823 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this->cache,this->errorlog); +00824 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) +00825 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>; +00826 } +00827 +00828 +<a name="l00829"></a><a class="code" href="classConfigReader.html#a2">00829</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>() +00830 { +00831 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p0">cache</a>) +00832 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p0">cache</a>; +00833 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p1">errorlog</a>) +00834 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p1">errorlog</a>; +00835 } +00836 +00837 +<a name="l00838"></a><a class="code" href="classConfigReader.html#a1">00838</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename) +00839 { +00840 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +00841 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out); +00842 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(filename.c_str(),this-><a class="code" href="classConfigReader.html#p0">cache</a>,this-><a class="code" href="classConfigReader.html#p1">errorlog</a>); +00843 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>) +00844 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a30">CONF_FILE_NOT_FOUND</a>; +00845 }; +00846 +<a name="l00847"></a><a class="code" href="classConfigReader.html#a3">00847</a> std::string <a class="code" href="classConfigReader.html#a3">ConfigReader::ReadValue</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index) +00848 { +00849 <span class="keywordtype">char</span> val[MAXBUF]; +00850 <span class="keywordtype">char</span> t[MAXBUF]; +00851 <span class="keywordtype">char</span> n[MAXBUF]; +00852 strlcpy(t,tag.c_str(),MAXBUF); +00853 strlcpy(n,name.c_str(),MAXBUF); +00854 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); +00855 <span class="keywordflow">if</span> (!res) +00856 { +00857 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; +00858 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; +00859 } +00860 <span class="keywordflow">return</span> val; +00861 } +00862 +<a name="l00863"></a><a class="code" href="classConfigReader.html#a4">00863</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a4">ConfigReader::ReadFlag</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index) +00864 { +00865 <span class="keywordtype">char</span> val[MAXBUF]; +00866 <span class="keywordtype">char</span> t[MAXBUF]; +00867 <span class="keywordtype">char</span> n[MAXBUF]; +00868 strlcpy(t,tag.c_str(),MAXBUF); +00869 strlcpy(n,name.c_str(),MAXBUF); +00870 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); +00871 <span class="keywordflow">if</span> (!res) +00872 { +00873 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; +00874 <span class="keywordflow">return</span> <span class="keyword">false</span>; +00875 } +00876 std::string s = val; +00877 <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>)); +00878 } +00879 +<a name="l00880"></a><a class="code" href="classConfigReader.html#a5">00880</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a5">ConfigReader::ReadInteger</a>(std::string tag, std::string name, <span class="keywordtype">int</span> index, <span class="keywordtype">bool</span> needs_unsigned) +00881 { +00882 <span class="keywordtype">char</span> val[MAXBUF]; +00883 <span class="keywordtype">char</span> t[MAXBUF]; +00884 <span class="keywordtype">char</span> n[MAXBUF]; +00885 strlcpy(t,tag.c_str(),MAXBUF); +00886 strlcpy(n,name.c_str(),MAXBUF); +00887 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val); +00888 <span class="keywordflow">if</span> (!res) +00889 { +00890 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_VALUE_NOT_FOUND</a>; +00891 <span class="keywordflow">return</span> 0; +00892 } +00893 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(val); i++) +00894 { +00895 <span class="keywordflow">if</span> (!isdigit(val[i])) +00896 { +00897 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a27">CONF_NOT_A_NUMBER</a>; +00898 <span class="keywordflow">return</span> 0; +00899 } +00900 } +00901 <span class="keywordflow">if</span> ((needs_unsigned) && (atoi(val)<0)) +00902 { +00903 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_NOT_UNSIGNED</a>; +00904 <span class="keywordflow">return</span> 0; +00905 } +00906 <span class="keywordflow">return</span> atoi(val); +00907 } +00908 +<a name="l00909"></a><a class="code" href="classConfigReader.html#a6">00909</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>() +00910 { +00911 <span class="keywordtype">long</span> olderr = this-><a class="code" href="classConfigReader.html#p3">error</a>; +00912 this->error = 0; +00913 <span class="keywordflow">return</span> olderr; +00914 } +00915 +<a name="l00916"></a><a class="code" href="classConfigReader.html#a9">00916</a> <span class="keywordtype">void</span> <a class="code" href="classConfigReader.html#a9">ConfigReader::DumpErrors</a>(<span class="keywordtype">bool</span> bail, <a class="code" href="classuserrec.html">userrec</a>* user) +00917 { +00918 <span class="keywordflow">if</span> (bail) +00919 { +00920 printf(<span class="stringliteral">"There were errors in your configuration:\n%s"</span>,<a class="code" href="classConfigReader.html#p1">errorlog</a>->str().c_str()); +00921 exit(0); +00922 } +00923 <span class="keywordflow">else</span> +00924 { +00925 <span class="keywordtype">char</span> dataline[1024]; +00926 <span class="keywordflow">if</span> (user) +00927 { +00928 WriteServ(user-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"NOTICE %s :There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>); +00929 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) +00930 { +00931 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); +00932 WriteServ(user-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">"NOTICE %s :%s"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>,dataline); +00933 } +00934 } +00935 <span class="keywordflow">else</span> +00936 { +00937 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>); +00938 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof()) +00939 { +00940 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024); +00941 WriteOpers(dataline); +00942 } +00943 } +00944 <span class="keywordflow">return</span>; +00945 } +00946 } +00947 +00948 +<a name="l00949"></a><a class="code" href="classConfigReader.html#a7">00949</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag) +00950 { +00951 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str()); +00952 } +00953 +<a name="l00954"></a><a class="code" href="classConfigReader.html#a10">00954</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a10">ConfigReader::EnumerateValues</a>(std::string tag, <span class="keywordtype">int</span> index) +00955 { +00956 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index); +00957 } +00958 +<a name="l00959"></a><a class="code" href="classConfigReader.html#a8">00959</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>() +00960 { +00961 <span class="keywordflow">return</span> this-><a class="code" href="classConfigReader.html#p2">readerror</a>; +00962 } 00963 -<a name="l00964"></a><a class="code" href="classFileReader.html#a2">00964</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>() -00965 { -00966 } -00967 -<a name="l00968"></a><a class="code" href="classFileReader.html#a4">00968</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>() -00969 { -00970 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0) -00971 { -00972 <span class="keywordflow">return</span>(<span class="keyword">false</span>); -00973 } -00974 <span class="keywordflow">else</span> -00975 { -00976 <span class="keywordflow">return</span>(<span class="keyword">true</span>); -00977 } -00978 } -00979 -<a name="l00980"></a><a class="code" href="classFileReader.html#a5">00980</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x) -00981 { -00982 <span class="keywordflow">if</span> ((x<0) || (x><a class="code" href="classFileReader.html#r0">fc</a>.size())) -00983 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; -00984 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x]; -00985 } -00986 -<a name="l00987"></a><a class="code" href="classFileReader.html#a6">00987</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>() -00988 { -00989 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size(); -00990 } -00991 -00992 -00993 std::vector<Module*> <a class="code" href="modules_8cpp.html#a60">modules</a>(255); -00994 std::vector<ircd_module*> <a class="code" href="modules_8cpp.html#a61">factory</a>(255); -00995 -<a name="l00996"></a><a class="code" href="modules_8cpp.html#a0">00996</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a> = -1; -00997 -00998 -</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun May 15 18:36:02 2005 for InspIRCd by +00964 +<a name="l00965"></a><a class="code" href="classFileReader.html#a1">00965</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename) +00966 { +00967 <a class="code" href="modules_8h.html#a31">file_cache</a> c; +00968 readfile(c,filename.c_str()); +00969 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; +00970 } +00971 +<a name="l00972"></a><a class="code" href="classFileReader.html#a0">00972</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>() +00973 { +00974 } +00975 +<a name="l00976"></a><a class="code" href="classFileReader.html#a3">00976</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename) +00977 { +00978 <a class="code" href="modules_8h.html#a31">file_cache</a> c; +00979 readfile(c,filename.c_str()); +00980 this-><a class="code" href="classFileReader.html#r0">fc</a> = c; +00981 } +00982 +00983 +<a name="l00984"></a><a class="code" href="classFileReader.html#a2">00984</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>() +00985 { +00986 } +00987 +<a name="l00988"></a><a class="code" href="classFileReader.html#a4">00988</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>() +00989 { +00990 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0) +00991 { +00992 <span class="keywordflow">return</span>(<span class="keyword">false</span>); +00993 } +00994 <span class="keywordflow">else</span> +00995 { +00996 <span class="keywordflow">return</span>(<span class="keyword">true</span>); +00997 } +00998 } +00999 +<a name="l01000"></a><a class="code" href="classFileReader.html#a5">01000</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x) +01001 { +01002 <span class="keywordflow">if</span> ((x<0) || (x><a class="code" href="classFileReader.html#r0">fc</a>.size())) +01003 <span class="keywordflow">return</span> <span class="stringliteral">""</span>; +01004 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x]; +01005 } +01006 +<a name="l01007"></a><a class="code" href="classFileReader.html#a6">01007</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>() +01008 { +01009 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size(); +01010 } +01011 +01012 +01013 std::vector<Module*> <a class="code" href="modules_8cpp.html#a59">modules</a>(255); +01014 std::vector<ircd_module*> <a class="code" href="modules_8cpp.html#a60">factory</a>(255); +01015 +<a name="l01016"></a><a class="code" href="modules_8cpp.html#a0">01016</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a> = -1; +01017 +01018 +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue May 24 02:30:04 2005 for InspIRCd by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.3 </small></address> |