⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<a name="l00156"></a><a class="code" href="class_network_sender.html#89a0a3abf4c83dcbcb0ddd52addd44fb">00156</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> MustWaitForResult() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}<a name="l00157"></a>00157         <span class="keyword">virtual</span> <span class="keywordtype">void</span> Send(<span class="keyword">const</span> byte* buf, <span class="keywordtype">size_t</span> bufLen) =0;<a name="l00158"></a>00158         <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetSendResult() =0;<a name="l00159"></a><a class="code" href="class_network_sender.html#d3efdc8b10e91dfa5a901416735be820">00159</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> MustWaitForEof() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}<a name="l00160"></a>00160         <span class="keyword">virtual</span> <span class="keywordtype">void</span> SendEof() =0;<a name="l00161"></a><a class="code" href="class_network_sender.html#387810801daf13c48170996425c61c77">00161</a>         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> EofSent() {<span class="keywordflow">return</span> <span class="keyword">false</span>;}  <span class="comment">// implement if MustWaitForEof() == true</span><a name="l00162"></a>00162 };<a name="l00163"></a>00163 <span class="comment"></span><a name="l00164"></a>00164 <span class="comment">//! Network Source</span><a name="l00165"></a><a class="code" href="class_network_source.html">00165</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_NO_VTABLE NetworkSource : <span class="keyword">public</span> <a class="code" href="class_nonblocking_source.html" title="a Source class that can pump from a device for a specified amount of time.">NonblockingSource</a><a name="l00166"></a>00166 {<a name="l00167"></a>00167 <span class="keyword">public</span>:<a name="l00168"></a>00168         NetworkSource(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> *attachment);<a name="l00169"></a>00169 <a name="l00170"></a>00170         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_limited_bandwidth.html#1f5898c4e376b0d205fd784eaf5dec56">GetMaxWaitObjectCount</a>() <span class="keyword">const</span>;<a name="l00171"></a>00171         <span class="keywordtype">void</span> <a class="code" href="class_limited_bandwidth.html#be3aabb618510d9629c1a65382fbfdb3">GetWaitObjects</a>(<a class="code" href="class_wait_object_container.html" title="container of wait objects">WaitObjectContainer</a> &amp;container, <a class="code" href="class_call_stack.html">CallStack</a> <span class="keyword">const</span>&amp; callStack);<a name="l00172"></a>00172 <a name="l00173"></a><a class="code" href="class_network_source.html#4c6f0dbd597a5f14bae886ba4cf7cd59">00173</a>         <span class="keywordtype">bool</span> SourceExhausted()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_dataBegin == m_dataEnd &amp;&amp; GetReceiver().EofReceived();}<a name="l00174"></a>00174 <a name="l00175"></a>00175 <span class="keyword">protected</span>:<a name="l00176"></a>00176         <span class="keywordtype">size_t</span> DoPump(lword &amp;byteCount, <span class="keywordtype">bool</span> blockingOutput, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxTime, <span class="keywordtype">bool</span> checkDelimiter, byte delimiter);<a name="l00177"></a>00177 <a name="l00178"></a>00178         <span class="keyword">virtual</span> NetworkReceiver &amp; AccessReceiver() =0;<a name="l00179"></a><a class="code" href="class_network_source.html#f62a2cbe13c7127349aaeb595edb5edd">00179</a>         <span class="keyword">const</span> NetworkReceiver &amp; GetReceiver()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span>NetworkSource *<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;AccessReceiver();}<a name="l00180"></a>00180 <a name="l00181"></a>00181 <span class="keyword">private</span>:<a name="l00182"></a>00182         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> m_buf;<a name="l00183"></a>00183         <span class="keywordtype">size_t</span> m_putSize, m_dataBegin, m_dataEnd;<a name="l00184"></a>00184         <span class="keywordtype">bool</span> m_waitingForResult, m_outputBlocked;<a name="l00185"></a>00185 };<a name="l00186"></a>00186 <span class="comment"></span><a name="l00187"></a>00187 <span class="comment">//! Network Sink</span><a name="l00188"></a><a class="code" href="class_network_sink.html">00188</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_NO_VTABLE NetworkSink : <span class="keyword">public</span> NonblockingSink<a name="l00189"></a>00189 {<a name="l00190"></a>00190 <span class="keyword">public</span>:<a name="l00191"></a>00191         NetworkSink(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxBufferSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> autoFlushBound);<a name="l00192"></a>00192 <a name="l00193"></a>00193         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_limited_bandwidth.html#1f5898c4e376b0d205fd784eaf5dec56">GetMaxWaitObjectCount</a>() <span class="keyword">const</span>;<a name="l00194"></a>00194         <span class="keywordtype">void</span> <a class="code" href="class_limited_bandwidth.html#be3aabb618510d9629c1a65382fbfdb3">GetWaitObjects</a>(<a class="code" href="class_wait_object_container.html" title="container of wait objects">WaitObjectContainer</a> &amp;container, <a class="code" href="class_call_stack.html">CallStack</a> <span class="keyword">const</span>&amp; callStack);<a name="l00195"></a>00195 <a name="l00196"></a>00196         <span class="keywordtype">size_t</span> <a class="code" href="class_buffered_transformation.html#d396dcb42260f23125a35ec0e5d17d55" title="input multiple bytes for blocking or non-blocking processing">Put2</a>(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking);<a name="l00197"></a>00197 <a name="l00198"></a><a class="code" href="class_network_sink.html#1b88676369cc1c5809c00ca6a269fc98">00198</a>         <span class="keywordtype">void</span> SetMaxBufferSize(<span class="keywordtype">size_t</span> maxBufferSize) {m_maxBufferSize = maxBufferSize; m_buffer.SetNodeSize(UnsignedMin(maxBufferSize, 16U*1024U+256U));}<a name="l00199"></a><a class="code" href="class_network_sink.html#2fe72dabc3ad9d77bbff0cbc2d73f2dc">00199</a>         <span class="keywordtype">void</span> <a class="code" href="class_nonblocking_sink.html#066909f36bac95ddb2e1b06e7e7071d0" title="set a bound which will cause sink to flush if exceeded by GetCurrentBufferSize()">SetAutoFlushBound</a>(<span class="keywordtype">size_t</span> bound) {m_autoFlushBound = bound;}<a name="l00200"></a>00200 <a name="l00201"></a><a class="code" href="class_network_sink.html#5fadac7e577d864fd84a38d04d0a0d84">00201</a>         <span class="keywordtype">size_t</span> GetMaxBufferSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_maxBufferSize;}<a name="l00202"></a><a class="code" href="class_network_sink.html#e96e4485a3281cc26465f95510ee4ced">00202</a>         <span class="keywordtype">size_t</span> GetCurrentBufferSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (<span class="keywordtype">size_t</span>)m_buffer.CurrentSize();}<a name="l00203"></a>00203 <a name="l00204"></a><a class="code" href="class_network_sink.html#b1f28cbff2fbbc69787238a3b955e7fe">00204</a>         <span class="keywordtype">void</span> ClearBuffer() { m_buffer.Clear(); }<a name="l00205"></a>00205 <a name="l00206"></a><a class="code" href="class_network_sink.html#2682fef333bb6bc3bb318750df7011a6">00206</a>         <span class="keywordtype">bool</span> EofPending()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_eofState &gt; EOF_NONE &amp;&amp; m_eofState &lt; EOF_DONE; }<a name="l00207"></a>00207 <span class="comment"></span><a name="l00208"></a>00208 <span class="comment">        //! compute the current speed of this sink in bytes per second</span><a name="l00209"></a>00209 <span class="comment"></span>        <span class="keywordtype">float</span> <a class="code" href="class_nonblocking_sink_info.html#f886aa0d245f4068fa6cba194ec94188" title="compute the current speed of this sink in bytes per second">ComputeCurrentSpeed</a>();<span class="comment"></span><a name="l00210"></a>00210 <span class="comment">        //! get the maximum observed speed of this sink in bytes per second</span><a name="l00211"></a>00211 <span class="comment"></span>        <span class="keywordtype">float</span> <a class="code" href="class_nonblocking_sink_info.html#1ad82bb172fc84ba52a11046ae0e1267" title="get the maximum observed speed of this sink in bytes per second">GetMaxObservedSpeed</a>() <span class="keyword">const</span>;<a name="l00212"></a>00212 <a name="l00213"></a>00213 <span class="keyword">protected</span>:<a name="l00214"></a>00214         lword DoFlush(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxTime, <span class="keywordtype">size_t</span> targetSize);<a name="l00215"></a>00215 <a name="l00216"></a>00216         <span class="keyword">virtual</span> NetworkSender &amp; AccessSender() =0;<a name="l00217"></a><a class="code" href="class_network_sink.html#4c69470708806083c426045695a396ac">00217</a>         <span class="keyword">const</span> NetworkSender &amp; GetSender()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span>NetworkSink *<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;AccessSender();}<a name="l00218"></a>00218 <a name="l00219"></a>00219 <span class="keyword">private</span>:<a name="l00220"></a>00220         <span class="keyword">enum</span> EofState { EOF_NONE, EOF_PENDING_SEND, EOF_PENDING_DELIVERY, EOF_DONE };<a name="l00221"></a>00221 <a name="l00222"></a>00222         <span class="keywordtype">size_t</span> m_maxBufferSize, m_autoFlushBound;<a name="l00223"></a>00223         <span class="keywordtype">bool</span> m_needSendResult, m_wasBlocked;<a name="l00224"></a>00224         EofState m_eofState;<a name="l00225"></a>00225         <a class="code" href="class_byte_queue.html" title="Byte Queue.">ByteQueue</a> m_buffer;<a name="l00226"></a>00226         <span class="keywordtype">size_t</span> m_skipBytes;<a name="l00227"></a>00227         <a class="code" href="class_timer.html" title="high resolution timer">Timer</a> m_speedTimer;<a name="l00228"></a>00228         <span class="keywordtype">float</span> m_byteCountSinceLastTimerReset, m_currentSpeed, m_maxObservedSpeed;<a name="l00229"></a>00229 };<a name="l00230"></a>00230 <a name="l00231"></a>00231 NAMESPACE_END<a name="l00232"></a>00232 <a name="l00233"></a>00233 <span class="preprocessor">#endif  // #ifdef HIGHRES_TIMER_AVAILABLE</span><a name="l00234"></a>00234 <span class="preprocessor"></span><a name="l00235"></a>00235 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:23 2007 for Crypto++ by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -