📄 gzip_8cpp-source.html
字号:
<a name="l00043"></a>00043 <a name="l00044"></a><a class="code" href="class_gunzip.html#698e33204628059569f5206bc48874d7">00044</a> <span class="keywordtype">void</span> <a class="code" href="class_gunzip.html#698e33204628059569f5206bc48874d7">Gunzip::ProcessPrestreamHeader</a>()<a name="l00045"></a>00045 {<a name="l00046"></a>00046 <a class="code" href="class_gunzip.html#cc88661126feb496126224c5157b387a">m_length</a> = 0;<a name="l00047"></a>00047 <a class="code" href="class_gunzip.html#e59bb25e5259b983acf79188199d595d">m_crc</a>.<a class="code" href="class_hash_transformation.html#92752eebac10497211d7a065faba8725" title="discard the current state, and restart with a new message">Restart</a>();<a name="l00048"></a>00048 <a name="l00049"></a>00049 byte buf[6];<a name="l00050"></a>00050 byte b, flags;<a name="l00051"></a>00051 <a name="l00052"></a>00052 <span class="keywordflow">if</span> (<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_byte_queue.html#19413e3aa72b749e3771d617e8eca632" title="try to retrieve a single byte">Get</a>(buf, 2)!=2) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>();<a name="l00053"></a>00053 <span class="keywordflow">if</span> (buf[0] != <a class="code" href="class_gunzip.html#3a1bd53a5c9cf22b2b82bbec1a7b2ed6dc332acd621ea2d23366eba10786818a">MAGIC1</a> || buf[1] != <a class="code" href="class_gunzip.html#3a1bd53a5c9cf22b2b82bbec1a7b2ed6faf7e034e2ac854a6727c4c0e29178ec">MAGIC2</a>) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>();<a name="l00054"></a>00054 <span class="keywordflow">if</span> (!<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_buffered_transformation.html#0c25529ded99db20ad35ccef3f7234e6" title="discard skipMax bytes from the output buffer">Skip</a>(1)) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>(); <span class="comment">// skip extra flags</span><a name="l00055"></a>00055 <span class="keywordflow">if</span> (!<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_byte_queue.html#19413e3aa72b749e3771d617e8eca632" title="try to retrieve a single byte">Get</a>(flags)) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>();<a name="l00056"></a>00056 <span class="keywordflow">if</span> (flags & (<a class="code" href="class_gunzip.html#ecff9a444d3d825b8faeb5bf426c8bffd1f340354afbc2c92b0adf4985fbe530">ENCRYPTED</a> | <a class="code" href="class_gunzip.html#ecff9a444d3d825b8faeb5bf426c8bff132e5c1e49cd7878441067791d996ed7">CONTINUED</a>)) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>();<a name="l00057"></a>00057 <span class="keywordflow">if</span> (<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_buffered_transformation.html#0c25529ded99db20ad35ccef3f7234e6" title="discard skipMax bytes from the output buffer">Skip</a>(6)!=6) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>(); <span class="comment">// Skip file time, extra flags and OS type</span><a name="l00058"></a>00058 <a name="l00059"></a>00059 <span class="keywordflow">if</span> (flags & <a class="code" href="class_gunzip.html#ecff9a444d3d825b8faeb5bf426c8bff91314eaa2aa635a806f10a1c68f965b0">EXTRA_FIELDS</a>) <span class="comment">// skip extra fields</span><a name="l00060"></a>00060 {<a name="l00061"></a>00061 word16 length;<a name="l00062"></a>00062 <span class="keywordflow">if</span> (<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_buffered_transformation.html#1ac50bcb2d279c3c6aef6858dab3eeb7" title="try to retrieve a 16-bit word">GetWord16</a>(length, <a class="code" href="cryptlib_8h.html#aeb92d42f5a6e27b8ba19f18d69d142bccd5b3585bd07d6bdae383aa8271b9d2">LITTLE_ENDIAN_ORDER</a>) != 2) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>();<a name="l00063"></a>00063 <span class="keywordflow">if</span> (<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_buffered_transformation.html#0c25529ded99db20ad35ccef3f7234e6" title="discard skipMax bytes from the output buffer">Skip</a>(length)!=length) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>();<a name="l00064"></a>00064 }<a name="l00065"></a>00065 <a name="l00066"></a>00066 <span class="keywordflow">if</span> (flags & <a class="code" href="class_gunzip.html#ecff9a444d3d825b8faeb5bf426c8bffbd26aa59bee221311da649a0e5c5f00d">FILENAME</a>) <span class="comment">// skip filename</span><a name="l00067"></a>00067 <span class="keywordflow">do</span><a name="l00068"></a>00068 <span class="keywordflow">if</span>(!<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_byte_queue.html#19413e3aa72b749e3771d617e8eca632" title="try to retrieve a single byte">Get</a>(b)) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>();<a name="l00069"></a>00069 <span class="keywordflow">while</span> (b);<a name="l00070"></a>00070 <a name="l00071"></a>00071 <span class="keywordflow">if</span> (flags & <a class="code" href="class_gunzip.html#ecff9a444d3d825b8faeb5bf426c8bff22c83752237f4782d25e2937425d906d">COMMENTS</a>) <span class="comment">// skip comments</span><a name="l00072"></a>00072 <span class="keywordflow">do</span><a name="l00073"></a>00073 <span class="keywordflow">if</span>(!<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_byte_queue.html#19413e3aa72b749e3771d617e8eca632" title="try to retrieve a single byte">Get</a>(b)) <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_header_err.html">HeaderErr</a>();<a name="l00074"></a>00074 <span class="keywordflow">while</span> (b);<a name="l00075"></a>00075 }<a name="l00076"></a>00076 <a name="l00077"></a><a class="code" href="class_gunzip.html#360055a74a55ba685743c0a1d3fefe3e">00077</a> <span class="keywordtype">void</span> <a class="code" href="class_gunzip.html#360055a74a55ba685743c0a1d3fefe3e">Gunzip::ProcessDecompressedData</a>(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)<a name="l00078"></a>00078 {<a name="l00079"></a>00079 <a class="code" href="class_filter.html#c8fc888888b2dad88bf64fc703044a93" title="returns the object immediately attached to this object or NULL for no attachment">AttachedTransformation</a>()-><a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(inString, length);<a name="l00080"></a>00080 <a class="code" href="class_gunzip.html#e59bb25e5259b983acf79188199d595d">m_crc</a>.<a class="code" href="class_c_r_c32.html#bd642abba82cf63edb025461bc1af8c0" title="process more input">Update</a>(inString, length);<a name="l00081"></a>00081 <a class="code" href="class_gunzip.html#cc88661126feb496126224c5157b387a">m_length</a> += (word32)length;<a name="l00082"></a>00082 }<a name="l00083"></a>00083 <a name="l00084"></a><a class="code" href="class_gunzip.html#bf4c4fa9c6ed7bfffe5cbe27822efd2e">00084</a> <span class="keywordtype">void</span> <a class="code" href="class_gunzip.html#bf4c4fa9c6ed7bfffe5cbe27822efd2e">Gunzip::ProcessPoststreamTail</a>()<a name="l00085"></a>00085 {<a name="l00086"></a>00086 <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> crc(4);<a name="l00087"></a>00087 <span class="keywordflow">if</span> (<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_byte_queue.html#19413e3aa72b749e3771d617e8eca632" title="try to retrieve a single byte">Get</a>(crc, 4) != 4)<a name="l00088"></a>00088 <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_tail_err.html">TailErr</a>();<a name="l00089"></a>00089 <span class="keywordflow">if</span> (!<a class="code" href="class_gunzip.html#e59bb25e5259b983acf79188199d595d">m_crc</a>.<a class="code" href="class_hash_transformation.html#16c4aecd047015d513feef4ed5b929ba" title="verify that digest is a valid digest for the current message, then reinitialize the...">Verify</a>(crc))<a name="l00090"></a>00090 <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_crc_err.html">CrcErr</a>();<a name="l00091"></a>00091 <a name="l00092"></a>00092 word32 lengthCheck;<a name="l00093"></a>00093 <span class="keywordflow">if</span> (<a class="code" href="class_inflator.html#e219ede9a3c7342d6c9262f87c8a571d">m_inQueue</a>.<a class="code" href="class_buffered_transformation.html#69c064d931db3a8631c1138827d67e2f" title="try to retrieve a 32-bit word">GetWord32</a>(lengthCheck, <a class="code" href="cryptlib_8h.html#aeb92d42f5a6e27b8ba19f18d69d142bccd5b3585bd07d6bdae383aa8271b9d2">LITTLE_ENDIAN_ORDER</a>) != 4)<a name="l00094"></a>00094 <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_tail_err.html">TailErr</a>();<a name="l00095"></a>00095 <span class="keywordflow">if</span> (lengthCheck != <a class="code" href="class_gunzip.html#cc88661126feb496126224c5157b387a">m_length</a>)<a name="l00096"></a>00096 <span class="keywordflow">throw</span> <a class="code" href="class_gunzip_1_1_length_err.html">LengthErr</a>();<a name="l00097"></a>00097 }<a name="l00098"></a>00098 <a name="l00099"></a>00099 NAMESPACE_END</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:21 2007 for Crypto++ by <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 + -