void ClientConnectionErrorMgr::HandleIq (const QXmppIq& iq) { switch (iq.error ().type ()) { case QXmppStanza::Error::Cancel: case QXmppStanza::Error::Continue: case QXmppStanza::Error::Modify: case QXmppStanza::Error::Auth: case QXmppStanza::Error::Wait: HandleError (iq); break; default: WhitelistedErrors_.remove (iq.id ()); break; } }
void ClientConnectionErrorMgr::HandleError (const QXmppIq& iq) { const QXmppStanza::Error& error = iq.error (); if (!WhitelistedErrors_.remove (iq.id ())) switch (error.condition ()) { case QXmppStanza::Error::FeatureNotImplemented: case QXmppStanza::Error::ItemNotFound: case QXmppStanza::Error::ServiceUnavailable: return; default: break; } QString typeText; if (!iq.from ().isEmpty ()) typeText = tr ("Error from %1: ") .arg (iq.from ()); typeText += HandleErrorCondition (error.condition ()); if (!error.text ().isEmpty ()) typeText += " " + tr ("Error text: %1.") .arg (error.text ()); const Entity& e = Util::MakeNotification ("Azoth", typeText, PCritical_); Core::Instance ().SendEntity (e); const bool dontTryFurther = error.type () == QXmppStanza::Error::Cancel || (error.type () == QXmppStanza::Error::Auth && error.condition () != QXmppStanza::Error::NotAuthorized); if (dontTryFurther && !ClientConn_->GetClient ()->isConnected ()) { GlooxAccountState state = { SOffline, QString (), 0 }; ClientConn_->SetState (state); } }