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 <canto...@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-unsubscr...@xerces.apache.org For additional commands, e-mail: c-dev-h...@xerces.apache.org