2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
22 #if !defined(XERCESC_INCLUDE_GUARD_CURLURLINPUTSTREAM_HPP) && !defined(XMLTOOLING_LITE)
23 #define XERCESC_INCLUDE_GUARD_CURLURLINPUTSTREAM_HPP
25 #include <xmltooling/logging.h>
26 #include <xmltooling/util/ParserPool.h>
30 #include <xercesc/util/XMLURL.hpp>
31 #include <xercesc/util/XMLExceptMsgs.hpp>
32 #include <xercesc/util/Janitor.hpp>
33 #include <xercesc/util/BinInputStream.hpp>
34 #include <xercesc/util/XMLNetAccessor.hpp>
36 namespace xmltooling {
39 // This class implements the BinInputStream interface specified by the XML
43 class XMLTOOL_API CurlURLInputStream : public xercesc::BinInputStream
46 CurlURLInputStream(const xercesc::XMLURL& urlSource, const xercesc::XMLNetHTTPInfo* httpInfo=0);
47 ~CurlURLInputStream();
49 #ifdef XMLTOOLING_XERCESC_64BITSAFE
55 xsecsize_t readBytes(XMLByte* const toFill, const xsecsize_t maxToRead);
57 #ifdef XMLTOOLING_XERCESC_INPUTSTREAM_HAS_CONTENTTYPE
58 const XMLCh* getContentType() const {
64 // -----------------------------------------------------------------------
65 // Unimplemented constructors and operators
66 // -----------------------------------------------------------------------
67 CurlURLInputStream(const CurlURLInputStream&);
68 CurlURLInputStream& operator=(const CurlURLInputStream&);
70 static size_t staticWriteCallback(void* ptr, size_t size, size_t nmemb, void* stream);
72 std::stringstream fUnderlyingStream;
73 xercesc::MemoryManager* fMemoryManager;
74 xercesc::XMLURL fURLSource;
75 xercesc::ArrayJanitor<char> fURL;
76 StreamInputSource::StreamBinInputStream* fInputStream;
77 logging::Category& m_log;
79 }; // CurlURLInputStream
83 #ifdef XMLTOOLING_XERCESC_64BITSAFE
88 CurlURLInputStream::curPos() const
90 return fInputStream ? fInputStream->curPos() : 0;
95 #endif // CURLURLINPUTSTREAM_HPP