network_8cpp-source.html

来自「Crypto++是一个非常强大的密码学库,主要是功能全」· HTML 代码 · 共 225 行 · 第 1/2 页

HTML
225
字号
00107                 <span class="keywordflow">if</span> (byteCount == maxSize)00108                         <span class="keywordflow">break</span>;00109 00110                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> elapsed = timer.<a class="code" href="class_timer.html#_timera2">ElapsedTime</a>();00111                 <span class="keywordflow">if</span> (elapsed &gt; maxTime)00112                         <span class="keywordflow">break</span>;  <span class="comment">// once time limit is reached, return even if there is more data waiting</span>00113 00114                 <span class="keywordflow">if</span> (receiver.<a class="code" href="class_network_receiver.html#_windows_pipe_sourcea37">MustWaitToReceive</a>())00115                 {00116                         <span class="keywordflow">if</span> (!receiver.<a class="code" href="class_waitable.html#_zlib_decompressora19">Wait</a>(maxTime - elapsed))00117                                 <span class="keywordflow">break</span>;00118                 }00119 00120                 receiver.<a class="code" href="class_network_receiver.html#_network_receivera2">Receive</a>(m_buf+m_bufSize, m_buf.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>()-m_bufSize);00121                 m_state = WAITING_FOR_RESULT;00122         }00123 00124         <span class="keywordflow">return</span> 0;00125 }00126 00127 <span class="comment">// *************************************************************</span>00128 <a name="l00129"></a><a class="code" href="class_network_sink.html#_windows_pipe_sinka10">00129</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_network_sink.html#_windows_pipe_sinka10">NetworkSink::Put2</a>(<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)00130 {00131         <span class="keywordflow">if</span> (m_blockedBytes)00132         {00133                 assert(length &gt;= m_blockedBytes);00134                 inString += length - m_blockedBytes;00135                 length = m_blockedBytes;00136         }00137         m_buffer.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera21">LazyPut</a>(inString, length);00138 00139         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> targetSize = messageEnd ? 0 : m_maxBufferSize;00140         <a class="code" href="class_network_sink.html#_windows_pipe_sinka11">TimedFlush</a>(blocking ? <a class="code" href="cryptlib_8h.html#a0">INFINITE_TIME</a> : 0, m_autoFlush ? 0 : targetSize);00141 00142         <span class="keywordflow">if</span> (m_buffer.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera15">CurrentSize</a>() &gt; targetSize)00143         {00144                 assert(!blocking);00145                 m_blockedBytes = STDMIN(m_buffer.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera15">CurrentSize</a>() - targetSize, (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)length);00146                 m_buffer.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera22">UndoLazyPut</a>(m_blockedBytes);00147                 m_buffer.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera23">FinalizeLazyPut</a>();00148                 <span class="keywordflow">return</span> STDMAX(m_blockedBytes, 1U);00149         }00150         m_blockedBytes = 0;00151 00152         <span class="keywordflow">if</span> (messageEnd)00153                 AccessSender().<a class="code" href="class_network_sender.html#_network_sendera4">SendEof</a>();00154         <span class="keywordflow">return</span> 0;00155 }00156 <a name="l00157"></a><a class="code" href="class_network_sink.html#_windows_pipe_sinka11">00157</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_network_sink.html#_windows_pipe_sinka11">NetworkSink::TimedFlush</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxTime, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> targetSize)00158 {00159         <span class="keywordflow">if</span> (m_buffer.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera16">IsEmpty</a>())00160                 <span class="keywordflow">return</span> 0;00161 00162         <a class="code" href="class_network_sender.html">NetworkSender</a> &amp;sender = AccessSender();00163 00164         <span class="keywordtype">bool</span> forever = maxTime == <a class="code" href="cryptlib_8h.html#a0">INFINITE_TIME</a>;00165         <a class="code" href="class_timer.html">Timer</a> timer(Timer::MILLISECONDS, forever);00166         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> timeout;00167         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> totalFlushSize = 0;00168 00169         <span class="keywordflow">while</span> (<span class="keyword">true</span>)00170         {00171                 <span class="keywordflow">if</span> (m_needSendResult)00172                 {00173                         <span class="keywordflow">if</span> (sender.<a class="code" href="class_network_sender.html#_network_sendera1">MustWaitForResult</a>())00174                         {00175                                 timeout = SaturatingSubtract(maxTime, timer.<a class="code" href="class_timer.html#_timera2">ElapsedTime</a>());00176                                 <span class="keywordflow">if</span> (!sender.<a class="code" href="class_waitable.html#_zlib_decompressora19">Wait</a>(timeout))00177                                         <span class="keywordflow">break</span>;00178                         }00179 00180                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> sendResult = sender.<a class="code" href="class_network_sender.html#_network_sendera3">GetSendResult</a>();00181                         m_buffer.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_11">Skip</a>(sendResult);00182                         totalFlushSize += sendResult;00183                         m_needSendResult = <span class="keyword">false</span>;00184 00185                         <span class="keywordflow">if</span> (m_buffer.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera15">CurrentSize</a>() &lt;= targetSize)00186                                 <span class="keywordflow">break</span>;00187                 }00188 00189                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> elapsed = timer.<a class="code" href="class_timer.html#_timera2">ElapsedTime</a>();00190                 <span class="keywordflow">if</span> (elapsed &gt; maxTime)00191                         <span class="keywordflow">break</span>;  <span class="comment">// once time limit is reached, return even if there is more data waiting</span>00192 00193                 <span class="keywordflow">if</span> (sender.<a class="code" href="class_network_sender.html#_windows_pipe_sinka27">MustWaitToSend</a>())00194                 {00195                         <span class="keywordflow">if</span> (!sender.<a class="code" href="class_waitable.html#_zlib_decompressora19">Wait</a>(maxTime - elapsed))00196                                 <span class="keywordflow">break</span>;00197                 }00198 00199                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> contiguousSize = 0;00200                 <span class="keyword">const</span> byte *block = m_buffer.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera20">Spy</a>(contiguousSize);00201 00202                 sender.<a class="code" href="class_network_sender.html#_network_sendera2">Send</a>(block, contiguousSize);00203                 m_needSendResult = <span class="keyword">true</span>;00204         }00205 00206         <span class="keywordflow">return</span> totalFlushSize;00207 }00208 00209 <span class="preprocessor">#endif  // #ifdef HIGHRES_TIMER_AVAILABLE</span>00210 <span class="preprocessor"></span>00211 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:21 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

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