Skip to content

Commit

Permalink
Add error accessor to NetworkExchange.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredhanson committed Jun 17, 2013
1 parent 7bf36a4 commit 9efcd3e
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
19 changes: 18 additions & 1 deletion src/network/networkexchange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class NetworkExchangePrivate
QList<QUrl> urlsVisited;
qint32 maxRedirects;

QNetworkReply::NetworkError error;
QString errorString;
};

Expand Down Expand Up @@ -139,11 +140,21 @@ void NetworkExchange::setNetworkAccessManager(QNetworkAccessManager *manager)
d_ptr->netAccessManager = manager;
}

QNetworkReply::NetworkError NetworkExchange::error() const
{
return d_ptr->error;
}

QString NetworkExchange::errorString() const
{
return d_ptr->errorString;
}

void NetworkExchange::setError(QNetworkReply::NetworkError code)
{
d_ptr->error = code;
}

void NetworkExchange::setErrorString(const QString & str)
{
d_ptr->errorString = str;
Expand Down Expand Up @@ -174,11 +185,13 @@ void NetworkExchange::onMetaDataChanged()
redirectReply->abort();

if (d_ptr->urlsVisited.size() > d_ptr->maxRedirects) {
setError(QNetworkReply::ProtocolUnknownError);
setErrorString("Too many redirections");
emit error(QNetworkReply::ProtocolUnknownError);
emit finished();
return;
} else if (d_ptr->urlsVisited.contains(url)) {
setError(QNetworkReply::ProtocolUnknownError);
setErrorString("Infinite redirection loop detected");
emit error(QNetworkReply::ProtocolUnknownError);
emit finished();
Expand Down Expand Up @@ -236,11 +249,13 @@ void NetworkExchange::onFinished()
QNetworkReply *redirectReply = d_ptr->reply;

if (d_ptr->urlsVisited.size() > d_ptr->maxRedirects) {
setError(QNetworkReply::ProtocolUnknownError);
setErrorString("Too many redirections");
emit error(QNetworkReply::ProtocolUnknownError);
emit finished();
return;
} else if (d_ptr->urlsVisited.contains(url)) {
setError(QNetworkReply::ProtocolUnknownError);
setErrorString("Infinite redirection loop detected");
emit error(QNetworkReply::ProtocolUnknownError);
emit finished();
Expand All @@ -263,6 +278,7 @@ void NetworkExchange::onError(QNetworkReply::NetworkError code)
// case, so finalizing the connection is deferred until then.
// See: http://doc.trolltech.com/4.7/qnetworkreply.html#error-2

setError(code);
setErrorString(d_ptr->reply->errorString());
emit error(code);
}
Expand All @@ -284,7 +300,8 @@ NetworkExchangePrivate::NetworkExchangePrivate(NetworkExchange *q)
method(GetMethod),
reply(0),
replyReceived(false),
maxRedirects(5)
maxRedirects(5),
error(QNetworkReply::NoError)
{
}

Expand Down
2 changes: 2 additions & 0 deletions src/network/networkexchange.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class NetworkExchange : public QObject
void setMaxRedirects(qint32 max);
void setNetworkAccessManager(QNetworkAccessManager *manager);

QNetworkReply::NetworkError error() const;
QString errorString() const;

signals:
Expand All @@ -48,6 +49,7 @@ class NetworkExchange : public QObject
void error(QNetworkReply::NetworkError code);

protected:
void setError(QNetworkReply::NetworkError code);
void setErrorString(const QString & str);

private slots:
Expand Down
7 changes: 7 additions & 0 deletions tests/auto/networkexchange/tst_networkexchange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ void tst_NetworkExchange::testGet()
QCOMPARE(mExchange->replyAttribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(), QString("OK"));
QCOMPARE(QString::fromUtf8(mExchange->replyRawHeader("Content-Type")), QString("text/plain"));
QCOMPARE(QString::fromUtf8(mExchange->readAll()), QString("Hello World!"));
QCOMPARE(mExchange->error(), QNetworkReply::NoError);
}

void tst_NetworkExchange::testPost()
Expand Down Expand Up @@ -96,6 +97,7 @@ void tst_NetworkExchange::testPost()
QCOMPARE(mExchange->replyAttribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(), QString("OK"));
QCOMPARE(QString::fromUtf8(mExchange->replyRawHeader("Content-Type")), QString("text/plain"));
QCOMPARE(QString::fromUtf8(mExchange->readAll()), QString("Hello World!"));
QCOMPARE(mExchange->error(), QNetworkReply::NoError);
}

void tst_NetworkExchange::testRedirect()
Expand Down Expand Up @@ -128,6 +130,7 @@ void tst_NetworkExchange::testRedirect()
QCOMPARE(mExchange->replyAttribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(), QString("OK"));
QCOMPARE(QString::fromUtf8(mExchange->replyRawHeader("Content-Type")), QString("text/plain"));
QCOMPARE(QString::fromUtf8(mExchange->readAll()), QString("Hello World!"));
QCOMPARE(mExchange->error(), QNetworkReply::NoError);
}

void tst_NetworkExchange::testMultipleRedirects()
Expand Down Expand Up @@ -160,6 +163,7 @@ void tst_NetworkExchange::testMultipleRedirects()
QCOMPARE(mExchange->replyAttribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(), QString("OK"));
QCOMPARE(QString::fromUtf8(mExchange->replyRawHeader("Content-Type")), QString("text/plain"));
QCOMPARE(QString::fromUtf8(mExchange->readAll()), QString("Hello World!"));
QCOMPARE(mExchange->error(), QNetworkReply::NoError);
}

void tst_NetworkExchange::testMaxRedirects()
Expand Down Expand Up @@ -193,6 +197,7 @@ void tst_NetworkExchange::testMaxRedirects()
QCOMPARE(mExchange->replyAttribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(), QString("Found"));
QCOMPARE(QString::fromUtf8(mExchange->replyRawHeader("Content-Type")), QString("application/json"));
QCOMPARE(QString::fromUtf8(mExchange->readAll()), QString("{ \"redirect\": true }"));
QCOMPARE(mExchange->error(), QNetworkReply::ProtocolUnknownError);
}

void tst_NetworkExchange::testRedirectLoop()
Expand Down Expand Up @@ -223,6 +228,7 @@ void tst_NetworkExchange::testRedirectLoop()
QCOMPARE(mExchange->replyAttribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(), QString("Found"));
QCOMPARE(QString::fromUtf8(mExchange->replyRawHeader("Content-Type")), QString("application/json"));
QCOMPARE(QString::fromUtf8(mExchange->readAll()), QString("{ \"redirect\": true }"));
QCOMPARE(mExchange->error(), QNetworkReply::ProtocolUnknownError);
}

void tst_NetworkExchange::testErrorResponse()
Expand Down Expand Up @@ -253,6 +259,7 @@ void tst_NetworkExchange::testErrorResponse()
QCOMPARE(mExchange->replyAttribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(), QString("Internal Server Error"));
QCOMPARE(QString::fromUtf8(mExchange->replyRawHeader("Content-Type")), QString("application/json"));
QCOMPARE(QString::fromUtf8(mExchange->readAll()), QString("{ \"error\": \"something went wrong\" }"));
QCOMPARE(mExchange->error(), QNetworkReply::UnknownContentError);
}

QIODevice *tst_NetworkExchange::createIncomingData(const QNetworkRequest & req, QIODevice * outgoingData /* = 0 */)
Expand Down

0 comments on commit 9efcd3e

Please sign in to comment.