diff --git a/projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr b/projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr index 048cab81c09c1b712e8588fe140ec8e77c965bc2..d94a67a659ff5427745b8cdabce798ab682e1e73 100644 --- a/projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr +++ b/projects/Win32/BCB6/Xerces-all/XercesLib/XercesLib.bpr @@ -4,302 +4,303 @@ <MACROS> <VERSION value="BCB.06.00"/> <PROJECT value="..\..\..\..\..\Build\Win32\BCB6\XercesLib.dll"/> - <OBJFILES value="..\..\..\..\..\Build\Win32\BCB6\obj\Xerceslib.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\WindowsFileMgr.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\InMemMsgLoader.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\WindowsMutexMgr.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BinHTTPURLInputStream.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\WinSockNetAccessor.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Win32TransService.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ASCIIRangeFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BlockRangeFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BMPattern.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\CharToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ClosureToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ConcatToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ConditionToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Match.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ModifierToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Op.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\OpFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ParenToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ParserForXMLSchema.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\RangeFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\RangeToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\RangeTokenMap.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\RegularExpression.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\RegxParser.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\RegxUtil.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\StringToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Token.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\TokenFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\UnicodeRangeFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\UnionToken.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRangeFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUniCharacter.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Base64.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DefaultPanicHandler.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\PanicHandler.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BinFileInputStream.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BinInputStream.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BinMemInputStream.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BitSet.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\EncodingValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\HashPtr.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\HashXMLCh.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\HeaderDummy.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\HexBin.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\KVStringPair.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Mutexes.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\PlatformUtils.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIUni.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\QName.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\StringPool.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SynchronizedStringPool.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\TransService.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMemory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XML256TableTranscoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XML88591Transcoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAbstractDoubleFloat.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLASCIITranscoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBigDecimal.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBigInteger.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLChar.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLChTranscoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDateTime.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDouble.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLEBCDICTranscoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLException.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLFloat.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLIBM1047Transcoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLIBM1140Transcoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLInitializer.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLMsgLoader.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLNumber.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLString.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLStringTokenizer.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUCS4Transcoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUni.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUri.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLURL.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUTF16Transcoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUTF8Transcoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLWin1252Transcoder.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BinOutputStream.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\LocalFileFormatTarget.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\LocalFileInputSource.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\MemBufFormatTarget.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\MemBufInputSource.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\StdInInputSource.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\StdOutFormatTarget.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\URLInputSource.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Wrapper4DOMLSInput.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Wrapper4InputSource.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttDef.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttr.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBuffer.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBufferMgr.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLContentModel.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLElementDecl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLEntityDecl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLFormatter.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLNotationDecl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRecognizer.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRefInfo.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttDefList.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLGrammarDescription.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLSchemaDescription.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDTDDescription.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BinFileOutputStream.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BinMemOutputStream.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DGXMLScanner.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ElemStack.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IGXMLScanner.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IGXMLScanner2.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\MemoryManagerImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ReaderMgr.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SGXMLScanner.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ValidationContextImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\VecAttributesImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\VecAttrListImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\WFXMLScanner.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLGrammarPoolImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLReader.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLScanner.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLScannerResolver.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XProtoType.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSAXMLScanner.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSObjectFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSerializeEngine.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XTemplateSerializer.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Dummy.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\InputSource.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SAXException.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParseException.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractDOMParser.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSParserImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLReaderImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLFilterImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParser.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XercesDOMParser.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\AllContentModel.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\CMAny.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\CMBinaryOp.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\CMUnaryOp.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ContentLeafNameTypeVector.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ContentSpecNode.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DFAContentModel.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\GrammarResolver.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\MixedContentModel.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SimpleContentModel.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Grammar.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractNumericFacetValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractNumericValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractStringValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\AnySimpleTypeDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\AnyURIDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\Base64BinaryDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\BooleanDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DatatypeValidatorFactory.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DateDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DateTimeDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DateTimeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DayDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DecimalDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DoubleDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DurationDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ENTITYDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\FloatDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\HexBinaryDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IDDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IDREFDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ListDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\MonthDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\MonthDayDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\NameDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\NCNameDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\NOTATIONDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\QNameDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\StringDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\TimeDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\UnionDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLCanRepGroup.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\YearDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\YearMonthDatatypeValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DTDAttDef.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DTDAttDefList.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DTDElementDecl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DTDGrammar.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DTDScanner.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DTDValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDTDDescriptionImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DTDEntityDecl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\FieldActivator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\FieldValueMap.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Field.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Key.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IC_KeyRef.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Selector.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Unique.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IdentityConstraint.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\IdentityConstraintHandler.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ValueStore.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ValueStoreCache.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XercesXPath.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XPathMatcher.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XPathMatcherStack.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XPathSymbols.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\ComplexTypeInfo.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\GeneralAttributeCheck.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\NamespaceScope.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaAttDef.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaAttDefList.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaElementDecl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaGrammar.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaInfo.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaSymbols.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaValidator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\SubstitutionGroupComparator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\TraverseSchema.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XercesAttGroupInfo.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XercesElementWildcard.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XercesGroupInfo.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSDDOMParser.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSDErrorReporter.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSDLocator.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XUtil.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XMLSchemaDescriptionImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\sax2Dummy.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrMapImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrNSImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCDATASectionImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCharacterDataImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMChildNode.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCommentImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMConfigurationImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDeepNodeListImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentFragmentImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentTypeImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMElementImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMElementNSImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMEntityImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMEntityReferenceImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMErrorImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationListImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationRegistry.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLocatorImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSSerializerImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNamedNodeMapImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeIDMap.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeIteratorImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeListImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeVector.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNormalizer.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNotationImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMParentNode.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMProcessingInstructionImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMRangeImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMStringListImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMStringPool.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTextImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTreeWalkerImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTypeInfoImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSDElementNSImpl.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMException.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMRangeException.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMXPathException.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIAttribute.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIAttributeList.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIElement.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIItem.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSAnnotation.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeDeclaration.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeGroupDefinition.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeUse.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSComplexTypeDefinition.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSElementDeclaration.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSFacet.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSIDCDefinition.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSModel.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSModelGroup.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSModelGroupDefinition.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSMultiValueFacet.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSNamespaceItem.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSNotationDeclaration.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSObject.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSParticle.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSSimpleTypeDefinition.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSTypeDefinition.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSValue.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\XSWildcard.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSException.obj - ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSOutputImpl.obj + <OBJFILES value="..\..\..\..\..\Build\Win32\BCB6\obj\Xerceslib.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\WindowsFileMgr.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\InMemMsgLoader.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\WindowsMutexMgr.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BinHTTPURLInputStream.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\WinSockNetAccessor.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BinHTTPInputStreamCommon.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Win32TransService.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ASCIIRangeFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BlockRangeFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BMPattern.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\CharToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ClosureToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ConcatToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ConditionToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Match.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ModifierToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Op.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\OpFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ParenToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ParserForXMLSchema.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\RangeFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\RangeToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\RangeTokenMap.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\RegularExpression.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\RegxParser.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\RegxUtil.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\StringToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Token.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\TokenFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\UnicodeRangeFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\UnionToken.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRangeFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUniCharacter.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Base64.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DefaultPanicHandler.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\PanicHandler.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BinFileInputStream.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BinInputStream.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BinMemInputStream.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BitSet.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\EncodingValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\HashPtr.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\HashXMLCh.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\HeaderDummy.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\HexBin.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\KVStringPair.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Mutexes.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\PlatformUtils.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIUni.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\QName.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\StringPool.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SynchronizedStringPool.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\TransService.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMemory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XML256TableTranscoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XML88591Transcoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAbstractDoubleFloat.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLASCIITranscoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBigDecimal.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBigInteger.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLChar.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLChTranscoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDateTime.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDouble.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLEBCDICTranscoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLException.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLFloat.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLIBM1047Transcoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLIBM1140Transcoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLInitializer.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLMsgLoader.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLNumber.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLString.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLStringTokenizer.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUCS4Transcoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUni.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUri.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLURL.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUTF16Transcoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLUTF8Transcoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLWin1252Transcoder.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BinOutputStream.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\LocalFileFormatTarget.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\LocalFileInputSource.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\MemBufFormatTarget.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\MemBufInputSource.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\StdInInputSource.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\StdOutFormatTarget.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\URLInputSource.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Wrapper4DOMLSInput.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Wrapper4InputSource.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttDef.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttr.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBuffer.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLBufferMgr.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLContentModel.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLElementDecl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLEntityDecl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLFormatter.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLNotationDecl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRecognizer.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLRefInfo.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLAttDefList.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLGrammarDescription.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLSchemaDescription.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDTDDescription.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BinFileOutputStream.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BinMemOutputStream.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DGXMLScanner.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ElemStack.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IGXMLScanner.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IGXMLScanner2.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\MemoryManagerImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ReaderMgr.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SGXMLScanner.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ValidationContextImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\VecAttributesImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\VecAttrListImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\WFXMLScanner.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLGrammarPoolImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLReader.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLScanner.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLScannerResolver.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XProtoType.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSAXMLScanner.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSObjectFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSerializeEngine.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XTemplateSerializer.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Dummy.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\InputSource.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SAXException.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParseException.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractDOMParser.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSParserImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLReaderImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SAX2XMLFilterImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SAXParser.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XercesDOMParser.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\AllContentModel.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\CMAny.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\CMBinaryOp.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\CMUnaryOp.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ContentLeafNameTypeVector.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ContentSpecNode.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DFAContentModel.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\GrammarResolver.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\MixedContentModel.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SimpleContentModel.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Grammar.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractNumericFacetValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractNumericValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\AbstractStringValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\AnySimpleTypeDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\AnyURIDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\Base64BinaryDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\BooleanDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DatatypeValidatorFactory.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DateDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DateTimeDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DateTimeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DayDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DecimalDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DoubleDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DurationDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ENTITYDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\FloatDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\HexBinaryDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IDDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IDREFDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ListDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\MonthDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\MonthDayDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\NameDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\NCNameDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\NOTATIONDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\QNameDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\StringDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\TimeDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\UnionDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLCanRepGroup.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\YearDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\YearMonthDatatypeValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DTDAttDef.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DTDAttDefList.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DTDElementDecl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DTDGrammar.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DTDScanner.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DTDValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLDTDDescriptionImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DTDEntityDecl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\FieldActivator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\FieldValueMap.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Field.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Key.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IC_KeyRef.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Selector.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IC_Unique.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IdentityConstraint.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\IdentityConstraintHandler.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ValueStore.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ValueStoreCache.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XercesXPath.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XPathMatcher.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XPathMatcherStack.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XPathSymbols.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\ComplexTypeInfo.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\GeneralAttributeCheck.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\NamespaceScope.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaAttDef.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaAttDefList.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaElementDecl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaGrammar.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaInfo.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaSymbols.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SchemaValidator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\SubstitutionGroupComparator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\TraverseSchema.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XercesAttGroupInfo.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XercesElementWildcard.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XercesGroupInfo.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSDDOMParser.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSDErrorReporter.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSDLocator.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XUtil.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XMLSchemaDescriptionImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\sax2Dummy.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrMapImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMAttrNSImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCDATASectionImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCharacterDataImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMChildNode.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMCommentImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMConfigurationImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDeepNodeListImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentFragmentImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMDocumentTypeImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMElementImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMElementNSImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMEntityImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMEntityReferenceImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMErrorImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationListImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMImplementationRegistry.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLocatorImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSSerializerImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNamedNodeMapImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeIDMap.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeIteratorImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeListImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNodeVector.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNormalizer.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMNotationImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMParentNode.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMProcessingInstructionImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMRangeImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMStringListImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMStringPool.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTextImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTreeWalkerImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMTypeInfoImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSDElementNSImpl.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMException.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMRangeException.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMXPathException.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIAttribute.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIAttributeList.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIElement.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\PSVIItem.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSAnnotation.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeDeclaration.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeGroupDefinition.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSAttributeUse.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSComplexTypeDefinition.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSElementDeclaration.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSFacet.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSIDCDefinition.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSModel.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSModelGroup.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSModelGroupDefinition.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSMultiValueFacet.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSNamespaceItem.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSNotationDeclaration.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSObject.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSParticle.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSSimpleTypeDefinition.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSTypeDefinition.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSValue.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\XSWildcard.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSException.obj + ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSOutputImpl.obj ..\..\..\..\..\Build\Win32\BCB6\obj\DOMLSInputImpl.obj ..\..\..\..\..\Build\Win32\BCB6\obj\DOMXPathExpressionImpl.obj ..\..\..\..\..\Build\Win32\BCB6\obj\DOMXPathNSResolverImpl.obj @@ -316,7 +317,7 @@ <LIBRARIES value=""/> <SPARELIBS value="rtl.lib"/> <PACKAGES value="vcl.bpi rtl.bpi"/> - <PATHCPP value=".;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\xinclude"/> + <PATHCPP value=".;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\xinclude"/> <PATHPAS value=".;"/> <PATHRC value=".;"/> <PATHASM value=".;"/> @@ -326,40 +327,41 @@ <USERDEFINES value="_DEBUG;PLATFORM_WIN32;XERCES_BUILDING_LIBRARY;XERCES_PATH_DELIMITER_BACKSLASH=1;XERCES_USE_FILEMGR_WINDOWS=1;XERCES_USE_MUTEXMGR_WINDOWS=1;XERCES_USE_NETACCESSOR_WINSOCK=1;XERCES_USE_TRANSCODER_WINDOWS=1;XERCES_USE_MSGLOADER_INMEMORY=1;HAVE_LIMITS_H=1;HAVE_FTIME=1;HAVE_SYS_TIMEB_H=1;HAVE_STRICMP=1;HAVE_STRNICMP=1;HAVE_WCSUPR=1;HAVE_WCSLWR=1;HAVE_WCSICMP=1;HAVE_WCSNICMP=1;"/> <SYSDEFINES value="NO_STRICT;_RTLDLL;USEPACKAGES"/> <MAINSOURCE value="Xerceslib.cpp"/> - <INCLUDEPATH value="..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src;..\..\..\..\..\src\xercesc\xinclude;$(BCB)\include"/> - <LIBPATH value="..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src;..\..\..\..\..\src\xercesc\xinclude;$(BCB)\lib\obj;$(BCB)\lib"/> + <INCLUDEPATH value="..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src;..\..\..\..\..\src\xercesc\xinclude;$(BCB)\include"/> + <LIBPATH value="..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src;..\..\..\..\..\src\xercesc\xinclude;$(BCB)\lib\obj;$(BCB)\lib"/> <WARNINGS value="-w-par -w-8027 -w-8026"/> <OTHERFILES value=""/> </MACROS> <OPTIONS> - <IDLCFLAGS value="-I..\..\..\..\..\src\xercesc\framework\psvi - -I..\..\..\..\..\src\xercesc\dom -I..\..\..\..\..\src\xercesc\dom\impl - -I..\..\..\..\..\src\xercesc\sax2 - -I..\..\..\..\..\src\xercesc\validators\schema - -I..\..\..\..\..\src\xercesc\validators\schema\identity - -I..\..\..\..\..\src\xercesc\validators\DTD - -I..\..\..\..\..\src\xercesc\validators\datatype - -I..\..\..\..\..\src\xercesc\validators\common - -I..\..\..\..\..\src\xercesc\parsers -I..\..\..\..\..\src\xercesc\sax - -I..\..\..\..\..\src\xercesc\internal - -I..\..\..\..\..\src\xercesc\framework -I..\..\..\..\..\src\xercesc\util - -I..\..\..\..\..\src\xercesc\util\regx - -I..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock - -I..\..\..\..\..\src\xercesc\util\Transcoders\Win32 - -I..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory - -I..\..\..\..\..\src\xercesc\util\FileManagers - -I..\..\..\..\..\src\xercesc\util\MutexManagers -I..\..\..\..\..\src + <IDLCFLAGS value="-I..\..\..\..\..\src\xercesc\framework\psvi + -I..\..\..\..\..\src\xercesc\dom -I..\..\..\..\..\src\xercesc\dom\impl + -I..\..\..\..\..\src\xercesc\sax2 + -I..\..\..\..\..\src\xercesc\validators\schema + -I..\..\..\..\..\src\xercesc\validators\schema\identity + -I..\..\..\..\..\src\xercesc\validators\DTD + -I..\..\..\..\..\src\xercesc\validators\datatype + -I..\..\..\..\..\src\xercesc\validators\common + -I..\..\..\..\..\src\xercesc\parsers -I..\..\..\..\..\src\xercesc\sax + -I..\..\..\..\..\src\xercesc\internal + -I..\..\..\..\..\src\xercesc\framework -I..\..\..\..\..\src\xercesc\util + -I..\..\..\..\..\src\xercesc\util\regx + -I..\..\..\..\..\src\xercesc\util\NetAccessors + -I..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock + -I..\..\..\..\..\src\xercesc\util\Transcoders\Win32 + -I..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory + -I..\..\..\..\..\src\xercesc\util\FileManagers + -I..\..\..\..\..\src\xercesc\util\MutexManagers -I..\..\..\..\..\src -I..\..\..\..\..\src\xercesc\xinclude - -I$(BCB)\include -src_suffix cpp -D_DEBUG -DPLATFORM_WIN32 - -DXERCES_BUILDING_LIBRARY -DXERCES_PATH_DELIMITER_BACKSLASH=1 - -DXERCES_USE_FILEMGR_WINDOWS=1 -DXERCES_USE_MUTEXMGR_WINDOWS=1 - -DXERCES_USE_NETACCESSOR_WINSOCK=1 - -DXERCES_USE_TRANSCODER_WINDOWS=1 -DXERCES_USE_MSGLOADER_INMEMORY=1 - -DHAVE_LIMITS_H=1 -DHAVE_FTIME=1 -DHAVE_SYS_TIMEB_H=1 -DHAVE_STRICMP=1 + -I$(BCB)\include -src_suffix cpp -D_DEBUG -DPLATFORM_WIN32 + -DXERCES_BUILDING_LIBRARY -DXERCES_PATH_DELIMITER_BACKSLASH=1 + -DXERCES_USE_FILEMGR_WINDOWS=1 -DXERCES_USE_MUTEXMGR_WINDOWS=1 + -DXERCES_USE_NETACCESSOR_WINSOCK=1 + -DXERCES_USE_TRANSCODER_WINDOWS=1 -DXERCES_USE_MSGLOADER_INMEMORY=1 + -DHAVE_LIMITS_H=1 -DHAVE_FTIME=1 -DHAVE_SYS_TIMEB_H=1 -DHAVE_STRICMP=1 -DHAVE_WCSUPR=1 -DHAVE_WCSLWR=1 -DHAVE_WCSICMP=1 -DHAVE_WCSNICMP=1 -DHAVE_STRNICMP=1 -boa"/> <CFLAG1 value="-WD -Od -Q -Vx -Ve -X- -r- -a8 -b -k -y -v -vi- -tWD -tWM -c"/> - <PFLAGS value="-N2..\..\..\..\..\Build\Win32\BCB6\obj + <PFLAGS value="-N2..\..\..\..\..\Build\Win32\BCB6\obj -N0..\..\..\..\..\Build\Win32\BCB6\obj -$Y+ -$W -$O- -$A8 -v -JPHNE -M"/> <RFLAGS value=""/> <AFLAGS value="/mx /w2 /zi"/> @@ -377,6 +379,7 @@ <FILE FILENAME="..\..\..\..\..\src\xercesc\util\FileManagers\WindowsFileMgr.cpp" FORMNAME="" UNITNAME="WindowsFileMgr" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory\InMemMsgLoader.cpp" FORMNAME="" UNITNAME="InMemMsgLoader" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\util\MutexManagers\WindowsMutexMgr.cpp" FORMNAME="" UNITNAME="WindowsMutexMgr" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> + <FILE FILENAME="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp" FORMNAME="" UNITNAME="BinHTTPInputStreamCommon" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp" FORMNAME="" UNITNAME="BinHTTPURLInputStream" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\WinSockNetAccessor.cpp" FORMNAME="" UNITNAME="WinSockNetAccessor" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="..\..\..\..\..\src\xercesc\util\Transcoders\Win32\Win32TransService.cpp" FORMNAME="" UNITNAME="Win32TransService" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> diff --git a/projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak b/projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak index 207e7e2d31bd5cebb115477ca910c9cfd57ee9ba..d3a41bb64be2d89332a8bc7f80a899d58ba117d0 100644 --- a/projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak +++ b/projects/Win32/BCC.551/Xerces-all/XercesLib/XercesLib.mak @@ -11,6 +11,7 @@ OBJFILES = $(TARGETPATH)\obj\XercesLib.obj \ $(TARGETPATH)\obj\Win32TransService.obj \ $(TARGETPATH)\obj\BinHTTPURLInputStream.obj \ $(TARGETPATH)\obj\WinSockNetAccessor.obj \ + $(TARGETPATH)\obj\BinHTTPInputStreamCommon.obj \ $(TARGETPATH)\obj\ASCIIRangeFactory.obj \ $(TARGETPATH)\obj\BlockRangeFactory.obj \ $(TARGETPATH)\obj\BMPattern.obj \ @@ -319,7 +320,7 @@ LIBRARIES = SPARELIBS = DEFFILE = # --------------------------------------------------------------------------- -PATHCPP = .;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude; +PATHCPP = .;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\dom\impl;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\InMemory;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\FileManagers;..\..\..\..\..\src\xercesc\util\MutexManagers;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude; PATHASM = .; PATHPAS = .; PATHRC = .;..\..\..\..\..\src\xercesc\util\Platforms\Win32 @@ -328,8 +329,8 @@ XERCES_NO_ASM=;XERCES_NO_ASM !endif USERDEFINES = _DEBUG;XERCES_BUILDING_LIBRARY;XERCES_USE_FILEMGR_WINDOWS=1;XERCES_USE_MUTEXMGR_WINDOWS=1;XERCES_USE_NETACCESSOR_WINSOCK=1;XERCES_USE_MSGLOADER_INMEMORY=1;XERCES_USE_TRANSCODER_WINDOWS=1;XERCES_PATH_DELIMITER_BACKSLASH=1;HAVE_LIMITS_H=1;HAVE_SYS_TIMEB_H=1;HAVE_FTIME=1;HAVE_STRICMP=1;HAVE_STRNICMP=1;HAVE_WCSUPR=0;HAVE_WCSLWR=0;HAVE_WCSICMP=0;HAVE_WCSNICMP=0;$(XERCES_NO_ASM) SYSDEFINES = NO_STRICT;_NO_VCL;_RTLDLL -INCLUDEPATH = ..\..\..\..\..\src;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\Win32;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude; -LIBPATH = ..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\Win32;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude; +INCLUDEPATH = ..\..\..\..\..\src;..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\framework\psvi;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\Win32;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude; +LIBPATH = ..\..\..\..\..\src\xercesc\dom;..\..\..\..\..\src\xercesc\framework;..\..\..\..\..\src\xercesc\internal;..\..\..\..\..\src\xercesc\parsers;..\..\..\..\..\src\xercesc\sax;..\..\..\..\..\src\xercesc\sax2;..\..\..\..\..\src\xercesc\util;..\..\..\..\..\src\xercesc\util\MsgLoaders\Win32;..\..\..\..\..\src\xercesc\util\NetAccessors;..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock;..\..\..\..\..\src\xercesc\util\regx;..\..\..\..\..\src\xercesc\util\Transcoders\Win32;..\..\..\..\..\src\xercesc\validators\common;..\..\..\..\..\src\xercesc\validators\datatype;..\..\..\..\..\src\xercesc\validators\DTD;..\..\..\..\..\src\xercesc\validators\schema;..\..\..\..\..\src\xercesc\validators\schema\identity;..\..\..\..\..\src\xercesc\xinclude; WARNINGS= -w-par # --------------------------------------------------------------------------- CFLAG1 = -tWD -Od -Vx -Ve -X- -r- -a8 -4 -b -k -y -v -vi- -c -tWM diff --git a/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp b/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp index 5377583a78e8d1a837598c6cb550011c0a6259f2..d099031c87de1370f0a5b878b3a209d57e864901 100644 --- a/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp +++ b/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.dsp @@ -194,6 +194,14 @@ SOURCE=..\..\..\..\..\src\xercesc\util\Transcoders\Win32\Win32TransService.hpp # PROP Default_Filter ".cpp,.hpp" # Begin Source File +SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.hpp +# End Source File +# Begin Source File + SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp # End Source File # Begin Source File diff --git a/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak b/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak index 3e39e86144ba00a277a54f9dfe565f35d4b55f9f..cdda6e695f6fe2c1885e54feddd90cd8dfaacbe4 100644 --- a/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak +++ b/projects/Win32/VC6/xerces-all/XercesLib/XercesLib.mak @@ -248,6 +248,7 @@ CLEAN : -@erase "$(INTDIR)\WindowsFileMgr.obj" -@erase "$(INTDIR)\WindowsMutexMgr.obj" -@erase "$(INTDIR)\WinSockNetAccessor.obj" + -@erase "$(INTDIR)\BinHTTPInputStreamCommon.obj" -@erase "$(INTDIR)\Wrapper4DOMLSInput.obj" -@erase "$(INTDIR)\Wrapper4InputSource.obj" -@erase "$(INTDIR)\XercesAttGroupInfo.obj" @@ -372,6 +373,7 @@ LINK32_OBJS= \ "$(INTDIR)\Win32TransService.obj" \ "$(INTDIR)\BinHTTPURLInputStream.obj" \ "$(INTDIR)\WinSockNetAccessor.obj" \ + "$(INTDIR)\BinHTTPInputStreamCommon.obj" \ "$(INTDIR)\ASCIIRangeFactory.obj" \ "$(INTDIR)\BlockRangeFactory.obj" \ "$(INTDIR)\BMPattern.obj" \ @@ -894,6 +896,7 @@ CLEAN : -@erase "$(INTDIR)\WindowsFileMgr.obj" -@erase "$(INTDIR)\WindowsMutexMgr.obj" -@erase "$(INTDIR)\WinSockNetAccessor.obj" + -@erase "$(INTDIR)\BinHTTPInputStreamCommon.obj" -@erase "$(INTDIR)\Wrapper4DOMLSInput.obj" -@erase "$(INTDIR)\Wrapper4InputSource.obj" -@erase "$(INTDIR)\XercesAttGroupInfo.obj" @@ -1018,6 +1021,7 @@ LINK32_OBJS= \ "$(INTDIR)\Win32TransService.obj" \ "$(INTDIR)\BinHTTPURLInputStream.obj" \ "$(INTDIR)\WinSockNetAccessor.obj" \ + "$(INTDIR)\BinHTTPInputStreamCommon.obj" \ "$(INTDIR)\ASCIIRangeFactory.obj" \ "$(INTDIR)\BlockRangeFactory.obj" \ "$(INTDIR)\BMPattern.obj" \ @@ -1540,6 +1544,7 @@ CLEAN : -@erase "$(INTDIR)\WindowsFileMgr.obj" -@erase "$(INTDIR)\WindowsMutexMgr.obj" -@erase "$(INTDIR)\WinSockNetAccessor.obj" + -@erase "$(INTDIR)\BinHTTPInputStreamCommon.obj" -@erase "$(INTDIR)\Wrapper4DOMLSInput.obj" -@erase "$(INTDIR)\Wrapper4InputSource.obj" -@erase "$(INTDIR)\XercesAttGroupInfo.obj" @@ -1665,6 +1670,7 @@ LINK32_OBJS= \ "$(INTDIR)\Win32TransService.obj" \ "$(INTDIR)\BinHTTPURLInputStream.obj" \ "$(INTDIR)\WinSockNetAccessor.obj" \ + "$(INTDIR)\BinHTTPInputStreamCommon.obj" \ "$(INTDIR)\ASCIIRangeFactory.obj" \ "$(INTDIR)\BlockRangeFactory.obj" \ "$(INTDIR)\BMPattern.obj" \ @@ -2186,6 +2192,7 @@ CLEAN : -@erase "$(INTDIR)\WindowsFileMgr.obj" -@erase "$(INTDIR)\WindowsMutexMgr.obj" -@erase "$(INTDIR)\WinSockNetAccessor.obj" + -@erase "$(INTDIR)\BinHTTPInputStreamCommon.obj" -@erase "$(INTDIR)\Wrapper4DOMLSInput.obj" -@erase "$(INTDIR)\Wrapper4InputSource.obj" -@erase "$(INTDIR)\XercesAttGroupInfo.obj" @@ -2311,6 +2318,7 @@ LINK32_OBJS= \ "$(INTDIR)\Win32TransService.obj" \ "$(INTDIR)\BinHTTPURLInputStream.obj" \ "$(INTDIR)\WinSockNetAccessor.obj" \ + "$(INTDIR)\BinHTTPInputStreamCommon.obj" \ "$(INTDIR)\ASCIIRangeFactory.obj" \ "$(INTDIR)\BlockRangeFactory.obj" \ "$(INTDIR)\BMPattern.obj" \ @@ -2713,6 +2721,10 @@ SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\WinSockNetAccessor.c "$(INTDIR)\WinSockNetAccessor.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) +SOURCE=..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp + +"$(INTDIR)\BinHTTPInputStreamCommon.obj" : $(SOURCE) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=..\..\..\..\..\src\xercesc\util\regx\ASCIIRangeFactory.cpp diff --git a/projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj b/projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj index 5fd27af5e8e88975298d40de9e4860fc99dec63d..15b7b2d6198fdbc0f7809ee67387080e824e6ab6 100644 --- a/projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj +++ b/projects/Win32/VC7.1/xerces-all/XercesLib/XercesLib.vcproj @@ -1113,6 +1113,12 @@ <Filter Name="NetAccessors" Filter=".cpp,.hpp"> + <File + RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp"> + </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.hpp"> + </File> <File RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp"> </File> diff --git a/projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj b/projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj index 766d08abe3e07f636da2630045d14d63b52b6429..c454e84a448b5c370a6f47304a2fe7408ee88a88 100644 --- a/projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj +++ b/projects/Win32/VC8/xerces-all/XercesLib/XercesLib.vcproj @@ -2292,6 +2292,14 @@ Name="NetAccessors" Filter=".cpp,.hpp" > + <File + RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp" + > + </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.hpp" + > + </File> <File RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp" > diff --git a/projects/Win32/VC9/xerces-all/XercesLib/XercesLib.vcproj b/projects/Win32/VC9/xerces-all/XercesLib/XercesLib.vcproj index 877249489441e1600426130598f5c8d270b1b526..3c633f2f7af642d453c4bb65a0ce746fa616e788 100644 --- a/projects/Win32/VC9/xerces-all/XercesLib/XercesLib.vcproj +++ b/projects/Win32/VC9/xerces-all/XercesLib/XercesLib.vcproj @@ -2323,6 +2323,42 @@ Name="NetAccessors" Filter=".cpp,.hpp" > + <File + RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.cpp" + > + <FileConfiguration + Name="ICU Debug|Win32" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + <FileConfiguration + Name="ICU Debug|x64" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + <FileConfiguration + Name="ICU Release|Win32" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + <FileConfiguration + Name="ICU Release|x64" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + </File> + <File + RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\BinHTTPInputStreamCommon.hpp" + > + </File> <File RelativePath="..\..\..\..\..\src\xercesc\util\NetAccessors\WinSock\BinHTTPURLInputStream.cpp" > diff --git a/src/Makefile.am b/src/Makefile.am index ad8997a5e1860e5c1b9ba213ce6e1d36fe91a9dc..793a80594743e35d138ff7ae05efc1a9bd725f35 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1034,11 +1034,13 @@ curl_sources = \ sockets_headers = \ xercesc/util/NetAccessors/Socket/SocketNetAccessor.hpp \ - xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp + xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp \ + xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp sockets_sources = \ xercesc/util/NetAccessors/Socket/SocketNetAccessor.cpp \ - xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp + xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp \ + xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp libwww_headers = \ xercesc/util/NetAccessors/libWWW/LibWWWNetAccessor.hpp \ @@ -1058,11 +1060,13 @@ cfurl_sources = \ winsock_headers = \ xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.hpp \ - xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp + xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp \ + xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp winsock_sources = \ xercesc/util/NetAccessors/WinSock/WinSockNetAccessor.cpp \ - xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp + xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp \ + xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp msginmemory_headers = \ diff --git a/src/xercesc/util/BinFileInputStream.cpp b/src/xercesc/util/BinFileInputStream.cpp index 28fb727c4d1e7f6bf018f2118bc3ed0d445166b5..959f03a4d3d3645543db925fd07e80bcfb80b657 100644 --- a/src/xercesc/util/BinFileInputStream.cpp +++ b/src/xercesc/util/BinFileInputStream.cpp @@ -5,9 +5,9 @@ * 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. @@ -102,4 +102,9 @@ BinFileInputStream::readBytes( XMLByte* const toFill return XMLPlatformUtils::readFileBuffer(fSource, maxToRead, toFill, fMemoryManager); } +const XMLCh* BinFileInputStream::getContentType() const +{ + return 0; +} + XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/BinFileInputStream.hpp b/src/xercesc/util/BinFileInputStream.hpp index b8d3f95a5061057592d3c16b0a06363d5de204bc..3b4ba03d348a4dfb6c5af7f3e132c7caf34c154c 100644 --- a/src/xercesc/util/BinFileInputStream.hpp +++ b/src/xercesc/util/BinFileInputStream.hpp @@ -5,9 +5,9 @@ * 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. @@ -73,13 +73,14 @@ public : , const XMLSize_t maxToRead ); + virtual const XMLCh* getContentType() const; private : // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- BinFileInputStream(const BinFileInputStream&); - BinFileInputStream& operator=(const BinFileInputStream&); + BinFileInputStream& operator=(const BinFileInputStream&); // ----------------------------------------------------------------------- // Private data members diff --git a/src/xercesc/util/BinInputStream.cpp b/src/xercesc/util/BinInputStream.cpp index efea4ed0a17113729fec887cbe08d15fe54c76d1..6ca0d9a39ad8a0aff842e33851034c1c70d4218a 100644 --- a/src/xercesc/util/BinInputStream.cpp +++ b/src/xercesc/util/BinInputStream.cpp @@ -5,9 +5,9 @@ * 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. diff --git a/src/xercesc/util/BinInputStream.hpp b/src/xercesc/util/BinInputStream.hpp index 6f0b84a2a9e713f894c0604afa8f65eab1fb0731..d93c017935f935d39f3eb48895f2e144c7a2d98e 100644 --- a/src/xercesc/util/BinInputStream.hpp +++ b/src/xercesc/util/BinInputStream.hpp @@ -5,9 +5,9 @@ * 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. @@ -46,6 +46,26 @@ public : , const XMLSize_t maxToRead ) = 0; + /** + * Return the "out-of-band" content type for the data supplied by this + * input stream in the form of the media-type production (mime type + * with optional parameters such as encoding) as defined by the HTTP 1.1 + * specification. If no such content type is provided for the data, 0 is + * returned. This function is expected to return the correct value at + * any time after the construction of the stream. + * + * An example of the stream that may return non-0 from this function is + * an HTTP stream with the value returned taken from the "Content-Type" + * HTTP header. Note also that if the encoding of the data is known + * to the application by some other means then the setEncoding function + * in the InputSource object should be used instead. The getContentType + * function should only be used to return information that is intrinsic + * to the stream. + * + * @return The content type, or 0 if one is not available. + */ + virtual const XMLCh* getContentType() const = 0; + protected : // ----------------------------------------------------------------------- diff --git a/src/xercesc/util/BinMemInputStream.cpp b/src/xercesc/util/BinMemInputStream.cpp index 8a465b8b1c6429aeafcd9cb7be0181df3e8891bb..42b7a342eedac8de9a798bdfca4fbeb6d8b1d816 100644 --- a/src/xercesc/util/BinMemInputStream.cpp +++ b/src/xercesc/util/BinMemInputStream.cpp @@ -5,9 +5,9 @@ * 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. @@ -90,4 +90,9 @@ XMLSize_t BinMemInputStream::readBytes( XMLByte* const toFill return actualToRead; } +const XMLCh* BinMemInputStream::getContentType() const +{ + return 0; +} + XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/BinMemInputStream.hpp b/src/xercesc/util/BinMemInputStream.hpp index bede9d4aaf6d93a980e049184b3c61670959d439..1617b65d0590ab0b806007aa77b3c6b3d5b6a474 100644 --- a/src/xercesc/util/BinMemInputStream.hpp +++ b/src/xercesc/util/BinMemInputStream.hpp @@ -5,9 +5,9 @@ * 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. @@ -71,14 +71,16 @@ public : , const XMLSize_t maxToRead ); + virtual const XMLCh* getContentType() const; + inline XMLSize_t getSize() const; - + private : // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- BinMemInputStream(const BinMemInputStream&); - BinMemInputStream& operator=(const BinMemInputStream&); + BinMemInputStream& operator=(const BinMemInputStream&); // ----------------------------------------------------------------------- // Private data members // diff --git a/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8ec95e0c1546dd34217f59c534da628d8fbc244e --- /dev/null +++ b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.cpp @@ -0,0 +1,356 @@ +/* + * 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: BinFileInputStream.cpp 553903 2007-07-06 14:43:42Z amassari $ + */ + + +// --------------------------------------------------------------------------- +// Includes +// --------------------------------------------------------------------------- + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdlib.h> +#include <string.h> + +#include <xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp> + +#include <xercesc/util/XMLString.hpp> +#include <xercesc/util/XMLExceptMsgs.hpp> +#include <xercesc/util/Janitor.hpp> +#include <xercesc/util/TransService.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/util/Base64.hpp> + +XERCES_CPP_NAMESPACE_BEGIN + +class TranscodeStr +{ +public: + TranscodeStr(const XMLCh *in, XMLTranscoder* trans, + MemoryManager *manager = XMLPlatformUtils::fgMemoryManager) + : fString(0), + fBytesWritten(0), + fMemoryManager(manager) + { + if(in) { + XMLSize_t len = XMLString::stringLen(in) + 1; + + XMLSize_t allocSize = len * sizeof(XMLCh); + fString = (unsigned char*)fMemoryManager->allocate(allocSize); + + XMLSize_t charsRead; + + XMLSize_t charsDone = 0; + + while(true) { + fBytesWritten += trans->transcodeTo(in + charsDone, len - charsDone, + fString + fBytesWritten, allocSize - fBytesWritten, + charsRead, XMLTranscoder::UnRep_Throw); + charsDone += charsRead; + + if(charsDone == len) break; + + allocSize *= 2; + unsigned char *newBuf = (unsigned char*)fMemoryManager->allocate(allocSize); + memcpy(newBuf, fString, fBytesWritten); + fMemoryManager->deallocate(fString); + fString = newBuf; + } + } + } + + ~TranscodeStr() + { + if(fString) + fMemoryManager->deallocate(fString); + } + + const unsigned char *str() const + { + return fString; + } + + XMLSize_t len() const + { + return fBytesWritten; + } + +private: + unsigned char *fString; + XMLSize_t fBytesWritten; + MemoryManager *fMemoryManager; +}; + +BinHTTPInputStreamCommon::BinHTTPInputStreamCommon(MemoryManager *manager) + : fBytesProcessed(0) + , fBuffer(1023, manager) + , fContentType(0) + , fMemoryManager(manager) +{ +} + + +BinHTTPInputStreamCommon::~BinHTTPInputStreamCommon() +{ + if(fContentType) fMemoryManager->deallocate(fContentType); +} + +static const char *CRLF = "\r\n"; + +void BinHTTPInputStreamCommon::createHTTPRequest(const XMLURL &urlSource, const XMLNetHTTPInfo *httpInfo, CharBuffer &buffer) +{ + static const char *GET = "GET "; + static const char *PUT = "PUT "; + static const char *POST = "POST "; + static const char *HTTP10 = " HTTP/1.0\r\n"; + static const char *HOST = "Host: "; + static const char *AUTHORIZATION = "Authorization: Basic "; + static const char *COLON = ":"; + + XMLTransService::Codes failReason; + const XMLSize_t blockSize = 2048; + + XMLTranscoder* trans = XMLPlatformUtils::fgTransService->makeNewTranscoderFor("ISO8859-1", failReason, blockSize, fMemoryManager); + Janitor<XMLTranscoder> janTrans(trans); + + TranscodeStr hostName(urlSource.getHost(), trans, fMemoryManager); + TranscodeStr path(urlSource.getPath(), trans, fMemoryManager); + TranscodeStr fragment(urlSource.getFragment(), trans, fMemoryManager); + TranscodeStr query(urlSource.getQuery(), trans, fMemoryManager); + + // Build up the http GET command to send to the server. + // To do: We should really support http 1.1. This implementation + // is weak. + if(httpInfo) { + switch(httpInfo->fHTTPMethod) { + case XMLNetHTTPInfo::GET: buffer.append(GET); break; + case XMLNetHTTPInfo::PUT: buffer.append(PUT); break; + case XMLNetHTTPInfo::POST: buffer.append(POST); break; + } + } + else { + buffer.append(GET); + } + + if(path.str() != 0) { + buffer.append((char*)path.str()); + } + else { + buffer.append("/"); + } + + if(query.str() != 0) { + buffer.append("?"); + buffer.append((char*)query.str()); + } + + if(fragment.str() != 0) { + buffer.append((char*)fragment.str()); + } + buffer.append(HTTP10); + + buffer.append(HOST); + buffer.append((char*)hostName.str()); + if(urlSource.getPortNum() != 80) + { + buffer.append(COLON); + buffer.appendDecimalNumber(urlSource.getPortNum()); + } + buffer.append(CRLF); + + const XMLCh *username = urlSource.getUser(); + const XMLCh *password = urlSource.getPassword(); + if(username && password) { + XMLBuffer userPassBuf(256, fMemoryManager); + userPassBuf.append(username); + userPassBuf.append(chColon); + userPassBuf.append(password); + + TranscodeStr userPass(userPassBuf.getRawBuffer(), trans, fMemoryManager); + + XMLSize_t len; + XMLByte* encodedData = Base64::encode((XMLByte*)userPass.str(), userPass.len() - 1, &len, fMemoryManager); + ArrayJanitor<XMLByte> janBuf2(encodedData, fMemoryManager); + + if(encodedData) { + // HTTP doesn't want the 0x0A separating the data in chunks of 76 chars per line + XMLByte* authData = (XMLByte*)fMemoryManager->allocate((len+1)*sizeof(XMLByte)); + ArrayJanitor<XMLByte> janBuf(authData, fMemoryManager); + XMLByte *cursor = authData; + for(XMLSize_t i = 0; i < len; ++i) + if(encodedData[i] != chLF) + *cursor++ = encodedData[i]; + *cursor++ = 0; + buffer.append(AUTHORIZATION); + buffer.append((char*)authData); + buffer.append(CRLF); + } + } + + if(httpInfo && httpInfo->fHeaders) + buffer.append(httpInfo->fHeaders, httpInfo->fHeadersLen); + + buffer.append(CRLF); +} + +XMLCh *BinHTTPInputStreamCommon::findHeader(const char *name) const +{ + int len = strlen(name); + + char *p = strstr(fBuffer.getRawBuffer(), name); + while(p != 0) { + if(*(p - 1) == '\n' && + *(p + len) == ':' && + *(p + len + 1) == ' ') { + + p += len + 2; + + char *endP = strstr(p, CRLF); + if(endP == 0) { + for(endP = p; *endP != 0; ++endP); + } + + char tmp = *endP; + *endP = 0; + + XMLCh *value = XMLString::transcode(p, fMemoryManager); + *endP = tmp; + return value; + } + + p = strstr(p + 1, name); + } + + return 0; +} + +int BinHTTPInputStreamCommon::sendRequest(const XMLURL &url, const XMLNetHTTPInfo *httpInfo) +{ + // + // Constants in ASCII to send/check in the HTTP request/response + // + + static const char *CRLF2X = "\r\n\r\n"; + static const char *LF2X = "\n\n"; + + // The port is open and ready to go. + // Build up the http GET command to send to the server. + CharBuffer requestBuffer(1023, fMemoryManager); + createHTTPRequest(url, httpInfo, requestBuffer); + + // Send the http request + if(!send(requestBuffer.getRawBuffer(), requestBuffer.getLen())) { + ThrowXMLwithMemMgr1(NetAccessorException, + XMLExcepts::NetAcc_WriteSocket, url.getURLText(), fMemoryManager); + } + + if(httpInfo && httpInfo->fPayload) { + if(!send(httpInfo->fPayload, httpInfo->fPayloadLen)) { + ThrowXMLwithMemMgr1(NetAccessorException, + XMLExcepts::NetAcc_WriteSocket, url.getURLText(), fMemoryManager); + } + } + + // + // get the response, check the http header for errors from the server. + // + char tmpBuf[1024]; + int ret; + + fBuffer.reset(); + while(true) { + ret = receive(tmpBuf, sizeof(tmpBuf)); + if(ret == -1) { + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, url.getURLText(), fMemoryManager); + } + + fBuffer.append(tmpBuf, ret); + + fBufferPos = strstr(fBuffer.getRawBuffer(), CRLF2X); + if(fBufferPos != 0) { + fBufferPos += 4; + *(fBufferPos - 2) = 0; + break; + } + + fBufferPos = strstr(fBuffer.getRawBuffer(), LF2X); + if(fBufferPos != 0) { + fBufferPos += 2; + *(fBufferPos - 1) = 0; + break; + } + } + + // Parse the response status + char *p = strstr(fBuffer.getRawBuffer(), "HTTP"); + if(p == 0) { + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, url.getURLText(), fMemoryManager); + } + + p = strchr(p, chSpace); + if(p == 0) { + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, url.getURLText(), fMemoryManager); + } + + return atoi(p); +} + +const XMLCh *BinHTTPInputStreamCommon::getContentType() const +{ + if(fContentType == 0) { + // mutable + const_cast<XMLCh*&>(fContentType) = findHeader("Content-Type"); + } + return fContentType; +} + +XMLSize_t BinHTTPInputStreamCommon::readBytes(XMLByte* const toFill, + const XMLSize_t maxToRead) +{ + XMLSize_t len = fBuffer.getRawBuffer() + fBuffer.getLen() - fBufferPos; + if(len > 0) + { + // If there's any data left over in the buffer into which we first + // read from the server (to get the http header), return that. + if (len > maxToRead) + len = maxToRead; + memcpy(toFill, fBufferPos, len); + fBufferPos += len; + } + else + { + // There was no data in the local buffer. + // Read some from the socket, straight into our caller's buffer. + // + int cbRead = receive((char *)toFill, maxToRead); + if (cbRead == -1) + { + ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, fMemoryManager); + } + len = cbRead; + } + + fBytesProcessed += len; + return len; +} + +XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp new file mode 100644 index 0000000000000000000000000000000000000000..1d06d3b9a30f1efa81d2d70c72eeaf67a0bbf430 --- /dev/null +++ b/src/xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp @@ -0,0 +1,227 @@ +/* + * 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: BinFileInputStream.hpp 553903 2007-07-06 14:43:42Z amassari $ + */ + +#if !defined(XERCESC_INCLUDE_GUARD_BINHTTPINPUTSTREAMCOMMON_HPP) +#define XERCESC_INCLUDE_GUARD_BINHTTPINPUTSTREAMCOMMON_HPP + +#include <xercesc/util/XMLURL.hpp> +#include <xercesc/util/BinInputStream.hpp> +#include <xercesc/util/XMLNetAccessor.hpp> +#include <xercesc/framework/MemoryManager.hpp> + +XERCES_CPP_NAMESPACE_BEGIN + +// +// This class implements a simple expanding character buffer +// +class XMLUTIL_EXPORT CharBuffer +{ +public: + CharBuffer(XMLSize_t capacity = 1023, + MemoryManager *manager = XMLPlatformUtils::fgMemoryManager) + : fCapacity(capacity), + fIndex(0), + fMemoryManager(manager) + { + fBuffer = (char*)fMemoryManager->allocate((fCapacity + 1) * sizeof(char)); + } + + ~CharBuffer() + { + fMemoryManager->deallocate(fBuffer); + } + + const char* getRawBuffer() const + { + fBuffer[fIndex] = 0; + return fBuffer; + } + + char* getRawBuffer() + { + fBuffer[fIndex] = 0; + return fBuffer; + } + + XMLSize_t getLen() const + { + return fIndex; + } + + void reset() + { + fIndex = 0; + } + + void append(const char *chars) + { + if(chars != 0 && *chars != 0) { + // get length of chars + XMLSize_t count = 0; + for(; *(chars+count); ++count); + + if(fIndex + count >= fCapacity) { + insureCapacity(count); + } + memcpy(&fBuffer[fIndex], chars, count * sizeof(char)); + fIndex += count; + } + } + + void append(const char *chars, XMLSize_t len) + { + if(chars != 0 && len != 0) { + if(fIndex + len >= fCapacity) { + insureCapacity(len); + } + memcpy(&fBuffer[fIndex], chars, len * sizeof(char)); + fIndex += len; + } + } + + void appendDecimalNumber(unsigned int n) + { + if(n >= 10) { + appendDecimalNumber(n / 10); + n = n % 10; + } + + if(fIndex + 1 >= fCapacity) + insureCapacity(1); + + fBuffer[fIndex] = '0' + n; + ++fIndex; + } + + void set(const char *chars) + { + reset(); + append(chars); + } + +private: + // ----------------------------------------------------------------------- + // Unimplemented constructors and operators + // ----------------------------------------------------------------------- + CharBuffer(const CharBuffer &); + CharBuffer &operator=(const CharBuffer &); + + void insureCapacity(XMLSize_t extraNeeded) + { + // If we can't handle it, try doubling the buffer size. + XMLSize_t newCap = (fIndex + extraNeeded) * 2; + + if(newCap > fCapacity) + { + // Allocate new buffer + char* newBuf = (char*)fMemoryManager->allocate((newCap + 1) * sizeof(char)); + + // Copy over the old stuff + memcpy(newBuf, fBuffer, fIndex * sizeof(char)); + + // Clean up old buffer and store new stuff + fMemoryManager->deallocate(fBuffer); + fBuffer = newBuf; + fCapacity = newCap; + } + } + + // ----------------------------------------------------------------------- + // Private data members + // ----------------------------------------------------------------------- + char *fBuffer; + XMLSize_t fCapacity; + XMLSize_t fIndex; + MemoryManager *fMemoryManager; +}; + +// +// Common base implementation of HTTP BinInputStream that is used by some +// platform-specific implementations. +// +class XMLUTIL_EXPORT BinHTTPInputStreamCommon : public BinInputStream +{ +public : + virtual XMLFilePos curPos() const; + virtual XMLSize_t readBytes + ( + XMLByte* const toFill + , const XMLSize_t maxToRead + ); + + virtual const XMLCh *getContentType() const; + +protected : + BinHTTPInputStreamCommon(MemoryManager *manager); + virtual ~BinHTTPInputStreamCommon(); + + /** + * \return The HTTP status code + */ + int sendRequest(const XMLURL &url, const XMLNetHTTPInfo *httpInfo); + XMLCh *findHeader(const char *name) const; + + virtual bool send(const char *buf, XMLSize_t len) = 0; + /** + * \return The length of the data received, or -1 if an error occured + */ + virtual int receive(char *buf, XMLSize_t len) = 0; + +private : + // ----------------------------------------------------------------------- + // Unimplemented constructors and operators + // ----------------------------------------------------------------------- + BinHTTPInputStreamCommon(const BinHTTPInputStreamCommon&); + BinHTTPInputStreamCommon& operator=(const BinHTTPInputStreamCommon&); + + void createHTTPRequest(const XMLURL &urlSource, const XMLNetHTTPInfo *httpInfo, CharBuffer &buffer); + + // ----------------------------------------------------------------------- + // Private data members + // + // fBytesProcessed + // Its a rolling count of the number of bytes processed off this + // input stream. + // fBuffer + // Holds the http header, plus the first part of the actual + // data. Filled at the time the stream is opened, data goes + // out to user in response to readBytes(). + // fBufferPos + // Pointers into fBuffer, showing start and end+1 of content + // that readBytes must return. + // ----------------------------------------------------------------------- + + XMLSize_t fBytesProcessed; + CharBuffer fBuffer; + char * fBufferPos; + XMLCh * fContentType; + MemoryManager* fMemoryManager; +}; + + +inline XMLFilePos BinHTTPInputStreamCommon::curPos() const +{ + return fBytesProcessed; +} + +XERCES_CPP_NAMESPACE_END + +#endif diff --git a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp index 5ac14024f8ad8080ac2860bb851f6349167a1425..c94a7454faa1ac80dfea88b7750aecdef2665d75 100644 --- a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp +++ b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp @@ -54,6 +54,7 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP , fDataAvailable(false) , fBufferHeadPtr(fBuffer) , fBufferTailPtr(fBuffer) + , fContentType(0) { // Allocate the curl multi handle fMulti = curl_multi_init(); @@ -70,6 +71,8 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP curl_easy_setopt(fEasy, CURLOPT_URL, fURL.get()); 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_WRITEHEADER, this); // Pass this pointer to header function + curl_easy_setopt(fEasy, CURLOPT_HEADERFUNCTION, staticHeaderCallback); // Our static header function // Add easy handle to the multi stack curl_multi_add_handle(fMulti, fEasy); @@ -86,6 +89,8 @@ CurlURLInputStream::~CurlURLInputStream() // Cleanup the multi handle curl_multi_cleanup(fMulti); + + if(fContentType) fMemoryManager->deallocate(fContentType); } @@ -98,7 +103,10 @@ CurlURLInputStream::staticWriteCallback(char *buffer, return ((CurlURLInputStream*)outstream)->writeCallback(buffer, size, nitems); } - +size_t CurlURLInputStream::staticHeaderCallback(void *ptr, size_t size, size_t nmemb, void *stream) +{ + return ((CurlURLInputStream*)stream)->headerCallback((char*)ptr, size, nmemb); +} size_t CurlURLInputStream::writeCallback(char *buffer, @@ -140,6 +148,28 @@ CurlURLInputStream::writeCallback(char *buffer, return totalConsumed; } +size_t CurlURLInputStream::headerCallback(char *buffer, size_t size, size_t nitems) +{ + static const char *contentType = "Content-Type: "; + static const size_t contentTypeLen = strlen(contentType); + + // Calculate the actual length of the buffer + size *= nitems; + + if(size > contentTypeLen && strncmp(buffer, contentType, contentTypeLen) == 0) { + size_t valueLen = size - contentTypeLen; + + char* value8 = (char*)fMemoryManager->allocate(valueLen + 1); + ArrayJanitor<char> janValue8(value8, fMemoryManager); + + memcpy(value8, buffer + contentTypeLen, valueLen); + value8[valueLen] = 0; + + fContentType = XMLString::transcode(value8, fMemoryManager); + } + + return size; +} XMLSize_t CurlURLInputStream::readBytes(XMLByte* const toFill @@ -245,6 +275,10 @@ CurlURLInputStream::readBytes(XMLByte* const toFill return fBytesRead; } +const XMLCh *CurlURLInputStream::getContentType() const +{ + return fContentType; +} XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp index 085b3da9f8dc7051bfcf2f0d49e8f0a71a5830fa..5cb2b978690608a5da911daa7869ad621d086820 100644 --- a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp +++ b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp @@ -45,13 +45,14 @@ public : CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo=0); ~CurlURLInputStream(); - XMLFilePos curPos() const; - XMLSize_t readBytes + virtual XMLFilePos curPos() const; + virtual XMLSize_t readBytes ( XMLByte* const toFill , const XMLSize_t maxToRead ); + virtual const XMLCh *getContentType() const; private : // ----------------------------------------------------------------------- @@ -67,6 +68,13 @@ private : size_t writeCallback( char *buffer, size_t size, size_t nitems); + static size_t staticHeaderCallback(void *ptr, + size_t size, + size_t nmemb, + void *stream); + size_t headerCallback( char *buffer, + size_t size, + size_t nitems); // ----------------------------------------------------------------------- @@ -105,6 +113,8 @@ private : XMLByte fBuffer[CURL_MAX_WRITE_SIZE]; XMLByte* fBufferHeadPtr; XMLByte* fBufferTailPtr; + + XMLCh * fContentType; }; // CurlURLInputStream diff --git a/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.cpp b/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.cpp index 3a6180b9cc31ab40b9ce1abda6952e3b8a447913..e0bc3230c0a09fa394838addd7ee49ffaf28fed6 100644 --- a/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.cpp +++ b/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.cpp @@ -5,9 +5,9 @@ * 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. @@ -157,7 +157,7 @@ URLAccessCFBinInputStream::readBytes(XMLByte* const toFill // 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; @@ -165,4 +165,11 @@ URLAccessCFBinInputStream::readBytes(XMLByte* const toFill return n; } +const XMLCh* URLAccessCFBinInputStream::getContentType() const +{ + // TODO + // + return 0; +} + XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp b/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp index 541d3953435295ad15bb3d21db242237695084cf..686d1c3c9ea032433ac76b7a5cd54fe5952d031f 100644 --- a/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp +++ b/src/xercesc/util/NetAccessors/MacOSURLAccessCF/URLAccessCFBinInputStream.hpp @@ -5,9 +5,9 @@ * 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. @@ -49,13 +49,14 @@ public : URLAccessCFBinInputStream(const XMLURL& urlSource); ~URLAccessCFBinInputStream(); - XMLFilePos curPos() const; - XMLSize_t readBytes + virtual XMLFilePos curPos() const; + virtual XMLSize_t readBytes ( XMLByte* const toFill , const XMLSize_t maxToRead ); + virtual const XMLCh* getContentType() const; private : CFDataRef mDataRef; diff --git a/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp b/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp index a01f7cc5a41828882131b5efe9da6db9091b49f0..5a58ec890e6ec6f108a5134266bc0d48a3666178 100644 --- a/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp +++ b/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.cpp @@ -5,9 +5,9 @@ * 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. @@ -23,8 +23,6 @@ # include <config.h> #endif -#include <stdio.h> -#include <stdlib.h> #include <string.h> #if HAVE_UNISTD_H @@ -33,30 +31,24 @@ #if HAVE_SYS_TYPES_H # include <sys/types.h> #endif -#if HAVE_SYS_SOCKET_H +#if HAVE_SYS_SOCKET_H # include <sys/socket.h> #endif -#if HAVE_NETINET_IN_H +#if HAVE_NETINET_IN_H # include <netinet/in.h> #endif #if HAVE_ARPA_INET_H # include <arpa/inet.h> #endif -#if HAVE_NETDB_H +#if HAVE_NETDB_H # include <netdb.h> #endif #include <errno.h> -#include <xercesc/util/XMLNetAccessor.hpp> #include <xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp> #include <xercesc/util/XMLString.hpp> #include <xercesc/util/XMLExceptMsgs.hpp> #include <xercesc/util/Janitor.hpp> -#include <xercesc/util/XMLUniDefs.hpp> -#include <xercesc/util/TransService.hpp> -#include <xercesc/util/TranscodingException.hpp> -#include <xercesc/util/PlatformUtils.hpp> -#include <xercesc/util/Base64.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -72,7 +64,14 @@ public: int* get() const { return fData; } int* release() { int* p = fData; fData = 0; return p; } - void reset(int* p = 0) { if(fData) close(*fData); fData=p; } + void reset(int* p = 0) + { + if(fData) { + shutdown(*fData, 2); + close(*fData); + } + fData = p; + } bool isDataNull() { return (fData == 0); } private : @@ -87,545 +86,153 @@ private : // Private data members // // fData - // This is the pointer to the socket that must be closed when + // This is the pointer to the socket that must be closed when // this object is destroyed. // ----------------------------------------------------------------------- int* fData; }; UnixHTTPURLInputStream::UnixHTTPURLInputStream(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo/*=0*/) - : fSocket(0) - , fBytesProcessed(0) - , fMemoryManager(urlSource.getMemoryManager()) + : BinHTTPInputStreamCommon(urlSource.getMemoryManager()), + fSocket(0) { - // // Constants in ASCII to send/check in the HTTP request/response // - const char GET[] = - { - chLatin_G, chLatin_E, chLatin_T, chSpace, chNull - }; - - const char PUT[] = - { - chLatin_P, chLatin_U, chLatin_T, chSpace, chNull - }; - - const char POST[] = - { - chLatin_P, chLatin_O, chLatin_S, chLatin_T, chSpace, chNull - }; - - const char HTTP[] = - { - chLatin_H, chLatin_T, chLatin_T, chLatin_P, chNull - }; - - const char HTTP10[] = - { - chSpace, chLatin_H, chLatin_T, chLatin_T, chLatin_P, chForwardSlash, chDigit_1, chPeriod, chDigit_0, chCR, chLF, chNull - }; - - const char CRLF[] = - { - chCR, chLF, chNull - }; - - const char CRLF2X[] = - { - chCR, chLF, chCR, chLF, chNull - }; - - const char LF2X[] = - { - chLF, chLF, chNull - }; - - const char HOST[] = - { - chLatin_H, chLatin_o, chLatin_s, chLatin_t, chColon, chSpace, chNull - }; - - const char COLON[] = - { - chColon, chNull - }; - - const char AUTHORIZATION[] = - { - chLatin_A, chLatin_u, chLatin_t, chLatin_h, chLatin_o, chLatin_r, chLatin_i, chLatin_z, chLatin_a, chLatin_t, - chLatin_i, chLatin_o, chLatin_n, chColon, chSpace, chLatin_B, chLatin_a, chLatin_s, chLatin_i, chLatin_c, chSpace, chNull - }; - - const char resp200 [] = - { - chSpace, chDigit_2, chDigit_0, chDigit_0, chSpace, chNull - }; - - const char LOCATION[] = - { - chLatin_L, chLatin_o, chLatin_c, chLatin_a, chLatin_t, chLatin_i, chLatin_o, chLatin_n, chColon, chSpace, chNull - }; - - XMLSize_t charsEaten; - XMLSize_t transSize; - XMLTransService::Codes failReason; - const XMLSize_t blockSize = 2048; - const unsigned int bufSize = 5; - static XMLCh portBuffer[bufSize+1]; - - // - // Pull all of the parts of the URL out of the urlSource object - // - - const XMLCh* hostName = urlSource.getHost(); - const XMLCh* path = urlSource.getPath(); - const XMLCh* fragment = urlSource.getFragment(); - const XMLCh* query = urlSource.getQuery(); + static const char *CRLF2X = "\r\n\r\n"; + static const char *LF2X = "\n\n"; // // Convert the hostName to the platform's code page for gethostbyname and // inet_addr functions. // - char* hostNameAsCharStar = XMLString::transcode(hostName, fMemoryManager); - ArrayJanitor<char> janHostNameAsCharStar(hostNameAsCharStar, fMemoryManager); - - // - // Convert all the parts of the urlSource object to ASCII so they can be - // sent to the remote host in that format - // - - transSize = XMLString::stringLen(hostName)+1; - char* hostNameAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - ArrayJanitor<char> janHostNameAsASCII(hostNameAsASCII, fMemoryManager); - - XMLTranscoder* trans = XMLPlatformUtils::fgTransService->makeNewTranscoderFor("ISO8859-1", failReason, blockSize, fMemoryManager); + MemoryManager *memoryManager = urlSource.getMemoryManager(); - trans->transcodeTo(hostName, transSize, (XMLByte*) hostNameAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - Janitor<XMLTranscoder> janTranscoder(trans); - - char* pathAsASCII = 0; - ArrayJanitor<char> janPathAsASCII(pathAsASCII, fMemoryManager); - if (path) - { - transSize = XMLString::stringLen(path)+1; - pathAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - janPathAsASCII.reset(pathAsASCII, fMemoryManager); - trans->transcodeTo(path, transSize, (XMLByte*) pathAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - } - - char* fragmentAsASCII = 0; - ArrayJanitor<char> janfragmentAsASCII(fragmentAsASCII, fMemoryManager); - if (fragment) - { - transSize = XMLString::stringLen(fragment)+1; - fragmentAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - janfragmentAsASCII.reset(fragmentAsASCII, fMemoryManager); - trans->transcodeTo(fragment, transSize, (XMLByte*) fragmentAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - } - - char* queryAsASCII = 0; - ArrayJanitor<char> janqueryAsASCII(queryAsASCII, fMemoryManager); - if (query) - { - transSize = XMLString::stringLen(query)+1; - queryAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - janqueryAsASCII.reset(queryAsASCII, fMemoryManager); - trans->transcodeTo(query, transSize, (XMLByte*) queryAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - } - - unsigned short portNumber = (unsigned short) urlSource.getPortNum(); - - // - // Convert port number integer to unicode so we can transcode it to ASCII - // - - XMLString::binToText((unsigned int) portNumber, portBuffer, bufSize, 10, fMemoryManager); - transSize = XMLString::stringLen(portBuffer)+1; - char* portAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - ArrayJanitor<char> janportAsASCII(portAsASCII, fMemoryManager); - trans->transcodeTo(portBuffer, transSize, (XMLByte*) portAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - - const XMLCh* username = urlSource.getUser(); - const XMLCh* password = urlSource.getPassword(); + const XMLCh* hostName = urlSource.getHost(); + char* hostNameAsCharStar = XMLString::transcode(hostName, memoryManager); + ArrayJanitor<char> janHostNameAsCharStar(hostNameAsCharStar, memoryManager); - // - // Set up a socket. - // - bool sawRedirect=false; - bool lookUpHost = true; + XMLURL url(urlSource); int redirectCount = 0; - int s; SocketJanitor janSock(0); - + do { - sawRedirect = false; - + // + // Set up a socket. + // + #if HAVE_GETADDRINFO struct addrinfo hints, *res, *ai; + CharBuffer portBuffer(10, memoryManager); + portBuffer.appendDecimalNumber(url.getPortNum()); + memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - int n = getaddrinfo(hostNameAsCharStar,portAsASCII,&hints, &res); + int n = getaddrinfo(hostNameAsCharStar,portBuffer.getRawBuffer(),&hints, &res); if(n<0) { hints.ai_flags = AI_NUMERICHOST; - n = getaddrinfo(hostNameAsCharStar,portAsASCII,&hints, &res); + n = getaddrinfo(hostNameAsCharStar,portBuffer.getRawBuffer(),&hints, &res); if(n<0) - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager); + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager); } - if (janSock.get()) - janSock.release(); + janSock.reset(); for (ai = res; ai != NULL; ai = ai->ai_next) { // Open a socket with the correct address family for this address. - s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); - if (s < 0) + fSocket = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (fSocket < 0) continue; - if (connect(s, ai->ai_addr, ai->ai_addrlen) < 0) + if (connect(fSocket, ai->ai_addr, ai->ai_addrlen) < 0) { freeaddrinfo(res); ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText(), fMemoryManager); + XMLExcepts::NetAcc_ConnSocket, url.getURLText(), memoryManager); } break; } freeaddrinfo(res); - if (s < 0) + if (fSocket < 0) { ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_CreateSocket, urlSource.getURLText(), fMemoryManager); + XMLExcepts::NetAcc_CreateSocket, url.getURLText(), memoryManager); } - janSock.reset(&s); + janSock.reset(&fSocket); #else - struct hostent* hostEntPtr = 0; - struct sockaddr_in sa; + struct hostent *hostEntPtr = 0; + struct sockaddr_in sa; // Use the hostName in the local code page .... - if (lookUpHost && - ((hostEntPtr = gethostbyname(hostNameAsCharStar)) == NULL)) - { + if((hostEntPtr = gethostbyname(hostNameAsCharStar)) == NULL) + { unsigned long numAddress = inet_addr(hostNameAsCharStar); if ((hostEntPtr = - gethostbyaddr((char *) &numAddress, - sizeof(unsigned long), AF_INET)) == NULL) + gethostbyaddr((char *) &numAddress, + sizeof(unsigned long), AF_INET)) == NULL) { ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager); + XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager); } } - lookUpHost = false; memset(&sa, '\0', sizeof(sockaddr_in)); // iSeries fix ?? memcpy((void *) &sa.sin_addr, - (const void *) hostEntPtr->h_addr, hostEntPtr->h_length); + (const void *) hostEntPtr->h_addr, hostEntPtr->h_length); sa.sin_family = hostEntPtr->h_addrtype; - sa.sin_port = htons(portNumber); + sa.sin_port = htons((unsigned short)url.getPortNum()); - if (janSock.get()) - janSock.release(); - s = socket(hostEntPtr->h_addrtype, SOCK_STREAM, 0); - if (s < 0) + janSock.reset(); + fSocket = socket(hostEntPtr->h_addrtype, SOCK_STREAM, 0); + if(fSocket < 0) { ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_CreateSocket, urlSource.getURLText(), fMemoryManager); + XMLExcepts::NetAcc_CreateSocket, url.getURLText(), memoryManager); } - janSock.reset(&s); + janSock.reset(&fSocket); - if (connect(s, (struct sockaddr *) &sa, sizeof(sa)) < 0) + if(connect(fSocket, (struct sockaddr *) &sa, sizeof(sa)) < 0) { ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText(), fMemoryManager); + XMLExcepts::NetAcc_ConnSocket, url.getURLText(), memoryManager); } #endif - // The port is open and ready to go. - // Build up the http GET command to send to the server. - // To do: We should really support http 1.1. This implementation - // is weak. - if(httpInfo==0) - strcpy(fBuffer, GET); - else - switch(httpInfo->fHTTPMethod) - { - case XMLNetHTTPInfo::GET: strcpy(fBuffer, GET); break; - case XMLNetHTTPInfo::PUT: strcpy(fBuffer, PUT); break; - case XMLNetHTTPInfo::POST: strcpy(fBuffer, POST); break; - } - if (pathAsASCII != 0) - { - strcat(fBuffer, pathAsASCII); - } - - if (queryAsASCII != 0) - { - size_t n = strlen(fBuffer); - fBuffer[n] = chQuestion; - fBuffer[n+1] = chNull; - strcat(fBuffer, queryAsASCII); - } - - if (fragmentAsASCII != 0) - { - strcat(fBuffer, fragmentAsASCII); - } - strcat(fBuffer, HTTP10); - - strcat(fBuffer, HOST); - strcat(fBuffer, hostNameAsASCII); - if (portNumber != 80) - { - strcat(fBuffer,COLON); - strcat(fBuffer,portAsASCII); - } - strcat(fBuffer, CRLF); + int status = sendRequest(url, httpInfo); - if (username && password) - { - XMLBuffer userPass(256, fMemoryManager); - userPass.append(username); - userPass.append(chColon); - userPass.append(password); - char* userPassAsCharStar = XMLString::transcode(userPass.getRawBuffer(), fMemoryManager); - ArrayJanitor<char> janBuf(userPassAsCharStar, fMemoryManager); - - XMLSize_t len; - XMLByte* encodedData = Base64::encode((XMLByte *)userPassAsCharStar, strlen(userPassAsCharStar), &len, fMemoryManager); - ArrayJanitor<XMLByte> janBuf2(encodedData, fMemoryManager); - - if (encodedData) - { - // HTTP doesn't want the 0x0A separating the data in chunks of 76 chars per line - XMLByte* authData = (XMLByte*)fMemoryManager->allocate((len+1)*sizeof(XMLByte)); - ArrayJanitor<XMLByte> janBuf(authData, fMemoryManager); - XMLByte* cursor=authData; - for(XMLSize_t i=0;i<len;i++) - if(encodedData[i]!=chLF) - *cursor++=encodedData[i]; - *cursor++=0; - strcat(fBuffer, AUTHORIZATION); - strcat(fBuffer, (char*)authData); - strcat(fBuffer, CRLF); - } - } - - if(httpInfo!=0 && httpInfo->fHeaders!=0) - strncat(fBuffer,httpInfo->fHeaders,httpInfo->fHeadersLen); - - strcat(fBuffer, CRLF); - - // Send the http request - int lent = strlen(fBuffer); - int aLent = 0; - - if ((aLent = write(s, (void *) fBuffer, lent)) != lent) - { - ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_WriteSocket, urlSource.getURLText(), fMemoryManager); - } - - if(httpInfo!=0 && httpInfo->fPayload!=0) { - int aLent = 0; - if ((aLent = write(s, (void *) httpInfo->fPayload, httpInfo->fPayloadLen)) != httpInfo->fPayloadLen) - { - ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_WriteSocket, urlSource.getURLText(), fMemoryManager); - } - } - - // - // get the response, check the http header for errors from the server. - // - aLent = read(s, (void *)fBuffer, sizeof(fBuffer)-1); - if (aLent <= 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); + if(status == 200) { + // HTTP 200 OK response means we're done. + // We're done + break; } + // a 3xx response means there was an HTTP redirect + else if(status >= 300 && status <= 307) { + redirectCount++; - fBufferEnd = fBuffer+aLent; - *fBufferEnd = 0; + XMLCh *newURLString = findHeader("Location"); + ArrayJanitor<XMLCh> janNewURLString(newURLString, memoryManager); - // Find the break between the returned http header and any data. - // (Delimited by a blank line) - // Hang on to any data for use by the first read from this BinHTTPURLInputStream. - // - fBufferPos = strstr(fBuffer, CRLF2X); - if (fBufferPos != 0) - { - fBufferPos += 4; - *(fBufferPos-2) = 0; - } - else - { - fBufferPos = strstr(fBuffer, LF2X); - if (fBufferPos != 0) - { - fBufferPos += 2; - *(fBufferPos-1) = 0; + XMLURL newURL(memoryManager); + newURL.setURL(url, newURLString); + if(newURL.getProtocol() != XMLURL::HTTP) { + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, newURL.getURLText(), memoryManager); } - else - fBufferPos = fBufferEnd; - } - // Make sure the header includes an HTTP 200 OK response. - // - char *p = strstr(fBuffer, HTTP); - if (p == 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } + url = newURL; - p = strchr(p, chSpace); - if (p == 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); + janHostNameAsCharStar.release(); + hostNameAsCharStar = XMLString::transcode(newURL.getHost(), memoryManager); + janHostNameAsCharStar.reset(hostNameAsCharStar, memoryManager); } - - if (memcmp(p, resp200, strlen(resp200))) - { - // a 3xx response means there was a HTTP redirect - if (p[1] = chDigit_3) { - sawRedirect = true; - redirectCount++; - - p = strstr(fBuffer, LOCATION); - if (p == 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } - p += 10; // Length of string "Location: " - - char* endP = strstr(p, CRLF); - if (endP == 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } - endP[0] = chNull; - - XMLURL newURL(fMemoryManager); - XMLCh* newURLString = XMLString::transcode(p, fMemoryManager); - ArrayJanitor<XMLCh> janNewURLString(newURLString, fMemoryManager); - - // The location string is either of the form: - // local.xsd (ie. a relative URL) - // http://host/path (ie. an absolute path) - char* colonP = strstr(p, COLON); - if (colonP == 0) { - // if no colon assume relative url - newURL.setURL(urlSource, newURLString); - } - else { - // if colon then either a schema is specified or - // a port is specified - newURL.setURL(newURLString); - - if (newURL.getProtocol() != XMLURL::HTTP) { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, newURL.getURLText(), fMemoryManager); - } - - const XMLCh* newHostName = newURL.getHost(); - if (XMLString::compareIStringASCII(hostName, newHostName) != 0) { - lookUpHost = true; - janHostNameAsCharStar.release(); - hostNameAsCharStar = XMLString::transcode(newHostName, fMemoryManager); - janHostNameAsCharStar.reset(hostNameAsCharStar, fMemoryManager); - - janHostNameAsASCII.release(); - transSize = XMLString::stringLen(newHostName)+1; - hostNameAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - janHostNameAsASCII.reset(hostNameAsASCII, fMemoryManager); - trans->transcodeTo(newHostName, transSize, (unsigned char *) hostNameAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - } - } - - path = newURL.getPath(); - if (path) { - janPathAsASCII.release(); - transSize = XMLString::stringLen(path)+1; - pathAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - janPathAsASCII.reset(pathAsASCII, fMemoryManager); - trans->transcodeTo(path, transSize, (unsigned char *) pathAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - } - - fragment = newURL.getFragment(); - if (fragment) { - janfragmentAsASCII.release(); - transSize = XMLString::stringLen(fragment)+1; - fragmentAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - janfragmentAsASCII.reset(fragmentAsASCII, fMemoryManager); - trans->transcodeTo(fragment, transSize, (unsigned char *) fragmentAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - } - - query = newURL.getQuery(); - if (query) { - janqueryAsASCII.release(); - transSize = XMLString::stringLen(query)+1; - queryAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - janqueryAsASCII.reset(queryAsASCII, fMemoryManager); - trans->transcodeTo(query, transSize, (unsigned char *) queryAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - } - - - portNumber = (unsigned short) newURL.getPortNum(); - // - // Convert port number integer to unicode so we can transcode it to ASCII - // - - janportAsASCII.release(); - XMLString::binToText((unsigned int) portNumber, portBuffer, bufSize, 10, fMemoryManager); - transSize = XMLString::stringLen(portBuffer)+1; - portAsASCII = (char*) fMemoryManager->allocate - ( - (transSize+1) * sizeof(char) - );//new char[transSize+1]; - janportAsASCII.reset(portAsASCII, fMemoryManager); - trans->transcodeTo(portBuffer, transSize, (unsigned char *) portAsASCII, transSize, charsEaten, XMLTranscoder::UnRep_Throw); - - username = newURL.getUser(); - password = newURL.getPassword(); - } - else { - // Most likely a 404 Not Found error. - // Should recognize and handle the forwarding responses. - // - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, urlSource.getURLText(), fMemoryManager); - } + else { + // Most likely a 404 Not Found error. + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, url.getURLText(), memoryManager); } + } while(redirectCount < 6); - } - while (sawRedirect && redirectCount < 6); - - fSocket = *janSock.release(); + janSock.release(); } @@ -635,36 +242,23 @@ UnixHTTPURLInputStream::~UnixHTTPURLInputStream() close(fSocket); } - -XMLSize_t UnixHTTPURLInputStream::readBytes(XMLByte* const toFill - , const XMLSize_t maxToRead) +bool UnixHTTPURLInputStream::send(const char *buf, XMLSize_t len) { - XMLSize_t len = fBufferEnd - fBufferPos; - if (len > 0) - { - // If there's any data left over in the buffer into which we first - // read from the server (to get the http header), return that. - if (len > maxToRead) - len = maxToRead; - memcpy(toFill, fBufferPos, len); - fBufferPos += len; - } - else - { - // There was no data in the local buffer. - // Read some from the socket, straight into our caller's buffer. - // - int cbRead = read(fSocket, (void *) toFill, maxToRead); - if (cbRead == -1) - { - ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, fMemoryManager); - } - len = cbRead; + XMLSize_t done = 0; + int ret; + + while(done < len) { + ret = ::send(fSocket, buf + done, len - done, 0); + if(ret == -1) return false; + done += ret; } - fBytesProcessed += len; - return len; + return true; } -XERCES_CPP_NAMESPACE_END +int UnixHTTPURLInputStream::receive(char *buf, XMLSize_t len) +{ + return ::recv(fSocket, buf, len, 0); +} +XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp b/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp index b5007ad4e0cdda8f9241a88b3ae828bbc8b69218..859a395dbe695548455f8830e9c216fa84d6f5df 100644 --- a/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp +++ b/src/xercesc/util/NetAccessors/Socket/UnixHTTPURLInputStream.hpp @@ -5,9 +5,9 @@ * 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. @@ -22,11 +22,7 @@ #if !defined(XERCESC_INCLUDE_GUARD_UNIXHTTPURLINPUTSTREAM_HPP) #define XERCESC_INCLUDE_GUARD_UNIXHTTPURLINPUTSTREAM_HPP - -#include <xercesc/util/XMLURL.hpp> -#include <xercesc/util/XMLExceptMsgs.hpp> -#include <xercesc/util/BinInputStream.hpp> -#include <xercesc/util/XMLNetAccessor.hpp> +#include <xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -34,20 +30,14 @@ XERCES_CPP_NAMESPACE_BEGIN // This class implements the BinInputStream interface specified by the XML // parser. // - -class XMLUTIL_EXPORT UnixHTTPURLInputStream : public BinInputStream +class XMLUTIL_EXPORT UnixHTTPURLInputStream : public BinHTTPInputStreamCommon { public : UnixHTTPURLInputStream(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo=0); ~UnixHTTPURLInputStream(); - XMLFilePos curPos() const; - XMLSize_t readBytes - ( - XMLByte* const toFill - , const XMLSize_t maxToRead - ); - + virtual bool send(const char *buf, XMLSize_t len); + virtual int receive(char *buf, XMLSize_t len); private : // ----------------------------------------------------------------------- @@ -61,31 +51,10 @@ private : // // fSocket // The socket representing the connection to the remote file. - // fBytesProcessed - // Its a rolling count of the number of bytes processed off this - // input stream. - // fBuffer - // Holds the http header, plus the first part of the actual - // data. Filled at the time the stream is opened, data goes - // out to user in response to readBytes(). - // fBufferPos, fBufferEnd - // Pointers into fBuffer, showing start and end+1 of content - // that readBytes must return. // ----------------------------------------------------------------------- int fSocket; - unsigned int fBytesProcessed; - char fBuffer[4000]; - char * fBufferEnd; - char * fBufferPos; - MemoryManager* fMemoryManager; -}; // UnixHTTPURLInputStream - - -inline XMLFilePos UnixHTTPURLInputStream::curPos() const -{ - return fBytesProcessed; -} +}; XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp b/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp index 24b4097b736761c4f5d1e504d79f03cc3f2706a1..0d48cdbdb6dc9f20f5cc05cbec3e87789a79cec1 100644 --- a/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp +++ b/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.cpp @@ -19,7 +19,7 @@ * $Id$ */ -#include <winsock2.h> + #include <windows.h> #ifdef WITH_IPV6 @@ -36,7 +36,6 @@ #include <xercesc/util/XMLExceptMsgs.hpp> #include <xercesc/util/Janitor.hpp> #include <xercesc/util/XMLUniDefs.hpp> -#include <xercesc/util/Base64.hpp> #include <xercesc/util/Mutexes.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -153,7 +152,14 @@ public: SOCKET* get() const { return fData; } SOCKET* release() { SOCKET* p = fData; fData = 0; return p; } - void reset(SOCKET* p = 0) { if(fData) wrap_closesocket(*fData); fData=p; } + void reset(SOCKET* p = 0) + { + if(fData) { + wrap_shutdown(*fData, SD_BOTH); + wrap_closesocket(*fData); + } + fData = p; + } bool isDataNull() { return (fData == 0); } private : @@ -283,11 +289,12 @@ void BinHTTPURLInputStream::Cleanup() } } - BinHTTPURLInputStream::BinHTTPURLInputStream(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo /*=0*/) - : fSocketHandle(0) - , fBytesProcessed(0) + : BinHTTPInputStreamCommon(urlSource.getMemoryManager()) + , fSocketHandle(0) { + MemoryManager *memoryManager = urlSource.getMemoryManager(); + // Check if we need to load the winsock library. While locking the // mutex every time may be somewhat slow, we don't care in this // particular case since the next operation will most likely be @@ -297,434 +304,181 @@ BinHTTPURLInputStream::BinHTTPURLInputStream(const XMLURL& urlSource, const XMLN XMLMutexLock lock(XMLPlatformUtils::fgAtomicMutex); if (!fInitialized) - Initialize(urlSource.getMemoryManager()); + Initialize(memoryManager); } - fMemoryManager = urlSource.getMemoryManager(); // - // Pull all of the parts of the URL out of th urlSource object, and transcode them - // and transcode them back to ASCII. + // Constants in ASCII to send/check in the HTTP request/response // - const XMLCh* hostName = urlSource.getHost(); - char* hostNameAsCharStar = XMLString::transcode(hostName, fMemoryManager); - ArrayJanitor<char> janHostName(hostNameAsCharStar, fMemoryManager); - - const XMLCh* path = urlSource.getPath(); - char* pathAsCharStar = XMLString::transcode(path, fMemoryManager); - ArrayJanitor<char> janPath(pathAsCharStar, fMemoryManager); - - const XMLCh* fragment = urlSource.getFragment(); - char* fragmentAsCharStar = 0; - if (fragment) - fragmentAsCharStar = XMLString::transcode(fragment, fMemoryManager); - ArrayJanitor<char> janFragment(fragmentAsCharStar, fMemoryManager); - const XMLCh* query = urlSource.getQuery(); - char* queryAsCharStar = 0; - if (query) - queryAsCharStar = XMLString::transcode(query, fMemoryManager); - ArrayJanitor<char> janQuery(queryAsCharStar, fMemoryManager); + static const char *CRLF2X = "\r\n\r\n"; + static const char *LF2X = "\n\n"; - unsigned short portNumber = (unsigned short) urlSource.getPortNum(); - - const XMLCh* username = urlSource.getUser(); - const XMLCh* password = urlSource.getPassword(); // - // Set up a socket. + // Pull all of the parts of the URL out of th urlSource object, and transcode them + // and transcode them back to ASCII. // - bool sawRedirect; + const XMLCh* hostName = urlSource.getHost(); + char* hostNameAsCharStar = XMLString::transcode(hostName, memoryManager); + ArrayJanitor<char> janHostNameAsCharStar(hostNameAsCharStar, memoryManager); + + XMLURL url(urlSource); int redirectCount = 0; - SOCKET s; SocketJanitor janSock(0); - bool lookUpHost = true; do { + // + // Set up a socket. + // #ifdef WITH_IPV6 struct addrinfo hints, *res, *ai; + CharBuffer portBuffer(10, memoryManager); + portBuffer.appendDecimalNumber(url.getPortNum()); + memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - char tempbuf[10]; - XMLString::binToText(portNumber, tempbuf, 10, 10); - int n = wrap_getaddrinfo(hostNameAsCharStar,(const char*)tempbuf,&hints, &res); + int n = wrap_getaddrinfo(hostNameAsCharStar,portBuffer.getRawBuffer(),&hints, &res); if(n<0) { hints.ai_flags = AI_NUMERICHOST; n = wrap_getaddrinfo(hostNameAsCharStar,(const char*)tempbuf,&hints, &res); if(n<0) - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager); + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager); } - if (janSock.get()) - janSock.release(); + janSock.reset(); for (ai = res; ai != NULL; ai = ai->ai_next) { // Open a socket with the correct address family for this address. - s = wrap_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); - if (s == INVALID_SOCKET) + fSocket = wrap_socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (fSocket == INVALID_SOCKET) continue; - if (wrap_connect(s, ai->ai_addr, (int)ai->ai_addrlen) == SOCKET_ERROR) + if (wrap_connect(fSocket, ai->ai_addr, (int)ai->ai_addrlen) == SOCKET_ERROR) { wrap_freeaddrinfo(res); // Call WSAGetLastError() to get the error number. ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText(), fMemoryManager); + XMLExcepts::NetAcc_ConnSocket, url.getURLText(), memoryManager); } break; } wrap_freeaddrinfo(res); - if (s == INVALID_SOCKET) + if (fSocket == INVALID_SOCKET) { // Call WSAGetLastError() to get the error number. ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_CreateSocket, urlSource.getURLText(), fMemoryManager); + XMLExcepts::NetAcc_CreateSocket, url.getURLText(), memoryManager); } - janSock.reset(&s); + janSock.reset(&fSocket); #else - struct hostent* hostEntPtr = 0; - struct sockaddr_in sa; + struct hostent* hostEntPtr = 0; + struct sockaddr_in sa; + - if (lookUpHost && - ((hostEntPtr = wrap_gethostbyname(hostNameAsCharStar)) == NULL)) + if ((hostEntPtr = wrap_gethostbyname(hostNameAsCharStar)) == NULL) { unsigned long numAddress = wrap_inet_addr(hostNameAsCharStar); if (numAddress == INADDR_NONE) { // Call WSAGetLastError() to get the error number. ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager); + XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager); } if ((hostEntPtr = - wrap_gethostbyaddr((const char *) &numAddress, - sizeof(unsigned long), AF_INET)) == NULL) + wrap_gethostbyaddr((const char *) &numAddress, + sizeof(unsigned long), AF_INET)) == NULL) { // Call WSAGetLastError() to get the error number. ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_TargetResolution, hostName, fMemoryManager); + XMLExcepts::NetAcc_TargetResolution, hostName, memoryManager); } } - lookUpHost = false; memcpy((void *) &sa.sin_addr, - (const void *) hostEntPtr->h_addr, hostEntPtr->h_length); - + (const void *) hostEntPtr->h_addr, hostEntPtr->h_length); sa.sin_family = hostEntPtr->h_addrtype; - sa.sin_port = wrap_htons(portNumber); + sa.sin_port = wrap_htons((unsigned short)url.getPortNum()); - if (janSock.get()) - janSock.release(); - s = wrap_socket(hostEntPtr->h_addrtype, SOCK_STREAM, 0); - if (s == INVALID_SOCKET) + janSock.reset(); + fSocketHandle = wrap_socket(hostEntPtr->h_addrtype, SOCK_STREAM, 0); + if (fSocketHandle == INVALID_SOCKET) { // Call WSAGetLastError() to get the error number. ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_CreateSocket, urlSource.getURLText(), fMemoryManager); + XMLExcepts::NetAcc_CreateSocket, url.getURLText(), memoryManager); } - janSock.reset(&s); + janSock.reset(&fSocketHandle); - if (wrap_connect(s, (struct sockaddr *) &sa, sizeof(sa)) == SOCKET_ERROR) + if (wrap_connect(fSocketHandle, (struct sockaddr *) &sa, sizeof(sa)) == SOCKET_ERROR) { // Call WSAGetLastError() to get the error number. ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText(), fMemoryManager); + XMLExcepts::NetAcc_ConnSocket, url.getURLText(), memoryManager); } #endif - // Set a flag so we know that the headers have not been read yet. - bool fHeaderRead = false; - sawRedirect = false; - - // The port is open and ready to go. - // Build up the http GET command to send to the server. - // To do: We should really support http 1.1. This implementation - // is weak. + int status = sendRequest(url, httpInfo); - memset(fBuffer, 0, sizeof(fBuffer)); - - if(httpInfo==0) - strcpy(fBuffer, "GET "); - else { - switch(httpInfo->fHTTPMethod) { - case XMLNetHTTPInfo::GET: strcpy(fBuffer, "GET "); break; - case XMLNetHTTPInfo::PUT: strcpy(fBuffer, "PUT "); break; - case XMLNetHTTPInfo::POST: strcpy(fBuffer, "POST "); break; - } + if(status == 200) { + // HTTP 200 OK response means we're done. + // We're done + break; } - strcat(fBuffer, pathAsCharStar); + // a 3xx response means there was an HTTP redirect + else if(status >= 300 && status <= 307) { + redirectCount++; - if (queryAsCharStar != 0) - { - // Tack on a ? before the fragment - strcat(fBuffer,"?"); - strcat(fBuffer, queryAsCharStar); - } + XMLCh *newURLString = findHeader("Location"); + ArrayJanitor<XMLCh> janNewURLString(newURLString, memoryManager); - if (fragmentAsCharStar != 0) - { - strcat(fBuffer, fragmentAsCharStar); - } - strcat(fBuffer, " HTTP/1.0\r\n"); - - - strcat(fBuffer, "Host: "); - strcat(fBuffer, hostNameAsCharStar); - if (portNumber != 80) - { - strcat(fBuffer, ":"); - size_t i = strlen(fBuffer); - XMLString::binToText(portNumber, fBuffer+i, 10, 10); - } - strcat(fBuffer, "\r\n"); - - if (username && password) - { - XMLBuffer userPass(256, fMemoryManager); - userPass.append(username); - userPass.append(chColon); - userPass.append(password); - char* userPassAsCharStar = XMLString::transcode(userPass.getRawBuffer(), fMemoryManager); - ArrayJanitor<char> janBuf(userPassAsCharStar, fMemoryManager); - XMLSize_t len; - XMLByte* encodedData = Base64::encode((XMLByte *)userPassAsCharStar, strlen(userPassAsCharStar), &len, fMemoryManager); - ArrayJanitor<XMLByte> janBuf2(encodedData, fMemoryManager); - - if (encodedData) - { - // HTTP doesn't want the 0x0A separating the data in chunks of 76 chars per line - XMLByte* authData = (XMLByte*)fMemoryManager->allocate((len+1)*sizeof(XMLByte)); - ArrayJanitor<XMLByte> janBuf(authData, fMemoryManager); - XMLByte* cursor=authData; - for(XMLSize_t i=0;i<len;i++) - if(encodedData[i]!=chLF) - *cursor++=encodedData[i]; - *cursor++=0; - strcat(fBuffer, "Authorization: Basic "); - strcat(fBuffer, (char*)authData); - strcat(fBuffer, "\r\n"); + XMLURL newURL(memoryManager); + newURL.setURL(url, newURLString); + if(newURL.getProtocol() != XMLURL::HTTP) { + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, newURL.getURLText(), memoryManager); } - } - - if(httpInfo!=0 && httpInfo->fHeaders!=0) - strncat(fBuffer,httpInfo->fHeaders,httpInfo->fHeadersLen); - strcat(fBuffer, "\r\n"); + url = newURL; - // Send the http request - int lent = (int)strlen(fBuffer); - int aLent = 0; - if ((aLent = wrap_send(s, fBuffer, lent, 0)) != lent) - { - // Call WSAGetLastError() to get the error number. - ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_WriteSocket, urlSource.getURLText(), fMemoryManager); + janHostNameAsCharStar.release(); + hostNameAsCharStar = XMLString::transcode(newURL.getHost(), memoryManager); + janHostNameAsCharStar.reset(hostNameAsCharStar, memoryManager); } - - if(httpInfo!=0 && httpInfo->fPayload!=0) { - if ((aLent = wrap_send(s, httpInfo->fPayload, httpInfo->fPayloadLen, 0)) != httpInfo->fPayloadLen) - { - // Call WSAGetLastError() to get the error number. - ThrowXMLwithMemMgr1(NetAccessorException, - XMLExcepts::NetAcc_WriteSocket, urlSource.getURLText(), fMemoryManager); - } - } - - // get the response, check the http header for errors from the server. - // - memset(fBuffer, 0, sizeof(fBuffer)); - aLent = wrap_recv(s, fBuffer, sizeof(fBuffer)-1, 0); - if (aLent == SOCKET_ERROR || aLent == 0) - { - // Call WSAGetLastError() to get the error number. - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } - - fBufferEnd = fBuffer+aLent; - *fBufferEnd = 0; - - do { - // Find the break between the returned http header and any data. - // (Delimited by a blank line) - // Hang on to any data for use by the first read from this BinHTTPURLInputStream. - // - fBufferPos = strstr(fBuffer, "\r\n\r\n"); - if (fBufferPos != 0) - { - fBufferPos += 4; - *(fBufferPos-2) = 0; - fHeaderRead = true; - } - else - { - fBufferPos = strstr(fBuffer, "\n\n"); - if (fBufferPos != 0) - { - fBufferPos += 2; - *(fBufferPos-1) = 0; - fHeaderRead = true; - } - else - { - // - // Header is not yet read, do another recv() to get more data... - aLent = wrap_recv(s, fBufferEnd, (int)((sizeof(fBuffer) - 1) - (fBufferEnd - fBuffer)), 0); - if (aLent == SOCKET_ERROR || aLent == 0) - { - // Call WSAGetLastError() to get the error number. - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } - fBufferEnd = fBufferEnd + aLent; - *fBufferEnd = 0; - } - } - } while(fHeaderRead == false); - - // Make sure the header includes an HTTP 200 OK response. - // - char *p = strstr(fBuffer, "HTTP"); - if (p == 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } - - p = strchr(p, ' '); - if (p == 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } - - int httpResponse = atoi(p); - if (httpResponse != 200) - { - // a 3xx response means there was a HTTP redirect - if (httpResponse >= 300 && httpResponse < 400) { - sawRedirect = true; - redirectCount++; - - p = strstr(fBuffer, "Location: "); - if (p == 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } - p += 10; // Length of string "Location: " - - char* endP = strstr(p, "\r\n"); - if (endP == 0) - { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlSource.getURLText(), fMemoryManager); - } - endP[0] = chNull; - - XMLURL newURL(fMemoryManager); - XMLCh* newURLString = XMLString::transcode(p, fMemoryManager); - ArrayJanitor<XMLCh> janNewURLString(newURLString, fMemoryManager); - - // The location string is either of the form: - // local.xsd (ie. a relative URL) - // http://host/path (ie. an absolute path) - char* colonP = strstr(p, ":"); - if (colonP == 0) { - // if no colon assume relative url - newURL.setURL(urlSource, newURLString); - } - else { - // if colon then either a schema is specified or - // a port is specified - newURL.setURL(newURLString); - - if (newURL.getProtocol() != XMLURL::HTTP) { - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, newURL.getURLText(), fMemoryManager); - } - - const XMLCh* newHostName = newURL.getHost(); - if (XMLString::compareIStringASCII(hostName, newHostName) != 0) { - lookUpHost = true; - janHostName.release(); - hostNameAsCharStar = XMLString::transcode(newHostName, fMemoryManager); - janHostName.reset(hostNameAsCharStar); - } - } - - path = newURL.getPath(); - janPath.release(); - pathAsCharStar = XMLString::transcode(path, fMemoryManager); - janPath.reset(pathAsCharStar); - - fragment = newURL.getFragment(); - janFragment.release(); - fragmentAsCharStar = 0; - if (fragment) - fragmentAsCharStar = XMLString::transcode(fragment, fMemoryManager); - janFragment.reset(fragmentAsCharStar); - - query = newURL.getQuery(); - janQuery.release(); - queryAsCharStar = 0; - if (query) - queryAsCharStar = XMLString::transcode(query, fMemoryManager); - janQuery.reset(queryAsCharStar); - - portNumber = (unsigned short) newURL.getPortNum(); - - username = newURL.getUser(); - password = newURL.getPassword(); - } - else { - // Most likely a 404 Not Found error. - // Should recognize and handle the forwarding responses. - // - ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, urlSource.getURLText(), fMemoryManager); - } + else { + // Most likely a 404 Not Found error. + ThrowXMLwithMemMgr1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, url.getURLText(), memoryManager); } + } while(redirectCount < 6); - } - while(sawRedirect && redirectCount <6); - - fSocketHandle = (unsigned int) *janSock.release(); + janSock.release(); } - - BinHTTPURLInputStream::~BinHTTPURLInputStream() { wrap_shutdown(fSocketHandle, SD_BOTH); wrap_closesocket(fSocketHandle); } - -// -// readBytes -// -XMLSize_t BinHTTPURLInputStream::readBytes(XMLByte* const toFill - , const XMLSize_t maxToRead) +bool BinHTTPURLInputStream::send(const char *buf, XMLSize_t len) { - XMLSize_t len = fBufferEnd - fBufferPos; - if (len > 0) - { - // If there's any data left over in the buffer into which we first - // read from the server (to get the http header), return that. - if (len > maxToRead) - len = maxToRead; - memcpy(toFill, fBufferPos, len); - fBufferPos += len; - } - else - { - // There was no data in the local buffer. - // Read some from the socket, straight into our caller's buffer. - // - int iLen = wrap_recv((SOCKET) fSocketHandle, (char *) toFill, (int)maxToRead, 0); - if (iLen == SOCKET_ERROR) - { - // Call WSAGetLastError() to get the error number. - ThrowXMLwithMemMgr(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, fMemoryManager); - } - len = iLen; + XMLSize_t done = 0; + int ret; + + while(done < len) { + ret = wrap_send(fSocketHandle, buf + done, len - done, 0); + if(ret == SOCKET_ERROR) return false; + done += ret; } - fBytesProcessed += len; - return len; + return true; } +int BinHTTPURLInputStream::receive(char *buf, XMLSize_t len) +{ + int iLen = wrap_recv(fSocketHandle, buf, len, 0); + if (iLen == SOCKET_ERROR) return -1; + return iLen; +} XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp b/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp index a166a2a23e06b48172a187f63902a1a6ceca5867..0d325aba48cd1afff9bb5722546589d6e8053cfa 100644 --- a/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp +++ b/src/xercesc/util/NetAccessors/WinSock/BinHTTPURLInputStream.hpp @@ -23,40 +23,34 @@ #define XERCESC_INCLUDE_GUARD_BINHTTPURLINPUTSTREAM_HPP -#include <xercesc/util/XMLURL.hpp> -#include <xercesc/util/XMLExceptMsgs.hpp> -#include <xercesc/util/BinInputStream.hpp> -#include <xercesc/util/XMLNetAccessor.hpp> +#include <xercesc/util/NetAccessors/BinHTTPInputStreamCommon.hpp> + +#include <winsock2.h> + +XERCES_CPP_NAMESPACE_BEGIN // // This class implements the BinInputStream interface specified by the XML // parser. // - -XERCES_CPP_NAMESPACE_BEGIN - -class XMLUTIL_EXPORT BinHTTPURLInputStream : public BinInputStream +class XMLUTIL_EXPORT BinHTTPURLInputStream : public BinHTTPInputStreamCommon { public : BinHTTPURLInputStream(const XMLURL& urlSource, const XMLNetHTTPInfo* httpInfo=0); ~BinHTTPURLInputStream(); - XMLFilePos curPos() const; - XMLSize_t readBytes - ( - XMLByte* const toFill - , const XMLSize_t maxToRead - ); + virtual bool send(const char *buf, XMLSize_t len); + virtual int receive(char *buf, XMLSize_t len); static void Cleanup(); - private : // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- BinHTTPURLInputStream(const BinHTTPURLInputStream&); BinHTTPURLInputStream& operator=(const BinHTTPURLInputStream&); + // ----------------------------------------------------------------------- // Private data members // @@ -64,35 +58,14 @@ private : // The socket representing the connection to the remote file. // We deliberately did not define the type to be SOCKET, so as to // avoid bringing in any Windows header into this file. - // fBytesProcessed - // Its a rolling count of the number of bytes processed off this - // input stream. - // fBuffer - // Holds the http header, plus the first part of the actual - // data. Filled at the time the stream is opened, data goes - // out to user in response to readBytes(). - // fBufferPos, fBufferEnd - // Pointers into fBuffer, showing start and end+1 of content - // that readBytes must return. // ----------------------------------------------------------------------- - MemoryManager* fMemoryManager; - unsigned int fSocketHandle; - XMLSize_t fBytesProcessed; - char fBuffer[4000]; - char * fBufferEnd; - char * fBufferPos; + SOCKET fSocketHandle; + static bool fInitialized; static void Initialize(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager); - }; - -inline XMLFilePos BinHTTPURLInputStream::curPos() const -{ - return fBytesProcessed; -} - XERCES_CPP_NAMESPACE_END #endif // BINHTTPURLINPUTSTREAM_HPP diff --git a/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.cpp b/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.cpp index 0ee6a17701622bd45f0762a63c5aa0b953998e62..acef5241474757bbd9821936c22f5e5f7d352e7f 100644 --- a/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.cpp +++ b/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.cpp @@ -5,9 +5,9 @@ * 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. @@ -253,4 +253,11 @@ XMLSize_t BinURLInputStream::readBytes(XMLByte* const toFill return retval; } +const XMLCh* BinURLInputStream::getContentType() const +{ + // TODO + // + return 0; +} + XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.hpp b/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.hpp index eecaf7535281fd39ee56b15535d0889dd77f3105..a35f5b0ad3ffbab37e20bb3ea2cb64c3fedc39c3 100644 --- a/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.hpp +++ b/src/xercesc/util/NetAccessors/libWWW/BinURLInputStream.hpp @@ -5,9 +5,9 @@ * 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. @@ -48,12 +48,14 @@ public : BinURLInputStream(const XMLURL& urlSource); ~BinURLInputStream(); - XMLFilePos curPos() const; - XMLSize_t readBytes + virtual XMLFilePos curPos() const; + virtual XMLSize_t readBytes ( XMLByte* const toFill , const XMLSize_t maxToRead ); + virtual const XMLCh* getContentType() const; + void reset(); unsigned int bytesAvail() const; @@ -63,7 +65,7 @@ private : // Unimplemented constructors and operators // ----------------------------------------------------------------------- BinURLInputStream(const BinURLInputStream&); - BinURLInputStream& operator=(const BinURLInputStream&); + BinURLInputStream& operator=(const BinURLInputStream&); // ----------------------------------------------------------------------- // Private data members diff --git a/src/xercesc/util/XMLURL.cpp b/src/xercesc/util/XMLURL.cpp index 0b79cc18e8e0d86fd61f73dc1943b986f908f3f5..8ec3d6b6ea6465e37d56da5a7f8986e949baa7dc 100644 --- a/src/xercesc/util/XMLURL.cpp +++ b/src/xercesc/util/XMLURL.cpp @@ -1130,10 +1130,13 @@ void XMLURL::parse(const XMLCh* const urlText) } // If we are at the end, then we are done now - if (!*srcPtr) - { + if (!*srcPtr) { + if(fHost) { + static const XMLCh slash[] = { chForwardSlash, chNull }; + fPath = XMLString::replicate(slash, fMemoryManager); + } return; - } + } // // Next is the path part. It can be absolute, i.e. starting with a @@ -1404,10 +1407,13 @@ bool XMLURL::parse(const XMLCh* const urlText, XMLURL& xmlURL) } // If we are at the end, then we are done now - if (!*srcPtr) - { + if (!*srcPtr) { + if(xmlURL.fHost) { + static const XMLCh slash[] = { chForwardSlash, chNull }; + xmlURL.fPath = XMLString::replicate(slash, xmlURL.fMemoryManager); + } return true; - } + } // // Next is the path part. It can be absolute, i.e. starting with a