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:
+2
-1
@@ -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();
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user