summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/irc/irc_client.cpp6
-rw-r--r--src/irc/irc_client.hpp2
-rw-r--r--src/network/tcp_socket_handler.cpp15
-rw-r--r--src/network/tcp_socket_handler.hpp2
-rw-r--r--src/xmpp/xmpp_component.cpp11
-rw-r--r--src/xmpp/xmpp_component.hpp2
6 files changed, 21 insertions, 17 deletions
diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp
index 6468094..e518ffc 100644
--- a/src/irc/irc_client.cpp
+++ b/src/irc/irc_client.cpp
@@ -93,9 +93,11 @@ void IrcClient::on_connected()
this->send_pending_data();
}
-void IrcClient::on_connection_close()
+void IrcClient::on_connection_close(const std::string& error_msg)
{
- static const std::string message = "Connection closed by remote server.";
+ std::string message = "Connection closed by remote server.";
+ if (!error_msg.empty())
+ message += ": " + error_msg;
const IrcMessage error{"ERROR", {message}};
this->on_error(error);
log_warning(message);
diff --git a/src/irc/irc_client.hpp b/src/irc/irc_client.hpp
index afa6437..88d2d72 100644
--- a/src/irc/irc_client.hpp
+++ b/src/irc/irc_client.hpp
@@ -41,7 +41,7 @@ public:
/**
* Close the connection, remove us from the poller
*/
- void on_connection_close() override final;
+ void on_connection_close(const std::string& error) override final;
/**
* Parse the data we have received so far and try to get one or more
* complete messages from it.
diff --git a/src/network/tcp_socket_handler.cpp b/src/network/tcp_socket_handler.cpp
index d9432a6..01adf04 100644
--- a/src/network/tcp_socket_handler.cpp
+++ b/src/network/tcp_socket_handler.cpp
@@ -207,22 +207,17 @@ ssize_t TCPSocketHandler::do_recv(void* recv_buf, const size_t buf_size)
ssize_t size = ::recv(this->socket, recv_buf, buf_size, 0);
if (0 == size)
{
- this->on_connection_close();
+ this->on_connection_close("");
this->close();
}
else if (-1 == size)
{
log_warning("Error while reading from socket: " << strerror(errno));
+ this->close();
if (this->connecting)
- {
- this->close();
- this->on_connection_failed(strerror(errno));
- }
+ this->on_connection_failed(strerror(errno));
else
- {
- this->close();
- this->on_connection_close();
- }
+ this->on_connection_close(strerror(errno));
}
return size;
}
@@ -245,7 +240,7 @@ void TCPSocketHandler::on_send()
if (res < 0)
{
log_error("sendmsg failed: " << strerror(errno));
- this->on_connection_close();
+ this->on_connection_close(strerror(errno));
this->close();
}
else
diff --git a/src/network/tcp_socket_handler.hpp b/src/network/tcp_socket_handler.hpp
index 8416690..876cd57 100644
--- a/src/network/tcp_socket_handler.hpp
+++ b/src/network/tcp_socket_handler.hpp
@@ -96,7 +96,7 @@ public:
/**
* Called when we detect a disconnection from the remote host.
*/
- virtual void on_connection_close() = 0;
+ virtual void on_connection_close(const std::string& error) = 0;
/**
* Handle/consume (some of) the data received so far. The data to handle
* may be in the in_buf buffer, or somewhere else, depending on what
diff --git a/src/xmpp/xmpp_component.cpp b/src/xmpp/xmpp_component.cpp
index 51d65aa..6af67a4 100644
--- a/src/xmpp/xmpp_component.cpp
+++ b/src/xmpp/xmpp_component.cpp
@@ -108,9 +108,16 @@ void XmppComponent::on_connected()
this->send_pending_data();
}
-void XmppComponent::on_connection_close()
+void XmppComponent::on_connection_close(const std::string& error)
{
- log_info("XMPP server closed connection");
+ if (error.empty())
+ {
+ log_info("XMPP server closed connection");
+ }
+ else
+ {
+ log_info("XMPP server closed connection: " << error);
+ }
}
void XmppComponent::parse_in_buffer(const size_t size)
diff --git a/src/xmpp/xmpp_component.hpp b/src/xmpp/xmpp_component.hpp
index 42cdb8a..daadbec 100644
--- a/src/xmpp/xmpp_component.hpp
+++ b/src/xmpp/xmpp_component.hpp
@@ -38,7 +38,7 @@ public:
void on_connection_failed(const std::string& reason) override final;
void on_connected() override final;
- void on_connection_close() override final;
+ void on_connection_close(const std::string& error) override final;
void parse_in_buffer(const size_t size) override final;
/**