1 /*********************************************************************************
\r
3 * --------------------------------------------------------------------------------
\r
5 * This file is part of MiMic
\r
6 * Copyright (C)2011 Ryo Iizuka
\r
8 * MiMic is free software: you can redistribute it and/or modify
\r
9 * it under the terms of the GNU Lesser General Public License as published
\r
10 * by the Free Software Foundation, either version 3 of the License, or
\r
11 * (at your option) any later version.
\r
13 * This program is distributed in the hope that it will be useful,
\r
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
16 * GNU General Public License for more details.
\r
18 * You should have received a copy of the GNU Lesser General Public License
\r
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
\r
21 * For further information please contact.
\r
23 * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
\r
25 *********************************************************************************/
\r
26 #include "NyLPC_cHttpRequestPrefixParser.h"
\r
31 struct THttpHeaderPrefix{
\r
32 struct NyLPC_THttpBasicHeader super;
\r
35 /** コールバック関数の成功/失敗を判定するフラグ*/
\r
41 const NyLPC_TChar* NyLPC_cHttpRequestPrefixParser_getUrlPrefix(const NyLPC_TcHttpRequestPrefixParser_t* i_inst)
\r
43 return i_inst->_url;
\r
47 * 規定文字数のPathを入力されるか、Pathが終了するまで文字列を蓄積する。
\r
49 static NyLPC_TBool urlHandler(NyLPC_TcHttpBasicHeaderParser_t* i_inst,NyLPC_TChar i_c,struct NyLPC_THttpBasicHeader* o_out)
\r
51 struct THttpHeaderPrefix* s=(struct THttpHeaderPrefix*)o_out;
\r
55 s->status=NyLPC_TBool_TRUE;
\r
56 return NyLPC_TBool_FALSE;
\r
58 //容量がいっぱい->解析を終わらせる。
\r
59 if(NyLPC_cStr_capacity(&(s->surl))<1)
\r
61 s->status=NyLPC_TBool_TRUE;
\r
62 return NyLPC_TBool_FALSE;
\r
64 NyLPC_cStr_put(&(s->surl),i_c);
\r
65 return NyLPC_TBool_TRUE;
\r
70 static const struct NyLPC_TcHttpBasicHeaderParser_Handler _handler=
\r
75 void NyLPC_cHttpRequestPrefixParser_initialize(NyLPC_TcHttpRequestPrefixParser_t* i_inst)
\r
80 NyLPC_TBool NyLPC_cHttpRequestPrefixParser_parse(NyLPC_TcHttpRequestPrefixParser_t* i_inst,NyLPC_TiHttpPtrStream_t* i_stream)
\r
82 struct THttpHeaderPrefix hout;
\r
83 NyLPC_TcHttpBasicHeaderParser_t parser;
\r
84 NyLPC_cStr_initialize(&hout.surl,i_inst->_url,NyLPC_TcHttpRequestPrefixParser_MAX_URL_LEN);
\r
85 hout.status=NyLPC_TBool_FALSE;
\r
86 NyLPC_cHttpBasicHeaderParser_initialize(&parser,&_handler);
\r
87 NyLPC_cHttpBasicHeaderParser_parseInit(&parser,&hout.super);
\r
88 NyLPC_cHttpBasicHeaderParser_parseStream(&parser,i_stream,&hout.super);//どの道エラー
\r
89 NyLPC_cHttpBasicHeaderParser_parseFinish(&parser,&hout.super);//どの道エラー
\r
91 NyLPC_OnErrorGoto(Error);
\r
93 //Errorで帰ってくるのでparsefinishは不要
\r
94 //NyLPC_cHttpBasicHeaderParser_parseFinish(&parser,&hout.super);
\r
95 i_inst->method=hout.super.startline.req.method;
\r
96 NyLPC_cHttpBasicHeaderParser_finalize(&parser);
\r
97 //この時点では、メソッドとURLの一部がパースされているはず。
\r
98 NyLPC_cStr_finalize(&hout.surl);
\r
100 return NyLPC_TBool_TRUE;
\r
102 NyLPC_cHttpBasicHeaderParser_finalize(&parser);
\r
103 NyLPC_cStr_finalize(&hout.surl);
\r
104 return NyLPC_TBool_FALSE;
\r