From 668df37516e3ee3555aa7085f10d54bda3b4e426 Mon Sep 17 00:00:00 2001 From: brain Date: Sat, 16 Apr 2005 18:58:08 +0000 Subject: Added: OnMeshToken MeshSendAll(std::string text); MeshSendCommon(userrec* user, std::string text); MeshSendAllAlive(std::string text); MeshSendUnicast(std::string destination, std::string text); MeshSendAllExcept(std::string target, std::string text); MeshCheckChan(chanrec *c,std::string servername); MeshCheckCommon(userrec* u,std::string servername); git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1112 e03df62e-2008-0410-955e-edbf42e46eb7 --- docs/module-doc/modules_8cpp-source.html | 1169 ++++++++++++++++-------------- 1 file changed, 607 insertions(+), 562 deletions(-) (limited to 'docs/module-doc/modules_8cpp-source.html') diff --git a/docs/module-doc/modules_8cpp-source.html b/docs/module-doc/modules_8cpp-source.html index 5d45f4d06..35bab1de2 100644 --- a/docs/module-doc/modules_8cpp-source.html +++ b/docs/module-doc/modules_8cpp-source.html @@ -353,575 +353,620 @@ 00346 int Module::OnChangeLocalUserHost(userrec* user, std::string newhost) { return 0; }; 00347 int Module::OnChangeLocalUserGECOS(userrec* user, std::string newhost) { return 0; }; 00348 int Module::OnLocalTopicChange(userrec* user, chanrec* chan, std::string topic) { return 0; }; -00349 -00350 // server is a wrapper class that provides methods to all of the C-style -00351 // exports in the core -00352 // -00353 -00354 Server::Server() -00355 { -00356 } -00357 -00358 Server::~Server() -00359 { -00360 } -00361 -00362 void Server::SendOpers(std::string s) -00363 { -00364 WriteOpers("%s",s.c_str()); -00365 } -00366 -00367 bool Server::MatchText(std::string sliteral, std::string spattern) -00368 { -00369 char literal[MAXBUF],pattern[MAXBUF]; -00370 strlcpy(literal,sliteral.c_str(),MAXBUF); -00371 strlcpy(pattern,spattern.c_str(),MAXBUF); -00372 return match(literal,pattern); -00373 } -00374 -00375 void Server::SendToModeMask(std::string modes, int flags, std::string text) -00376 { -00377 WriteMode(modes.c_str(),flags,"%s",text.c_str()); -00378 } -00379 -00380 chanrec* Server::JoinUserToChannel(userrec* user, std::string cname, std::string key) -00381 { -00382 return add_channel(user,cname.c_str(),key.c_str(),true); -00383 } -00384 -00385 chanrec* Server::PartUserFromChannel(userrec* user, std::string cname, std::string reason) -00386 { -00387 return del_channel(user,cname.c_str(),reason.c_str(),false); -00388 } -00389 -00390 chanuserlist Server::GetUsers(chanrec* chan) -00391 { -00392 chanuserlist userl; -00393 userl.clear(); -00394 for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) -00395 { -00396 if (i->second) -00397 { -00398 if (has_channel(i->second,chan)) -00399 { -00400 if (isnick(i->second->nick)) -00401 { -00402 userl.push_back(i->second); -00403 } -00404 } -00405 } -00406 } -00407 return userl; -00408 } -00409 void Server::ChangeUserNick(userrec* user, std::string nickname) -00410 { -00411 force_nickchange(user,nickname.c_str()); -00412 } -00413 -00414 void Server::QuitUser(userrec* user, std::string reason) -00415 { -00416 send_network_quit(user->nick,reason.c_str()); -00417 kill_link(user,reason.c_str()); -00418 } -00419 -00420 bool Server::IsUlined(std::string server) -00421 { -00422 return is_uline(server.c_str()); -00423 } -00424 -00425 void Server::CallCommandHandler(std::string commandname, char** parameters, int pcnt, userrec* user) -00426 { -00427 call_handler(commandname.c_str(),parameters,pcnt,user); -00428 } -00429 -00430 void Server::Log(int level, std::string s) -00431 { -00432 log(level,"%s",s.c_str()); -00433 } -00434 -00435 void Server::AddCommand(char* cmd, handlerfunc f, char flags, int minparams, char* source) -00436 { -00437 createcommand(cmd,f,flags,minparams,source); -00438 } -00439 -00440 void Server::SendMode(char **parameters, int pcnt, userrec *user) -00441 { -00442 server_mode(parameters,pcnt,user); -00443 } -00444 -00445 void Server::Send(int Socket, std::string s) -00446 { -00447 Write(Socket,"%s",s.c_str()); -00448 } -00449 -00450 void Server::SendServ(int Socket, std::string s) -00451 { -00452 WriteServ(Socket,"%s",s.c_str()); -00453 } -00454 -00455 void Server::SendFrom(int Socket, userrec* User, std::string s) -00456 { -00457 WriteFrom(Socket,User,"%s",s.c_str()); -00458 } -00459 -00460 void Server::SendTo(userrec* Source, userrec* Dest, std::string s) -00461 { -00462 if (!Source) -00463 { -00464 // if source is NULL, then the message originates from the local server -00465 Write(Dest->fd,":%s %s",this->GetServerName().c_str(),s.c_str()); -00466 } -00467 else -00468 { -00469 // otherwise it comes from the user specified -00470 WriteTo(Source,Dest,"%s",s.c_str()); -00471 } -00472 } -00473 -00474 void Server::SendChannel(userrec* User, chanrec* Channel, std::string s,bool IncludeSender) -00475 { -00476 if (IncludeSender) -00477 { -00478 WriteChannel(Channel,User,"%s",s.c_str()); -00479 } -00480 else -00481 { -00482 ChanExceptSender(Channel,User,"%s",s.c_str()); -00483 } -00484 } -00485 -00486 bool Server::CommonChannels(userrec* u1, userrec* u2) -00487 { -00488 return (common_channels(u1,u2) != 0); -00489 } -00490 -00491 void Server::SendCommon(userrec* User, std::string text,bool IncludeSender) -00492 { -00493 if (IncludeSender) -00494 { -00495 WriteCommon(User,"%s",text.c_str()); -00496 } -00497 else -00498 { -00499 WriteCommonExcept(User,"%s",text.c_str()); -00500 } -00501 } -00502 -00503 void Server::SendWallops(userrec* User, std::string text) -00504 { -00505 WriteWallOps(User,false,"%s",text.c_str()); -00506 } -00507 -00508 void Server::ChangeHost(userrec* user, std::string host) -00509 { -00510 ChangeDisplayedHost(user,host.c_str()); -00511 } -00512 -00513 void Server::ChangeGECOS(userrec* user, std::string gecos) -00514 { -00515 ChangeName(user,gecos.c_str()); -00516 } -00517 -00518 bool Server::IsNick(std::string nick) -00519 { -00520 return (isnick(nick.c_str()) != 0); -00521 } -00522 -00523 userrec* Server::FindNick(std::string nick) -00524 { -00525 return Find(nick); -00526 } -00527 -00528 chanrec* Server::FindChannel(std::string channel) -00529 { -00530 return FindChan(channel.c_str()); -00531 } -00532 -00533 std::string Server::ChanMode(userrec* User, chanrec* Chan) -00534 { -00535 return cmode(User,Chan); -00536 } -00537 -00538 bool Server::IsOnChannel(userrec* User, chanrec* Chan) -00539 { -00540 return has_channel(User,Chan); -00541 } -00542 -00543 std::string Server::GetServerName() -00544 { -00545 return getservername(); -00546 } -00547 -00548 std::string Server::GetNetworkName() -00549 { -00550 return getnetworkname(); -00551 } -00552 -00553 Admin Server::GetAdmin() -00554 { -00555 return Admin(getadminname(),getadminemail(),getadminnick()); -00556 } -00557 +00349 int Module::OnMeshToken(char token,string_list params,serverrec* source,serverrec* reply, std::string tcp_host,std::string ipaddr,int port) { return 0; }; +00350 +00351 // server is a wrapper class that provides methods to all of the C-style +00352 // exports in the core +00353 // +00354 +00355 Server::Server() +00356 { +00357 } +00358 +00359 Server::~Server() +00360 { +00361 } +00362 +00363 void Server::SendOpers(std::string s) +00364 { +00365 WriteOpers("%s",s.c_str()); +00366 } +00367 +00368 bool Server::MatchText(std::string sliteral, std::string spattern) +00369 { +00370 char literal[MAXBUF],pattern[MAXBUF]; +00371 strlcpy(literal,sliteral.c_str(),MAXBUF); +00372 strlcpy(pattern,spattern.c_str(),MAXBUF); +00373 return match(literal,pattern); +00374 } +00375 +00376 void Server::SendToModeMask(std::string modes, int flags, std::string text) +00377 { +00378 WriteMode(modes.c_str(),flags,"%s",text.c_str()); +00379 } +00380 +00381 chanrec* Server::JoinUserToChannel(userrec* user, std::string cname, std::string key) +00382 { +00383 return add_channel(user,cname.c_str(),key.c_str(),true); +00384 } +00385 +00386 chanrec* Server::PartUserFromChannel(userrec* user, std::string cname, std::string reason) +00387 { +00388 return del_channel(user,cname.c_str(),reason.c_str(),false); +00389 } +00390 +00391 chanuserlist Server::GetUsers(chanrec* chan) +00392 { +00393 chanuserlist userl; +00394 userl.clear(); +00395 for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) +00396 { +00397 if (i->second) +00398 { +00399 if (has_channel(i->second,chan)) +00400 { +00401 if (isnick(i->second->nick)) +00402 { +00403 userl.push_back(i->second); +00404 } +00405 } +00406 } +00407 } +00408 return userl; +00409 } +00410 void Server::ChangeUserNick(userrec* user, std::string nickname) +00411 { +00412 force_nickchange(user,nickname.c_str()); +00413 } +00414 +00415 void Server::QuitUser(userrec* user, std::string reason) +00416 { +00417 send_network_quit(user->nick,reason.c_str()); +00418 kill_link(user,reason.c_str()); +00419 } +00420 +00421 bool Server::IsUlined(std::string server) +00422 { +00423 return is_uline(server.c_str()); +00424 } +00425 +00426 void Server::CallCommandHandler(std::string commandname, char** parameters, int pcnt, userrec* user) +00427 { +00428 call_handler(commandname.c_str(),parameters,pcnt,user); +00429 } +00430 +00431 void Server::Log(int level, std::string s) +00432 { +00433 log(level,"%s",s.c_str()); +00434 } +00435 +00436 void Server::AddCommand(char* cmd, handlerfunc f, char flags, int minparams, char* source) +00437 { +00438 createcommand(cmd,f,flags,minparams,source); +00439 } +00440 +00441 void Server::SendMode(char **parameters, int pcnt, userrec *user) +00442 { +00443 server_mode(parameters,pcnt,user); +00444 } +00445 +00446 void Server::Send(int Socket, std::string s) +00447 { +00448 Write(Socket,"%s",s.c_str()); +00449 } +00450 +00451 void Server::SendServ(int Socket, std::string s) +00452 { +00453 WriteServ(Socket,"%s",s.c_str()); +00454 } +00455 +00456 void Server::SendFrom(int Socket, userrec* User, std::string s) +00457 { +00458 WriteFrom(Socket,User,"%s",s.c_str()); +00459 } +00460 +00461 void Server::SendTo(userrec* Source, userrec* Dest, std::string s) +00462 { +00463 if (!Source) +00464 { +00465 // if source is NULL, then the message originates from the local server +00466 Write(Dest->fd,":%s %s",this->GetServerName().c_str(),s.c_str()); +00467 } +00468 else +00469 { +00470 // otherwise it comes from the user specified +00471 WriteTo(Source,Dest,"%s",s.c_str()); +00472 } +00473 } +00474 +00475 void Server::SendChannel(userrec* User, chanrec* Channel, std::string s,bool IncludeSender) +00476 { +00477 if (IncludeSender) +00478 { +00479 WriteChannel(Channel,User,"%s",s.c_str()); +00480 } +00481 else +00482 { +00483 ChanExceptSender(Channel,User,"%s",s.c_str()); +00484 } +00485 } +00486 +00487 bool Server::CommonChannels(userrec* u1, userrec* u2) +00488 { +00489 return (common_channels(u1,u2) != 0); +00490 } +00491 +00492 void Server::SendCommon(userrec* User, std::string text,bool IncludeSender) +00493 { +00494 if (IncludeSender) +00495 { +00496 WriteCommon(User,"%s",text.c_str()); +00497 } +00498 else +00499 { +00500 WriteCommonExcept(User,"%s",text.c_str()); +00501 } +00502 } +00503 +00504 void Server::SendWallops(userrec* User, std::string text) +00505 { +00506 WriteWallOps(User,false,"%s",text.c_str()); +00507 } +00508 +00509 void Server::ChangeHost(userrec* user, std::string host) +00510 { +00511 ChangeDisplayedHost(user,host.c_str()); +00512 } +00513 +00514 void Server::ChangeGECOS(userrec* user, std::string gecos) +00515 { +00516 ChangeName(user,gecos.c_str()); +00517 } +00518 +00519 bool Server::IsNick(std::string nick) +00520 { +00521 return (isnick(nick.c_str()) != 0); +00522 } +00523 +00524 userrec* Server::FindNick(std::string nick) +00525 { +00526 return Find(nick); +00527 } +00528 +00529 chanrec* Server::FindChannel(std::string channel) +00530 { +00531 return FindChan(channel.c_str()); +00532 } +00533 +00534 std::string Server::ChanMode(userrec* User, chanrec* Chan) +00535 { +00536 return cmode(User,Chan); +00537 } +00538 +00539 bool Server::IsOnChannel(userrec* User, chanrec* Chan) +00540 { +00541 return has_channel(User,Chan); +00542 } +00543 +00544 std::string Server::GetServerName() +00545 { +00546 return getservername(); +00547 } +00548 +00549 std::string Server::GetNetworkName() +00550 { +00551 return getnetworkname(); +00552 } +00553 +00554 Admin Server::GetAdmin() +00555 { +00556 return Admin(getadminname(),getadminemail(),getadminnick()); +00557 } 00558 00559 -00560 bool Server::AddExtendedMode(char modechar, int type, bool requires_oper, int params_when_on, int params_when_off) -00561 { -00562 if (type == MT_SERVER) -00563 { -00564 log(DEBUG,"*** API ERROR *** Modes of type MT_SERVER are reserved for future expansion"); -00565 return false; -00566 } -00567 if (((params_when_on>0) || (params_when_off>0)) && (type == MT_CLIENT)) -00568 { -00569 log(DEBUG,"*** API ERROR *** Parameters on MT_CLIENT modes are not supported"); -00570 return false; -00571 } -00572 if ((params_when_on>1) || (params_when_off>1)) -00573 { -00574 log(DEBUG,"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"); -00575 return false; -00576 } -00577 return DoAddExtendedMode(modechar,type,requires_oper,params_when_on,params_when_off); -00578 } -00579 -00580 bool Server::AddExtendedListMode(char modechar) -00581 { -00582 bool res = DoAddExtendedMode(modechar,MT_CHANNEL,false,1,1); -00583 if (res) -00584 ModeMakeList(modechar); -00585 return res; -00586 } -00587 -00588 int Server::CountUsers(chanrec* c) -00589 { -00590 return usercount(c); -00591 } -00592 +00560 +00561 bool Server::AddExtendedMode(char modechar, int type, bool requires_oper, int params_when_on, int params_when_off) +00562 { +00563 if (type == MT_SERVER) +00564 { +00565 log(DEBUG,"*** API ERROR *** Modes of type MT_SERVER are reserved for future expansion"); +00566 return false; +00567 } +00568 if (((params_when_on>0) || (params_when_off>0)) && (type == MT_CLIENT)) +00569 { +00570 log(DEBUG,"*** API ERROR *** Parameters on MT_CLIENT modes are not supported"); +00571 return false; +00572 } +00573 if ((params_when_on>1) || (params_when_off>1)) +00574 { +00575 log(DEBUG,"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"); +00576 return false; +00577 } +00578 return DoAddExtendedMode(modechar,type,requires_oper,params_when_on,params_when_off); +00579 } +00580 +00581 bool Server::AddExtendedListMode(char modechar) +00582 { +00583 bool res = DoAddExtendedMode(modechar,MT_CHANNEL,false,1,1); +00584 if (res) +00585 ModeMakeList(modechar); +00586 return res; +00587 } +00588 +00589 int Server::CountUsers(chanrec* c) +00590 { +00591 return usercount(c); +00592 } 00593 -00594 bool Server::UserToPseudo(userrec* user,std::string message) -00595 { -00596 unsigned int old_fd = user->fd; -00597 user->fd = FD_MAGIC_NUMBER; -00598 Write(old_fd,"ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,message.c_str()); -00599 close(old_fd); -00600 shutdown (old_fd,2); -00601 } -00602 -00603 bool Server::PseudoToUser(userrec* alive,userrec* zombie,std::string message) -00604 { -00605 zombie->fd = alive->fd; -00606 alive->fd = FD_MAGIC_NUMBER; -00607 Write(zombie->fd,":%s!%s@%s NICK %s",alive->nick,alive->ident,alive->host,zombie->nick); -00608 kill_link(alive,message.c_str()); -00609 for (int i = 0; i != MAXCHANS; i++) -00610 { -00611 if (zombie->chans[i].channel != NULL) -00612 { -00613 if (zombie->chans[i].channel->name) -00614 { -00615 chanrec* Ptr = zombie->chans[i].channel; -00616 WriteFrom(zombie->fd,zombie,"JOIN %s",Ptr->name); -00617 if (Ptr->topicset) -00618 { -00619 WriteServ(zombie->fd,"332 %s %s :%s", zombie->nick, Ptr->name, Ptr->topic); -00620 WriteServ(zombie->fd,"333 %s %s %s %d", zombie->nick, Ptr->name, Ptr->setby, Ptr->topicset); -00621 } -00622 userlist(zombie,Ptr); -00623 WriteServ(zombie->fd,"366 %s %s :End of /NAMES list.", zombie->nick, Ptr->name); -00624 WriteServ(zombie->fd,"324 %s %s +%s",zombie->nick, Ptr->name,chanmodes(Ptr)); -00625 WriteServ(zombie->fd,"329 %s %s %d", zombie->nick, Ptr->name, Ptr->created); -00626 -00627 } -00628 } -00629 } -00630 -00631 } -00632 -00633 void Server::AddGLine(long duration, std::string source, std::string reason, std::string hostmask) -00634 { -00635 add_gline(duration, source.c_str(), reason.c_str(), hostmask.c_str()); -00636 } -00637 -00638 void Server::AddQLine(long duration, std::string source, std::string reason, std::string nickname) -00639 { -00640 add_qline(duration, source.c_str(), reason.c_str(), nickname.c_str()); -00641 } -00642 -00643 void Server::AddZLine(long duration, std::string source, std::string reason, std::string ipaddr) -00644 { -00645 add_zline(duration, source.c_str(), reason.c_str(), ipaddr.c_str()); -00646 } -00647 -00648 void Server::AddKLine(long duration, std::string source, std::string reason, std::string hostmask) -00649 { -00650 add_kline(duration, source.c_str(), reason.c_str(), hostmask.c_str()); -00651 } -00652 -00653 void Server::AddELine(long duration, std::string source, std::string reason, std::string hostmask) -00654 { -00655 add_eline(duration, source.c_str(), reason.c_str(), hostmask.c_str()); -00656 } -00657 -00658 bool Server::DelGLine(std::string hostmask) -00659 { -00660 del_gline(hostmask.c_str()); -00661 } -00662 -00663 bool Server::DelQLine(std::string nickname) -00664 { -00665 del_qline(nickname.c_str()); -00666 } -00667 -00668 bool Server::DelZLine(std::string ipaddr) -00669 { -00670 del_zline(ipaddr.c_str()); -00671 } -00672 -00673 bool Server::DelKLine(std::string hostmask) -00674 { -00675 del_kline(hostmask.c_str()); -00676 } -00677 -00678 bool Server::DelELine(std::string hostmask) -00679 { -00680 del_eline(hostmask.c_str()); -00681 } -00682 -00683 long Server::CalcDuration(std::string delta) -00684 { -00685 return duration(delta.c_str()); -00686 } -00687 -00688 bool Server::IsValidMask(std::string mask) -00689 { -00690 const char* dest = mask.c_str(); -00691 if (strchr(dest,'!')==0) -00692 return false; -00693 if (strchr(dest,'@')==0) -00694 return false; -00695 for (int i = 0; i < strlen(dest); i++) -00696 if (dest[i] < 32) -00697 return false; -00698 for (int i = 0; i < strlen(dest); i++) -00699 if (dest[i] > 126) -00700 return false; -00701 int c = 0; -00702 for (int i = 0; i < strlen(dest); i++) -00703 if (dest[i] == '!') -00704 c++; -00705 if (c>1) -00706 return false; -00707 c = 0; -00708 for (int i = 0; i < strlen(dest); i++) -00709 if (dest[i] == '@') -00710 c++; -00711 if (c>1) -00712 return false; -00713 -00714 return true; -00715 } -00716 -00717 ConfigReader::ConfigReader() -00718 { -00719 this->cache = new std::stringstream(std::stringstream::in | std::stringstream::out); -00720 this->errorlog = new std::stringstream(std::stringstream::in | std::stringstream::out); -00721 this->readerror = LoadConf(CONFIG_FILE,this->cache,this->errorlog); -00722 if (!this->readerror) -00723 this->error = CONF_FILE_NOT_FOUND; -00724 } -00725 -00726 -00727 ConfigReader::~ConfigReader() -00728 { -00729 if (this->cache) -00730 delete this->cache; -00731 if (this->errorlog) -00732 delete this->errorlog; -00733 } -00734 -00735 -00736 ConfigReader::ConfigReader(std::string filename) -00737 { -00738 this->cache = new std::stringstream(std::stringstream::in | std::stringstream::out); -00739 this->errorlog = new std::stringstream(std::stringstream::in | std::stringstream::out); -00740 this->readerror = LoadConf(filename.c_str(),this->cache,this->errorlog); -00741 if (!this->readerror) -00742 this->error = CONF_FILE_NOT_FOUND; -00743 }; -00744 -00745 std::string ConfigReader::ReadValue(std::string tag, std::string name, int index) -00746 { -00747 char val[MAXBUF]; -00748 char t[MAXBUF]; -00749 char n[MAXBUF]; -00750 strlcpy(t,tag.c_str(),MAXBUF); -00751 strlcpy(n,name.c_str(),MAXBUF); -00752 int res = ReadConf(cache,t,n,index,val); -00753 if (!res) -00754 { -00755 this->error = CONF_VALUE_NOT_FOUND; -00756 return ""; -00757 } -00758 return std::string(val); -00759 } -00760 -00761 bool ConfigReader::ReadFlag(std::string tag, std::string name, int index) -00762 { -00763 char val[MAXBUF]; -00764 char t[MAXBUF]; -00765 char n[MAXBUF]; -00766 strlcpy(t,tag.c_str(),MAXBUF); -00767 strlcpy(n,name.c_str(),MAXBUF); -00768 int res = ReadConf(cache,t,n,index,val); -00769 if (!res) -00770 { -00771 this->error = CONF_VALUE_NOT_FOUND; -00772 return false; -00773 } -00774 std::string s = val; -00775 return ((s == "yes") || (s == "YES") || (s == "true") || (s == "TRUE") || (s == "1")); -00776 } -00777 -00778 long ConfigReader::ReadInteger(std::string tag, std::string name, int index, bool needs_unsigned) -00779 { -00780 char val[MAXBUF]; -00781 char t[MAXBUF]; -00782 char n[MAXBUF]; -00783 strlcpy(t,tag.c_str(),MAXBUF); -00784 strlcpy(n,name.c_str(),MAXBUF); -00785 int res = ReadConf(cache,t,n,index,val); -00786 if (!res) -00787 { -00788 this->error = CONF_VALUE_NOT_FOUND; -00789 return 0; -00790 } -00791 for (int i = 0; i < strlen(val); i++) -00792 { -00793 if (!isdigit(val[i])) -00794 { -00795 this->error = CONF_NOT_A_NUMBER; -00796 return 0; -00797 } -00798 } -00799 if ((needs_unsigned) && (atoi(val)<0)) -00800 { -00801 this->error = CONF_NOT_UNSIGNED; -00802 return 0; -00803 } -00804 return atoi(val); -00805 } -00806 -00807 long ConfigReader::GetError() -00808 { -00809 long olderr = this->error; -00810 this->error = 0; -00811 return olderr; -00812 } -00813 -00814 void ConfigReader::DumpErrors(bool bail, userrec* user) -00815 { -00816 if (bail) -00817 { -00818 printf("There were errors in your configuration:\n%s",errorlog->str().c_str()); -00819 exit(0); -00820 } -00821 else -00822 { -00823 char dataline[1024]; -00824 if (user) -00825 { -00826 WriteServ(user->fd,"NOTICE %s :There were errors in the configuration file:",user->nick); -00827 while (!errorlog->eof()) -00828 { -00829 errorlog->getline(dataline,1024); -00830 WriteServ(user->fd,"NOTICE %s :%s",user->nick,dataline); -00831 } -00832 } -00833 else -00834 { -00835 WriteOpers("There were errors in the configuration file:",user->nick); -00836 while (!errorlog->eof()) -00837 { -00838 errorlog->getline(dataline,1024); -00839 WriteOpers(dataline); -00840 } -00841 } -00842 return; +00594 +00595 bool Server::UserToPseudo(userrec* user,std::string message) +00596 { +00597 unsigned int old_fd = user->fd; +00598 user->fd = FD_MAGIC_NUMBER; +00599 Write(old_fd,"ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,message.c_str()); +00600 close(old_fd); +00601 shutdown (old_fd,2); +00602 } +00603 +00604 bool Server::PseudoToUser(userrec* alive,userrec* zombie,std::string message) +00605 { +00606 zombie->fd = alive->fd; +00607 alive->fd = FD_MAGIC_NUMBER; +00608 Write(zombie->fd,":%s!%s@%s NICK %s",alive->nick,alive->ident,alive->host,zombie->nick); +00609 kill_link(alive,message.c_str()); +00610 for (int i = 0; i != MAXCHANS; i++) +00611 { +00612 if (zombie->chans[i].channel != NULL) +00613 { +00614 if (zombie->chans[i].channel->name) +00615 { +00616 chanrec* Ptr = zombie->chans[i].channel; +00617 WriteFrom(zombie->fd,zombie,"JOIN %s",Ptr->name); +00618 if (Ptr->topicset) +00619 { +00620 WriteServ(zombie->fd,"332 %s %s :%s", zombie->nick, Ptr->name, Ptr->topic); +00621 WriteServ(zombie->fd,"333 %s %s %s %d", zombie->nick, Ptr->name, Ptr->setby, Ptr->topicset); +00622 } +00623 userlist(zombie,Ptr); +00624 WriteServ(zombie->fd,"366 %s %s :End of /NAMES list.", zombie->nick, Ptr->name); +00625 WriteServ(zombie->fd,"324 %s %s +%s",zombie->nick, Ptr->name,chanmodes(Ptr)); +00626 WriteServ(zombie->fd,"329 %s %s %d", zombie->nick, Ptr->name, Ptr->created); +00627 +00628 } +00629 } +00630 } +00631 +00632 } +00633 +00634 void Server::AddGLine(long duration, std::string source, std::string reason, std::string hostmask) +00635 { +00636 add_gline(duration, source.c_str(), reason.c_str(), hostmask.c_str()); +00637 } +00638 +00639 void Server::AddQLine(long duration, std::string source, std::string reason, std::string nickname) +00640 { +00641 add_qline(duration, source.c_str(), reason.c_str(), nickname.c_str()); +00642 } +00643 +00644 void Server::AddZLine(long duration, std::string source, std::string reason, std::string ipaddr) +00645 { +00646 add_zline(duration, source.c_str(), reason.c_str(), ipaddr.c_str()); +00647 } +00648 +00649 void Server::AddKLine(long duration, std::string source, std::string reason, std::string hostmask) +00650 { +00651 add_kline(duration, source.c_str(), reason.c_str(), hostmask.c_str()); +00652 } +00653 +00654 void Server::AddELine(long duration, std::string source, std::string reason, std::string hostmask) +00655 { +00656 add_eline(duration, source.c_str(), reason.c_str(), hostmask.c_str()); +00657 } +00658 +00659 bool Server::DelGLine(std::string hostmask) +00660 { +00661 del_gline(hostmask.c_str()); +00662 } +00663 +00664 bool Server::DelQLine(std::string nickname) +00665 { +00666 del_qline(nickname.c_str()); +00667 } +00668 +00669 bool Server::DelZLine(std::string ipaddr) +00670 { +00671 del_zline(ipaddr.c_str()); +00672 } +00673 +00674 bool Server::DelKLine(std::string hostmask) +00675 { +00676 del_kline(hostmask.c_str()); +00677 } +00678 +00679 bool Server::DelELine(std::string hostmask) +00680 { +00681 del_eline(hostmask.c_str()); +00682 } +00683 +00684 long Server::CalcDuration(std::string delta) +00685 { +00686 return duration(delta.c_str()); +00687 } +00688 +00689 bool Server::IsValidMask(std::string mask) +00690 { +00691 const char* dest = mask.c_str(); +00692 if (strchr(dest,'!')==0) +00693 return false; +00694 if (strchr(dest,'@')==0) +00695 return false; +00696 for (int i = 0; i < strlen(dest); i++) +00697 if (dest[i] < 32) +00698 return false; +00699 for (int i = 0; i < strlen(dest); i++) +00700 if (dest[i] > 126) +00701 return false; +00702 int c = 0; +00703 for (int i = 0; i < strlen(dest); i++) +00704 if (dest[i] == '!') +00705 c++; +00706 if (c>1) +00707 return false; +00708 c = 0; +00709 for (int i = 0; i < strlen(dest); i++) +00710 if (dest[i] == '@') +00711 c++; +00712 if (c>1) +00713 return false; +00714 +00715 return true; +00716 } +00717 +00718 void Server::MeshSendAll(std::string text) +00719 { +00720 NetSendToAll((char*)text.c_str()); +00721 } +00722 +00723 void Server::MeshSendCommon(userrec* user, std::string text) +00724 { +00725 if (user) +00726 NetSendToCommon(user,(char*)text.c_str()); +00727 } +00728 +00729 void Server::MeshSendAllAlive(std::string text) +00730 { +00731 NetSendToAllAlive((char*)text.c_str()); +00732 } +00733 +00734 void Server::MeshSendUnicast(std::string destination, std::string text) +00735 { +00736 NetSendToOne((char*)destination.c_str(),(char*)text.c_str()); +00737 } +00738 +00739 void Server::MeshSendAllExcept(std::string target, std::string text) +00740 { +00741 NetSendToAllExcept(target.c_str(),(char*)text.c_str()); +00742 } +00743 +00744 bool Server::MeshCheckChan(chanrec *c,std::string servername) +00745 { +00746 if (c) +00747 { +00748 return ChanAnyOnThisServer(c,(char*)servername.c_str()); +00749 } +00750 else return false; +00751 } +00752 +00753 bool Server::MeshCheckCommon(userrec* u,std::string servername) +00754 { +00755 if (u) +00756 { +00757 return CommonOnThisServer(u,(char*)servername.c_str()); +00758 } +00759 else return false; +00760 } +00761 +00762 ConfigReader::ConfigReader() +00763 { +00764 this->cache = new std::stringstream(std::stringstream::in | std::stringstream::out); +00765 this->errorlog = new std::stringstream(std::stringstream::in | std::stringstream::out); +00766 this->readerror = LoadConf(CONFIG_FILE,this->cache,this->errorlog); +00767 if (!this->readerror) +00768 this->error = CONF_FILE_NOT_FOUND; +00769 } +00770 +00771 +00772 ConfigReader::~ConfigReader() +00773 { +00774 if (this->cache) +00775 delete this->cache; +00776 if (this->errorlog) +00777 delete this->errorlog; +00778 } +00779 +00780 +00781 ConfigReader::ConfigReader(std::string filename) +00782 { +00783 this->cache = new std::stringstream(std::stringstream::in | std::stringstream::out); +00784 this->errorlog = new std::stringstream(std::stringstream::in | std::stringstream::out); +00785 this->readerror = LoadConf(filename.c_str(),this->cache,this->errorlog); +00786 if (!this->readerror) +00787 this->error = CONF_FILE_NOT_FOUND; +00788 }; +00789 +00790 std::string ConfigReader::ReadValue(std::string tag, std::string name, int index) +00791 { +00792 char val[MAXBUF]; +00793 char t[MAXBUF]; +00794 char n[MAXBUF]; +00795 strlcpy(t,tag.c_str(),MAXBUF); +00796 strlcpy(n,name.c_str(),MAXBUF); +00797 int res = ReadConf(cache,t,n,index,val); +00798 if (!res) +00799 { +00800 this->error = CONF_VALUE_NOT_FOUND; +00801 return ""; +00802 } +00803 return std::string(val); +00804 } +00805 +00806 bool ConfigReader::ReadFlag(std::string tag, std::string name, int index) +00807 { +00808 char val[MAXBUF]; +00809 char t[MAXBUF]; +00810 char n[MAXBUF]; +00811 strlcpy(t,tag.c_str(),MAXBUF); +00812 strlcpy(n,name.c_str(),MAXBUF); +00813 int res = ReadConf(cache,t,n,index,val); +00814 if (!res) +00815 { +00816 this->error = CONF_VALUE_NOT_FOUND; +00817 return false; +00818 } +00819 std::string s = val; +00820 return ((s == "yes") || (s == "YES") || (s == "true") || (s == "TRUE") || (s == "1")); +00821 } +00822 +00823 long ConfigReader::ReadInteger(std::string tag, std::string name, int index, bool needs_unsigned) +00824 { +00825 char val[MAXBUF]; +00826 char t[MAXBUF]; +00827 char n[MAXBUF]; +00828 strlcpy(t,tag.c_str(),MAXBUF); +00829 strlcpy(n,name.c_str(),MAXBUF); +00830 int res = ReadConf(cache,t,n,index,val); +00831 if (!res) +00832 { +00833 this->error = CONF_VALUE_NOT_FOUND; +00834 return 0; +00835 } +00836 for (int i = 0; i < strlen(val); i++) +00837 { +00838 if (!isdigit(val[i])) +00839 { +00840 this->error = CONF_NOT_A_NUMBER; +00841 return 0; +00842 } 00843 } -00844 } -00845 -00846 -00847 int ConfigReader::Enumerate(std::string tag) -00848 { -00849 return EnumConf(cache,tag.c_str()); +00844 if ((needs_unsigned) && (atoi(val)<0)) +00845 { +00846 this->error = CONF_NOT_UNSIGNED; +00847 return 0; +00848 } +00849 return atoi(val); 00850 } 00851 -00852 int ConfigReader::EnumerateValues(std::string tag, int index) +00852 long ConfigReader::GetError() 00853 { -00854 return EnumValues(cache, tag.c_str(), index); -00855 } -00856 -00857 bool ConfigReader::Verify() -00858 { -00859 return this->readerror; -00860 } -00861 -00862 -00863 FileReader::FileReader(std::string filename) -00864 { -00865 file_cache c; -00866 readfile(c,filename.c_str()); -00867 this->fc = c; -00868 } -00869 -00870 FileReader::FileReader() -00871 { -00872 } -00873 -00874 void FileReader::LoadFile(std::string filename) -00875 { -00876 file_cache c; -00877 readfile(c,filename.c_str()); -00878 this->fc = c; -00879 } -00880 -00881 -00882 FileReader::~FileReader() -00883 { -00884 } -00885 -00886 bool FileReader::Exists() -00887 { -00888 if (fc.size() == 0) -00889 { -00890 return(false); -00891 } -00892 else -00893 { -00894 return(true); -00895 } -00896 } -00897 -00898 std::string FileReader::GetLine(int x) -00899 { -00900 if ((x<0) || (x>fc.size())) -00901 return ""; -00902 return fc[x]; -00903 } -00904 -00905 int FileReader::FileSize() -00906 { -00907 return fc.size(); -00908 } -00909 -00910 -00911 std::vector<Module*> modules(255); -00912 std::vector<ircd_module*> factory(255); -00913 -00914 int MODCOUNT = -1; -00915 -00916 -
1.3.3
--
cgit v1.3.1-10-gc9f91