]> Some of my projects - anidbudpclient.git/commitdiff
- Made errorState reachable. Most errors are now being reported.
authorAPTX <mail@example.com>
Sun, 30 May 2010 15:41:34 +0000 (17:41 +0200)
committerAPTX <mail@example.com>
Sun, 30 May 2010 15:41:34 +0000 (17:41 +0200)
anidbudpclient_global.h
client.cpp

index 3e15e6b1d024c4429f4ed41263dd595c4a339896..ff6787c12c89ec930289c16e76c56070171f0d3b 100644 (file)
@@ -6,7 +6,7 @@
 #include <QFileInfo>
 
 #define CLIENT_NAME "anidbudpclient"
-#define CLIENT_VERSION 0x000002
+#define CLIENT_VERSION 0x000003
 #define PROTOCOL_VERSION 3
 
 #if defined(ANIDBUDPCLIENT_LIBRARY)
@@ -25,6 +25,8 @@ namespace AniDBUdpClient
                HostUnreachableError,
                AuthenticationError,
                BannedError,
+               ClientBannedError,
+               ClientVersionOutdatedError,
                ServerError,
                UnknownError,
        };
index e6705adf7641241075c8ceed6124dc93b195cb86..e55c025201aeb5f1bec9544b2df02886e6c10b27 100644 (file)
@@ -71,7 +71,6 @@ qDebug() << "Api instance init!";
        stateMachine->addState(recieveState);
        stateMachine->addState(recieveFailState);
        stateMachine->setInitialState(disconnectedState);
-       stateMachine->setErrorState(errorState);
 
        connectedState->setInitialState(sendState);
        connectedHistoryState->setDefaultState(sendState);
@@ -100,9 +99,11 @@ qDebug() << "Api instance init!";
        idleTimeoutState->addTransition(this, SIGNAL(startSending()), sendState);
 
        recieveState->addTransition(this, SIGNAL(authenticated()), authenticatingState);
-       recieveFailState->addTransition(this, SIGNAL(connectionError()), errorState);
+       recieveState->addTransition(this, SIGNAL(connectionError()), errorState);
+       recieveState->addTransition(this, SIGNAL(replyRecieved()), connectedHistoryState);
+
 
-       recieveState->addTransition(connectedHistoryState);
+       recieveFailState->addTransition(this, SIGNAL(connectionError()), errorState);
 
        recieveFailState->addTransition(sendState);
        // ------------ END Transitions -------------------
@@ -259,6 +260,7 @@ QString Client::errorString() const
 void Client::enterErrorState()
 {
 qDebug() << "Entering Error State";
+       disconnect();
 }
 
 void Client::enterDisconnectedState()
@@ -466,10 +468,10 @@ qDebug() << "COMPRESSED DATAGRAM = " << tmp;
                                .arg(senderPort)
                                .arg(reply);
 
-/*
+
                // Check if it is a 6xx error.
                {
-                       QRegExp rx("6[0-9]{2} ");
+                       QRegExp rx("(?:50[34]|555|6[0-9]{2}) ");
                        if (rx.exactMatch(tmp.mid(0, 4)))
                        {
                        
@@ -499,12 +501,13 @@ qDebug() << "COMPRESSED DATAGRAM = " << tmp;
                                                        qDebug() << QString("SERVER ERROR %1").arg(replyCode);
                                                }
                                                emit connectionError();
+                                               goto endLoop;
                                        break;
                                }
+                               continue;
                        }
-                       continue;
                }
-*/
+
                QByteArray commandId = tmp.mid(0, 5);
 
                commandsTimedOut = 0;
@@ -512,12 +515,12 @@ qDebug() << "COMPRESSED DATAGRAM = " << tmp;
                // Do not parse reply for unknown commands.
                if (!sentCommands.contains(commandId))
                {
-                       qDebug() << QString("Unknown command with id: %1, discarding")
-                                       .arg(commandId.constData());
+qDebug() << QString("Unknown command with id: %1, discarding")
+               .arg(commandId.constData());
                        continue;
                }
-                       qDebug() << QString("Sending reply to command with id: %1")
-                                       .arg(commandId.constData());
+qDebug() << QString("Sending reply to command with id: %1")
+               .arg(commandId.constData());
 
                // tag + space = 5 + 1
                QByteArray replyCodeText = tmp.mid(6, 3);
@@ -552,9 +555,21 @@ qDebug() << "LOGIN FIRST required, authing";
                        case LOGGED_OUT:
                                m_sessionId.clear();
                        break;
+                       case CLIENT_VERSION_OUTDATED:
+                               m_error = ClientVersionOutdatedError;
+                               m_errorString = tr("Client version outdated");
+                               emit connectionError();
+                               goto endLoop;
+                       break;
+                       case CLIENT_BANNED:
+                               m_error = ClientBannedError;
+                               m_errorString = tr("UDP Client banned");
+                               emit connectionError();
+                               goto endLoop;
+                       break;
                        case BANNED:
                                m_error = BannedError;
-                               m_errorString = reply.mid(10);
+                               m_errorString = tr("User banned from UDP API: %1").arg(reply.mid(10));
                                emit connectionError();
                                goto endLoop;
                        break;
@@ -575,6 +590,7 @@ qDebug() << "LOGIN FIRST required, authing";
                                m_errorString = tr("Server busy. Try again later. Wait at least 30 minutes.");
                                emit connectionError();
                                goto endLoop;
+                       break;
                        default:
                                if (replyCode > 601 && replyCode < 700)
                                {
@@ -594,6 +610,9 @@ qDebug() << "LOGIN FIRST required, authing";
 continueLoop:
                ;
        }
+       // replyRecieved() should be emitted on success
+       // all connection errors go directly to endLoops
+       emit replyRecieved();
 endLoop:
        ;
 }