From: APTX Date: Sat, 9 Jun 2012 17:06:20 +0000 (+0200) Subject: Make AniOni handle UDP client errors. X-Git-Url: https://gitweb.aptx.org/?a=commitdiff_plain;h=7af7eea834904711732e4bd6a5205f71eda6c995;p=localmylist.git Make AniOni handle UDP client errors. --- diff --git a/anioni/anioni.cpp b/anioni/anioni.cpp index ab33404..2a9daab 100644 --- a/anioni/anioni.cpp +++ b/anioni/anioni.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include AniOni::AniOni(int argc, char **argv) : @@ -12,11 +13,48 @@ AniOni::AniOni(int argc, char **argv) : setServiceFlags(QtServiceBase::CanBeSuspended); } +void AniOni::handleUdpClientError() +{ + using namespace AniDBUdpClient; + + qDebug() << "ERROR CODE" << Client::instance()->error(); + LocalMyList::instance()->database()->log(tr("UDP Client connection error: %1") + .arg(Client::instance()->errorString()), 3); + + switch (Client::instance()->error()) + { + case NoError: + break; + + case HostLookupError: + Client::instance()->clearErrors(); + QTimer::singleShot(1000, Client::instance(), SLOT(connect())); + break; + + case BannedError: + case ServerError: + case ConnectionTimedOutError: + Client::instance()->clearErrors(); + QTimer::singleShot(1000 * 60 * 40, Client::instance(), SLOT(connect())); + break; + + case BindError: + case AuthenticationError: + case ClientBannedError: + case EncryptionError: + case UnknownError: + default: + qWarning("Unrecoverable connection error"); + application()->exit(1); + return; + break; + } +} + void AniOni::start() { #ifdef Q_OS_WIN QSettings s(QDir::currentPath() + "/anioni.ini", QSettings::IniFormat); - qDebug() << "Reading" << s.fileName(); #elif Q_OS_UNIX QSettings s("/etc/anioni/anioni.ini", QSettings::IniFormat); #else @@ -36,6 +74,7 @@ void AniOni::start() LocalMyList::instance()->setupUdpClient(); AniDBUdpClient::Client::instance()->setIdlePolicy(AniDBUdpClient::KeepAliveIdlePolicy); + connect(AniDBUdpClient::Client::instance(), SIGNAL(connectionError()), this, SLOT(handleUdpClientError())); LocalMyList::instance()->setupRequestHandler(); } diff --git a/anioni/anioni.h b/anioni/anioni.h index f9bed38..d743633 100644 --- a/anioni/anioni.h +++ b/anioni/anioni.h @@ -12,6 +12,9 @@ public: signals: public slots: + +protected slots: + void handleUdpClientError(); protected: void start();