summaryrefslogtreecommitdiff
path: root/filters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filters.cpp')
-rw-r--r--filters.cpp38
1 files changed, 37 insertions, 1 deletions
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 &parameters, 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)