#define QVAL_V_1 1\r
\r
\r
-const struct NyLPC_TTextIdTbl url_tbl[]=\r
+static const struct NyLPC_TTextIdTbl url_tbl[]=\r
{\r
{"mvm.api",CONTENT_ID_MVM},\r
{"status.api",CONTENT_ID_STATUS},\r
{NULL,CONTENT_ID_UNKNOWN}\r
};\r
\r
-const struct NyLPC_TTextIdTbl qname_id_table[]=\r
+static const struct NyLPC_TTextIdTbl qname_id_table[]=\r
{\r
{"o",QNAME_ID_O},\r
{"bc",QNAME_ID_BC},\r
return NyLPC_TBool_TRUE;//読み飛ばし\r
}\r
if(out->_astate==ST_PARSE_PATH){\r
- switch(i_c){\r
- case '\0':\r
- case '?':\r
+ if(i_c!='\0' && i_c!='?'){\r
+ if(!NyLPC_cStr_put(&(out->_tstr),i_c)){\r
+ //ERROR\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ }else{\r
out->_content_id=NyLPC_TTextIdTbl_getMatchId(NyLPC_cStr_str(&(out->_tstr)),url_tbl);\r
switch(out->_content_id)\r
{\r
default:\r
break;\r
}\r
-\r
NyLPC_cStr_clear(&(out->_tstr));\r
out->_astate=ST_PARSE_QUERY_NAME;//クエリ名解析へ\r
- return NyLPC_TBool_TRUE;\r
- default:\r
- break;\r
}\r
return NyLPC_TBool_TRUE;\r
}\r
if(!NyLPC_cStr_put(&(out->_tstr),i_c)){\r
NyLPC_OnErrorGoto(ERROR);\r
}\r
- return NyLPC_TBool_TRUE;\r
- }\r
- //Query確定。\r
- out->_qery_name_id=NyLPC_TTextIdTbl_getMatchId(NyLPC_cStr_str(&(out->_tstr)),qname_id_table);\r
- NyLPC_cStr_clear(&(out->_tstr));\r
- //クエリ値がある場合\r
- switch(out->_qery_name_id){\r
- case QNAME_ID_O:\r
- out->_astate=ST_PARSE_QUERY_VALUE_O;//MIMICBCのDBパラメータパーサを借用。\r
- break;\r
- case QNAME_ID_V:\r
- out->_astate=ST_PARSE_QUERY_VALUE_V;\r
- break;\r
- case QNAME_ID_BC:\r
- out->_astate=ST_PARSE_QUERY_VALUE_BC;\r
- break;\r
- default:\r
- out->_astate=ST_PARSE_QUERY_VALUE;\r
- break;\r
+ }else{\r
+ //Query確定。\r
+ out->_qery_name_id=NyLPC_TTextIdTbl_getMatchId(NyLPC_cStr_str(&(out->_tstr)),qname_id_table);\r
+ NyLPC_cStr_clear(&(out->_tstr));\r
+ //クエリ値がある場合\r
+ switch(out->_qery_name_id){\r
+ case QNAME_ID_O:\r
+ out->_astate=ST_PARSE_QUERY_VALUE_O;//MIMICBCのDBパラメータパーサを借用。\r
+ break;\r
+ case QNAME_ID_V:\r
+ out->_astate=ST_PARSE_QUERY_VALUE_V;\r
+ break;\r
+ case QNAME_ID_BC:\r
+ out->_astate=ST_PARSE_QUERY_VALUE_BC;\r
+ break;\r
+ default:\r
+ out->_astate=ST_PARSE_QUERY_VALUE;\r
+ break;\r
+ }\r
}\r
return NyLPC_TBool_TRUE;\r
case ST_PARSE_QUERY_VALUE:\r
//未知のクエリは無視\r
- if(i_c!='\0' || i_c!='&'){\r
- return NyLPC_TBool_TRUE;\r
+ if(i_c!='\0' && i_c!='&'){\r
+ }else{\r
+ //クエリ値解析完了\r
+ out->_astate=ST_PARSE_QUERY_NAME;\r
}\r
- //クエリ値解析完了\r
- out->_astate=ST_PARSE_QUERY_NAME;\r
return NyLPC_TBool_TRUE;\r
case ST_PARSE_QUERY_VALUE_O:\r
- if(i_c!='\0' || i_c!='&'){\r
+ if(i_c!='\0' && i_c!='&'){\r
if(!NyLPC_cStr_put(&(out->_tstr),i_c)){\r
NyLPC_OnErrorGoto(ERROR);\r
}\r
- return NyLPC_TBool_TRUE;\r
- }\r
- if(NyLPC_cStr_isEqual(&(out->_tstr),"j")){\r
- out->content.mvm.o=QVAL_O_JSON;\r
- }else if(NyLPC_cStr_isEqual(&(out->_tstr),"x")){\r
- out->content.mvm.o=QVAL_O_XML;\r
+ }else{\r
+ if(NyLPC_cStr_isEqual(&(out->_tstr),"j")){\r
+ out->content.mvm.o=QVAL_O_JSON;\r
+ }else if(NyLPC_cStr_isEqual(&(out->_tstr),"x")){\r
+ out->content.mvm.o=QVAL_O_XML;\r
+ }\r
+ out->_astate=ST_PARSE_QUERY_NAME;\r
+ NyLPC_cStr_clear(&(out->_tstr));\r
}\r
- out->_astate=ST_PARSE_QUERY_NAME;\r
return NyLPC_TBool_TRUE;\r
case ST_PARSE_QUERY_VALUE_V:\r
- if(i_c!='\0' || i_c!='&'){\r
+ if(i_c!='\0' && i_c!='&'){\r
if(!NyLPC_cStr_put(&(out->_tstr),i_c)){\r
NyLPC_OnErrorGoto(ERROR);\r
}\r
- return NyLPC_TBool_TRUE;\r
- }\r
- if(NyLPC_cStr_isEqual(&(out->_tstr),"1")){\r
- out->content.mvm.v=QVAL_V_1;\r
+ }else{\r
+ if(NyLPC_cStr_isEqual(&(out->_tstr),"1")){\r
+ out->content.mvm.v=QVAL_V_1;\r
+ }\r
+ out->_astate=ST_PARSE_QUERY_NAME;\r
+ NyLPC_cStr_clear(&(out->_tstr));\r
}\r
- out->_astate=ST_PARSE_QUERY_NAME;\r
return NyLPC_TBool_TRUE;\r
case ST_PARSE_QUERY_VALUE_BC:\r
- if(i_c!='\0' || i_c!='&'){\r
+ if(i_c!='\0' && i_c!='&'){\r
//コンパイル\r
switch(NyLPC_cMiMicTxtCompiler_compileFragment2(&(out->_txtcmp),i_c,&(out->_binarray),&ol))\r
{\r
//ERROR\r
NyLPC_OnErrorGoto(ERROR);\r
}\r
- return NyLPC_TBool_TRUE;\r
}\r
- //フラグメント終端が検出できない終了はエラー\r
- NyLPC_OnErrorGoto(ERROR);\r
+ return NyLPC_TBool_TRUE;\r
+// //フラグメント終端が検出できない終了はエラー\r
+// NyLPC_OnErrorGoto(ERROR);\r
case ST_PARSE_QUERY_VALUE_DB:\r
- if(i_c!='\0' || i_c!='&'){\r
+ if(i_c!='\0' && i_c!='&'){\r
switch(NyLPC_cMiMicDbCompiler_compileFragment2(&(out->_binparser),i_c,out->_binarray.ptr))\r
{\r
case NyLPC_TcMiMicDbCompiler_RET_CONTINUE:\r
//ERROR\r
NyLPC_OnErrorGoto(ERROR);\r
}\r
- return NyLPC_TBool_TRUE;\r
- }\r
- //区切りのいいところで終わってる?\r
- if(NyLPC_cMiMicDbCompiler_hasFragment(&(out->_binparser))){\r
- //ERROR\r
- NyLPC_OnErrorGoto(ERROR);\r
+ }else{\r
+ //区切りのいいところで終わってる?\r
+ if(NyLPC_cMiMicDbCompiler_hasFragment(&(out->_binparser))){\r
+ //ERROR\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ //終端しているなら、次のクエリへ\r
+ out->_astate=ST_PARSE_QUERY_NAME;\r
}\r
- //終端しているなら、次のクエリへ\r
- out->_astate=ST_PARSE_QUERY_NAME;\r
return NyLPC_TBool_TRUE;\r
default:\r
break;\r
/**\r
* コンストラクタ。\r
*/\r
-void NyLPC_cModMiMicSetting_initialize(NyLPC_TcModRemoteMcu_t* i_inst,const NyLPC_TChar* i_ref_root_path)\r
+void NyLPC_cModRemoteMcu_initialize(NyLPC_TcModRemoteMcu_t* i_inst,const NyLPC_TChar* i_ref_root_path)\r
{\r
NyLPC_cModRomFiles_initialize(&i_inst->super,i_ref_root_path,NULL,0);\r
}\r
-void NyLPC_cModMiMicSetting_finalize(NyLPC_TcModRemoteMcu_t* i_inst)\r
+void NyLPC_cModRemoteMcu_finalize(NyLPC_TcModRemoteMcu_t* i_inst)\r
{\r
NyLPC_cModRomFiles_finalize(&i_inst->super);\r
}\r
/**\r
* モジュールがコネクションをハンドリングできるかを返します。\r
*/\r
-NyLPC_TBool NyLPC_cModMiMicSetting_canHandle(NyLPC_TcModRemoteMcu_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection)\r
+NyLPC_TBool NyLPC_cModRemoteMcu_canHandle(NyLPC_TcModRemoteMcu_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection)\r
{\r
return NyLPC_cModRomFiles_canHandle(&i_inst->super,i_connection);\r
}\r
\r
+static struct TModMiMicRemoteMcuHeader single_header;\r
+\r
/**\r
* モジュールを実行します。\r
*/\r
-NyLPC_TBool NyLPC_cModMiMicSetting_execute(NyLPC_TcModRemoteMcu_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection,const NyLPC_TChar* i_root_path)\r
+NyLPC_TBool NyLPC_cModRemoteMcu_execute(NyLPC_TcModRemoteMcu_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection)\r
{\r
- struct TModMiMicRemoteMcuHeader header;\r
NyLPC_TcHttpBasicHeaderParser_t parser;\r
//connectonの状態を確認\r
if(!NyLPC_cHttpdConnection_getReqStatus(i_connection)==NyLPC_cHttpdConnection_ReqStatus_REQPARSE)\r
\r
\r
//URL解析の準備\r
- header._prefix_len=-(NyLPC_TInt16)strlen(i_inst->super._ref_root_path);\r
- header._astate=ST_PARSE_PATH;\r
- NyLPC_cStr_initialize(&header._tstr,header._tstr_buf,16);\r
- NyLPC_cMiMicDbCompiler_initialize(&header._binparser);\r
- NyLPC_cMiMicTxtCompiler_initialize(&header._txtcmp);\r
+ single_header._prefix_len=-(NyLPC_TInt16)strlen(i_inst->super._ref_root_path);\r
+ single_header._astate=ST_PARSE_PATH;\r
+ NyLPC_cStr_initialize(&single_header._tstr,single_header._tstr_buf,16);\r
+ NyLPC_cMiMicDbCompiler_initialize(&single_header._binparser);\r
+ NyLPC_cMiMicTxtCompiler_initialize(&single_header._txtcmp);\r
\r
NyLPC_cHttpBasicHeaderParser_initialize(&parser,&handler);\r
\r
//プリフェッチしたデータを流す\r
- NyLPC_cHttpBasicHeaderParser_parseInit(&parser,&(header.super));\r
- NyLPC_cHttpdConnection_pushPrefetchInfo(i_connection,&parser,&header.super);\r
+ NyLPC_cHttpBasicHeaderParser_parseInit(&parser,&(single_header.super));\r
+ NyLPC_cHttpdConnection_pushPrefetchInfo(i_connection,&parser,&single_header.super);\r
//後続をストリームから取り込む\r
- if(!NyLPC_cHttpBasicHeaderParser_parseStream(&parser,NyLPC_cHttpdConnection_refStream(i_connection),&(header.super))){\r
+ if(!NyLPC_cHttpBasicHeaderParser_parseStream(&parser,NyLPC_cHttpdConnection_refStream(i_connection),&(single_header.super))){\r
NyLPC_OnErrorGoto(Error2);\r
}\r
- if(!NyLPC_cHttpBasicHeaderParser_parseFinish(&parser,&(header.super))){\r
+ if(!NyLPC_cHttpBasicHeaderParser_parseFinish(&parser,&(single_header.super))){\r
NyLPC_OnErrorGoto(Error2);\r
}\r
//Connection Modeの設定 1.1 && !closeの場合はCONTINUE\r
- if(header.super.connection!=NyLPC_THttpMessgeHeader_Connection_CLOSE && header.super.startline.req.version==NyLPC_THttpVersion_11)\r
+ if(single_header.super.connection!=NyLPC_THttpMessgeHeader_Connection_CLOSE && single_header.super.startline.req.version==NyLPC_THttpVersion_11)\r
{\r
NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CONTINUE);\r
}\r
//CGIの実行\r
- switch(header._content_id)\r
+ switch(single_header._content_id)\r
{\r
case CONTENT_ID_MVM:\r
- mvm(i_connection,&header);\r
+ mvm(i_connection,&single_header);\r
break;\r
default:\r
NyLPC_OnErrorGoto(Error2);\r
}\r
- NyLPC_cStr_finalize(&header._tstr);\r
- NyLPC_cMiMicDbCompiler_finalize(&header._binparser);\r
- NyLPC_cMiMicTxtCompiler_finalize(&header._txtcmp);\r
+ NyLPC_cStr_finalize(&single_header._tstr);\r
+ NyLPC_cMiMicDbCompiler_finalize(&single_header._binparser);\r
+ NyLPC_cMiMicTxtCompiler_finalize(&single_header._txtcmp);\r
NyLPC_cHttpBasicHeaderParser_finalize(&parser);\r
//占有解除\r
NyLPC_cHttpdConnection_unlock(i_connection);\r
return NyLPC_TBool_TRUE;\r
Error2:\r
NyLPC_cHttpdConnection_sendResponseHeader2(i_connection,500,"text/html",0,NULL);\r
- NyLPC_cStr_finalize(&header._tstr);\r
- NyLPC_cMiMicDbCompiler_finalize(&header._binparser);\r
- NyLPC_cMiMicTxtCompiler_finalize(&header._txtcmp);\r
+ NyLPC_cStr_finalize(&single_header._tstr);\r
+ NyLPC_cMiMicDbCompiler_finalize(&single_header._binparser);\r
+ NyLPC_cMiMicTxtCompiler_finalize(&single_header._txtcmp);\r
NyLPC_cHttpBasicHeaderParser_finalize(&parser);\r
//VM排他ロックの解除\r
NyLPC_cHttpdConnection_unlock(i_connection);\r