* 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_cModRomFiles_protected.h"\r
*/\r
void NyLPC_cModRomFiles_initialize(NyLPC_TcModRomFiles_t* i_inst,const NyLPC_TChar* i_ref_root_path,const struct NyLPC_TRomFileData* i_data,int i_num_of_data)\r
{\r
- NyLPC_cModUrl_initialize(&(i_inst->super));\r
- i_inst->_data=i_data;\r
- i_inst->_num_of_data=i_num_of_data;\r
- i_inst->_ref_root_path=i_ref_root_path;\r
+ NyLPC_cModUrl_initialize(&(i_inst->super));\r
+ i_inst->_data=i_data;\r
+ i_inst->_num_of_data=i_num_of_data;\r
+ i_inst->_ref_root_path=i_ref_root_path;\r
}\r
void NyLPC_cModRomFiles_finalize(NyLPC_TcModRomFiles_t* i_inst)\r
{\r
- NyLPC_cModUrl_finalize(&(i_inst->super));\r
+ NyLPC_cModUrl_finalize(&(i_inst->super));\r
}\r
\r
/**\r
*/\r
NyLPC_TBool NyLPC_cModRomFiles_canHandle(NyLPC_TcModRomFiles_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection)\r
{\r
- const NyLPC_TChar* in_url;\r
- const NyLPC_TChar* base_url=i_inst->_ref_root_path;\r
- //connectonの状態を確認\r
- if(!NyLPC_cHttpdConnection_getReqStatus(i_connection)==NyLPC_cHttpdConnection_ReqStatus_REQPARSE)\r
- {\r
- return NyLPC_TBool_FALSE;\r
- }\r
- in_url=NyLPC_cHttpdConnection_getUrlPrefix(i_connection);\r
- size_t base_url_len=strlen(base_url);\r
- //check '/'+base_url+'/'\r
- if(strlen(in_url)-2<base_url_len){\r
- return NyLPC_TBool_FALSE;\r
- }\r
- if(in_url[0]!='/' || strncmp(in_url+1,base_url,base_url_len)!=0 || in_url[base_url_len+1]!='/'){\r
- return NyLPC_TBool_FALSE;\r
- }\r
- return NyLPC_TBool_TRUE;\r
+ const NyLPC_TChar* in_url;\r
+ const NyLPC_TChar* base_url=i_inst->_ref_root_path;\r
+ //connectonの状態を確認\r
+ if(!NyLPC_cHttpdConnection_getReqStatus(i_connection)==NyLPC_cHttpdConnection_ReqStatus_REQPARSE)\r
+ {\r
+ return NyLPC_TBool_FALSE;\r
+ }\r
+ in_url=NyLPC_cHttpdConnection_getUrlPrefix(i_connection);\r
+ size_t base_url_len=strlen(base_url);\r
+ //check '/'+base_url+'/'\r
+ if(strlen(in_url)-2<base_url_len){\r
+ return NyLPC_TBool_FALSE;\r
+ }\r
+ if(in_url[0]!='/' || strncmp(in_url+1,base_url,base_url_len)!=0 || in_url[base_url_len+1]!='/'){\r
+ return NyLPC_TBool_FALSE;\r
+ }\r
+ return NyLPC_TBool_TRUE;\r
}\r
\r
\r
*/\r
NyLPC_TBool NyLPC_cModRomFiles_execute(NyLPC_TcModRomFiles_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection)\r
{\r
- int i;\r
- char url[32];\r
- NyLPC_TUInt8 method_type;\r
- //URLサフィックスを取得(rootpath+'2'*2)\r
- if(!NyLPC_cModUrl_execute2(&(i_inst->super),i_connection,url,32,strlen(i_inst->_ref_root_path)+2,NyLPC_cModUrl_ParseMode_PATH_ONLY))\r
- {\r
- //Response処理はモジュール内で実行済\r
- NyLPC_OnErrorGoto(Error1);\r
- }\r
- //GETかHEADに制限\r
- method_type=NyLPC_cHttpdConnection_getMethod(i_connection);\r
- if(method_type!=NyLPC_THttpMethodType_GET && method_type!=NyLPC_THttpMethodType_HEAD)\r
- {\r
- NyLPC_cHttpdUtils_sendErrorResponse(i_connection,405);\r
- NyLPC_OnErrorGoto(Error1);\r
- }\r
- if(strlen(url)==0)\r
- {\r
- //PrefixがURLよりも短ければ403エラーで処理終了。\r
- NyLPC_cHttpdUtils_sendErrorResponse(i_connection,403);\r
- NyLPC_OnErrorGoto(Error1);\r
- }\r
- //URL比較\r
- for(i=i_inst->_num_of_data-1;i>=0;i--)\r
- {\r
- if(strcmp(url,i_inst->_data[i].name)!=0){\r
- continue;\r
- }\r
- //Request::ConnectionがClose設定,又はHTTP1.1では無い場合,CLOSE\r
- if(i_inst->super._header.connection==NyLPC_THttpMessgeHeader_Connection_CLOSE || i_inst->super._header.startline.req.version!=NyLPC_THttpVersion_11)\r
- {\r
- NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);\r
- }\r
- return NyLPC_cHttpdUtils_sendFixedContentBatch(i_connection,i_inst->_data[i].content_type,i_inst->_data[i].data,(i_inst->_data[i].size>0)?i_inst->_data[i].size:strlen(i_inst->_data[i].data));\r
- }\r
- //404Error\r
- NyLPC_cHttpdUtils_sendErrorResponse(i_connection,404);\r
+ int i;\r
+ char url[32];\r
+ NyLPC_TUInt8 method_type;\r
+ //URLサフィックスを取得(rootpath+'2'*2)\r
+ if(!NyLPC_cModUrl_execute2(&(i_inst->super),i_connection,url,32,strlen(i_inst->_ref_root_path)+2,NyLPC_cModUrl_ParseMode_PATH_ONLY))\r
+ {\r
+ //Response処理はモジュール内で実行済\r
+ NyLPC_OnErrorGoto(Error1);\r
+ }\r
+ //GETかHEADに制限\r
+ method_type=NyLPC_cHttpdConnection_getMethod(i_connection);\r
+ if(method_type!=NyLPC_THttpMethodType_GET && method_type!=NyLPC_THttpMethodType_HEAD)\r
+ {\r
+ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,405);\r
+ NyLPC_OnErrorGoto(Error1);\r
+ }\r
+ if(strlen(url)==0)\r
+ {\r
+ //PrefixがURLよりも短ければ403エラーで処理終了。\r
+ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,403);\r
+ NyLPC_OnErrorGoto(Error1);\r
+ }\r
+ //URL比較\r
+ for(i=i_inst->_num_of_data-1;i>=0;i--)\r
+ {\r
+ if(strcmp(url,i_inst->_data[i].name)!=0){\r
+ continue;\r
+ }\r
+ //Request::ConnectionがClose設定,又はHTTP1.1では無い場合,CLOSE\r
+ if(i_inst->super._header.connection==NyLPC_THttpMessgeHeader_Connection_CLOSE || i_inst->super._header.startline.req.version!=NyLPC_THttpVersion_11)\r
+ {\r
+ NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);\r
+ }\r
+ return NyLPC_cHttpdUtils_sendFixedContentBatch(i_connection,i_inst->_data[i].content_type,i_inst->_data[i].data,(i_inst->_data[i].size>0)?i_inst->_data[i].size:strlen(i_inst->_data[i].data));\r
+ }\r
+ //404Error\r
+ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,404);\r
Error1:\r
- return NyLPC_TBool_FALSE;\r
+ return NyLPC_TBool_FALSE;\r
}\r