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
This commit is contained in:
Florent Le Coz
2014-03-24 20:39:59 +01:00
parent ffc820e234
commit cdc3183d9e
3 changed files with 16 additions and 1 deletions
+2 -1
View File
@@ -118,7 +118,8 @@ int main(int ac, char** av)
// happened because we sent something invalid to it and it decided to // 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 // close the connection. This is a bug that should be fixed, but we
// still reconnect automatically instead of dropping everything // 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->is_connecting())
{ {
xmpp_component->reset(); xmpp_component->reset();
+5
View File
@@ -24,6 +24,8 @@
#define STREAMS_NS "urn:ietf:params:xml:ns:xmpp-streams" #define STREAMS_NS "urn:ietf:params:xml:ns:xmpp-streams"
XmppComponent::XmppComponent(const std::string& hostname, const std::string& secret): XmppComponent::XmppComponent(const std::string& hostname, const std::string& secret):
ever_auth(false),
last_auth(false),
served_hostname(hostname), served_hostname(hostname),
secret(secret), secret(secret),
authenticated(false), authenticated(false),
@@ -144,6 +146,7 @@ void XmppComponent::on_remote_stream_open(const XmlNode& node)
return ; return ;
} }
this->last_auth = false;
// Try to authenticate // Try to authenticate
char digest[HASH_LENGTH * 2 + 1]; char digest[HASH_LENGTH * 2 + 1];
sha1nfo sha1; sha1nfo sha1;
@@ -212,6 +215,8 @@ void XmppComponent::handle_handshake(const Stanza& stanza)
{ {
(void)stanza; (void)stanza;
this->authenticated = true; this->authenticated = true;
this->ever_auth = true;
this->last_auth = true;
log_info("Authenticated with the XMPP server"); log_info("Authenticated with the XMPP server");
} }
+9
View File
@@ -140,6 +140,15 @@ public:
void handle_iq(const Stanza& stanza); void handle_iq(const Stanza& stanza);
void handle_error(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: private:
/** /**
* Return the bridge associated with the given full JID. Create a new one * Return the bridge associated with the given full JID. Create a new one