Send (every 240s) a PING command to all connected irc servers
fix #2452
This commit is contained in:
@@ -63,6 +63,11 @@ void Bridge::clean()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string& Bridge::get_jid() const
|
||||||
|
{
|
||||||
|
return this->user_jid;
|
||||||
|
}
|
||||||
|
|
||||||
Xmpp::body Bridge::make_xmpp_body(const std::string& str)
|
Xmpp::body Bridge::make_xmpp_body(const std::string& str)
|
||||||
{
|
{
|
||||||
std::string res;
|
std::string res;
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ public:
|
|||||||
* Remove all inactive IrcClients
|
* Remove all inactive IrcClients
|
||||||
*/
|
*/
|
||||||
void clean();
|
void clean();
|
||||||
|
/**
|
||||||
|
* Return the jid of the XMPP user using this bridge
|
||||||
|
*/
|
||||||
|
const std::string& get_jid() const;
|
||||||
|
|
||||||
static Xmpp::body make_xmpp_body(const std::string& str);
|
static Xmpp::body make_xmpp_body(const std::string& str);
|
||||||
/***
|
/***
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#include <utils/timed_events.hpp>
|
||||||
#include <irc/irc_message.hpp>
|
#include <irc/irc_message.hpp>
|
||||||
#include <irc/irc_client.hpp>
|
#include <irc/irc_client.hpp>
|
||||||
#include <bridge/bridge.hpp>
|
#include <bridge/bridge.hpp>
|
||||||
@@ -10,8 +11,11 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
IrcClient::IrcClient(std::shared_ptr<Poller> poller, const std::string& hostname, const std::string& username, Bridge* bridge):
|
IrcClient::IrcClient(std::shared_ptr<Poller> poller, const std::string& hostname, const std::string& username, Bridge* bridge):
|
||||||
SocketHandler(poller),
|
SocketHandler(poller),
|
||||||
@@ -35,6 +39,9 @@ IrcClient::IrcClient(std::shared_ptr<Poller> poller, const std::string& hostname
|
|||||||
|
|
||||||
IrcClient::~IrcClient()
|
IrcClient::~IrcClient()
|
||||||
{
|
{
|
||||||
|
// This event may or may not exist (if we never got connected, it
|
||||||
|
// doesn't), but it's ok
|
||||||
|
TimedEventsManager::instance().cancel("PING"s + this->hostname + this->bridge->get_jid());
|
||||||
}
|
}
|
||||||
|
|
||||||
void IrcClient::start()
|
void IrcClient::start()
|
||||||
@@ -238,6 +245,11 @@ void IrcClient::send_pong_command(const IrcMessage& message)
|
|||||||
this->send_message(IrcMessage("PONG", {id}));
|
this->send_message(IrcMessage("PONG", {id}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IrcClient::send_ping_command()
|
||||||
|
{
|
||||||
|
this->send_message(IrcMessage("PING", {"biboumi"}));
|
||||||
|
}
|
||||||
|
|
||||||
void IrcClient::forward_server_message(const IrcMessage& message)
|
void IrcClient::forward_server_message(const IrcMessage& message)
|
||||||
{
|
{
|
||||||
const std::string from = message.prefix;
|
const std::string from = message.prefix;
|
||||||
@@ -447,6 +459,9 @@ void IrcClient::on_welcome_message(const IrcMessage& message)
|
|||||||
{
|
{
|
||||||
this->current_nick = message.arguments[0];
|
this->current_nick = message.arguments[0];
|
||||||
this->welcomed = true;
|
this->welcomed = true;
|
||||||
|
// Install a repeated events to regularly send a PING
|
||||||
|
TimedEventsManager::instance().add_event(TimedEvent(240s, std::bind(&IrcClient::send_ping_command, this),
|
||||||
|
"PING"s + this->hostname + this->bridge->get_jid()));
|
||||||
for (const std::string& chan_name: this->channels_to_join)
|
for (const std::string& chan_name: this->channels_to_join)
|
||||||
this->send_join_command(chan_name);
|
this->send_join_command(chan_name);
|
||||||
this->channels_to_join.clear();
|
this->channels_to_join.clear();
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ public:
|
|||||||
* Send the PONG irc command
|
* Send the PONG irc command
|
||||||
*/
|
*/
|
||||||
void send_pong_command(const IrcMessage& message);
|
void send_pong_command(const IrcMessage& message);
|
||||||
|
void send_ping_command();
|
||||||
/**
|
/**
|
||||||
* Send the USER irc command
|
* Send the USER irc command
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user