Add a static buffer transform source.
git-svn-id: https://svn.apache.org/repos/asf/santuario/xml-security-cpp/trunk@1826173 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj b/Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj
index 687ecfb..cf24ea1 100644
--- a/Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj
+++ b/Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj
@@ -504,6 +504,7 @@
<ClCompile Include="..\..\..\..\xsec\enc\OpenSSL\OpenSSLCryptoSymmetricKey.cpp" />
<ClCompile Include="..\..\..\..\xsec\enc\OpenSSL\OpenSSLCryptoX509.cpp" />
<ClCompile Include="..\..\..\..\xsec\enc\XSCrypt\XSCryptCryptoBase64.cpp" />
+ <ClCompile Include="..\..\..\..\xsec\transformers\TXFMChar.cpp" />
<ClCompile Include="..\..\..\..\xsec\transformers\TXFMHash.cpp" />
<ClCompile Include="..\..\..\..\xsec\utils\winutils\XSECSOAPRequestorSimpleWin32.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release Minimal|Win32'">true</ExcludedFromBuild>
@@ -663,6 +664,7 @@
<ClInclude Include="..\..\..\..\xsec\enc\OpenSSL\OpenSSLCryptoX509.hpp" />
<ClInclude Include="..\..\..\..\xsec\enc\XSCrypt\XSCryptCryptoBase64.hpp" />
<ClInclude Include="..\..\..\..\xsec\framework\XSECVersion.hpp" />
+ <ClInclude Include="..\..\..\..\xsec\transformers\TXFMChar.hpp" />
<ClInclude Include="..\..\..\..\xsec\transformers\TXFMHash.hpp" />
<ClInclude Include="..\..\..\..\xsec\utils\XSECAlgorithmSupport.hpp" />
<ClInclude Include="..\..\..\..\xsec\utils\XSECAutoPtr.hpp" />
diff --git a/Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj.filters b/Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj.filters
index 95de2b7..35252f5 100644
--- a/Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj.filters
+++ b/Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj.filters
@@ -430,6 +430,9 @@
<ClCompile Include="..\..\..\..\xsec\utils\XSECXPathNodeList.cpp">
<Filter>utils</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\..\xsec\transformers\TXFMChar.cpp">
+ <Filter>transformers</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\..\xsec\dsig\DSIGAlgorithmHandlerDefault.hpp">
@@ -1050,6 +1053,9 @@
<ClInclude Include="..\..\..\..\xsec\framework\resource.h">
<Filter>framework</Filter>
</ClInclude>
+ <ClInclude Include="..\..\..\..\xsec\transformers\TXFMChar.hpp">
+ <Filter>transformers</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="dsig">
diff --git a/xsec/Makefile.am b/xsec/Makefile.am
index 597872a..1f00ee4 100644
--- a/xsec/Makefile.am
+++ b/xsec/Makefile.am
@@ -245,6 +245,7 @@
transformers/TXFMOutputFile.hpp \
transformers/TXFMURL.hpp \
transformers/TXFMBase.hpp \
+ transformers/TXFMChar.hpp \
transformers/TXFMCipher.hpp \
transformers/TXFMEnvelope.hpp \
transformers/TXFMChain.hpp \
@@ -445,7 +446,8 @@
transformers/TXFMXPath.cpp \
transformers/TXFMXSL.cpp \
transformers/TXFMDocObject.cpp \
- transformers/TXFMConcatChains.cpp
+ transformers/TXFMConcatChains.cpp \
+ transformers/TXFMChar.cpp
# Utility files. Note we don't worry about checking
# if the UNIX stuff is necessary - we just assume that
diff --git a/xsec/transformers/TXFMChar.cpp b/xsec/transformers/TXFMChar.cpp
new file mode 100644
index 0000000..ae22bd1
--- /dev/null
+++ b/xsec/transformers/TXFMChar.cpp
@@ -0,0 +1,122 @@
+/**
+ * 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.
+ */
+
+/*
+ * XSEC
+ *
+ * TXFMChar := Class that takes an input static buffer to start a transform pipe
+ *
+ */
+
+#include <xsec/transformers/TXFMChar.hpp>
+
+XERCES_CPP_NAMESPACE_USE
+
+// General includes
+
+#include <memory.h>
+
+TXFMChar::TXFMChar(DOMDocument *doc) : TXFMBase(doc) {
+
+ toOutput = 0;
+}
+
+
+TXFMChar::~TXFMChar() {
+
+}
+
+// Methods to set the inputs
+
+void TXFMChar::setInput(TXFMBase *newInput) {
+
+ // We're the start of the actual data pipe, but we need to track
+ // the pointer for chain disposal.
+ input = newInput;
+
+ return;
+}
+
+void TXFMChar::setInput(const char* in) {
+
+ // Assume this is a string
+
+ buf = in;
+ toOutput = in ? strlen(in) : 0;
+ sbs = toOutput;
+
+}
+
+void TXFMChar::setInput(const char* in, unsigned int bSize) {
+
+ // Assume this is a string
+
+ buf = in;
+ if (bSize > (in ? strlen(in) : 0))
+ toOutput = in ? strlen(in) : 0;
+ else
+ toOutput = bSize;
+ sbs = toOutput;
+
+}
+
+
+// Methods to get tranform output type and input requirement
+
+TXFMBase::ioType TXFMChar::getInputType() const {
+ return TXFMBase::BYTE_STREAM;
+}
+
+TXFMBase::ioType TXFMChar::getOutputType() const {
+ return TXFMBase::BYTE_STREAM;
+}
+
+
+TXFMBase::nodeType TXFMChar::getNodeType() const {
+ return TXFMBase::DOM_NODE_NONE;
+}
+
+// Methods to get output data
+
+unsigned int TXFMChar::readBytes(XMLByte* const toFill, unsigned int maxToFill) {
+
+ // Return from the buffer
+
+ unsigned int ret;
+
+ if (toOutput == 0)
+ return 0;
+
+ // Check if we can just output everything left
+ if (toOutput <= maxToFill) {
+
+ memcpy((char *) toFill, &(buf[sbs - toOutput]), toOutput);
+ ret = (unsigned int) toOutput;
+ toOutput = 0;
+ return ret;
+ }
+
+ // Output just some
+
+ memcpy((char *) toFill, &(buf[sbs - toOutput]), maxToFill);
+ ret = maxToFill;
+ toOutput -= maxToFill;
+
+ return ret;
+}
diff --git a/xsec/transformers/TXFMChar.hpp b/xsec/transformers/TXFMChar.hpp
new file mode 100644
index 0000000..9e0ed03
--- /dev/null
+++ b/xsec/transformers/TXFMChar.hpp
@@ -0,0 +1,70 @@
+/**
+ * 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.
+ */
+
+/*
+ * XSEC
+ *
+ * TXFMChar := Class that takes an input from a static buffer to start a pipe
+ *
+ */
+
+#ifndef TXFMCHAR_INCLUDE
+#define TXFMCHAR_INCLUDE
+
+#include <xsec/transformers/TXFMBase.hpp>
+
+/**
+ * \brief Base transformer to start a chain from a static buffer
+ * @ingroup internal
+ */
+
+class XSEC_EXPORT TXFMChar : public TXFMBase {
+
+private:
+
+ const char* buf; // Buffer to use
+ XMLSize_t toOutput; // Amount left to output
+ XMLSize_t sbs; // Size of raw buffer
+
+public:
+
+ TXFMChar(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *doc);
+ virtual ~TXFMChar();
+
+ // Methods to set the inputs
+
+ virtual void setInput(TXFMBase *newInput);
+ void setInput(const char* in);
+ void setInput(const char* in, unsigned int bufSize);
+
+ // Methods to get tranform output type and input requirement
+
+ virtual TXFMBase::ioType getInputType() const;
+ virtual TXFMBase::ioType getOutputType() const;
+ virtual nodeType getNodeType() const;
+
+ // Methods to get output data
+
+ virtual unsigned int readBytes(XMLByte* const toFill, const unsigned int maxToFill);
+
+private:
+ TXFMChar();
+};
+
+#endif