Added a seek method to LLCore::Http for data rewind.

A couple of minor changes to merchant out box in hopes that the would fix the issues.
meow-7.2.2
Rider Linden 2015-06-05 15:19:24 -07:00
parent d0d58c41b4
commit daf4d167b6
3 changed files with 39 additions and 3 deletions

View File

@ -515,6 +515,10 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
check_curl_easy_code(code, CURLOPT_READFUNCTION);
code = curl_easy_setopt(mCurlHandle, CURLOPT_READDATA, this);
check_curl_easy_code(code, CURLOPT_READDATA);
code = curl_easy_setopt(mCurlHandle, CURLOPT_SEEKFUNCTION, seekCallback);
check_curl_easy_code(code, CURLOPT_SEEKFUNCTION);
code = curl_easy_setopt(mCurlHandle, CURLOPT_SEEKDATA, this);
check_curl_easy_code(code, CURLOPT_SEEKDATA);
code = curl_easy_setopt(mCurlHandle, CURLOPT_COOKIEFILE, "");
check_curl_easy_code(code, CURLOPT_COOKIEFILE);
@ -819,6 +823,37 @@ size_t HttpOpRequest::readCallback(void * data, size_t size, size_t nmemb, void
return read_size;
}
int HttpOpRequest::seekCallback(void *userdata, curl_off_t offset, int origin)
{
HttpOpRequest * op(static_cast<HttpOpRequest *>(userdata));
if (!op->mReqBody)
{
return 0;
}
size_t newPos = 0;
if (origin == SEEK_SET)
newPos = offset;
else if (origin == SEEK_END)
newPos = static_cast<curl_off_t>(op->mReqBody->size()) + offset;
else if (origin == SEEK_CUR)
newPos = static_cast<curl_off_t>(op->mCurlBodyPos) + offset;
else
return 2;
if ((newPos < 0) || (newPos >= op->mReqBody->size()))
{
LL_WARNS(LOG_CORE) << "Attempt to seek to position outside post body." << LL_ENDL;
return 2;
}
op->mCurlBodyPos = (size_t)newPos;
return 0;
}
size_t HttpOpRequest::headerCallback(void * data, size_t size, size_t nmemb, void * userdata)
{

View File

@ -175,6 +175,7 @@ protected:
//
static size_t writeCallback(void * data, size_t size, size_t nmemb, void * userdata);
static size_t readCallback(void * data, size_t size, size_t nmemb, void * userdata);
static int seekCallback(void *data, curl_off_t offset, int origin);
static size_t headerCallback(void * data, size_t size, size_t nmemb, void * userdata);
static CURLcode curlSslCtxCallback(CURL *curl, void *ssl_ctx, void *userptr);
static int sslCertVerifyCallback(X509_STORE_CTX *ctx, void *param);

View File

@ -136,7 +136,7 @@ namespace LLMarketplaceImport
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
httpOpts->setWantHeaders(true);
httpOpts->setFollowRedirects(false);
httpOpts->setFollowRedirects(true);
httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, "*/*");
httpHeaders->append(HTTP_OUT_HEADER_CONNECTION, "Keep-Alive");
@ -241,13 +241,13 @@ namespace LLMarketplaceImport
{
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("marketplacePostCoro", httpPolicy));
httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("marketplaceGetCoro", httpPolicy));
LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
LLCore::HttpHeaders::ptr_t httpHeaders;
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
httpOpts->setWantHeaders(true);
httpOpts->setFollowRedirects(false);
httpOpts->setFollowRedirects(!sMarketplaceCookie.empty());
if (buildHeaders)
{