Added Xerces-C++ 3.1.2
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: MacOSURLAccessCF.cpp 471747 2006-11-06 14:31:56Z amassari $
|
||||
*/
|
||||
|
||||
|
||||
#include <xercesc/util/XMLUni.hpp>
|
||||
#include <xercesc/util/XMLUniDefs.hpp>
|
||||
#include <xercesc/util/XMLString.hpp>
|
||||
#include <xercesc/util/XMLExceptMsgs.hpp>
|
||||
#include <xercesc/util/NetAccessors/MacOSURLAccessCF/MacOSURLAccessCF.hpp>
|
||||
#include <xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp>
|
||||
|
||||
XERCES_CPP_NAMESPACE_BEGIN
|
||||
|
||||
const XMLCh
|
||||
MacOSURLAccessCF::sMyID[] =
|
||||
{
|
||||
chLatin_M, chLatin_a, chLatin_c, chLatin_O, chLatin_S, chLatin_U,
|
||||
chLatin_R, chLatin_L, chLatin_A, chLatin_c, chLatin_c, chLatin_e,
|
||||
chLatin_s, chLatin_s, chLatin_C, chLatin_F,
|
||||
chNull
|
||||
};
|
||||
|
||||
|
||||
MacOSURLAccessCF::MacOSURLAccessCF()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
MacOSURLAccessCF::~MacOSURLAccessCF()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BinInputStream*
|
||||
MacOSURLAccessCF::makeNew(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo/*=0*/)
|
||||
{
|
||||
if(httpInfo!=0 && httpInfo->fHTTPMethod!=XMLNetHTTPInfo::GET)
|
||||
ThrowXML(NetAccessorException, XMLExcepts::NetAcc_UnsupportedMethod);
|
||||
BinInputStream* result = new (urlSource.getMemoryManager()) URLAccessCFBinInputStream(urlSource);
|
||||
return result;
|
||||
}
|
||||
|
||||
XERCES_CPP_NAMESPACE_END
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: MacOSURLAccessCF.hpp 527149 2007-04-10 14:56:39Z amassari $
|
||||
*/
|
||||
|
||||
#if !defined(XERCESC_INCLUDE_GUARD_MACOSURLACCESSCF_HPP)
|
||||
#define XERCESC_INCLUDE_GUARD_MACOSURLACCESSCF_HPP
|
||||
|
||||
|
||||
#include <xercesc/util/XercesDefs.hpp>
|
||||
#include <xercesc/util/XMLURL.hpp>
|
||||
#include <xercesc/util/BinInputStream.hpp>
|
||||
#include <xercesc/util/XMLNetAccessor.hpp>
|
||||
|
||||
XERCES_CPP_NAMESPACE_BEGIN
|
||||
|
||||
//
|
||||
// This class is the wrapper for the Mac OS CFURLAccess code
|
||||
// (in CoreServices.framework) which provides access to network
|
||||
// resources. It's being used here to add the ability to
|
||||
// use HTTP URL's as the system id's in the XML decl clauses.
|
||||
//
|
||||
|
||||
class XMLUTIL_EXPORT MacOSURLAccessCF : public XMLNetAccessor
|
||||
{
|
||||
public :
|
||||
MacOSURLAccessCF();
|
||||
~MacOSURLAccessCF();
|
||||
|
||||
BinInputStream* makeNew(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo=0);
|
||||
const XMLCh* getId() const;
|
||||
|
||||
private :
|
||||
static const XMLCh sMyID[];
|
||||
|
||||
MacOSURLAccessCF(const MacOSURLAccessCF&);
|
||||
MacOSURLAccessCF& operator=(const MacOSURLAccessCF&);
|
||||
|
||||
};
|
||||
|
||||
inline const XMLCh*
|
||||
MacOSURLAccessCF::getId() const
|
||||
{
|
||||
return sMyID;
|
||||
}
|
||||
|
||||
|
||||
XERCES_CPP_NAMESPACE_END
|
||||
|
||||
#endif // MACOSURLACCESSCF_HPP
|
||||
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: URLAccessCFBinInputStream.cpp 936316 2010-04-21 14:19:58Z borisk $
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
#include <xercesc/util/XMLNetAccessor.hpp>
|
||||
#include <xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp>
|
||||
#include <xercesc/util/XMLString.hpp>
|
||||
#include <xercesc/util/XMLExceptMsgs.hpp>
|
||||
#include <xercesc/util/Janitor.hpp>
|
||||
|
||||
XERCES_CPP_NAMESPACE_BEGIN
|
||||
|
||||
URLAccessCFBinInputStream::URLAccessCFBinInputStream(const XMLURL& urlSource)
|
||||
: mBytesProcessed(0),
|
||||
mDataRef(NULL)
|
||||
{
|
||||
// Figure out what we're dealing with
|
||||
const XMLCh* urlText = urlSource.getURLText();
|
||||
unsigned int urlLength = XMLString::stringLen(urlText);
|
||||
|
||||
// Create a CFString from the path
|
||||
CFStringRef stringRef = NULL;
|
||||
if (urlText)
|
||||
{
|
||||
stringRef = CFStringCreateWithCharacters(
|
||||
kCFAllocatorDefault,
|
||||
urlText,
|
||||
urlLength
|
||||
);
|
||||
}
|
||||
|
||||
// Create a URLRef from the CFString
|
||||
CFURLRef urlRef = NULL;
|
||||
if (stringRef)
|
||||
{
|
||||
urlRef = CFURLCreateWithString(
|
||||
kCFAllocatorDefault,
|
||||
stringRef,
|
||||
NULL // CFURLRef baseURL
|
||||
);
|
||||
}
|
||||
|
||||
// Fetch the data
|
||||
mDataRef = NULL;
|
||||
SInt32 errorCode = 0;
|
||||
Boolean success = false;
|
||||
if (stringRef)
|
||||
{
|
||||
success = CFURLCreateDataAndPropertiesFromResource(
|
||||
kCFAllocatorDefault,
|
||||
urlRef,
|
||||
&mDataRef,
|
||||
NULL, // CFDictionaryRef *properties,
|
||||
NULL, // CFArrayRef desiredProperties,
|
||||
&errorCode
|
||||
);
|
||||
}
|
||||
|
||||
// Cleanup temporary stuff
|
||||
if (stringRef)
|
||||
CFRelease(stringRef);
|
||||
if (urlRef)
|
||||
CFRelease(urlRef);
|
||||
|
||||
// Check for an error in fetching the data
|
||||
if (!success || errorCode)
|
||||
{
|
||||
// Dispose any potential dataRef
|
||||
if (mDataRef)
|
||||
{
|
||||
CFRelease(mDataRef);
|
||||
mDataRef = NULL;
|
||||
}
|
||||
|
||||
// Do a best attempt at mapping some errors
|
||||
switch (errorCode)
|
||||
{
|
||||
case kCFURLUnknownSchemeError:
|
||||
ThrowXML(MalformedURLException, XMLExcepts::URL_UnsupportedProto);
|
||||
break;
|
||||
|
||||
case kCFURLRemoteHostUnavailableError:
|
||||
{
|
||||
if (urlSource.getHost())
|
||||
ThrowXML1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, urlSource.getHost());
|
||||
else
|
||||
ThrowXML1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, urlText);
|
||||
break;
|
||||
}
|
||||
|
||||
case kCFURLUnknownError:
|
||||
ThrowXML1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlText);
|
||||
break;
|
||||
|
||||
case kCFURLResourceNotFoundError:
|
||||
case kCFURLResourceAccessViolationError:
|
||||
case kCFURLTimeoutError:
|
||||
ThrowXML1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, urlText);
|
||||
break;
|
||||
|
||||
case kCFURLImproperArgumentsError:
|
||||
case kCFURLUnknownPropertyKeyError:
|
||||
case kCFURLPropertyKeyUnavailableError:
|
||||
default:
|
||||
ThrowXML1(NetAccessorException, XMLExcepts::NetAcc_InternalError, urlText);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
URLAccessCFBinInputStream::~URLAccessCFBinInputStream()
|
||||
{
|
||||
// Release any dataRef
|
||||
if (mDataRef)
|
||||
CFRelease(mDataRef);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// We've already read the data into a dataRef.
|
||||
// Just spoon it out to the caller as they ask for it.
|
||||
//
|
||||
XMLSize_t
|
||||
URLAccessCFBinInputStream::readBytes(XMLByte* const toFill
|
||||
, const XMLSize_t maxToRead)
|
||||
{
|
||||
// If we don't have a dataRef, we can't return any data
|
||||
if (!mDataRef)
|
||||
return 0;
|
||||
|
||||
// Get the length of the data we've fetched
|
||||
CFIndex dataLength = CFDataGetLength(mDataRef);
|
||||
|
||||
// Calculate how much to return based on how much
|
||||
// we've already returned, and how much the user wants
|
||||
CFIndex n = dataLength - mBytesProcessed; // Amount remaining
|
||||
CFIndex desired = maxToRead & 0x7fffffff; // CFIndex is signed
|
||||
if (n > desired) // Amount desired
|
||||
n = desired;
|
||||
|
||||
// Read the appropriate bytes into the user buffer
|
||||
CFRange range = CFRangeMake(mBytesProcessed, n);
|
||||
CFDataGetBytes(mDataRef, range, reinterpret_cast<UInt8*>(toFill));
|
||||
|
||||
// Update bytes processed
|
||||
mBytesProcessed += n;
|
||||
|
||||
// Return the number of bytes delivered
|
||||
return n;
|
||||
}
|
||||
|
||||
const XMLCh* URLAccessCFBinInputStream::getContentType() const
|
||||
{
|
||||
// TODO
|
||||
//
|
||||
return 0;
|
||||
}
|
||||
|
||||
XERCES_CPP_NAMESPACE_END
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* $Id: URLAccessCFBinInputStream.hpp 670359 2008-06-22 13:43:45Z borisk $
|
||||
*/
|
||||
|
||||
#if !defined(XERCESC_INCLUDE_GUARD_URLACCESSCFBININPUTSTREAM_HPP)
|
||||
#define XERCESC_INCLUDE_GUARD_URLACCESSCFBININPUTSTREAM_HPP
|
||||
|
||||
|
||||
#include <xercesc/util/XMLURL.hpp>
|
||||
#include <xercesc/util/XMLExceptMsgs.hpp>
|
||||
#include <xercesc/util/BinInputStream.hpp>
|
||||
|
||||
#if defined(__APPLE__)
|
||||
// Framework includes from ProjectBuilder
|
||||
#include <CoreServices/CoreServices.h>
|
||||
#else
|
||||
// Classic includes otherwise
|
||||
#include <CFURL.h>
|
||||
#include <CFURLAccess.h>
|
||||
#endif
|
||||
|
||||
XERCES_CPP_NAMESPACE_BEGIN
|
||||
|
||||
//
|
||||
// This class implements the BinInputStream interface specified by the XML
|
||||
// parser.
|
||||
//
|
||||
|
||||
class XMLUTIL_EXPORT URLAccessCFBinInputStream : public BinInputStream
|
||||
{
|
||||
public :
|
||||
URLAccessCFBinInputStream(const XMLURL& urlSource);
|
||||
~URLAccessCFBinInputStream();
|
||||
|
||||
virtual XMLFilePos curPos() const;
|
||||
virtual XMLSize_t readBytes
|
||||
(
|
||||
XMLByte* const toFill
|
||||
, const XMLSize_t maxToRead
|
||||
);
|
||||
|
||||
virtual const XMLCh* getContentType() const;
|
||||
|
||||
private :
|
||||
CFDataRef mDataRef;
|
||||
CFIndex mBytesProcessed;
|
||||
};
|
||||
|
||||
|
||||
inline XMLFilePos
|
||||
URLAccessCFBinInputStream::curPos() const
|
||||
{
|
||||
return mBytesProcessed;
|
||||
}
|
||||
|
||||
XERCES_CPP_NAMESPACE_END
|
||||
|
||||
#endif // URLACCESSCFBININPUTSTREAM_HPP
|
||||
Reference in New Issue
Block a user