diff options
| author | 2024-07-20 12:31:31 +0100 | |
|---|---|---|
| committer | 2024-07-20 12:33:37 +0100 | |
| commit | 42fdbb7234628ff95acdb6f3f1d1d2206ad77334 (patch) | |
| tree | a8f3bb09c880d96f886f8a44f4bb0b7119922022 /src/modules/m_spanningtree | |
| parent | Implement support for the IRCv3 WebSocket subprotocol names. (diff) | |
Fix broadcasting UID messages to v3 servers.
We have to use the compat layer here as broadcast messages do not
go through the command builder.
Diffstat (limited to 'src/modules/m_spanningtree')
| -rw-r--r-- | src/modules/m_spanningtree/commands.h | 2 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/compat.cpp | 13 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/main.cpp | 17 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/netburst.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/uid.cpp | 5 |
5 files changed, 18 insertions, 21 deletions
diff --git a/src/modules/m_spanningtree/commands.h b/src/modules/m_spanningtree/commands.h index bb92e07a6..c02f3b0d3 100644 --- a/src/modules/m_spanningtree/commands.h +++ b/src/modules/m_spanningtree/commands.h @@ -102,7 +102,7 @@ public: : public CmdBuilder { public: - Builder(User* user, bool real_user); + Builder(User* user); }; }; diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp index 197b0e73c..8bfe1a15e 100644 --- a/src/modules/m_spanningtree/compat.cpp +++ b/src/modules/m_spanningtree/compat.cpp @@ -114,6 +114,19 @@ void TreeSocket::WriteLine(const std::string& original_line) // SQUERY was introduced in PROTO_INSPIRCD_4; convert to PRIVMSG. line.replace(cmdstart, 6, "PRIVMSG"); } + else if (irc::equals(command, "UID")) + { + // :<sid> UID <uuid> <nickchanged> <nick> <host> <dhost> <user> <duser> <ip.string> <signon> <modes> [<modepara>] :<real> + // ^^^^^^ New in 1206 + size_t uuidend = NextToken(line, cmdend); + size_t nickchangedend = NextToken(line, uuidend); + size_t nickend = NextToken(line, nickchangedend); + size_t hostend = NextToken(line, nickend); + size_t dhostend = NextToken(line, hostend); + size_t userend = NextToken(line, dhostend); + if (userend != std::string::npos) + line.erase(dhostend, userend - dhostend); + } } WriteLineInternal(line); diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 47545b47e..c58004a70 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -497,22 +497,7 @@ void ModuleSpanningTree::OnUserConnect(LocalUser* user) if (sslapi) sslapi->GetCertificate(user); - CommandUID::Builder uid(user, true); - CommandUID::Builder olduid(user, false); - - // NOTE: we can't do CommandUID::Builder(user).Broadcast() whilst - // we still support the 1205 protocol. - for (const auto* server : Utils->TreeRoot->GetChildren()) - { - TreeSocket* socket = server->GetSocket(); - if (!socket) - continue; // Should never happen? - - if (socket->proto_version >= PROTO_INSPIRCD_4) - socket->WriteLine(uid); - else - socket->WriteLine(olduid); - } + CommandUID::Builder(user).Broadcast(); if (user->IsOper()) CommandOpertype::Builder(user, user->oper).Broadcast(); diff --git a/src/modules/m_spanningtree/netburst.cpp b/src/modules/m_spanningtree/netburst.cpp index 77aa73d83..798987975 100644 --- a/src/modules/m_spanningtree/netburst.cpp +++ b/src/modules/m_spanningtree/netburst.cpp @@ -282,7 +282,7 @@ void TreeSocket::SendUsers(BurstState& bs) if (!user->IsFullyConnected()) continue; - this->WriteLine(CommandUID::Builder(user, this->proto_version != PROTO_INSPIRCD_3)); + this->WriteLine(CommandUID::Builder(user)); if (user->IsOper()) this->WriteLine(CommandOpertype::Builder(user, user->oper)); diff --git a/src/modules/m_spanningtree/uid.cpp b/src/modules/m_spanningtree/uid.cpp index 57a126933..8425984fb 100644 --- a/src/modules/m_spanningtree/uid.cpp +++ b/src/modules/m_spanningtree/uid.cpp @@ -177,7 +177,7 @@ CmdResult CommandFName::HandleRemote(RemoteUser* src, Params& params) return CmdResult::SUCCESS; } -CommandUID::Builder::Builder(User* user, bool real_user) +CommandUID::Builder::Builder(User* user) : CmdBuilder(TreeServer::Get(user), "UID") { push(user->uuid); @@ -185,8 +185,7 @@ CommandUID::Builder::Builder(User* user, bool real_user) push(user->nick); push(user->GetRealHost()); push(user->GetDisplayedHost()); - if (real_user) - push(user->GetRealUser()); + push(user->GetRealUser()); push(user->GetDisplayedUser()); push(user->GetAddress()); push_int(user->signon); |
