diff options
Diffstat (limited to 'modules/protocol')
-rw-r--r-- | modules/protocol/charybdis.cpp | 17 | ||||
-rw-r--r-- | modules/protocol/inspircd20.cpp | 82 | ||||
-rw-r--r-- | modules/protocol/unreal.cpp | 27 |
3 files changed, 72 insertions, 54 deletions
diff --git a/modules/protocol/charybdis.cpp b/modules/protocol/charybdis.cpp index 028babe73..adb8b0a54 100644 --- a/modules/protocol/charybdis.cpp +++ b/modules/protocol/charybdis.cpp @@ -409,13 +409,14 @@ class ProtoCharybdis : public Module void OnChannelSync(Channel *c) override { - if (!c->ci || !mlocks) + ChanServ::Channel *ci = c->GetChannel(); + if (!ci || !mlocks) return; if (use_server_side_mlock && Servers::Capab.count("MLOCK") > 0) { - Anope::string modes = mlocks->GetMLockAsString(c->ci, false).replace_all_cs("+", "").replace_all_cs("-", ""); - Uplink::Send(Me, "MLOCK", c->creation_time, c->ci->GetName(), modes); + Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", ""); + Uplink::Send(Me, "MLOCK", c->creation_time, ci->GetName(), modes); } } @@ -424,11 +425,12 @@ class ProtoCharybdis : public Module if (!mlocks) return EVENT_CONTINUE; + Channel *c = ci->GetChannel(); ChannelMode *cm = ModeManager::FindChannelModeByName(lock->GetName()); - if (use_server_side_mlock && cm && ci->c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0) + if (use_server_side_mlock && cm && c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0) { Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", "") + cm->mchar; - Uplink::Send(Me, "MLOCK", ci->c->creation_time, ci->GetName(), modes); + Uplink::Send(Me, "MLOCK", c->creation_time, ci->GetName(), modes); } return EVENT_CONTINUE; @@ -439,11 +441,12 @@ class ProtoCharybdis : public Module if (!mlocks) return EVENT_CONTINUE; + Channel *c = ci->GetChannel(); ChannelMode *cm = ModeManager::FindChannelModeByName(lock->GetName()); - if (use_server_side_mlock && cm && ci->c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0) + if (use_server_side_mlock && cm && c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0) { Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", "").replace_all_cs(cm->mchar, ""); - Uplink::Send(Me, "MLOCK", ci->c->creation_time, ci->GetName(), modes); + Uplink::Send(Me, "MLOCK", c->creation_time, ci->GetName(), modes); } return EVENT_CONTINUE; diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp index 96ada4666..6baebb34c 100644 --- a/modules/protocol/inspircd20.cpp +++ b/modules/protocol/inspircd20.cpp @@ -990,26 +990,30 @@ void inspircd20::Metadata::Run(MessageSource &source, const std::vector<Anope::s else if ((params[0][0] == '#') && (!source.GetServer()->IsSynced())) { Channel *c = Channel::Find(params[0]); - if (c && c->ci) + if (c == nullptr) + return; + + ChanServ::Channel *ci = c->GetChannel(); + if (ci == nullptr) + return; + + if ((do_mlock) && (params[1] == "mlock")) { - if ((do_mlock) && (params[1] == "mlock")) - { - ModeLocks *modelocks = c->ci->GetExt<ModeLocks>("modelocks"); - Anope::string modes; - if (modelocks) - modes = modelocks->GetMLockAsString(c->ci, false).replace_all_cs("+", "").replace_all_cs("-", ""); - - // Mode lock string is not what we say it is? - if (modes != params[2]) - Uplink::Send(Me, "METADATA", c->name, "mlock", modes); - } - else if ((do_topiclock) && (params[1] == "topiclock")) - { - bool mystate = c->ci->IsTopicLock(); - bool serverstate = (params[2] == "1"); - if (mystate != serverstate) - Uplink::Send(Me, "METADATA", c->name, "topiclock", mystate ? "1" : ""); - } + ModeLocks *modelocks = ci->GetExt<ModeLocks>("modelocks"); + Anope::string modes; + if (modelocks) + modes = modelocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", ""); + + // Mode lock string is not what we say it is? + if (modes != params[2]) + Uplink::Send(Me, "METADATA", c->name, "mlock", modes); + } + else if ((do_topiclock) && (params[1] == "topiclock")) + { + bool mystate = ci->IsTopicLock(); + bool serverstate = (params[2] == "1"); + if (mystate != serverstate) + Uplink::Send(Me, "METADATA", c->name, "topiclock", mystate ? "1" : ""); } } else if (params[0] == "*") @@ -1495,41 +1499,45 @@ class ProtoInspIRCd20 : public Module void OnChannelSync(Channel *c) override { - if (c->ci) - this->OnChanRegistered(c->ci); + ChanServ::Channel *ci = c->GetChannel(); + if (ci) + this->OnChanRegistered(ci); } void OnChanRegistered(ChanServ::Channel *ci) override { - if (use_server_side_mlock && ci->c && mlocks && !mlocks->GetMLockAsString(ci, false).empty()) + Channel *c = ci->GetChannel(); + if (use_server_side_mlock && c && mlocks && !mlocks->GetMLockAsString(ci, false).empty()) { Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", ""); - SendChannelMetadata(ci->c, "mlock", modes); + SendChannelMetadata(c, "mlock", modes); } - if (use_server_side_topiclock && Servers::Capab.count("TOPICLOCK") && ci->c) + if (use_server_side_topiclock && Servers::Capab.count("TOPICLOCK") && c) { if (ci->IsTopicLock()) - SendChannelMetadata(ci->c, "topiclock", "1"); + SendChannelMetadata(c, "topiclock", "1"); } } void OnDelChan(ChanServ::Channel *ci) override { - if (use_server_side_mlock && ci->c) - SendChannelMetadata(ci->c, "mlock", ""); + Channel *c = ci->GetChannel(); + if (use_server_side_mlock && c) + SendChannelMetadata(c, "mlock", ""); - if (use_server_side_topiclock && Servers::Capab.count("TOPICLOCK") && ci->c) - SendChannelMetadata(ci->c, "topiclock", ""); + if (use_server_side_topiclock && Servers::Capab.count("TOPICLOCK") && c) + SendChannelMetadata(c, "topiclock", ""); } EventReturn OnMLock(ChanServ::Channel *ci, ModeLock *lock) override { + Channel *c = ci->GetChannel(); ChannelMode *cm = ModeManager::FindChannelModeByName(lock->GetName()); - if (use_server_side_mlock && cm && ci->c && mlocks && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM)) + if (use_server_side_mlock && cm && c && mlocks && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM)) { Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", "") + cm->mchar; - SendChannelMetadata(ci->c, "mlock", modes); + SendChannelMetadata(c, "mlock", modes); } return EVENT_CONTINUE; @@ -1537,11 +1545,12 @@ class ProtoInspIRCd20 : public Module EventReturn OnUnMLock(ChanServ::Channel *ci, ModeLock *lock) override { + Channel *c = ci->GetChannel(); ChannelMode *cm = ModeManager::FindChannelModeByName(lock->GetName()); - if (use_server_side_mlock && cm && ci->c && mlocks && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM)) + if (use_server_side_mlock && cm && c && mlocks && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM)) { Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", "").replace_all_cs(cm->mchar, ""); - SendChannelMetadata(ci->c, "mlock", modes); + SendChannelMetadata(c, "mlock", modes); } return EVENT_CONTINUE; @@ -1549,12 +1558,13 @@ class ProtoInspIRCd20 : public Module EventReturn OnSetChannelOption(CommandSource &source, Command *cmd, ChanServ::Channel *ci, const Anope::string &setting) override { - if (cmd->GetName() == "chanserv/topic" && ci->c) + Channel *c = ci->GetChannel(); + if (cmd->GetName() == "chanserv/topic" && c) { if (setting == "topiclock on") - SendChannelMetadata(ci->c, "topiclock", "1"); + SendChannelMetadata(c, "topiclock", "1"); else if (setting == "topiclock off") - SendChannelMetadata(ci->c, "topiclock", "0"); + SendChannelMetadata(c, "topiclock", "0"); } return EVENT_CONTINUE; diff --git a/modules/protocol/unreal.cpp b/modules/protocol/unreal.cpp index d8d685e14..44a5d1a41 100644 --- a/modules/protocol/unreal.cpp +++ b/modules/protocol/unreal.cpp @@ -1301,38 +1301,42 @@ class ProtoUnreal : public Module void OnChannelSync(Channel *c) override { - if (!c->ci) + ChanServ::Channel *ci = c->GetChannel(); + if (!ci) return; if (use_server_side_mlock && Servers::Capab.count("MLOCK") > 0 && mlocks) { - Anope::string modes = mlocks->GetMLockAsString(c->ci, false).replace_all_cs("+", "").replace_all_cs("-", ""); - Uplink::Send(Me, "MLOCK", c->creation_time, c->ci->GetName(), modes); + Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", ""); + Uplink::Send(Me, "MLOCK", c->creation_time, ci->GetName(), modes); } } void OnChanRegistered(ChanServ::Channel *ci) override { - if (!ci->c || !use_server_side_mlock || !mlocks || !Servers::Capab.count("MLOCK")) + Channel *c = ci->GetChannel(); + if (!c || !use_server_side_mlock || !mlocks || !Servers::Capab.count("MLOCK")) return; Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", ""); - Uplink::Send(Me, "MLOCK", ci->c->creation_time, ci->GetName(), modes); + Uplink::Send(Me, "MLOCK", c->creation_time, ci->GetName(), modes); } void OnDelChan(ChanServ::Channel *ci) override { - if (!ci->c || !use_server_side_mlock || !Servers::Capab.count("MLOCK")) + Channel *c = ci->GetChannel(); + if (!c || !use_server_side_mlock || !Servers::Capab.count("MLOCK")) return; - Uplink::Send(Me, "MLOCK", ci->c->creation_time, ci->GetName(), ""); + Uplink::Send(Me, "MLOCK", c->creation_time, ci->GetName(), ""); } EventReturn OnMLock(ChanServ::Channel *ci, ModeLock *lock) override { + Channel *c = ci->GetChannel(); ChannelMode *cm = ModeManager::FindChannelModeByName(lock->GetName()); - if (use_server_side_mlock && cm && mlocks && ci->c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0) + if (use_server_side_mlock && cm && mlocks && c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0) { Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", "") + cm->mchar; - Uplink::Send(Me, "MLOCK", ci->c->creation_time, ci->GetName(), modes); + Uplink::Send(Me, "MLOCK", c->creation_time, ci->GetName(), modes); } return EVENT_CONTINUE; @@ -1340,11 +1344,12 @@ class ProtoUnreal : public Module EventReturn OnUnMLock(ChanServ::Channel *ci, ModeLock *lock) override { + Channel *c = ci->GetChannel(); ChannelMode *cm = ModeManager::FindChannelModeByName(lock->GetName()); - if (use_server_side_mlock && cm && mlocks && ci->c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0) + if (use_server_side_mlock && cm && mlocks && c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0) { Anope::string modes = mlocks->GetMLockAsString(ci, false).replace_all_cs("+", "").replace_all_cs("-", "").replace_all_cs(cm->mchar, ""); - Uplink::Send(Me, "MLOCK", ci->c->creation_time, ci->GetName(), modes); + Uplink::Send(Me, "MLOCK", c->creation_time, ci->GetName(), modes); } return EVENT_CONTINUE; |