Skip to content
This repository has been archived by the owner on Jul 3, 2024. It is now read-only.

Commit

Permalink
Add a static buffer transform source.
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/santuario/xml-security-cpp/trunk@1826173 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Scott Cantor committed Mar 8, 2018
1 parent acf0f61 commit 0b5a916
Show file tree
Hide file tree
Showing 5 changed files with 203 additions and 1 deletion.
2 changes: 2 additions & 0 deletions Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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" />
Expand Down
6 changes: 6 additions & 0 deletions Projects/VC15.0/xsec/xsec_lib/xsec_lib.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -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">
Expand Down Expand Up @@ -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">
Expand Down
4 changes: 3 additions & 1 deletion xsec/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ transformersinclude_HEADERS = \
transformers/TXFMOutputFile.hpp \
transformers/TXFMURL.hpp \
transformers/TXFMBase.hpp \
transformers/TXFMChar.hpp \
transformers/TXFMCipher.hpp \
transformers/TXFMEnvelope.hpp \
transformers/TXFMChain.hpp \
Expand Down Expand Up @@ -445,7 +446,8 @@ txfm_sources = \
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
Expand Down
122 changes: 122 additions & 0 deletions xsec/transformers/TXFMChar.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
70 changes: 70 additions & 0 deletions xsec/transformers/TXFMChar.hpp
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 0b5a916

Please sign in to comment.