6#ifndef CRYPTOPP_MQUEUE_H
7#define CRYPTOPP_MQUEUE_H
34 {m_queue.IsolatedInitialize(parameters); m_lengths.assign(1, 0U); m_messageCounts.assign(1, 0U);}
35 size_t Put2(
const byte *begin,
size_t length,
int messageEnd,
bool blocking)
37 CRYPTOPP_UNUSED(blocking);
38 m_queue.Put(begin, length);
39 m_lengths.back() += length;
42 m_lengths.push_back(0);
43 m_messageCounts.back()++;
48 {CRYPTOPP_UNUSED(hardFlush), CRYPTOPP_UNUSED(blocking);
return false;}
50 {CRYPTOPP_UNUSED(blocking); m_messageCounts.push_back(0);
return false;}
53 {
return m_lengths.front();}
55 {
return m_lengths.front() > 0;}
61 {
return m_queue.MaxRetrievable();}
63 {
return (
unsigned int)m_lengths.size()-1;}
67 {
return m_messageCounts[0];}
69 {
return (
unsigned int)m_messageCounts.size()-1;}
84 const byte *
Spy(
size_t &contiguousSize)
const;
92 std::deque<lword> m_lengths;
93 std::deque<unsigned int> m_messageCounts;
104 MismatchDetected() :
Exception(DATA_INTEGRITY_CHECK_FAILED,
"EqualityComparisonFilter: did not receive the same data on two channels") {}
116 : m_throwIfNotEqual(throwIfNotEqual), m_mismatchDetected(false)
117 , m_firstChannel(firstChannel), m_secondChannel(secondChannel)
118 {Detach(attachment);}
121 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking);
125 unsigned int MapChannel(
const std::string &channel)
const;
126 bool HandleMismatchDetected(
bool blocking);
129 bool m_throwIfNotEqual, m_mismatchDetected;
130 std::string m_firstChannel, m_secondChannel;
138template<>
inline void swap(CryptoPP::MessageQueue &a, CryptoPP::MessageQueue &b)
Provides auto signaling support.
Data structure used to store byte strings.
Filter that checks messages on two channels for equality.
EqualityComparisonFilter(BufferedTransformation *attachment=NULL, bool throwIfNotEqual=true, const std::string &firstChannel="0", const std::string &secondChannel="1")
Construct an EqualityComparisonFilter.
bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true)
Marks the end of a series of messages on a channel.
size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing on a channel.
Base class for all exceptions thrown by the library.
Data structure used to store messages.
void swap(MessageQueue &rhs)
Swap contents with another MessageQueue.
bool AnyRetrievable() const
Determines whether bytes are ready for retrieval.
unsigned int NumberOfMessageSeries() const
Provides the number of messages in a series.
void IsolatedInitialize(const NameValuePairs ¶meters)
Initialize or reinitialize this object, without signal propagation.
size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing.
bool GetNextMessage()
Start retrieving the next message.
bool IsolatedMessageSeriesEnd(bool blocking)
Marks the end of a series of messages, without signal propagation.
size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const
Copy bytes from this object to another BufferedTransformation.
size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true)
Transfer bytes from this object to another BufferedTransformation.
MessageQueue(unsigned int nodeSize=256)
Construct a MessageQueue.
const byte * Spy(size_t &contiguousSize) const
Peek data in the queue.
unsigned int NumberOfMessages() const
Provides the number of meesages processed by this object.
unsigned int NumberOfMessagesInThisSeries() const
Provides the number of messages in a series.
lword TotalBytesRetrievable() const
Provides the number of bytes ready for retrieval.
unsigned int CopyMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL) const
Copy messages from this object to another BufferedTransformation.
bool IsolatedFlush(bool hardFlush, bool blocking)
Flushes data buffered by this object, without signal propagation.
lword MaxRetrievable() const
Provides the number of bytes ready for retrieval.
Interface for retrieving values given their names.
Base class for unflushable filters.
const lword LWORD_MAX
Large word type max value.
word64 lword
Large word type.
Abstract base classes that provide a uniform interface to this library.
const std::string DEFAULT_CHANNEL
Default channel for BufferedTransformation.
Implementation of BufferedTransformation's attachment interface.
Utility functions for the Crypto++ library.
Crypto++ library namespace.
Classes for an unlimited queue to store bytes.
void swap(::SecBlock< T, A > &a, ::SecBlock< T, A > &b)
Swap two SecBlocks.
Different messages were detected.
MismatchDetected()
Construct a MismatchDetected exception.