blob: be78e7126db3c33fe22079ff5bf3d552b640fffa [file] [edit]
Date: May 18, 2021 6:04 PM
From: 06c9d9dbd9473fa2384ea66cbcb30de3bfc23c07 May 18, 2021 6:04 PM
Subject: [PATCH] DELIA-50375 : PSN data not populating in AD placement request
Added progressCallback and stop the http download if thread stop requested.
Source: COMCAST
License: Apache-2.0
Upstream-Status: Pending
Signed-off-by: Suresh Sathiah <Suresh_Sathiah@comcast.com>
---
diff --git a/src/rtFileDownloader.cpp b/src/rtFileDownloader.cpp
index 99503fb31..4687c0518 100644
--- a/src/rtFileDownloader.cpp
+++ b/src/rtFileDownloader.cpp
@@ -108,7 +108,7 @@ static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, voi
size_t downloadCallbackSize = 0;
struct MemoryStruct *mem = (struct MemoryStruct *)userp;
- downloadCallbackSize = mem->downloadRequest->executeDownloadProgressCallback(contents, size, nmemb );
+ downloadCallbackSize = mem->downloadRequest->executeExternalWriteCallback(contents, size, nmemb );
mem->contentsBuffer = (char*)realloc(mem->contentsBuffer, mem->contentsSize + downloadSize + 1);
if(mem->contentsBuffer == NULL) {
@@ -181,8 +181,8 @@ void onDownloadHandleCheck()
rtFileDownloadRequest::rtFileDownloadRequest(const char* imageUrl, void* callbackData, void (*callbackFunction)(rtFileDownloadRequest*))
: mTag(), mFileUrl(imageUrl), mProxyServer(),
- mErrorString(), mHttpStatusCode(0), mCallbackFunction(callbackFunction), mDownloadProgressCallbackFunction(NULL), mDownloadProgressUserPtr(NULL),
- mDownloadedData(0), mDownloadedDataSize(), mDownloadStatusCode(0) ,mCallbackData(callbackData),
+ mErrorString(), mHttpStatusCode(0), mCallbackFunction(callbackFunction), mExternalWriteCallback(NULL), mExternalWriteCallbackUserPtr(NULL),
+ mProgressCallback(NULL), mProgressCallbackUserPtr(NULL), mDownloadedData(0), mDownloadedDataSize(), mDownloadStatusCode(0) ,mCallbackData(callbackData),
mCallbackFunctionMutex(), mHeaderData(0), mHeaderDataSize(0), mHeaderOnly(false), mDownloadHandleExpiresTime(-2)
#ifdef ENABLE_HTTP_CACHE
, mCacheEnabled(true), mDeferCacheRead(false), mCachedFileReadSize(0)
@@ -261,10 +261,26 @@ void rtFileDownloadRequest::setCallbackFunction(void (*callbackFunction)(rtFileD
mCallbackFunction = callbackFunction;
}
-void rtFileDownloadRequest::setDownloadProgressCallbackFunction(size_t (*callbackFunction)(void *ptr, size_t size, size_t nmemb, void *userData), void *userPtr)
+void rtFileDownloadRequest::setExternalWriteCallback(size_t (*callbackFunction)(void *ptr, size_t size, size_t nmemb, void *userData), void *userPtr)
{
- mDownloadProgressCallbackFunction = callbackFunction;
- mDownloadProgressUserPtr = userPtr;
+ mExternalWriteCallback = callbackFunction;
+ mExternalWriteCallbackUserPtr = userPtr;
+}
+
+void rtFileDownloadRequest::setProgressCallback(int (*callbackFunction)(void* ptr, double dltotal, double dlnow, double ultotal, double ulnow), void *userPtr)
+{
+ mProgressCallback = callbackFunction;
+ mProgressCallbackUserPtr = userPtr;
+}
+
+void* rtFileDownloadRequest::progressCallback(void)
+{
+ return mProgressCallback;
+}
+
+void* rtFileDownloadRequest::progressCallbackUserPtr(void)
+{
+ return mProgressCallbackUserPtr;
}
void rtFileDownloadRequest::setCallbackFunctionThreadSafe(void (*callbackFunction)(rtFileDownloadRequest*))
@@ -298,11 +314,11 @@ bool rtFileDownloadRequest::executeCallback(int statusCode)
return false;
}
-size_t rtFileDownloadRequest::executeDownloadProgressCallback(void * ptr, size_t size, size_t nmemb)
+size_t rtFileDownloadRequest::executeExternalWriteCallback(void * ptr, size_t size, size_t nmemb)
{
- if(mDownloadProgressCallbackFunction)
+ if(mExternalWriteCallback)
{
- return mDownloadProgressCallbackFunction(ptr, size, nmemb, mDownloadProgressUserPtr);
+ return mExternalWriteCallback(ptr, size, nmemb, mExternalWriteCallbackUserPtr);
}
return 0;
}
@@ -889,7 +905,7 @@ void rtFileDownloader::downloadFileAsByteRange(rtFileDownloadRequest* downloadRe
memset(buffer, 0, downloadRequest->getCachedFileReadSize());
bytesCount = fread(buffer, 1, downloadRequest->getCachedFileReadSize(), fp);
dataSize += bytesCount;
- downloadRequest->executeDownloadProgressCallback((unsigned char*)buffer, bytesCount, 1 );
+ downloadRequest->executeExternalWriteCallback((unsigned char*)buffer, bytesCount, 1 );
}
// For deferCacheRead, the user requires the downloadedDataSize but not the data.
downloadRequest->setDownloadedData( invalidData, dataSize);
@@ -1029,6 +1045,15 @@ bool rtFileDownloader::downloadByteRangeFromNetwork(rtFileDownloadRequest* downl
if(downloadRequest->isProgressMeterSwitchOff())
curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1);
+ else
+ {
+ if(downloadRequest->progressCallback())
+ {
+ curl_easy_setopt(curl_handle, CURLOPT_PROGRESSFUNCTION, downloadRequest->progressCallback());
+ curl_easy_setopt(curl_handle, CURLOPT_PROGRESSDATA, downloadRequest->progressCallbackUserPtr());
+ curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 0);
+ }
+ }
if(downloadRequest->isHTTPFailOnError())
{
@@ -1418,7 +1443,7 @@ void rtFileDownloader::downloadFile(rtFileDownloadRequest* downloadRequest)
memset(buffer, 0, downloadRequest->getCachedFileReadSize());
bytesCount = fread(buffer, 1, downloadRequest->getCachedFileReadSize(), fp);
dataSize += bytesCount;
- downloadRequest->executeDownloadProgressCallback((unsigned char*)buffer, bytesCount, 1 );
+ downloadRequest->executeExternalWriteCallback((unsigned char*)buffer, bytesCount, 1 );
}
// For deferCacheRead, the user requires the downloadedDataSize but not the data.
downloadRequest->setDownloadedData( invalidData, dataSize);
@@ -1537,6 +1562,15 @@ bool rtFileDownloader::downloadFromNetwork(rtFileDownloadRequest* downloadReques
if(downloadRequest->isProgressMeterSwitchOff())
curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1);
+ else
+ {
+ if(downloadRequest->progressCallback())
+ {
+ curl_easy_setopt(curl_handle, CURLOPT_PROGRESSFUNCTION, downloadRequest->progressCallback());
+ curl_easy_setopt(curl_handle, CURLOPT_PROGRESSDATA, downloadRequest->progressCallbackUserPtr());
+ curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 0);
+ }
+ }
if(downloadRequest->isHTTPFailOnError())
{
diff --git a/src/rtFileDownloader.h b/src/rtFileDownloader.h
index 9e66b04a6..66027c0de 100644
--- a/src/rtFileDownloader.h
+++ b/src/rtFileDownloader.h
@@ -60,12 +60,15 @@ public:
void setErrorString(const char* errorString);
rtString errorString();
void setCallbackFunction(void (*callbackFunction)(rtFileDownloadRequest*));
- void setDownloadProgressCallbackFunction(size_t (*callbackFunction)(void *ptr, size_t size, size_t nmemb, void *userData), void *userPtr);
+ void setExternalWriteCallback(size_t (*callbackFunction)(void *ptr, size_t size, size_t nmemb, void *userData), void *userPtr);
+ void setProgressCallback(int (*callbackFunction)(void* ptr, double dltotal, double dlnow, double ultotal, double ulnow), void *userPtr);
+ void* progressCallback(void);
+ void* progressCallbackUserPtr(void);
void setCallbackFunctionThreadSafe(void (*callbackFunction)(rtFileDownloadRequest*));
long httpStatusCode();
void setHttpStatusCode(long statusCode);
bool executeCallback(int statusCode);
- size_t executeDownloadProgressCallback(void *ptr, size_t size, size_t nmemb);
+ size_t executeExternalWriteCallback(void *ptr, size_t size, size_t nmemb);
void setDownloadedData(char* data, size_t size);
void downloadedData(char*& data, size_t& size);
char* downloadedData();
@@ -151,8 +154,10 @@ private:
rtString mErrorString;
long mHttpStatusCode;
void (*mCallbackFunction)(rtFileDownloadRequest*);
- size_t (*mDownloadProgressCallbackFunction)(void *ptr, size_t size, size_t nmemb, void *userData);
- void *mDownloadProgressUserPtr;
+ size_t (*mExternalWriteCallback)(void *ptr, size_t size, size_t nmemb, void *userData);
+ void *mExternalWriteCallbackUserPtr;
+ int (*mProgressCallback)(void* ptr, double TotalToDownload, double NowDownloaded, double TotalToUpload, double NowUploaded);
+ void *mProgressCallbackUserPtr;
char* mDownloadedData;
size_t mDownloadedDataSize;
int mDownloadStatusCode;