📄 filters_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Crypto++: filters.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Compound List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Compound Members</a> | <a class="qindex" href="globals.html">File Members</a></div><h1>filters.h</h1><div class="fragment"><pre>00001 <span class="preprocessor">#ifndef CRYPTOPP_FILTERS_H</span>00002 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_FILTERS_H</span>00003 <span class="preprocessor"></span>00004 <span class="preprocessor">#include "<a class="code" href="simple_8h.html">simple.h</a>"</span>00005 <span class="preprocessor">#include "secblock.h"</span>00006 <span class="preprocessor">#include "misc.h"</span>00007 <span class="preprocessor">#include "smartptr.h"</span>00008 <span class="preprocessor">#include "queue.h"</span>00009 <span class="preprocessor">#include "algparam.h"</span>00010 00011 NAMESPACE_BEGIN(CryptoPP)00012 00013 <span class="comment">/// provides an implementation of BufferedTransformation's attachment interface</span><a name="l00014"></a><a class="code" href="class_filter.html">00014</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL Filter : <span class="keyword">public</span> <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a>, <span class="keyword">public</span> NotCopyable00015 {00016 <span class="keyword">public</span>:00017 Filter(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment);00018 <a name="l00019"></a><a class="code" href="class_filter.html#_zlib_decompressora7">00019</a> <span class="keywordtype">bool</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz15_0">Attachable</a>() {<span class="keywordflow">return</span> <span class="keyword">true</span>;}00020 <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *<a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz15_1">AttachedTransformation</a>();00021 <span class="keyword">const</span> <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *<a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz15_1">AttachedTransformation</a>() <span class="keyword">const</span>;00022 <span class="keywordtype">void</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz15_3">Detach</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *newAttachment = NULL);00023 00024 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_buffered_transformation.html#_storez11_0">TransferTo2</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &transferBytes, <span class="keyword">const</span> std::string &channel=NULL_CHANNEL, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>);00025 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CopyRangeTo2(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> end=ULONG_MAX, <span class="keyword">const</span> std::string &channel=NULL_CHANNEL, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>) <span class="keyword">const</span>;00026 00027 <span class="keywordtype">void</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz5_2">Initialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters=g_nullNameValuePairs, <span class="keywordtype">int</span> propagation=-1);00028 <span class="keywordtype">bool</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz5_3">Flush</a>(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">int</span> propagation=-1, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>);00029 <span class="keywordtype">bool</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz5_4">MessageSeriesEnd</a>(<span class="keywordtype">int</span> propagation=-1, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>);00030 00031 <span class="keyword">protected</span>:00032 <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotifyAttachmentChange() {}00033 <span class="keyword">virtual</span> <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> * NewDefaultAttachment() <span class="keyword">const</span>;00034 <span class="keywordtype">void</span> Insert(Filter *nextFilter); <span class="comment">// insert filter after this one</span>00035 00036 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> ShouldPropagateMessageEnd()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00037 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> ShouldPropagateMessageSeriesEnd()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00038 00039 <span class="keywordtype">void</span> PropagateInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">int</span> propagation, <span class="keyword">const</span> std::string &channel=NULL_CHANNEL);00040 00041 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Output(<span class="keywordtype">int</span> outputSite, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &channel=NULL_CHANNEL);00042 <span class="keywordtype">bool</span> OutputMessageEnd(<span class="keywordtype">int</span> outputSite, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &channel=NULL_CHANNEL);00043 <span class="keywordtype">bool</span> OutputFlush(<span class="keywordtype">int</span> outputSite, <span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &channel=NULL_CHANNEL);00044 <span class="keywordtype">bool</span> OutputMessageSeriesEnd(<span class="keywordtype">int</span> outputSite, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &channel=NULL_CHANNEL);00045 00046 <span class="keyword">private</span>:00047 member_ptr<BufferedTransformation> m_attachment;00048 00049 <span class="keyword">protected</span>:00050 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_inputPosition;00051 <span class="keywordtype">int</span> m_continueAt;00052 };00053 00054 <span class="keyword">struct </span>CRYPTOPP_DLL FilterPutSpaceHelper00055 {00056 <span class="comment">// desiredSize is how much to ask target, bufferSize is how much to allocate in m_tempSpace</span>00057 byte *HelpCreatePutSpace(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> minSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> desiredSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &bufferSize)00058 {00059 assert(desiredSize >= minSize && bufferSize >= minSize);00060 <span class="keywordflow">if</span> (m_tempSpace.size() < minSize)00061 {00062 byte *result = target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_7">ChannelCreatePutSpace</a>(channel, desiredSize);00063 <span class="keywordflow">if</span> (desiredSize >= minSize)00064 {00065 bufferSize = desiredSize;00066 <span class="keywordflow">return</span> result;00067 }00068 m_tempSpace.New(bufferSize);00069 }00070 00071 bufferSize = m_tempSpace.size();00072 <span class="keywordflow">return</span> m_tempSpace.begin();00073 }00074 byte *HelpCreatePutSpace(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> minSize)00075 {<span class="keywordflow">return</span> HelpCreatePutSpace(target, channel, minSize, minSize, minSize);}00076 byte *HelpCreatePutSpace(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keyword">const</span> std::string &channel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> minSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferSize)00077 {<span class="keywordflow">return</span> HelpCreatePutSpace(target, channel, minSize, minSize, bufferSize);}00078 <a class="code" href="class_sec_block.html">SecByteBlock</a> m_tempSpace;00079 };00080 <span class="comment"></span>00081 <span class="comment">//! measure how many byte and messages pass through, also serves as valve</span><a name="l00082"></a><a class="code" href="class_meter_filter.html">00082</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL MeterFilter : <span class="keyword">public</span> Bufferless<Filter>00083 {00084 <span class="keyword">public</span>:00085 MeterFilter(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment=NULL, <span class="keywordtype">bool</span> transparent=<span class="keyword">true</span>)00086 : Bufferless<Filter>(attachment), m_transparent(transparent) {ResetMeter();}00087 00088 <span class="keywordtype">void</span> SetTransparent(<span class="keywordtype">bool</span> transparent) {m_transparent = transparent;}00089 <span class="keywordtype">void</span> ResetMeter() {m_currentMessageBytes = m_totalBytes = m_currentSeriesMessages = m_totalMessages = m_totalMessageSeries = 0;}00090 00091 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetCurrentMessageBytes()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_currentMessageBytes;}00092 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetTotalBytes() {<span class="keywordflow">return</span> m_totalBytes;}00093 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetCurrentSeriesMessages() {<span class="keywordflow">return</span> m_currentSeriesMessages;}00094 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetTotalMessages() {<span class="keywordflow">return</span> m_totalMessages;}00095 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetTotalMessageSeries() {<span class="keywordflow">return</span> m_totalMessageSeries;}00096 00097 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Put2(<span class="keyword">const</span> byte *begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking);00098 <span class="keywordtype">bool</span> IsolatedMessageSeriesEnd(<span class="keywordtype">bool</span> blocking);00099 00100 <span class="keyword">private</span>:00101 <span class="keywordtype">bool</span> ShouldPropagateMessageEnd()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_transparent;}00102 <span class="keywordtype">bool</span> ShouldPropagateMessageSeriesEnd()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_transparent;}00103
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -