[haiku-commits] Change in haiku[master]: Package Kit: Return proper errors in FetchFileJob

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 3 Feb 2020 16:20:46 +0000

From François Revol <revol@xxxxxxx>:

François Revol has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/2186 ;)


Change subject: Package Kit: Return proper errors in FetchFileJob
......................................................................

Package Kit: Return proper errors in FetchFileJob

This should give more meaningful errors in pkgman
(not so sure, feel free to tweak the mapping),
and also avoid running the next job if fetching failed.

Change-Id: If76968f705ff25f7ecf1a5f91d88a02040d24665
---
M src/kits/package/FetchFileJob.cpp
M src/kits/package/FetchFileJob.h
2 files changed, 56 insertions(+), 37 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/86/2186/1

diff --git a/src/kits/package/FetchFileJob.cpp 
b/src/kits/package/FetchFileJob.cpp
index 6f53ca8..448cbdd 100644
--- a/src/kits/package/FetchFileJob.cpp
+++ b/src/kits/package/FetchFileJob.cpp
@@ -17,6 +17,7 @@
 #include <Path.h>

 #ifdef HAIKU_TARGET_PLATFORM_HAIKU
+#      include <HttpRequest.h>
 #      include <UrlRequest.h>
 #      include <UrlProtocolRoster.h>
 #endif
@@ -36,6 +37,7 @@
        fFileURL(fileURL),
        fTargetEntry(targetEntry),
        fTargetFile(&targetEntry, B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY),
+       fError(B_ERROR),
        fDownloadProgress(0.0)
 {
 }
@@ -96,41 +98,7 @@
        thread_id thread = request->Run();
        wait_for_thread(thread, NULL);

-       if (fSuccess == true)
-               return B_OK;
-       else
-               return B_ERROR;
-
-       //TODO: More detailed error codes?
-#if 0
-       const BHttpResult& outResult = dynamic_cast<const BHttpResult&>
-               (request->Result());
-
-       switch (outResult.StatusCode()) {
-               case B_HTTP_STATUS_OK:
-                       return B_OK;
-               case B_HTTP_STATUS_PARTIAL_CONTENT:
-                       return B_PARTIAL_READ;
-               case B_HTTP_STATUS_REQUEST_TIMEOUT:
-               case B_HTTP_STATUS_GATEWAY_TIMEOUT:
-                       return B_TIMED_OUT;
-               case B_HTTP_STATUS_NOT_IMPLEMENTED:
-               case B_HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE:
-                       return B_NOT_SUPPORTED;
-               case B_HTTP_STATUS_UNAUTHORIZED:
-                       return B_PERMISSION_DENIED;
-               case B_HTTP_STATUS_FORBIDDEN:
-               case B_HTTP_STATUS_METHOD_NOT_ALLOWED:
-               case B_HTTP_STATUS_NOT_ACCEPTABLE:
-                       return B_NOT_ALLOWED;
-               case B_HTTP_STATUS_NOT_FOUND:
-                       return B_NAME_NOT_FOUND;
-               case B_HTTP_STATUS_BAD_GATEWAY:
-                       return B_BAD_DATA;
-               default:
-                       return B_ERROR;
-       }
-#endif
+       return fError;
 }


@@ -156,9 +124,59 @@


 void
-FetchFileJob::RequestCompleted(BUrlRequest*, bool success)
+FetchFileJob::RequestCompleted(BUrlRequest* request, bool success)
 {
+       fError = request->Status();
        fSuccess = success;
+
+       if (success) {
+               const BHttpResult& outResult = dynamic_cast<const BHttpResult&>
+                       (request->Result());
+               uint16 code = outResult.StatusCode();
+               uint16 codeClass = BHttpRequest::StatusCodeClass(code);
+
+               switch (codeClass) {
+                       case B_HTTP_STATUS_CLASS_CLIENT_ERROR:
+                       case B_HTTP_STATUS_CLASS_SERVER_ERROR:
+                               fError = B_IO_ERROR;
+                               break;
+                       default:
+                               fError = B_OK;
+                               break;
+               }
+               switch (code) {
+                       case B_HTTP_STATUS_OK:
+                               fError = B_OK;
+                               break;
+                       case B_HTTP_STATUS_PARTIAL_CONTENT:
+                               fError = B_PARTIAL_READ;
+                               break;
+                       case B_HTTP_STATUS_REQUEST_TIMEOUT:
+                       case B_HTTP_STATUS_GATEWAY_TIMEOUT:
+                               fError = B_DEV_TIMEOUT;
+                               break;
+                       case B_HTTP_STATUS_NOT_IMPLEMENTED:
+                       case B_HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE:
+                               fError = B_NOT_SUPPORTED;
+                               break;
+                       case B_HTTP_STATUS_UNAUTHORIZED:
+                               fError = B_PERMISSION_DENIED;
+                               break;
+                       case B_HTTP_STATUS_FORBIDDEN:
+                       case B_HTTP_STATUS_METHOD_NOT_ALLOWED:
+                       case B_HTTP_STATUS_NOT_ACCEPTABLE:
+                               fError = B_NOT_ALLOWED;
+                               break;
+                       case B_HTTP_STATUS_NOT_FOUND:
+                               fError = B_NAME_NOT_FOUND;
+                               break;
+                       case B_HTTP_STATUS_BAD_GATEWAY:
+                               fError = B_BAD_DATA;
+                               break;
+                       default:
+                               break;
+               }
+       }
 }


diff --git a/src/kits/package/FetchFileJob.h b/src/kits/package/FetchFileJob.h
index 4cfdb1b..0a8b21b 100644
--- a/src/kits/package/FetchFileJob.h
+++ b/src/kits/package/FetchFileJob.h
@@ -50,7 +50,7 @@
                                                off_t position, ssize_t size);
        virtual void    DownloadProgress(BUrlRequest*, ssize_t bytesReceived,
                                                ssize_t bytesTotal);
-       virtual void    RequestCompleted(BUrlRequest*, bool success);
+       virtual void    RequestCompleted(BUrlRequest* request, bool success);
 #endif

 protected:
@@ -62,6 +62,7 @@
                        BEntry                          fTargetEntry;
                        BFile                           fTargetFile;
                        bool                            fSuccess;
+                       status_t                        fError;
                        float                           fDownloadProgress;
                        off_t                           fBytes;
                        off_t                           fTotalBytes;

--
To view, visit https://review.haiku-os.org/c/haiku/+/2186
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: If76968f705ff25f7ecf1a5f91d88a02040d24665
Gerrit-Change-Number: 2186
Gerrit-PatchSet: 1
Gerrit-Owner: François Revol <revol@xxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: Package Kit: Return proper errors in FetchFileJob - Gerrit