Rework MODE/RPL_CHANMODEIS handling for trailing args (#1661)

Some servers may send a colon even if the last parameter doesn't need it, currently this leads to issues with permission/mode tracking, as the core doesn't handle the colon properly.

This fix replaces reconstructing the parameter string with just passing a vector of the relevant parameters to CChan::SetModes() and adds overrides for CChan::SetModes() and CChan::ModeChange() that accept the vector instead.

Clean up uses of old CModeMessage::GetModes()
This commit is contained in:
Aspen (linudaemon) authored and Alexey Sokolov committed 2019-08-08 21:54:49 +01:00
1 parent 51e82fc7e8
commit 95369455fc
8 files changed
+165 -19

No files matched your search

+1 -2
View File
@@ -1086,9 +1086,8 @@ bool CClient::OnJoinMessage(CJoinMessage& Message) {
bool CClient::OnModeMessage(CModeMessage& Message) {
CString sTarget = Message.GetTarget();
CString sModes = Message.GetModes();
if (m_pNetwork && m_pNetwork->IsChan(sTarget) && sModes.empty()) {
if (m_pNetwork && m_pNetwork->IsChan(sTarget) && !Message.HasModes()) {
// If we are on that channel and already received a
// /mode reply from the server, we can answer this
// request ourself.