diff options
author | louiz’ <louiz@louiz.org> | 2018-03-23 16:16:30 +0100 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2018-03-23 16:16:30 +0100 |
commit | e2fc3cf68e1dc145e75fe67f2543765ff00ba839 (patch) | |
tree | 3064b77e3d44deb0e643477382e218893c7389e9 /src | |
parent | cdace80758e2ee41f33824ad7f52a369c42a4a89 (diff) | |
download | biboumi-e2fc3cf68e1dc145e75fe67f2543765ff00ba839.tar.gz biboumi-e2fc3cf68e1dc145e75fe67f2543765ff00ba839.tar.bz2 biboumi-e2fc3cf68e1dc145e75fe67f2543765ff00ba839.tar.xz biboumi-e2fc3cf68e1dc145e75fe67f2543765ff00ba839.zip |
Properly handle force-join presences by sending everything in return
fix #3305
Diffstat (limited to 'src')
-rw-r--r-- | src/bridge/bridge.cpp | 10 | ||||
-rw-r--r-- | src/bridge/bridge.hpp | 6 | ||||
-rw-r--r-- | src/xmpp/biboumi_component.cpp | 2 |
3 files changed, 13 insertions, 5 deletions
diff --git a/src/bridge/bridge.cpp b/src/bridge/bridge.cpp index f32ad31..90caac1 100644 --- a/src/bridge/bridge.cpp +++ b/src/bridge/bridge.cpp @@ -166,8 +166,11 @@ IrcClient* Bridge::find_irc_client(const std::string& hostname) const } } -bool Bridge::join_irc_channel(const Iid& iid, std::string nickname, const std::string& password, - const std::string& resource, HistoryLimit history_limit) +bool Bridge::join_irc_channel(const Iid& iid, std::string nickname, + const std::string& password, + const std::string& resource, + HistoryLimit history_limit, + const bool force_join) { const auto& hostname = iid.get_server(); #ifdef USE_DATABASE @@ -185,7 +188,8 @@ bool Bridge::join_irc_channel(const Iid& iid, std::string nickname, const std::s { irc->send_join_command(iid.get_local(), password); return true; - } else if (!res_in_chan) { + } else if (!res_in_chan || force_join) { + // See https://github.com/xsf/xeps/pull/499 for the force_join argument this->generate_channel_join_for_resource(iid, resource); } return false; diff --git a/src/bridge/bridge.hpp b/src/bridge/bridge.hpp index a190739..8e7d9d7 100644 --- a/src/bridge/bridge.hpp +++ b/src/bridge/bridge.hpp @@ -75,7 +75,11 @@ public: * Try to join an irc_channel, does nothing and return true if the channel * was already joined. */ - bool join_irc_channel(const Iid& iid, std::string nickname, const std::string& password, const std::string& resource, HistoryLimit history_limit); + bool join_irc_channel(const Iid& iid, std::string nickname, + const std::string& password, + const std::string& resource, + HistoryLimit history_limit, + const bool force_join); void send_channel_message(const Iid& iid, const std::string& body, std::string id); void send_private_message(const Iid& iid, const std::string& body, const std::string& type="PRIVMSG"); diff --git a/src/xmpp/biboumi_component.cpp b/src/xmpp/biboumi_component.cpp index f25aeea..02383f6 100644 --- a/src/xmpp/biboumi_component.cpp +++ b/src/xmpp/biboumi_component.cpp @@ -181,7 +181,7 @@ void BiboumiComponent::handle_presence(const Stanza& stanza) history_limit.stanzas = 0; } bridge->join_irc_channel(iid, to.resource, password ? password->get_inner(): "", - from.resource, history_limit); + from.resource, history_limit, x != nullptr); } else if (type == "unavailable") { |