~singpolyma/biboumi

cdc3183d9eb234feb2e8ca3d3019b78cce73bcf6 — Florent Le Coz 10 years ago ffc820e
Introduce two new bool, to know if the xmpp component should try to reconnect

If we never succeeded our connection+auth process, means we should probably
not attempt any-more, and just give up.  If we ever did, this means a
reconnect is a good idea
3 files changed, 16 insertions(+), 1 deletions(-)

M src/main.cpp
M src/xmpp/xmpp_component.cpp
M src/xmpp/xmpp_component.hpp
M src/main.cpp => src/main.cpp +2 -1
@@ 118,7 118,8 @@ int main(int ac, char** av)
    // happened because we sent something invalid to it and it decided to
    // close the connection.  This is a bug that should be fixed, but we
    // still reconnect automatically instead of dropping everything
    if (!exiting && !xmpp_component->is_connected() &&
    if (!exiting && xmpp_component->ever_auth &&
        !xmpp_component->is_connected() &&
        !xmpp_component->is_connecting())
      {
        xmpp_component->reset();

M src/xmpp/xmpp_component.cpp => src/xmpp/xmpp_component.cpp +5 -0
@@ 24,6 24,8 @@
#define STREAMS_NS       "urn:ietf:params:xml:ns:xmpp-streams"

XmppComponent::XmppComponent(const std::string& hostname, const std::string& secret):
  ever_auth(false),
  last_auth(false),
  served_hostname(hostname),
  secret(secret),
  authenticated(false),


@@ 144,6 146,7 @@ void XmppComponent::on_remote_stream_open(const XmlNode& node)
      return ;
    }

  this->last_auth = false;
  // Try to authenticate
  char digest[HASH_LENGTH * 2 + 1];
  sha1nfo sha1;


@@ 212,6 215,8 @@ void XmppComponent::handle_handshake(const Stanza& stanza)
{
  (void)stanza;
  this->authenticated = true;
  this->ever_auth = true;
  this->last_auth = true;
  log_info("Authenticated with the XMPP server");
}


M src/xmpp/xmpp_component.hpp => src/xmpp/xmpp_component.hpp +9 -0
@@ 140,6 140,15 @@ public:
  void handle_iq(const Stanza& stanza);
  void handle_error(const Stanza& stanza);

  /**
   * Whether or not we ever succeeded our authentication to the XMPP server
   */
  bool ever_auth;
  /**
   * Whether or not the last connection+auth attempt was successful
   */
  bool last_auth;

private:
  /**
   * Return the bridge associated with the given full JID. Create a new one