~singpolyma/biboumi

11a31db2d5bcc158bb8902e74f192dbc82827f53 — Florent Le Coz 10 years ago 4582f10
Send the reason of the connection close to the user
M src/irc/irc_client.cpp => src/irc/irc_client.cpp +4 -2
@@ 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);

M src/irc/irc_client.hpp => src/irc/irc_client.hpp +1 -1
@@ 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.

M src/network/tcp_socket_handler.cpp => src/network/tcp_socket_handler.cpp +5 -10
@@ 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

M src/network/tcp_socket_handler.hpp => src/network/tcp_socket_handler.hpp +1 -1
@@ 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

M src/xmpp/xmpp_component.cpp => src/xmpp/xmpp_component.cpp +9 -2
@@ 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)

M src/xmpp/xmpp_component.hpp => src/xmpp/xmpp_component.hpp +1 -1
@@ 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;

  /**