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 > 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 >= 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>() > 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> &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>() <= 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 > 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 + -
显示快捷键?