* along with this program. If not, see <http://www.gnu.org/licenses/>.\r
*\r
* For further information please contact.\r
- * http://nyatla.jp/\r
- * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
+ * http://nyatla.jp/\r
+ * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
*\r
*********************************************************************************/\r
#include "NyLPC_cModFileIoBaseClass.h"\r
#include "../NyLPC_cHttpdUtils.h"\r
#include "NyLPC_net.h"\r
\r
-#define FNAME_MAX 48\r
-#define STRBUF_MAX 48\r
+#define FNAME_MAX 48\r
+#define STRBUF_MAX 48\r
\r
struct TModFileIoHeader\r
{\r
- struct NyLPC_THttpBasicHeader super;\r
- NyLPC_TcUrlEncode_t urlencode;\r
- NyLPC_TUInt8 _content_id;\r
- //解析用\r
- NyLPC_TUInt8 _qery_name_id;\r
- NyLPC_TUInt8 _astate;\r
- NyLPC_TInt16 _prefix_len;\r
- NyLPC_TcStr_t _tstr;\r
- NyLPC_TChar _tstr_buf[STRBUF_MAX];\r
- /** 文字列のパーサ*/\r
- char fname[FNAME_MAX];//対象ファイル名の格納先\r
+ struct NyLPC_THttpBasicHeader super;\r
+ NyLPC_TcUrlEncode_t urlencode;\r
+ NyLPC_TUInt8 _content_id;\r
+ //解析用\r
+ NyLPC_TUInt8 _qery_name_id;\r
+ NyLPC_TUInt8 _astate;\r
+ NyLPC_TInt16 _prefix_len;\r
+ NyLPC_TcStr_t _tstr;\r
+ NyLPC_TChar _tstr_buf[STRBUF_MAX];\r
+ /** 文字列のパーサ*/\r
+ char fname[FNAME_MAX];//対象ファイル名の格納先\r
};\r
\r
#define ST_PARSE_PATH 1\r
#define ST_PARSE_QUERY_NAME 2\r
-#define ST_PARSE_QUERY_VALUE 3 //Query読み出し中\r
+#define ST_PARSE_QUERY_VALUE 3 //Query読み出し中\r
#define ST_PARSE_QUERY_VALUE_NAME 4\r
/**\r
* コンテンツID定義(コンテンツ名に対応)\r
#define CONTENT_ID_UNKNOWN 0\r
\r
\r
-#define QNAME_ID_NAME 1\r
+#define QNAME_ID_NAME 1\r
#define QNAME_ID_UNKNOWN 0\r
\r
\r
static const struct NyLPC_TTextIdTbl url_tbl[]=\r
{\r
- {"upload.api",CONTENT_ID_UPLOAD},\r
- {"create.api",CONTENT_ID_CREATE},\r
- {"remove.api",CONTENT_ID_REMOVE},\r
- {NULL,CONTENT_ID_UNKNOWN}\r
+ {"upload.api",CONTENT_ID_UPLOAD},\r
+ {"create.api",CONTENT_ID_CREATE},\r
+ {"remove.api",CONTENT_ID_REMOVE},\r
+ {NULL,CONTENT_ID_UNKNOWN}\r
};\r
\r
static const struct NyLPC_TTextIdTbl qname_id_table[]=\r
{\r
- {"name",QNAME_ID_NAME},\r
- {NULL,QNAME_ID_UNKNOWN}\r
+ {"name",QNAME_ID_NAME},\r
+ {NULL,QNAME_ID_UNKNOWN}\r
};\r
\r
\r
\r
static NyLPC_TBool urlHandler(NyLPC_TcHttpBasicHeaderParser_t* i_inst,NyLPC_TChar i_c,struct NyLPC_THttpBasicHeader* o_out)\r
{\r
- struct TModFileIoHeader* out=(struct TModFileIoHeader*)o_out;\r
- NyLPC_TChar c;\r
- //読み飛ばし\r
- if(out->_prefix_len<0){\r
- out->_prefix_len++;\r
- return NyLPC_TBool_TRUE;//読み飛ばし\r
- }\r
- //Path解析\r
- if(out->_astate==ST_PARSE_PATH){\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
- case CONTENT_ID_UPLOAD:\r
- case CONTENT_ID_CREATE:\r
- case CONTENT_ID_REMOVE:\r
- break;\r
- default:\r
- NyLPC_OnErrorGoto(ERROR);\r
- }\r
- NyLPC_cStr_clear(&(out->_tstr));\r
- out->_astate=ST_PARSE_QUERY_NAME;//クエリ名解析へ\r
- }\r
- return NyLPC_TBool_TRUE;\r
- }\r
- switch(out->_content_id)\r
- {\r
- case CONTENT_ID_UPLOAD:\r
- case CONTENT_ID_CREATE:\r
- case CONTENT_ID_REMOVE:\r
- switch(out->_astate){\r
- case ST_PARSE_QUERY_NAME:\r
- if(i_c!='\0' && i_c!='&' && i_c!='='){\r
- if(!NyLPC_cStr_put(&(out->_tstr),i_c)){\r
- NyLPC_OnErrorGoto(ERROR);\r
- }\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_NAME:\r
- NyLPC_cUrlEncode_reset(&out->urlencode);\r
- out->_astate=ST_PARSE_QUERY_VALUE_NAME;\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
- }else{\r
- //クエリ値解析完了\r
- out->_astate=ST_PARSE_QUERY_NAME;\r
- }\r
- return NyLPC_TBool_TRUE;\r
- case ST_PARSE_QUERY_VALUE_NAME:\r
- if(i_c!='\0' && i_c!='&'){\r
- //URLデコードしながら蓄積\r
- switch(NyLPC_cUrlEncode_decode(&out->urlencode,i_c,&c)){\r
- case NyLPC_TcUrlEncode_ST_NEXT:\r
- break;\r
- case NyLPC_TcUrlEncode_ST_DONE:\r
- if(!NyLPC_cStr_put(&(out->_tstr),c)){\r
- NyLPC_OnErrorGoto(ERROR);\r
- }\r
- break;\r
- default:\r
- NyLPC_OnErrorGoto(ERROR);\r
- }\r
- return NyLPC_TBool_TRUE;\r
- }else{\r
- if(NyLPC_cStr_len(&out->_tstr)<1){\r
- //ファイル名短すぎ\r
- NyLPC_OnErrorGoto(ERROR);\r
- }\r
- //ファイル名を保存\r
- strcpy(out->fname,(const char*)NyLPC_cStr_str(&out->_tstr));\r
- //終端しているなら、次のクエリへ\r
- out->_astate=ST_PARSE_QUERY_NAME;\r
- }\r
- return NyLPC_TBool_TRUE;\r
- default:\r
- break;\r
- }\r
- NyLPC_OnErrorGoto(ERROR);\r
- default:\r
- NyLPC_OnErrorGoto(ERROR);\r
- }\r
- return NyLPC_TBool_TRUE;\r
+ struct TModFileIoHeader* out=(struct TModFileIoHeader*)o_out;\r
+ NyLPC_TChar c;\r
+ //読み飛ばし\r
+ if(out->_prefix_len<0){\r
+ out->_prefix_len++;\r
+ return NyLPC_TBool_TRUE;//読み飛ばし\r
+ }\r
+ //Path解析\r
+ if(out->_astate==ST_PARSE_PATH){\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
+ case CONTENT_ID_UPLOAD:\r
+ case CONTENT_ID_CREATE:\r
+ case CONTENT_ID_REMOVE:\r
+ break;\r
+ default:\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ NyLPC_cStr_clear(&(out->_tstr));\r
+ out->_astate=ST_PARSE_QUERY_NAME;//クエリ名解析へ\r
+ }\r
+ return NyLPC_TBool_TRUE;\r
+ }\r
+ switch(out->_content_id)\r
+ {\r
+ case CONTENT_ID_UPLOAD:\r
+ case CONTENT_ID_CREATE:\r
+ case CONTENT_ID_REMOVE:\r
+ switch(out->_astate){\r
+ case ST_PARSE_QUERY_NAME:\r
+ if(i_c!='\0' && i_c!='&' && i_c!='='){\r
+ if(!NyLPC_cStr_put(&(out->_tstr),i_c)){\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\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_NAME:\r
+ NyLPC_cUrlEncode_reset(&out->urlencode);\r
+ out->_astate=ST_PARSE_QUERY_VALUE_NAME;\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
+ }else{\r
+ //クエリ値解析完了\r
+ out->_astate=ST_PARSE_QUERY_NAME;\r
+ }\r
+ return NyLPC_TBool_TRUE;\r
+ case ST_PARSE_QUERY_VALUE_NAME:\r
+ if(i_c!='\0' && i_c!='&'){\r
+ //URLデコードしながら蓄積\r
+ switch(NyLPC_cUrlEncode_decode(&out->urlencode,i_c,&c)){\r
+ case NyLPC_TcUrlEncode_ST_NEXT:\r
+ break;\r
+ case NyLPC_TcUrlEncode_ST_DONE:\r
+ if(!NyLPC_cStr_put(&(out->_tstr),c)){\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ break;\r
+ default:\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ return NyLPC_TBool_TRUE;\r
+ }else{\r
+ if(NyLPC_cStr_len(&out->_tstr)<1){\r
+ //ファイル名短すぎ\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ //ファイル名を保存\r
+ strcpy(out->fname,(const char*)NyLPC_cStr_str(&out->_tstr));\r
+ //終端しているなら、次のクエリへ\r
+ out->_astate=ST_PARSE_QUERY_NAME;\r
+ }\r
+ return NyLPC_TBool_TRUE;\r
+ default:\r
+ break;\r
+ }\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ default:\r
+ NyLPC_OnErrorGoto(ERROR);\r
+ }\r
+ return NyLPC_TBool_TRUE;\r
ERROR:\r
- return NyLPC_TBool_FALSE;\r
+ return NyLPC_TBool_FALSE;\r
}\r
/**\r
* デフォルトハンドラ\r
*/\r
static const struct NyLPC_TcHttpBasicHeaderParser_Handler handler=\r
{\r
- NULL,\r
- urlHandler\r
+ NULL,\r
+ urlHandler\r
};\r
\r
\r
*/\r
void NyLPC_cModFileIoBaseClass_initialize(NyLPC_TcModFileIoBaseClass_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
+ NyLPC_cModRomFiles_initialize(&i_inst->super,i_ref_root_path,NULL,0);\r
}\r
void NyLPC_cModFileIoBaseClass_finalize(NyLPC_TcModFileIoBaseClass_t* i_inst)\r
{\r
- NyLPC_cModRomFiles_finalize(&i_inst->super);\r
+ NyLPC_cModRomFiles_finalize(&i_inst->super);\r
}\r
/**\r
* モジュールがコネクションをハンドリングできるかを返します。\r
*/\r
NyLPC_TBool NyLPC_cModFileIoBaseClass_canHandle(NyLPC_TcModFileIoBaseClass_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection)\r
{\r
- return NyLPC_cModRomFiles_canHandle(&i_inst->super,i_connection);\r
+ return NyLPC_cModRomFiles_canHandle(&i_inst->super,i_connection);\r
}\r
\r
static struct TModFileIoHeader single_header;\r
*/\r
NyLPC_TBool NyLPC_cModFileIoBaseClass_execute(NyLPC_TcModFileIoBaseClass_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection)\r
{\r
- union{\r
- NyLPC_TcHttpBasicHeaderParser_t parser;\r
- NyLPC_TcHttpBodyParser_t body_parser;\r
- }sh;\r
- NyLPC_TUInt8 method_type;\r
- //リクエストParse済へ遷移(この関数の後はModが責任を持ってリクエストを返却)\r
- NyLPC_cHttpdConnection_setReqStatusParsed(i_connection);\r
+ union{\r
+ NyLPC_TcHttpBasicHeaderParser_t parser;\r
+ NyLPC_TcHttpBodyParser_t body_parser;\r
+ }sh;\r
+ NyLPC_TUInt8 method_type;\r
+ //リクエストParse済へ遷移(この関数の後はModが責任を持ってリクエストを返却)\r
+ NyLPC_cHttpdConnection_setReqStatusParsed(i_connection);\r
\r
- //排他ロック\r
- NyLPC_cHttpdConnection_lock(i_connection);\r
- {//parser\r
+ //排他ロック\r
+ NyLPC_cHttpdConnection_lock(i_connection);\r
+ {//parser\r
\r
- //URL解析の準備\r
- single_header._prefix_len=-((NyLPC_TInt16)strlen(i_inst->super._ref_root_path)+2);\r
- single_header._astate=ST_PARSE_PATH;\r
- single_header.fname[0]='\0';\r
- NyLPC_cUrlEncode_initialize(&single_header.urlencode);\r
- NyLPC_cStr_initialize(&single_header._tstr,single_header._tstr_buf,STRBUF_MAX);\r
+ //URL解析の準備\r
+ single_header._prefix_len=-((NyLPC_TInt16)strlen(i_inst->super._ref_root_path)+2);\r
+ single_header._astate=ST_PARSE_PATH;\r
+ single_header.fname[0]='\0';\r
+ NyLPC_cUrlEncode_initialize(&single_header.urlencode);\r
+ NyLPC_cStr_initialize(&single_header._tstr,single_header._tstr_buf,STRBUF_MAX);\r
\r
- NyLPC_cHttpBasicHeaderParser_initialize(&sh.parser,&handler);\r
+ NyLPC_cHttpBasicHeaderParser_initialize(&sh.parser,&handler);\r
\r
- //プリフェッチしたデータを流す\r
- NyLPC_cHttpBasicHeaderParser_parseInit(&sh.parser,&(single_header.super));\r
- NyLPC_cHttpdConnection_pushPrefetchInfo(i_connection,&sh.parser,&single_header.super);\r
- //後続をストリームから取り込む\r
- if(!NyLPC_cHttpBasicHeaderParser_parseStream(&sh.parser,NyLPC_cHttpdConnection_refStream(i_connection),&(single_header.super))){\r
- NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500);\r
- NyLPC_OnErrorGoto(Error1);\r
- }\r
- if(!NyLPC_cHttpBasicHeaderParser_parseFinish(&sh.parser,&(single_header.super))){\r
- NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500);\r
- NyLPC_OnErrorGoto(Error1);\r
- }\r
- //HeaderParserはここで破棄(URLEncode,cSTRも)\r
- NyLPC_cHttpBasicHeaderParser_finalize(&sh.parser);\r
- NyLPC_cUrlEncode_finalize(&single_header.urlencode);\r
- NyLPC_cStr_finalize(&single_header._tstr);\r
- }\r
- //Request::ConnectionがClose設定,又はHTTP1.1では無い場合,CLOSE\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_CLOSE);\r
- }\r
- //返答フェーズ\r
- {\r
- method_type=NyLPC_cHttpdConnection_getMethod(i_connection);\r
+ //プリフェッチしたデータを流す\r
+ NyLPC_cHttpBasicHeaderParser_parseInit(&sh.parser,&(single_header.super));\r
+ NyLPC_cHttpdConnection_pushPrefetchInfo(i_connection,&sh.parser,&single_header.super);\r
+ //後続をストリームから取り込む\r
+ if(!NyLPC_cHttpBasicHeaderParser_parseStream(&sh.parser,NyLPC_cHttpdConnection_refStream(i_connection),&(single_header.super))){\r
+ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500);\r
+ NyLPC_OnErrorGoto(Error1);\r
+ }\r
+ if(!NyLPC_cHttpBasicHeaderParser_parseFinish(&sh.parser,&(single_header.super))){\r
+ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500);\r
+ NyLPC_OnErrorGoto(Error1);\r
+ }\r
+ //HeaderParserはここで破棄(URLEncode,cSTRも)\r
+ NyLPC_cHttpBasicHeaderParser_finalize(&sh.parser);\r
+ NyLPC_cUrlEncode_finalize(&single_header.urlencode);\r
+ NyLPC_cStr_finalize(&single_header._tstr);\r
+ }\r
+ //Request::ConnectionがClose設定,又はHTTP1.1では無い場合,CLOSE\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_CLOSE);\r
+ }\r
+ //返答フェーズ\r
+ {\r
+ method_type=NyLPC_cHttpdConnection_getMethod(i_connection);\r
\r
- //CGIの実行\r
- switch(single_header._content_id)\r
- {\r
- case CONTENT_ID_UPLOAD:\r
- //ファイル名とBodyParserを通知\r
- if(method_type==NyLPC_THttpMethodType_POST)\r
- {\r
- NyLPC_cHttpdConnection_send100Continue(i_connection);\r
- NyLPC_cHttpBodyParser_initialize(&sh.body_parser);\r
- NyLPC_cHttpBodyParser_parseInit(&sh.body_parser,&single_header.super);\r
- //ハンドラ内ではparseStreamのみ実行\r
- if(!i_inst->_abstruct_function.upload(i_connection,single_header.fname,&sh.body_parser)){\r
- NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);\r
- }\r
- if(NyLPC_cHttpBodyParser_parseFinish(&sh.body_parser)){\r
- NyLPC_cHttpBodyParser_finalize(&sh.body_parser);\r
- NyLPC_OnErrorGoto(Error2);//エラーメッセージはハンドラ内で送られていると仮定する。\r
- }\r
- NyLPC_cHttpBodyParser_finalize(&sh.body_parser);\r
- }else{\r
- NyLPC_OnErrorGoto(Error2);\r
- }\r
- break;\r
- case CONTENT_ID_CREATE:\r
- if(method_type==NyLPC_THttpMethodType_GET || method_type==NyLPC_THttpMethodType_HEAD)\r
- {\r
- //イベント起動\r
- if(!i_inst->_abstruct_function.create(i_connection,single_header.fname)){\r
- NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);\r
- }\r
- break;\r
- }\r
- NyLPC_OnErrorGoto(Error2_405);\r
- case CONTENT_ID_REMOVE:\r
- //ファイル名を通知\r
- if(method_type==NyLPC_THttpMethodType_GET || method_type==NyLPC_THttpMethodType_HEAD)\r
- {\r
- //イベント起動\r
- if(!i_inst->_abstruct_function.remove(i_connection,single_header.fname)){\r
- NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);\r
- }\r
- break;\r
- }\r
- NyLPC_OnErrorGoto(Error2_405);\r
- default:\r
- NyLPC_cHttpdUtils_sendErrorResponse(i_connection,400);\r
- NyLPC_OnErrorGoto(Error2);\r
- }\r
- }\r
+ //CGIの実行\r
+ switch(single_header._content_id)\r
+ {\r
+ case CONTENT_ID_UPLOAD:\r
+ //ファイル名とBodyParserを通知\r
+ if(method_type==NyLPC_THttpMethodType_POST)\r
+ {\r
+ NyLPC_cHttpdConnection_send100Continue(i_connection);\r
+ NyLPC_cHttpBodyParser_initialize(&sh.body_parser);\r
+ NyLPC_cHttpBodyParser_parseInit(&sh.body_parser,&single_header.super);\r
+ //ハンドラ内ではparseStreamのみ実行\r
+ if(!i_inst->_abstruct_function.upload(i_connection,single_header.fname,&sh.body_parser)){\r
+ NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);\r
+ }\r
+ if(NyLPC_cHttpBodyParser_parseFinish(&sh.body_parser)){\r
+ NyLPC_cHttpBodyParser_finalize(&sh.body_parser);\r
+ NyLPC_OnErrorGoto(Error2);//エラーメッセージはハンドラ内で送られていると仮定する。\r
+ }\r
+ NyLPC_cHttpBodyParser_finalize(&sh.body_parser);\r
+ }else{\r
+ NyLPC_OnErrorGoto(Error2);\r
+ }\r
+ break;\r
+ case CONTENT_ID_CREATE:\r
+ if(method_type==NyLPC_THttpMethodType_GET || method_type==NyLPC_THttpMethodType_HEAD)\r
+ {\r
+ //イベント起動\r
+ if(!i_inst->_abstruct_function.create(i_connection,single_header.fname)){\r
+ NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);\r
+ }\r
+ break;\r
+ }\r
+ NyLPC_OnErrorGoto(Error2_405);\r
+ case CONTENT_ID_REMOVE:\r
+ //ファイル名を通知\r
+ if(method_type==NyLPC_THttpMethodType_GET || method_type==NyLPC_THttpMethodType_HEAD)\r
+ {\r
+ //イベント起動\r
+ if(!i_inst->_abstruct_function.remove(i_connection,single_header.fname)){\r
+ NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);\r
+ }\r
+ break;\r
+ }\r
+ NyLPC_OnErrorGoto(Error2_405);\r
+ default:\r
+ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,400);\r
+ NyLPC_OnErrorGoto(Error2);\r
+ }\r
+ }\r
//占有解除\r
- NyLPC_cHttpdConnection_unlock(i_connection);\r
- return NyLPC_TBool_TRUE;\r
+ NyLPC_cHttpdConnection_unlock(i_connection);\r
+ return NyLPC_TBool_TRUE;\r
Error2_405:\r
- NyLPC_cHttpdUtils_sendErrorResponse(i_connection,405);\r
+ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,405);\r
Error2:\r
- //VM排他ロックの解除\r
- NyLPC_cHttpdConnection_unlock(i_connection);\r
- return NyLPC_TBool_FALSE;\r
+ //VM排他ロックの解除\r
+ NyLPC_cHttpdConnection_unlock(i_connection);\r
+ return NyLPC_TBool_FALSE;\r
Error1:\r
- NyLPC_cHttpBasicHeaderParser_finalize(&parser);\r
- NyLPC_cStr_finalize(&single_header._tstr);\r
- NyLPC_cUrlEncode_finalize(&single_header.urlencode);\r
- //VM排他ロックの解除\r
- NyLPC_cHttpdConnection_unlock(i_connection);\r
- return NyLPC_TBool_FALSE;\r
+ NyLPC_cHttpBasicHeaderParser_finalize(&parser);\r
+ NyLPC_cStr_finalize(&single_header._tstr);\r
+ NyLPC_cUrlEncode_finalize(&single_header.urlencode);\r
+ //VM排他ロックの解除\r
+ NyLPC_cHttpdConnection_unlock(i_connection);\r
+ return NyLPC_TBool_FALSE;\r
}\r
\r
\r