+<a name="l00306"></a><a class="code" href="classModule.html#a0">00306</a> <a class="code" href="classModule.html#a0">Module::Module</a>() { }
+<a name="l00307"></a><a class="code" href="classModule.html#a1">00307</a> <a class="code" href="classModule.html#a1">Module::~Module</a>() { }
+<a name="l00308"></a><a class="code" href="classModule.html#a3">00308</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="l00309"></a><a class="code" href="classModule.html#a4">00309</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="l00310"></a><a class="code" href="classModule.html#a5">00310</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a5">Module::OnUserJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
+<a name="l00311"></a><a class="code" href="classModule.html#a6">00311</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a6">Module::OnUserPart</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* channel) { }
+<a name="l00312"></a><a class="code" href="classModule.html#a7">00312</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a7">Module::OnPacketTransmit</a>(std::string &data, std::string serv) { }
+<a name="l00313"></a><a class="code" href="classModule.html#a8">00313</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a8">Module::OnPacketReceive</a>(std::string &data, std::string serv) { }
+<a name="l00314"></a><a class="code" href="classModule.html#a9">00314</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a9">Module::OnRehash</a>() { }
+<a name="l00315"></a><a class="code" href="classModule.html#a10">00315</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a10">Module::OnServerRaw</a>(std::string &raw, <span class="keywordtype">bool</span> inbound, <a class="code" href="classuserrec.html">userrec</a>* user) { }
+<a name="l00316"></a><a class="code" href="classModule.html#a12">00316</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a12">Module::OnUserPreJoin</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <a class="code" href="classchanrec.html">chanrec</a>* chan, <span class="keyword">const</span> <span class="keywordtype">char</span>* cname) { <span class="keywordflow">return</span> 0; }
+<a name="l00317"></a><a class="code" href="classModule.html#a11">00317</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a11">Module::OnExtendedMode</a>(<a class="code" href="classuserrec.html">userrec</a>* user, <span class="keywordtype">void</span>* target, <span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> mode_on, string_list &params) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }
+<a name="l00318"></a><a class="code" href="classModule.html#a2">00318</a> <a class="code" href="classVersion.html">Version</a> <a class="code" href="classModule.html#a2">Module::GetVersion</a>() { <span class="keywordflow">return</span> <a class="code" href="classVersion.html">Version</a>(1,0,0,0,<a class="code" href="modules_8h.html#a21">VF_VENDOR</a>); }
+<a name="l00319"></a><a class="code" href="classModule.html#a13">00319</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a13">Module::OnOper</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
+<a name="l00320"></a><a class="code" href="classModule.html#a14">00320</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a14">Module::OnInfo</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { };
+<a name="l00321"></a><a class="code" href="classModule.html#a15">00321</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a15">Module::OnWhois</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest) { };
+<a name="l00322"></a><a class="code" href="classModule.html#a16">00322</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a16">Module::OnUserPreInvite</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel) { <span class="keywordflow">return</span> 0; };
+<a name="l00323"></a><a class="code" href="classModule.html#a17">00323</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a17">Module::OnUserPreMessage</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; };
+<a name="l00324"></a><a class="code" href="classModule.html#a18">00324</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a18">Module::OnUserPreNotice</a>(<a class="code" href="classuserrec.html">userrec</a>* user,<span class="keywordtype">void</span>* dest,<span class="keywordtype">int</span> target_type, std::string &text) { <span class="keywordflow">return</span> 0; };
+<a name="l00325"></a><a class="code" href="classModule.html#a19">00325</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a19">Module::OnUserPreNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string newnick) { <span class="keywordflow">return</span> 0; };
+<a name="l00326"></a><a class="code" href="classModule.html#a20">00326</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a20">Module::OnUserPostNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string oldnick) { };
+<a name="l00327"></a><a class="code" href="classModule.html#a21">00327</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a21">Module::OnAccessCheck</a>(<a class="code" href="classuserrec.html">userrec</a>* source,<a class="code" href="classuserrec.html">userrec</a>* dest,<a class="code" href="classchanrec.html">chanrec</a>* channel,<span class="keywordtype">int</span> access_type) { <span class="keywordflow">return</span> <a class="code" href="modules_8h.html#a8">ACR_DEFAULT</a>; };
+<a name="l00328"></a><a class="code" href="classModule.html#a22">00328</a> <a class="code" href="modules_8h.html#a31">string_list</a> <a class="code" href="classModule.html#a22">Module::OnUserSync</a>(<a class="code" href="classuserrec.html">userrec</a>* user) { <a class="code" href="modules_8h.html#a31">string_list</a> empty; <span class="keywordflow">return</span> empty; }
+<a name="l00329"></a><a class="code" href="classModule.html#a23">00329</a> <a class="code" href="modules_8h.html#a31">string_list</a> <a class="code" href="classModule.html#a23">Module::OnChannelSync</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan) { <a class="code" href="modules_8h.html#a31">string_list</a> empty; <span class="keywordflow">return</span> empty; }
+<a name="l00330"></a><a class="code" href="classModule.html#a24">00330</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a24">Module::On005Numeric</a>(std::string &output) { };
+<a name="l00331"></a><a class="code" href="classModule.html#a25">00331</a> <span class="keywordtype">int</span> <a class="code" href="classModule.html#a25">Module::OnKill</a>(<a class="code" href="classuserrec.html">userrec</a>* source, <a class="code" href="classuserrec.html">userrec</a>* dest, std::string reason) { <span class="keywordflow">return</span> 0; };
+<a name="l00332"></a><a class="code" href="classModule.html#a26">00332</a> <span class="keywordtype">void</span> <a class="code" href="classModule.html#a26">Module::OnLoadModule</a>(<a class="code" href="classModule.html">Module</a>* mod,std::string name) { };
+00333
+00334
+00335 <span class="comment">// server is a wrapper class that provides methods to all of the C-style</span>
+00336 <span class="comment">// exports in the core</span>
+00337 <span class="comment">//</span>
+00338
+<a name="l00339"></a><a class="code" href="classServer.html#a0">00339</a> <a class="code" href="classServer.html#a0">Server::Server</a>()
+00340 {
+00341 }
+00342
+<a name="l00343"></a><a class="code" href="classServer.html#a1">00343</a> <a class="code" href="classServer.html#a1">Server::~Server</a>()
+00344 {
+00345 }
+00346
+<a name="l00347"></a><a class="code" href="classServer.html#a2">00347</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a2">Server::SendOpers</a>(std::string s)
+00348 {
+00349 WriteOpers(<span class="stringliteral">"%s"</span>,s.c_str());
+00350 }
+00351
+<a name="l00352"></a><a class="code" href="classServer.html#a30">00352</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a30">Server::MatchText</a>(std::string sliteral, std::string spattern)
+00353 {
+00354 <span class="keywordtype">char</span> literal[MAXBUF],pattern[MAXBUF];
+00355 strlcpy(literal,sliteral.c_str(),MAXBUF);
+00356 strlcpy(pattern,spattern.c_str(),MAXBUF);
+00357 <span class="keywordflow">return</span> match(literal,pattern);
+00358 }
+00359
+<a name="l00360"></a><a class="code" href="classServer.html#a25">00360</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a25">Server::SendToModeMask</a>(std::string modes, <span class="keywordtype">int</span> flags, std::string text)
+00361 {
+00362 WriteMode(modes.c_str(),flags,<span class="stringliteral">"%s"</span>,text.c_str());
+00363 }
+00364
+<a name="l00365"></a><a class="code" href="classServer.html#a26">00365</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a26">Server::JoinUserToChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string key)
+00366 {
+00367 <span class="keywordflow">return</span> add_channel(user,cname.c_str(),key.c_str(),<span class="keyword">true</span>);
+00368 }
+00369
+<a name="l00370"></a><a class="code" href="classServer.html#a27">00370</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a27">Server::PartUserFromChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string cname, std::string reason)
+00371 {
+00372 <span class="keywordflow">return</span> del_channel(user,cname.c_str(),reason.c_str(),<span class="keyword">false</span>);
+00373 }
+00374
+<a name="l00375"></a><a class="code" href="classServer.html#a35">00375</a> <a class="code" href="modules_8h.html#a32">chanuserlist</a> <a class="code" href="classServer.html#a35">Server::GetUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* chan)
+00376 {
+00377 <a class="code" href="modules_8h.html#a32">chanuserlist</a> userl;
+00378 userl.clear();
+00379 <span class="keywordflow">for</span> (user_hash::const_iterator i = <a class="code" href="modules_8cpp.html#a42">clientlist</a>.begin(); i != <a class="code" href="modules_8cpp.html#a42">clientlist</a>.end(); i++)
+00380 {
+00381 <span class="keywordflow">if</span> (i->second)
+00382 {
+00383 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a16">has_channel</a>(i->second,chan))
+00384 {
+00385 <span class="keywordflow">if</span> (<a class="code" href="message_8h.html#a13">isnick</a>(i->second->nick))
+00386 {
+00387 userl.push_back(i->second);
+00388 }
+00389 }
+00390 }
+00391 }
+00392 <span class="keywordflow">return</span> userl;
+00393 }
+<a name="l00394"></a><a class="code" href="classServer.html#a28">00394</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a28">Server::ChangeUserNick</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string nickname)
+00395 {
+00396 force_nickchange(user,nickname.c_str());
+00397 }
+00398
+<a name="l00399"></a><a class="code" href="classServer.html#a29">00399</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a29">Server::QuitUser</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string reason)
+00400 {
+00401 <a class="code" href="message_8h.html#a19">send_network_quit</a>(user-><a class="code" href="classuserrec.html#o0">nick</a>,reason.c_str());
+00402 kill_link(user,reason.c_str());
+00403 }
+00404
+<a name="l00405"></a><a class="code" href="classServer.html#a34">00405</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a34">Server::IsUlined</a>(std::string server)
+00406 {
+00407 <span class="keywordflow">return</span> <a class="code" href="commands_8h.html#a74">is_uline</a>(server.c_str());
+00408 }
+00409
+<a name="l00410"></a><a class="code" href="classServer.html#a31">00410</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a31">Server::CallCommandHandler</a>(std::string commandname, <span class="keywordtype">char</span>** parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a>* user)
+00411 {
+00412 call_handler(commandname.c_str(),parameters,pcnt,user);
+00413 }
+00414
+<a name="l00415"></a><a class="code" href="classServer.html#a3">00415</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)
+00416 {
+00417 log(level,<span class="stringliteral">"%s"</span>,s.c_str());
+00418 }
+00419
+<a name="l00420"></a><a class="code" href="classServer.html#a23">00420</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a23">Server::AddCommand</a>(<span class="keywordtype">char</span>* cmd, handlerfunc f, <span class="keywordtype">char</span> flags, <span class="keywordtype">int</span> minparams, <span class="keywordtype">char</span>* source)
+00421 {
+00422 <a class="code" href="modules_8h.html#a34">createcommand</a>(cmd,f,flags,minparams,source);
+00423 }
+00424
+<a name="l00425"></a><a class="code" href="classServer.html#a24">00425</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a24">Server::SendMode</a>(<span class="keywordtype">char</span> **parameters, <span class="keywordtype">int</span> pcnt, <a class="code" href="classuserrec.html">userrec</a> *user)
+00426 {
+00427 <a class="code" href="modules_8h.html#a35">server_mode</a>(parameters,pcnt,user);
+00428 }
+00429
+<a name="l00430"></a><a class="code" href="classServer.html#a4">00430</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)
+00431 {
+00432 Write(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
+00433 }
+00434
+<a name="l00435"></a><a class="code" href="classServer.html#a5">00435</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)
+00436 {
+00437 WriteServ(Socket,<span class="stringliteral">"%s"</span>,s.c_str());
+00438 }
+00439
+<a name="l00440"></a><a class="code" href="classServer.html#a6">00440</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a6">Server::SendFrom</a>(<span class="keywordtype">int</span> Socket, <a class="code" href="classuserrec.html">userrec</a>* User, std::string s)
+00441 {
+00442 WriteFrom(Socket,User,<span class="stringliteral">"%s"</span>,s.c_str());
+00443 }
+00444
+<a name="l00445"></a><a class="code" href="classServer.html#a7">00445</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a7">Server::SendTo</a>(<a class="code" href="classuserrec.html">userrec</a>* Source, <a class="code" href="classuserrec.html">userrec</a>* Dest, std::string s)
+00446 {
+00447 <span class="keywordflow">if</span> (!Source)
+00448 {
+00449 <span class="comment">// if source is NULL, then the message originates from the local server</span>
+00450 Write(Dest-><a class="code" href="classconnection.html#o0">fd</a>,<span class="stringliteral">":%s %s"</span>,this->GetServerName().c_str(),s.c_str());
+00451 }
+00452 <span class="keywordflow">else</span>
+00453 {
+00454 <span class="comment">// otherwise it comes from the user specified</span>
+00455 WriteTo(Source,Dest,<span class="stringliteral">"%s"</span>,s.c_str());
+00456 }
+00457 }
+00458
+<a name="l00459"></a><a class="code" href="classServer.html#a8">00459</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a8">Server::SendChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Channel, std::string s,<span class="keywordtype">bool</span> IncludeSender)
+00460 {
+00461 <span class="keywordflow">if</span> (IncludeSender)
+00462 {
+00463 WriteChannel(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
+00464 }
+00465 <span class="keywordflow">else</span>
+00466 {
+00467 ChanExceptSender(Channel,User,<span class="stringliteral">"%s"</span>,s.c_str());
+00468 }
+00469 }
+00470
+<a name="l00471"></a><a class="code" href="classServer.html#a9">00471</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a9">Server::CommonChannels</a>(<a class="code" href="classuserrec.html">userrec</a>* u1, <a class="code" href="classuserrec.html">userrec</a>* u2)
+00472 {
+00473 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a0">common_channels</a>(u1,u2) != 0);
+00474 }
+00475
+<a name="l00476"></a><a class="code" href="classServer.html#a10">00476</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a10">Server::SendCommon</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text,<span class="keywordtype">bool</span> IncludeSender)
+00477 {
+00478 <span class="keywordflow">if</span> (IncludeSender)
+00479 {
+00480 WriteCommon(User,<span class="stringliteral">"%s"</span>,text.c_str());
+00481 }
+00482 <span class="keywordflow">else</span>
+00483 {
+00484 WriteCommonExcept(User,<span class="stringliteral">"%s"</span>,text.c_str());
+00485 }
+00486 }
+00487
+<a name="l00488"></a><a class="code" href="classServer.html#a11">00488</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a11">Server::SendWallops</a>(<a class="code" href="classuserrec.html">userrec</a>* User, std::string text)
+00489 {
+00490 WriteWallOps(User,<span class="keyword">false</span>,<span class="stringliteral">"%s"</span>,text.c_str());
+00491 }
+00492
+<a name="l00493"></a><a class="code" href="classServer.html#a32">00493</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a32">Server::ChangeHost</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string host)
+00494 {
+00495 <a class="code" href="message_8h.html#a11">ChangeDisplayedHost</a>(user,host.c_str());
+00496 }
+00497
+<a name="l00498"></a><a class="code" href="classServer.html#a33">00498</a> <span class="keywordtype">void</span> <a class="code" href="classServer.html#a33">Server::ChangeGECOS</a>(<a class="code" href="classuserrec.html">userrec</a>* user, std::string gecos)
+00499 {
+00500 <a class="code" href="message_8h.html#a10">ChangeName</a>(user,gecos.c_str());
+00501 }
+00502
+<a name="l00503"></a><a class="code" href="classServer.html#a12">00503</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a12">Server::IsNick</a>(std::string nick)
+00504 {
+00505 <span class="keywordflow">return</span> (<a class="code" href="message_8h.html#a13">isnick</a>(nick.c_str()) != 0);
+00506 }
+00507
+<a name="l00508"></a><a class="code" href="classServer.html#a14">00508</a> <a class="code" href="classuserrec.html">userrec</a>* <a class="code" href="classServer.html#a14">Server::FindNick</a>(std::string nick)
+00509 {
+00510 <span class="keywordflow">return</span> Find(nick);
+00511 }
+00512
+<a name="l00513"></a><a class="code" href="classServer.html#a15">00513</a> <a class="code" href="classchanrec.html">chanrec</a>* <a class="code" href="classServer.html#a15">Server::FindChannel</a>(std::string channel)
+00514 {
+00515 <span class="keywordflow">return</span> FindChan(channel.c_str());
+00516 }
+00517
+<a name="l00518"></a><a class="code" href="classServer.html#a16">00518</a> std::string <a class="code" href="classServer.html#a16">Server::ChanMode</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
+00519 {
+00520 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a14">cmode</a>(User,Chan);
+00521 }
+00522
+<a name="l00523"></a><a class="code" href="classServer.html#a17">00523</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a17">Server::IsOnChannel</a>(<a class="code" href="classuserrec.html">userrec</a>* User, <a class="code" href="classchanrec.html">chanrec</a>* Chan)
+00524 {
+00525 <span class="keywordflow">return</span> <a class="code" href="message_8h.html#a16">has_channel</a>(User,Chan);
+00526 }
+00527
+<a name="l00528"></a><a class="code" href="classServer.html#a18">00528</a> std::string <a class="code" href="classServer.html#a18">Server::GetServerName</a>()
+00529 {
+00530 <span class="keywordflow">return</span> getservername();
+00531 }
+00532
+<a name="l00533"></a><a class="code" href="classServer.html#a19">00533</a> std::string <a class="code" href="classServer.html#a19">Server::GetNetworkName</a>()
+00534 {
+00535 <span class="keywordflow">return</span> getnetworkname();
+00536 }
+00537
+<a name="l00538"></a><a class="code" href="classServer.html#a20">00538</a> <a class="code" href="classAdmin.html">Admin</a> <a class="code" href="classServer.html#a20">Server::GetAdmin</a>()
+00539 {
+00540 <span class="keywordflow">return</span> <a class="code" href="classAdmin.html">Admin</a>(getadminname(),getadminemail(),getadminnick());
+00541 }
+00542
+00543
+00544
+<a name="l00545"></a><a class="code" href="classServer.html#a21">00545</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a21">Server::AddExtendedMode</a>(<span class="keywordtype">char</span> modechar, <span class="keywordtype">int</span> type, <span class="keywordtype">bool</span> requires_oper, <span class="keywordtype">int</span> params_when_on, <span class="keywordtype">int</span> params_when_off)
+00546 {
+00547 <span class="keywordflow">if</span> (type == <a class="code" href="modules_8h.html#a7">MT_SERVER</a>)
+00548 {
+00549 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>);
+00550 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00551 }
+00552 <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>))
+00553 {
+00554 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>);
+00555 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00556 }
+00557 <span class="keywordflow">if</span> ((params_when_on>1) || (params_when_off>1))
+00558 {
+00559 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>);
+00560 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00561 }
+00562 <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);
+00563 }
+00564
+<a name="l00565"></a><a class="code" href="classServer.html#a22">00565</a> <span class="keywordtype">bool</span> <a class="code" href="classServer.html#a22">Server::AddExtendedListMode</a>(<span class="keywordtype">char</span> modechar)
+00566 {
+00567 <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);
+00568 <span class="keywordflow">if</span> (res)
+00569 <a class="code" href="modules_8cpp.html#a58">ModeMakeList</a>(modechar);
+00570 <span class="keywordflow">return</span> res;
+00571 }
+00572
+<a name="l00573"></a><a class="code" href="classServer.html#a13">00573</a> <span class="keywordtype">int</span> <a class="code" href="classServer.html#a13">Server::CountUsers</a>(<a class="code" href="classchanrec.html">chanrec</a>* c)
+00574 {
+00575 <span class="keywordflow">return</span> usercount(c);
+00576 }
+00577
+00578
+<a name="l00579"></a><a class="code" href="classConfigReader.html#a0">00579</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>()
+00580 {
+00581 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
+00582 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
+00583 this-><a class="code" href="classConfigReader.html#p2">readerror</a> = LoadConf(CONFIG_FILE,this->cache,this->errorlog);
+00584 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>)
+00585 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_FILE_NOT_FOUND</a>;
+00586 }
+00587
+00588
+<a name="l00589"></a><a class="code" href="classConfigReader.html#a2">00589</a> <a class="code" href="classConfigReader.html#a2">ConfigReader::~ConfigReader</a>()
+00590 {
+00591 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p0">cache</a>)
+00592 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p0">cache</a>;
+00593 <span class="keywordflow">if</span> (this-><a class="code" href="classConfigReader.html#p1">errorlog</a>)
+00594 <span class="keyword">delete</span> this-><a class="code" href="classConfigReader.html#p1">errorlog</a>;
+00595 }
+00596
+00597
+<a name="l00598"></a><a class="code" href="classConfigReader.html#a1">00598</a> <a class="code" href="classConfigReader.html#a0">ConfigReader::ConfigReader</a>(std::string filename)
+00599 {
+00600 this-><a class="code" href="classConfigReader.html#p0">cache</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
+00601 this-><a class="code" href="classConfigReader.html#p1">errorlog</a> = <span class="keyword">new</span> std::stringstream(std::stringstream::in | std::stringstream::out);
+00602 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>);
+00603 <span class="keywordflow">if</span> (!this-><a class="code" href="classConfigReader.html#p2">readerror</a>)
+00604 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a29">CONF_FILE_NOT_FOUND</a>;
+00605 };
+00606
+<a name="l00607"></a><a class="code" href="classConfigReader.html#a3">00607</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)
+00608 {
+00609 <span class="keywordtype">char</span> val[MAXBUF];
+00610 <span class="keywordtype">char</span> t[MAXBUF];
+00611 <span class="keywordtype">char</span> n[MAXBUF];
+00612 strlcpy(t,tag.c_str(),MAXBUF);
+00613 strlcpy(n,name.c_str(),MAXBUF);
+00614 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
+00615 <span class="keywordflow">if</span> (!res)
+00616 {
+00617 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_VALUE_NOT_FOUND</a>;
+00618 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
+00619 }
+00620 <span class="keywordflow">return</span> std::string(val);
+00621 }
+00622
+<a name="l00623"></a><a class="code" href="classConfigReader.html#a4">00623</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)
+00624 {
+00625 <span class="keywordtype">char</span> val[MAXBUF];
+00626 <span class="keywordtype">char</span> t[MAXBUF];
+00627 <span class="keywordtype">char</span> n[MAXBUF];
+00628 strlcpy(t,tag.c_str(),MAXBUF);
+00629 strlcpy(n,name.c_str(),MAXBUF);
+00630 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
+00631 <span class="keywordflow">if</span> (!res)
+00632 {
+00633 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_VALUE_NOT_FOUND</a>;
+00634 <span class="keywordflow">return</span> <span class="keyword">false</span>;
+00635 }
+00636 std::string s = val;
+00637 <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>));
+00638 }
+00639
+<a name="l00640"></a><a class="code" href="classConfigReader.html#a5">00640</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)
+00641 {
+00642 <span class="keywordtype">char</span> val[MAXBUF];
+00643 <span class="keywordtype">char</span> t[MAXBUF];
+00644 <span class="keywordtype">char</span> n[MAXBUF];
+00645 strlcpy(t,tag.c_str(),MAXBUF);
+00646 strlcpy(n,name.c_str(),MAXBUF);
+00647 <span class="keywordtype">int</span> res = ReadConf(<a class="code" href="classConfigReader.html#p0">cache</a>,t,n,index,val);
+00648 <span class="keywordflow">if</span> (!res)
+00649 {
+00650 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a28">CONF_VALUE_NOT_FOUND</a>;
+00651 <span class="keywordflow">return</span> 0;
+00652 }
+00653 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < strlen(val); i++)
+00654 {
+00655 <span class="keywordflow">if</span> (!isdigit(val[i]))
+00656 {
+00657 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a26">CONF_NOT_A_NUMBER</a>;
+00658 <span class="keywordflow">return</span> 0;
+00659 }
+00660 }
+00661 <span class="keywordflow">if</span> ((needs_unsigned) && (atoi(val)<0))
+00662 {
+00663 this-><a class="code" href="classConfigReader.html#p3">error</a> = <a class="code" href="modules_8h.html#a27">CONF_NOT_UNSIGNED</a>;
+00664 <span class="keywordflow">return</span> 0;
+00665 }
+00666 <span class="keywordflow">return</span> atoi(val);
+00667 }
+00668
+<a name="l00669"></a><a class="code" href="classConfigReader.html#a6">00669</a> <span class="keywordtype">long</span> <a class="code" href="classConfigReader.html#a6">ConfigReader::GetError</a>()
+00670 {
+00671 <span class="keywordtype">long</span> olderr = this-><a class="code" href="classConfigReader.html#p3">error</a>;
+00672 this->error = 0;
+00673 <span class="keywordflow">return</span> olderr;
+00674 }
+00675
+<a name="l00676"></a><a class="code" href="classConfigReader.html#a9">00676</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)
+00677 {
+00678 <span class="keywordflow">if</span> (bail)
+00679 {
+00680 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());
+00681 exit(0);
+00682 }
+00683 <span class="keywordflow">else</span>
+00684 {
+00685 <span class="keywordtype">char</span> dataline[1024];
+00686 <span class="keywordflow">if</span> (user)
+00687 {
+00688 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>);
+00689 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof())
+00690 {
+00691 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024);
+00692 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);
+00693 }
+00694 }
+00695 <span class="keywordflow">else</span>
+00696 {
+00697 WriteOpers(<span class="stringliteral">"There were errors in the configuration file:"</span>,user-><a class="code" href="classuserrec.html#o0">nick</a>);
+00698 <span class="keywordflow">while</span> (!<a class="code" href="classConfigReader.html#p1">errorlog</a>->eof())
+00699 {
+00700 <a class="code" href="classConfigReader.html#p1">errorlog</a>->getline(dataline,1024);
+00701 WriteOpers(dataline);
+00702 }
+00703 }
+00704 <span class="keywordflow">return</span>;
+00705 }
+00706 }
+00707
+00708
+<a name="l00709"></a><a class="code" href="classConfigReader.html#a7">00709</a> <span class="keywordtype">int</span> <a class="code" href="classConfigReader.html#a7">ConfigReader::Enumerate</a>(std::string tag)
+00710 {
+00711 <span class="keywordflow">return</span> EnumConf(<a class="code" href="classConfigReader.html#p0">cache</a>,tag.c_str());
+00712 }
+00713
+<a name="l00714"></a><a class="code" href="classConfigReader.html#a10">00714</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)
+00715 {
+00716 <span class="keywordflow">return</span> EnumValues(<a class="code" href="classConfigReader.html#p0">cache</a>, tag.c_str(), index);
+00717 }
+00718
+<a name="l00719"></a><a class="code" href="classConfigReader.html#a8">00719</a> <span class="keywordtype">bool</span> <a class="code" href="classConfigReader.html#a8">ConfigReader::Verify</a>()
+00720 {
+00721 <span class="keywordflow">return</span> this-><a class="code" href="classConfigReader.html#p2">readerror</a>;
+00722 }
+00723
+00724
+<a name="l00725"></a><a class="code" href="classFileReader.html#a1">00725</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>(std::string filename)
+00726 {
+00727 <a class="code" href="modules_8h.html#a30">file_cache</a> c;
+00728 readfile(c,filename.c_str());
+00729 this-><a class="code" href="classFileReader.html#r0">fc</a> = c;
+00730 }
+00731
+<a name="l00732"></a><a class="code" href="classFileReader.html#a0">00732</a> <a class="code" href="classFileReader.html#a0">FileReader::FileReader</a>()
+00733 {
+00734 }
+00735
+<a name="l00736"></a><a class="code" href="classFileReader.html#a3">00736</a> <span class="keywordtype">void</span> <a class="code" href="classFileReader.html#a3">FileReader::LoadFile</a>(std::string filename)
+00737 {
+00738 <a class="code" href="modules_8h.html#a30">file_cache</a> c;
+00739 readfile(c,filename.c_str());
+00740 this-><a class="code" href="classFileReader.html#r0">fc</a> = c;
+00741 }
+00742
+00743
+<a name="l00744"></a><a class="code" href="classFileReader.html#a2">00744</a> <a class="code" href="classFileReader.html#a2">FileReader::~FileReader</a>()
+00745 {
+00746 }
+00747
+<a name="l00748"></a><a class="code" href="classFileReader.html#a4">00748</a> <span class="keywordtype">bool</span> <a class="code" href="classFileReader.html#a4">FileReader::Exists</a>()
+00749 {
+00750 <span class="keywordflow">if</span> (<a class="code" href="classFileReader.html#r0">fc</a>.size() == 0)
+00751 {
+00752 <span class="keywordflow">return</span>(<span class="keyword">false</span>);
+00753 }
+00754 <span class="keywordflow">else</span>
+00755 {
+00756 <span class="keywordflow">return</span>(<span class="keyword">true</span>);
+00757 }
+00758 }
+00759
+<a name="l00760"></a><a class="code" href="classFileReader.html#a5">00760</a> std::string <a class="code" href="classFileReader.html#a5">FileReader::GetLine</a>(<span class="keywordtype">int</span> x)
+00761 {
+00762 <span class="keywordflow">if</span> ((x<0) || (x><a class="code" href="classFileReader.html#r0">fc</a>.size()))
+00763 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
+00764 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>[x];
+00765 }
+00766
+<a name="l00767"></a><a class="code" href="classFileReader.html#a6">00767</a> <span class="keywordtype">int</span> <a class="code" href="classFileReader.html#a6">FileReader::FileSize</a>()
+00768 {
+00769 <span class="keywordflow">return</span> <a class="code" href="classFileReader.html#r0">fc</a>.size();
+00770 }
+00771
+00772
+00773 std::vector<Module*> <a class="code" href="modules_8cpp.html#a59">modules</a>(255);
+00774 std::vector<ircd_module*> <a class="code" href="modules_8cpp.html#a60">factory</a>(255);
+00775
+<a name="l00776"></a><a class="code" href="modules_8cpp.html#a1">00776</a> <span class="keywordtype">int</span> <a class="code" href="modules_8cpp.html#a1">MODCOUNT</a> = -1;
+00777
+00778
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sat Apr 9 14:38:25 2005 for InspIRCd by