📄 _h_t_t_p_request_parser_8hpp-source.html
字号:
<a name="l00151"></a>00151 <span class="keyword">enum</span> ParseState {<a name="l00152"></a>00152 PARSE_METHOD_START, PARSE_METHOD, PARSE_URI_STEM, PARSE_URI_QUERY,<a name="l00153"></a>00153 PARSE_HTTP_VERSION_H, PARSE_HTTP_VERSION_T_1, PARSE_HTTP_VERSION_T_2,<a name="l00154"></a>00154 PARSE_HTTP_VERSION_P, PARSE_HTTP_VERSION_SLASH,<a name="l00155"></a>00155 PARSE_HTTP_VERSION_MAJOR_START, PARSE_HTTP_VERSION_MAJOR,<a name="l00156"></a>00156 PARSE_HTTP_VERSION_MINOR_START, PARSE_HTTP_VERSION_MINOR,<a name="l00157"></a>00157 PARSE_EXPECTING_NEWLINE, PARSE_EXPECTING_CR,<a name="l00158"></a>00158 PARSE_HEADER_WHITESPACE, PARSE_HEADER_START, PARSE_HEADER_NAME,<a name="l00159"></a>00159 PARSE_SPACE_BEFORE_HEADER_VALUE, PARSE_HEADER_VALUE,<a name="l00160"></a>00160 PARSE_EXPECTING_FINAL_NEWLINE, PARSE_EXPECTING_FINAL_CR<a name="l00161"></a>00161 };<a name="l00162"></a>00162 <a name="l00164"></a>00164 <span class="keyword">typedef</span> boost::array<char, 8192> ReadBuffer;<a name="l00165"></a>00165 <a name="l00167"></a>00167 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> METHOD_MAX;<a name="l00168"></a>00168 <a name="l00170"></a>00170 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> RESOURCE_MAX;<a name="l00171"></a>00171 <a name="l00173"></a>00173 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> QUERY_STRING_MAX;<a name="l00174"></a>00174 <a name="l00176"></a>00176 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> HEADER_NAME_MAX;<a name="l00177"></a>00177 <a name="l00179"></a>00179 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> HEADER_VALUE_MAX;<a name="l00180"></a>00180 <a name="l00182"></a>00182 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> QUERY_NAME_MAX;<a name="l00183"></a>00183 <a name="l00185"></a>00185 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> QUERY_VALUE_MAX;<a name="l00186"></a>00186 <a name="l00188"></a>00188 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> COOKIE_NAME_MAX;<a name="l00189"></a>00189 <a name="l00191"></a>00191 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> COOKIE_VALUE_MAX;<a name="l00192"></a>00192 <a name="l00194"></a>00194 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> POST_CONTENT_MAX;<a name="l00195"></a>00195 <a name="l00197"></a>00197 <a class="code" href="namespacepion.html#917bc483e4f692504156efb93c11b322">PionLogger</a> m_logger;<a name="l00198"></a>00198 <a name="l00200"></a>00200 <a class="code" href="classpion_1_1_h_t_t_p_request_parser.html#26cf0c6dc782770796d07ed132167e88">RequestHandler</a> m_request_handler;<a name="l00201"></a>00201 <a name="l00203"></a>00203 <a class="code" href="namespacepion.html#1858b89656b28c6498ad9efd6b7e9d41" title="data type for a TCPConnection pointer">TCPConnectionPtr</a> m_tcp_conn;<a name="l00204"></a>00204 <a name="l00206"></a>00206 <a class="code" href="namespacepion.html#3c0f3fad0f449ebd309eaf4872f2b222" title="data type for a HTTP request pointer">HTTPRequestPtr</a> m_http_request;<a name="l00207"></a>00207 <a name="l00209"></a>00209 ParseState m_parse_state;<a name="l00210"></a>00210 <a name="l00212"></a>00212 ReadBuffer m_read_buffer;<a name="l00213"></a>00213 <a name="l00215"></a>00215 std::string m_method;<a name="l00216"></a>00216 <a name="l00218"></a>00218 std::string m_resource;<a name="l00219"></a>00219 <a name="l00221"></a>00221 std::string m_query_string;<a name="l00222"></a>00222 <a name="l00224"></a>00224 std::string m_header_name;<a name="l00225"></a>00225 <a name="l00227"></a>00227 std::string m_header_value;<a name="l00228"></a>00228 };<a name="l00229"></a>00229 <a name="l00230"></a>00230 <a name="l00232"></a><a class="code" href="namespacepion.html#424e38a815cd04fe411a77175665f030">00232</a> <span class="keyword">typedef</span> boost::shared_ptr<HTTPRequestParser> <a class="code" href="namespacepion.html#424e38a815cd04fe411a77175665f030" title="data type for a HTTPRequestParser pointer">HTTPRequestParserPtr</a>;<a name="l00233"></a>00233 <a name="l00234"></a>00234 <a name="l00235"></a>00235 <a name="l00236"></a>00236 <span class="comment">// inline functions for HTTPRequestParser</span><a name="l00237"></a>00237 <a name="l00238"></a><a class="code" href="classpion_1_1_h_t_t_p_request_parser.html#3576f39f53f154efb0ba36486abedc64">00238</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classpion_1_1_h_t_t_p_request_parser.html#3576f39f53f154efb0ba36486abedc64">HTTPRequestParser::isChar</a>(<span class="keywordtype">int</span> c)<a name="l00239"></a>00239 {<a name="l00240"></a>00240 <span class="keywordflow">return</span>(c >= 0 && c <= 127);<a name="l00241"></a>00241 }<a name="l00242"></a>00242 <a name="l00243"></a><a class="code" href="classpion_1_1_h_t_t_p_request_parser.html#8f064aeda3ebd36b268e4a672903bfbd">00243</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> HTTPRequestParser::isControl(<span class="keywordtype">int</span> c)<a name="l00244"></a>00244 {<a name="l00245"></a>00245 <span class="keywordflow">return</span>( (c >= 0 && c <= 31) || c == 127);<a name="l00246"></a>00246 }<a name="l00247"></a>00247 <a name="l00248"></a><a class="code" href="classpion_1_1_h_t_t_p_request_parser.html#c1e2d889f65e4ce9cdf48c7ceb73ddfa">00248</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classpion_1_1_h_t_t_p_request_parser.html#c1e2d889f65e4ce9cdf48c7ceb73ddfa">HTTPRequestParser::isSpecial</a>(<span class="keywordtype">int</span> c)<a name="l00249"></a>00249 {<a name="l00250"></a>00250 <span class="keywordflow">switch</span> (c) {<a name="l00251"></a>00251 <span class="keywordflow">case</span> <span class="charliteral">'('</span>: <span class="keywordflow">case</span> <span class="charliteral">')'</span>: <span class="keywordflow">case</span> <span class="charliteral">'<'</span>: <span class="keywordflow">case</span> <span class="charliteral">'>'</span>: <span class="keywordflow">case</span> <span class="charliteral">'@'</span>:<a name="l00252"></a>00252 <span class="keywordflow">case</span> <span class="charliteral">','</span>: <span class="keywordflow">case</span> <span class="charliteral">';'</span>: <span class="keywordflow">case</span> <span class="charliteral">':'</span>: <span class="keywordflow">case</span> <span class="charliteral">'\\'</span>: <span class="keywordflow">case</span> <span class="charliteral">'"'</span>:<a name="l00253"></a>00253 <span class="keywordflow">case</span> <span class="charliteral">'/'</span>: <span class="keywordflow">case</span> <span class="charliteral">'['</span>: <span class="keywordflow">case</span> <span class="charliteral">']'</span>: <span class="keywordflow">case</span> <span class="charliteral">'?'</span>: <span class="keywordflow">case</span> <span class="charliteral">'='</span>:<a name="l00254"></a>00254 <span class="keywordflow">case</span> <span class="charliteral">'{'</span>: <span class="keywordflow">case</span> <span class="charliteral">'}'</span>: <span class="keywordflow">case</span> <span class="charliteral">' '</span>: <span class="keywordflow">case</span> <span class="charliteral">'\t'</span>:<a name="l00255"></a>00255 <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00256"></a>00256 <span class="keywordflow">default</span>:<a name="l00257"></a>00257 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00258"></a>00258 }<a name="l00259"></a>00259 }<a name="l00260"></a>00260 <a name="l00261"></a><a class="code" href="classpion_1_1_h_t_t_p_request_parser.html#fadced7b359e96de0e1fdaad97d5f695">00261</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classpion_1_1_h_t_t_p_request_parser.html#fadced7b359e96de0e1fdaad97d5f695">HTTPRequestParser::isDigit</a>(<span class="keywordtype">int</span> c)<a name="l00262"></a>00262 {<a name="l00263"></a>00263 <span class="keywordflow">return</span>(c >= <span class="charliteral">'0'</span> && c <= <span class="charliteral">'9'</span>);<a name="l00264"></a>00264 }<a name="l00265"></a>00265 <a name="l00266"></a>00266 } <span class="comment">// end namespace pion</span><a name="l00267"></a>00267 <a name="l00268"></a>00268 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 19 13:29:22 2007 for libpion 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 + -