From aec493328f4cd1a6d717743c984a153dc120013a Mon Sep 17 00:00:00 2001 From: weidai Date: Fri, 6 Jun 2003 02:34:03 +0000 Subject: sync with private branch git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@76 57ff6487-cd31-0410-9ec3-f628ee90f5f0 --- filters.cpp | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'filters.cpp') diff --git a/filters.cpp b/filters.cpp index 47b5c93..576022e 100644 --- a/filters.cpp +++ b/filters.cpp @@ -98,6 +98,15 @@ void Filter::PropagateInitialize(const NameValuePairs ¶meters, int propagati AttachedTransformation()->ChannelInitialize(channel, parameters, propagation-1); } +unsigned int Filter::OutputModifiable(int outputSite, byte *inString, unsigned int length, int messageEnd, bool blocking, const std::string &channel) +{ + if (messageEnd) + messageEnd--; + unsigned int result = AttachedTransformation()->PutModifiable2(inString, length, messageEnd, blocking); + m_continueAt = result ? outputSite : 0; + return result; +} + unsigned int Filter::Output(int outputSite, const byte *inString, unsigned int length, int messageEnd, bool blocking, const std::string &channel) { if (messageEnd) @@ -152,6 +161,27 @@ unsigned int MeterFilter::Put2(const byte *begin, unsigned int length, int messa return 0; } +unsigned int MeterFilter::PutModifiable2(byte *begin, unsigned int length, int messageEnd, bool blocking) +{ + if (m_transparent) + { + FILTER_BEGIN; + m_currentMessageBytes += length; + m_totalBytes += length; + + if (messageEnd) + { + m_currentMessageBytes = 0; + m_currentSeriesMessages++; + m_totalMessages++; + } + + FILTER_OUTPUT_MODIFIABLE(1, begin, length, messageEnd); + FILTER_END_NO_MESSAGE_END; + } + return 0; +} + bool MeterFilter::IsolatedMessageSeriesEnd(bool blocking) { m_currentMessageBytes = 0; @@ -414,12 +444,18 @@ void ProxyFilter::SetFilter(Filter *filter) } } -void ProxyFilter::NextPutMultiple(const byte *s, unsigned int len) +void ProxyFilter::NextPutMultiple(const byte *s, unsigned int len) { if (m_filter.get()) m_filter->Put(s, len); } +void ProxyFilter::NextPutModifiable(byte *s, unsigned int len) +{ + if (m_filter.get()) + m_filter->PutModifiable(s, len); +} + // ************************************************************* unsigned int ArraySink::Put2(const byte *begin, unsigned int length, int messageEnd, bool blocking) -- cgit v1.2.1