[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    Two KIO::AccessManager patches...
From:       "Dawit A." <adawit () kde ! org>
Date:       2009-09-24 4:07:25
Message-ID: 200909240007.25714.adawit () kde ! org
[Download RAW message or body]

Patch #1:
The attached patch fixes KIO::AccessManager so that it sends the correct 
content-type during post operations and addresses bug# 207438.

Patch #2:
Change AccessManagerReply to return the actual KIO error code when it cannot 
be mapped directly into QNetworkReply::NetworkError.

["accessmanagerreply_p.patch" (text/x-patch)]

Index: kio/accessmanagerreply_p.cpp
===================================================================
--- kio/accessmanagerreply_p.cpp	(revision 1026906)
+++ kio/accessmanagerreply_p.cpp	(working copy)
@@ -158,7 +158,8 @@
 
 void AccessManagerReply::jobDone(KJob *kJob)
 {
-    switch (kJob->error())
+    const int errcode = kJob->error();
+    switch (errcode)
     {
         case 0:
             setError(QNetworkReply::NoError, kJob->errorText());
@@ -200,20 +201,20 @@
             break;
         case KIO::ERR_COULD_NOT_AUTHENTICATE:
             setError(QNetworkReply::AuthenticationRequiredError, kJob->errorText());
-            kDebug() << kJob->error();
+            kDebug() << errcode;
             break;
         case KIO::ERR_UNSUPPORTED_PROTOCOL:
         case KIO::ERR_NO_SOURCE_PROTOCOL:
             setError(QNetworkReply::ProtocolUnknownError, kJob->errorText());
-            kDebug() << kJob->error();
+            kDebug() << errcode;
             break;
         case KIO::ERR_UNSUPPORTED_ACTION:
             setError(QNetworkReply::ProtocolInvalidOperationError, \
kJob->errorText());  kDebug() << kJob->error();
             break;
         default:
-            setError(QNetworkReply::UnknownNetworkError, errorString());
-            kDebug() << kJob->error();
+            setError(static_cast<QNetworkReply::NetworkError>(QNetworkReply::ProtocolFailure \
+ errcode), errorString()); +            kDebug() << errcode;
     }
 
     emit finished();
@@ -228,6 +229,7 @@
     // temporary one assume code 302 which is most often used
     if (q->attribute(QNetworkRequest::HttpStatusCodeAttribute).isNull())
         q->setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 302);
+
     q->setAttribute(QNetworkRequest::RedirectionTargetAttribute, QUrl(url));
     emit q->finished();
 }


["accessmanager.patch" (text/x-patch)]

Index: kio/accessmanager.cpp
===================================================================
--- kio/accessmanager.cpp	(revision 1026906)
+++ kio/accessmanager.cpp	(working copy)
@@ -79,30 +79,22 @@
     switch (op) {
         case HeadOperation: {
             kDebug() << "HeadOperation:" << req.url();
-
             kioJob = KIO::mimetype(req.url(), KIO::HideProgressInfo);
-
             break;
         }
         case GetOperation: {
             kDebug() << "GetOperation:" << req.url();
-
             kioJob = KIO::get(req.url(), KIO::NoReload, KIO::HideProgressInfo);
-
             break;
         }
         case PutOperation: {
             kDebug() << "PutOperation:" << req.url();
-
             kioJob = KIO::put(req.url(), -1, KIO::HideProgressInfo);
-
             break;
         }
         case PostOperation: {
             kDebug() << "PostOperation:" << req.url();
-
             kioJob = KIO::http_post(req.url(), outgoingData->readAll(), KIO::HideProgressInfo);
-
             break;
         }
         default:
@@ -115,8 +107,14 @@
 
     kioJob->addMetaData(d->metaDataForRequest(req));
 
-    if ( op == PostOperation && !kioJob->metaData().contains("content-type")) 
-        kioJob->addMetaData("content-type", "Content-Type: application/x-www-form-urlencoded" );
+    if ( op == PostOperation && !kioJob->metaData().contains("content-type"))  {
+        QVariant header = req.header(QNetworkRequest::ContentTypeHeader);
+        if (header.isValid())
+          kioJob->addMetaData("content-type",
+                              QString::fromLatin1("Content-Type: %1").arg(header.toString()));
+        else
+          kioJob->addMetaData("content-type", "Content-Type: application/x-www-form-urlencoded");
+    }
 
     return reply;
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic