Add more specific HTTP error codes to QNetworkReply::NetworkError
A few more HTTP status codes from the 4xx and 5xx series have been added to QNetworkReply::NetworkError. For content errors, the following codes have been added: 1. 409 - Resource Conflict 2. 410 - Resource Gone For server related errors, the following codes have been added: 1. 500 - Internal Server Error 2. 501 - Operation Not Implemented 3. 503 - Service Unavailable Few of the above codes are quite possible when communicating with REST based services. NOTE: ===== * HTTP error status 400 is interpreted as QNetworkReply::ProtocolInvalidOperationError. * QNetworkReply::UnknownServerError is returned for all server related errors (5xx) not listed above. [ChangeLog][QtNetwork][QNetworkReply] Added more (specific) HTTP status codes to NetworkError enum. Task-number: QTBUG-30880 Change-Id: I9d2a133f6b3869f26710c6eb930dd8b08df31108 Reviewed-by: Peter Hartmann <phartmann@blackberry.com>bb10
parent
b584b6c478
commit
fd5dd27126
|
|
@ -60,6 +60,10 @@ static QNetworkReply::NetworkError statusCodeFromHttp(int httpStatusCode, const
|
|||
QNetworkReply::NetworkError code;
|
||||
// we've got an error
|
||||
switch (httpStatusCode) {
|
||||
case 400: // Bad Request
|
||||
code = QNetworkReply::ProtocolInvalidOperationError;
|
||||
break;
|
||||
|
||||
case 401: // Authorization required
|
||||
code = QNetworkReply::AuthenticationRequiredError;
|
||||
break;
|
||||
|
|
@ -80,15 +84,34 @@ static QNetworkReply::NetworkError statusCodeFromHttp(int httpStatusCode, const
|
|||
code = QNetworkReply::ProxyAuthenticationRequiredError;
|
||||
break;
|
||||
|
||||
case 409: // Resource Conflict
|
||||
code = QNetworkReply::ContentConflictError;
|
||||
break;
|
||||
|
||||
case 410: // Content no longer available
|
||||
code = QNetworkReply::ContentGoneError;
|
||||
break;
|
||||
|
||||
case 418: // I'm a teapot
|
||||
code = QNetworkReply::ProtocolInvalidOperationError;
|
||||
break;
|
||||
|
||||
case 500: // Internal Server Error
|
||||
code = QNetworkReply::InternalServerError;
|
||||
break;
|
||||
|
||||
case 501: // Server does not support this functionality
|
||||
code = QNetworkReply::OperationNotImplementedError;
|
||||
break;
|
||||
|
||||
case 503: // Service unavailable
|
||||
code = QNetworkReply::ServiceUnavailableError;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (httpStatusCode > 500) {
|
||||
// some kind of server error
|
||||
code = QNetworkReply::ProtocolUnknownError;
|
||||
code = QNetworkReply::UnknownServerError;
|
||||
} else if (httpStatusCode >= 400) {
|
||||
// content error we did not handle above
|
||||
code = QNetworkReply::UnknownContentError;
|
||||
|
|
|
|||
|
|
@ -173,6 +173,21 @@ QNetworkReplyPrivate::QNetworkReplyPrivate()
|
|||
again, but this failed for example because the upload data
|
||||
could not be read a second time.
|
||||
|
||||
\value ContentConflictError the request could not be completed due
|
||||
to a conflict with the current state of the resource.
|
||||
|
||||
\value ContentGoneError the requested resource is no longer
|
||||
available at the server.
|
||||
|
||||
\value InternalServerError the server encountered an unexpected
|
||||
condition which prevented it from fulfilling the request.
|
||||
|
||||
\value OperationNotImplementedError the server does not support the
|
||||
functionality required to fulfill the request.
|
||||
|
||||
\value ServiceUnavailableError the server is unable to handle the
|
||||
request at this time.
|
||||
|
||||
\value ProtocolUnknownError the Network Access API cannot
|
||||
honor the request because the protocol is not known
|
||||
|
||||
|
|
@ -191,6 +206,9 @@ QNetworkReplyPrivate::QNetworkReplyPrivate()
|
|||
\value ProtocolFailure a breakdown in protocol was
|
||||
detected (parsing error, invalid or unexpected responses, etc.)
|
||||
|
||||
\value UnknownServerError an unknown error related to
|
||||
the server response was detected
|
||||
|
||||
\sa error()
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -93,12 +93,20 @@ public:
|
|||
ContentNotFoundError,
|
||||
AuthenticationRequiredError,
|
||||
ContentReSendError,
|
||||
ContentConflictError,
|
||||
ContentGoneError,
|
||||
UnknownContentError = 299,
|
||||
|
||||
// protocol errors
|
||||
ProtocolUnknownError = 301,
|
||||
ProtocolInvalidOperationError,
|
||||
ProtocolFailure = 399
|
||||
ProtocolFailure = 399,
|
||||
|
||||
// Server side errors (401-499)
|
||||
InternalServerError = 401,
|
||||
OperationNotImplementedError,
|
||||
ServiceUnavailableError,
|
||||
UnknownServerError = 499
|
||||
};
|
||||
|
||||
~QNetworkReply();
|
||||
|
|
|
|||
|
|
@ -2856,9 +2856,9 @@ void tst_QNetworkReply::sendCustomRequestToHttp_data()
|
|||
QTest::newRow("trace") << QUrl("http://" + QtNetworkSettings::serverName()) <<
|
||||
QByteArray("TRACE") << (QBuffer *) 0 << 200 << QNetworkReply::NoError << QByteArray();
|
||||
QTest::newRow("connect") << QUrl("http://" + QtNetworkSettings::serverName()) <<
|
||||
QByteArray("CONNECT") << (QBuffer *) 0 << 400 << QNetworkReply::UnknownContentError << QByteArray(); // 400 = Bad Request
|
||||
QByteArray("CONNECT") << (QBuffer *) 0 << 400 << QNetworkReply::ProtocolInvalidOperationError << QByteArray(); // 400 = Bad Request
|
||||
QTest::newRow("nonsense") << QUrl("http://" + QtNetworkSettings::serverName()) <<
|
||||
QByteArray("NONSENSE") << (QBuffer *) 0 << 501 << QNetworkReply::ProtocolUnknownError << QByteArray(); // 501 = Method Not Implemented
|
||||
QByteArray("NONSENSE") << (QBuffer *) 0 << 501 << QNetworkReply::OperationNotImplementedError << QByteArray(); // 501 = Method Not Implemented
|
||||
|
||||
QByteArray ba("test");
|
||||
QBuffer *buffer = new QBuffer;
|
||||
|
|
|
|||
Loading…
Reference in New Issue