You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by sc...@apache.org on 2020/04/01 17:56:13 UTC
[xerces-c] branch master updated: XERCESC-1963 - Custom HTTP
headers missing with CURL NetAccessor
This is an automated email from the ASF dual-hosted git repository.
scantor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/xerces-c.git
The following commit(s) were added to refs/heads/master by this push:
new d8881d6 XERCESC-1963 - Custom HTTP headers missing with CURL NetAccessor
d8881d6 is described below
commit d8881d69a3993399179f50f1b76ac3aa8d830774
Author: Scott Cantor <ca...@osu.edu>
AuthorDate: Wed Apr 1 13:55:07 2020 -0400
XERCESC-1963 - Custom HTTP headers missing with CURL NetAccessor
---
.../util/NetAccessors/Curl/CurlURLInputStream.cpp | 58 +++++++++++-----------
.../util/NetAccessors/Curl/CurlURLInputStream.hpp | 19 +++----
2 files changed, 39 insertions(+), 38 deletions(-)
diff --git a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp
index 8d9befd..5ed6593 100644
--- a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp
+++ b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp
@@ -56,6 +56,7 @@ XERCES_CPP_NAMESPACE_BEGIN
CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo/*=0*/)
: fMulti(0)
, fEasy(0)
+ , fHeadersList(0)
, fMemoryManager(urlSource.getMemoryManager())
, fURLSource(urlSource)
, fTotalBytesRead(0)
@@ -69,23 +70,23 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP
, fPayloadLen(0)
, fContentType(0)
{
- // Allocate the curl multi handle
- fMulti = curl_multi_init();
+ // Allocate the curl multi handle
+ fMulti = curl_multi_init();
- // Allocate the curl easy handle
- fEasy = curl_easy_init();
+ // Allocate the curl easy handle
+ fEasy = curl_easy_init();
- // Set URL option
+ // Set URL option
TranscodeToStr url(fURLSource.getURLText(), "ISO8859-1", fMemoryManager);
- curl_easy_setopt(fEasy, CURLOPT_URL, (char*)url.str());
+ curl_easy_setopt(fEasy, CURLOPT_URL, (char*)url.str());
// Set up a way to recieve the data
- curl_easy_setopt(fEasy, CURLOPT_WRITEDATA, this); // Pass this pointer to write function
- curl_easy_setopt(fEasy, CURLOPT_WRITEFUNCTION, staticWriteCallback); // Our static write function
+ curl_easy_setopt(fEasy, CURLOPT_WRITEDATA, this); // Pass this pointer to write function
+ curl_easy_setopt(fEasy, CURLOPT_WRITEFUNCTION, staticWriteCallback); // Our static write function
- // Do redirects
- curl_easy_setopt(fEasy, CURLOPT_FOLLOWLOCATION, (long)1);
- curl_easy_setopt(fEasy, CURLOPT_MAXREDIRS, (long)6);
+ // Do redirects
+ curl_easy_setopt(fEasy, CURLOPT_FOLLOWLOCATION, (long)1);
+ curl_easy_setopt(fEasy, CURLOPT_MAXREDIRS, (long)6);
// Add username and password if authentication is required
const XMLCh *username = urlSource.getUser();
@@ -117,8 +118,6 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP
// Add custom headers
if(httpInfo->fHeaders) {
- struct curl_slist *headersList = 0;
-
const char *headersBuf = httpInfo->fHeaders;
const char *headersBufEnd = httpInfo->fHeaders + httpInfo->fHeadersLen;
@@ -133,7 +132,7 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP
memcpy(header.get(), headerStart, length);
header.get()[length] = 0;
- headersList = curl_slist_append(headersList, header.get());
+ fHeadersList = curl_slist_append(fHeadersList, header.get());
headersBuf += 2;
headerStart = headersBuf;
@@ -141,8 +140,7 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP
}
++headersBuf;
}
- curl_easy_setopt(fEasy, CURLOPT_HTTPHEADER, headersList);
- curl_slist_free_all(headersList);
+ curl_easy_setopt(fEasy, CURLOPT_HTTPHEADER, fHeadersList);
}
// Set up the payload
@@ -155,16 +153,16 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP
}
}
- // Add easy handle to the multi stack
- curl_multi_add_handle(fMulti, fEasy);
+ // Add easy handle to the multi stack
+ curl_multi_add_handle(fMulti, fEasy);
// Start reading, to get the content type
- while(fBufferHeadPtr == fBuffer)
- {
- int runningHandles = 0;
+ while(fBufferHeadPtr == fBuffer)
+ {
+ int runningHandles = 0;
readMore(&runningHandles);
- if(runningHandles == 0) break;
- }
+ if(runningHandles == 0) break;
+ }
// Find the content type
char *contentType8 = 0;
@@ -176,16 +174,18 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP
CurlURLInputStream::~CurlURLInputStream()
{
- // Remove the easy handle from the multi stack
- curl_multi_remove_handle(fMulti, fEasy);
+ // Remove the easy handle from the multi stack
+ curl_multi_remove_handle(fMulti, fEasy);
- // Cleanup the easy handle
- curl_easy_cleanup(fEasy);
+ // Cleanup the easy handle
+ curl_easy_cleanup(fEasy);
- // Cleanup the multi handle
- curl_multi_cleanup(fMulti);
+ // Cleanup the multi handle
+ curl_multi_cleanup(fMulti);
if(fContentType) fMemoryManager->deallocate(fContentType);
+
+ if(fHeadersList) curl_slist_free_all(fHeadersList);
}
diff --git a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp
index ea528c1..f75857b 100644
--- a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp
+++ b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp
@@ -96,24 +96,25 @@ private :
// that readBytes must return.
// -----------------------------------------------------------------------
- CURLM* fMulti;
- CURL* fEasy;
-
+ CURLM* fMulti;
+ CURL* fEasy;
+ curl_slist* fHeadersList;
+
MemoryManager* fMemoryManager;
- XMLURL fURLSource;
+ XMLURL fURLSource;
XMLSize_t fTotalBytesRead;
- XMLByte* fWritePtr;
+ XMLByte* fWritePtr;
XMLSize_t fBytesRead;
XMLSize_t fBytesToRead;
- bool fDataAvailable;
+ bool fDataAvailable;
// Overflow buffer for when curl writes more data to us
// than we've asked for.
- XMLByte fBuffer[CURL_MAX_WRITE_SIZE];
- XMLByte* fBufferHeadPtr;
- XMLByte* fBufferTailPtr;
+ XMLByte fBuffer[CURL_MAX_WRITE_SIZE];
+ XMLByte* fBufferHeadPtr;
+ XMLByte* fBufferTailPtr;
// Upload data
const char* fPayload;
---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org