Index: /trunk/include/iprt/http.h
===================================================================
--- /trunk/include/iprt/http.h	(revision 58216)
+++ /trunk/include/iprt/http.h	(revision 58217)
@@ -44,4 +44,8 @@
 /** Nil HTTP/HTTPS client handle. */
 #define NIL_RTHTTP                              ((RTHTTP)0)
+/** Callback function to be called during RTHttpGet*(). Register it using RTHttpSetDownloadProgressCallback(). */
+typedef DECLCALLBACK(void) RTHTTPDOWNLDPROGRCALLBACK(RTHTTP hHttp, void *pvUser, uint64_t cbDownloadTotal, uint64_t cbDownloaded);
+typedef RTHTTPDOWNLDPROGRCALLBACK *PRTHTTPDOWNLDPROGRCALLBACK;
+
 
 
@@ -283,4 +287,15 @@
 RTR3DECL(int) RTHttpGatherCaCertsInFile(const char *pszCaFile, uint32_t fFlags, PRTERRINFO pErrInfo);
 
+/**
+ * Set a callback function which is called during RTHttpGet*()
+ *
+ * @returns IPRT status code.
+ * @param   hHttp           The HTTP client instance.
+ * @param   pfnDownloadProgress Progress function to be called. Set it to
+ *                          NULL to disable the callback.
+ */
+RTR3DECL(int) RTHttpSetDownloadProgressCallback(RTHTTP hHttp, PRTHTTPDOWNLDPROGRCALLBACK pfnDownloadProgress);
+
+
 /** @} */
 
Index: /trunk/src/VBox/Runtime/generic/http-curl.cpp
===================================================================
--- /trunk/src/VBox/Runtime/generic/http-curl.cpp	(revision 58216)
+++ /trunk/src/VBox/Runtime/generic/http-curl.cpp	(revision 58217)
@@ -150,4 +150,8 @@
     /** Download size hint set by the progress callback. */
     uint64_t            cbDownloadHint;
+    /** Callback called during download. */
+    PRTHTTPDOWNLDPROGRCALLBACK pfnDownloadProgress;
+    /** User pointer parameter for pfnDownloadProgress. */
+    void               *pvDownloadProgressUser;
 } RTHTTPINTERNAL;
 /** Pointer to an internal HTTP client instance. */
@@ -2121,4 +2125,7 @@
     pThis->cbDownloadHint = (uint64_t)rdTotalDownload;
 
+    if (pThis->pfnDownloadProgress)
+        pThis->pfnDownloadProgress(pThis, pThis->pvDownloadProgressUser, (uint64_t)rdTotalDownload, (uint64_t)rdDownloaded);
+
     return pThis->fAbort ? 1 : 0;
 }
@@ -2505,2 +2512,12 @@
 }
 
+
+RTR3DECL(int) RTHttpSetDownloadProgressCallback(RTHTTP hHttp, PRTHTTPDOWNLDPROGRCALLBACK pfnDownloadProgress, void *pvUser)
+{
+    PRTHTTPINTERNAL pThis = hHttp;
+    RTHTTP_VALID_RETURN(pThis);
+
+    pThis->pfnDownloadProgress = pfnDownloadProgress;
+    pThis->pvDownloadProgressUser = pvUser;
+    return VINF_SUCCESS;
+}
