[haiku-commits] haiku: hrev53814 - src/kits/package

  • From: Ryan Leavengood <leavengood@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 3 Feb 2020 21:18:14 -0500 (EST)

hrev53814 adds 1 changeset to branch 'master'
old head: 8769583f90f53bf9e049c205b4b5556e0c80aeac
new head: 0ef0921d99054cd29036823a555015c54565a37a
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=0ef0921d9905+%5E8769583f90f5

----------------------------------------------------------------------------

0ef0921d9905: 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
  Reviewed-on: https://review.haiku-os.org/c/haiku/+/2186
  Reviewed-by: Ryan Leavengood <leavengood@xxxxxxxxx>

                                          [ François Revol <revol@xxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev53814
Commit:      0ef0921d99054cd29036823a555015c54565a37a
URL:         https://git.haiku-os.org/haiku/commit/?id=0ef0921d9905
Author:      François Revol <revol@xxxxxxx>
Date:        Mon Feb  3 15:07:57 2020 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Tue Feb  4 02:18:09 2020 UTC

----------------------------------------------------------------------------

2 files changed, 56 insertions(+), 39 deletions(-)
src/kits/package/FetchFileJob.cpp | 91 +++++++++++++++++++++--------------
src/kits/package/FetchFileJob.h   |  4 +-

----------------------------------------------------------------------------

diff --git a/src/kits/package/FetchFileJob.cpp 
b/src/kits/package/FetchFileJob.cpp
index 6f53ca8647..d5e3bc4042 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 @@ FetchFileJob::FetchFileJob(const BContext& context, const 
BString& title,
        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 @@ FetchFileJob::Execute()
        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,58 @@ FetchFileJob::DownloadProgress(BUrlRequest*, ssize_t 
bytesReceived,
 
 
 void
-FetchFileJob::RequestCompleted(BUrlRequest*, bool success)
+FetchFileJob::RequestCompleted(BUrlRequest* request, bool success)
 {
-       fSuccess = success;
+       fError = request->Status();
+
+       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 4cfdb1b3e3..b4ba4230e2 100644
--- a/src/kits/package/FetchFileJob.h
+++ b/src/kits/package/FetchFileJob.h
@@ -50,7 +50,7 @@ public:
                                                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:
@@ -61,7 +61,7 @@ private:
                        BString                         fFileURL;
                        BEntry                          fTargetEntry;
                        BFile                           fTargetFile;
-                       bool                            fSuccess;
+                       status_t                        fError;
                        float                           fDownloadProgress;
                        off_t                           fBytes;
                        off_t                           fTotalBytes;


Other related posts:

  • » [haiku-commits] haiku: hrev53814 - src/kits/package - Ryan Leavengood