/** * モジュールを実行します。 */ NyLPC_TBool NyLPC_cModMiMicSetting_execute(NyLPC_TcModMiMicSetting_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection) { NyLPC_TUInt8 method_type; struct TModMiMicSettingRequest header; NyLPC_TcHttpBasicHeaderParser_t parser; //リクエストParse済へ遷移(この関数の後はModが責任を持ってリクエストを返却) NyLPC_cHttpdConnection_setReqStatusParsed(i_connection); //URL解析の準備 header._prefix_len=-((NyLPC_TInt16)strlen(i_inst->super._ref_root_path)+2); header._astate=ST_PARSE_PATH; NyLPC_cStr_initialize(&header._tstr,header._tstr_buf,16); NyLPC_cMiMicDbCompiler_initialize(&header._binparser); NyLPC_cHttpBasicHeaderParser_initialize(&parser,&handler); //プリフェッチしたデータを流す NyLPC_cHttpBasicHeaderParser_parseInit(&parser,&(header.super)); NyLPC_cHttpdConnection_pushPrefetchInfo(i_connection,&parser,&header.super); //後続をストリームから取り込む if(!NyLPC_cHttpBasicHeaderParser_parseStream(&parser,NyLPC_cHttpdConnection_refStream(i_connection),&(header.super))){ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); NyLPC_OnErrorGoto(Error2); } if(!NyLPC_cHttpBasicHeaderParser_parseFinish(&parser,&(header.super))){ NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); NyLPC_OnErrorGoto(Error2); } //GETかHEADに制限 method_type=NyLPC_cHttpdConnection_getMethod(i_connection); if(method_type!=NyLPC_THttpMethodType_GET && method_type!=NyLPC_THttpMethodType_HEAD) { NyLPC_cHttpdUtils_sendErrorResponse(i_connection,405); NyLPC_OnErrorGoto(Error2); } //Request::ConnectionがClose設定,又はHTTP1.1では無い場合,CLOSE if(header.super.connection==NyLPC_THttpMessgeHeader_Connection_CLOSE || header.super.startline.req.version!=NyLPC_THttpVersion_11) { NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE); } //CGIの実行 switch(header._content_id) { case CONTENT_ID_SETUP: setup_proc(i_connection,&header); break; case CONTENT_ID_UNKNOWN: default: NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); NyLPC_OnErrorGoto(Error2); } NyLPC_cHttpBasicHeaderParser_finalize(&parser); NyLPC_cMiMicDbCompiler_finalize(&header._binparser); NyLPC_cStr_finalize(&(header._tstr)); return NyLPC_TBool_TRUE; Error2: NyLPC_cHttpBasicHeaderParser_finalize(&parser); NyLPC_cMiMicDbCompiler_finalize(&header._binparser); NyLPC_cStr_finalize(&(header._tstr)); return NyLPC_TBool_FALSE; }
int main(int argc, char* argv[]) { int opt; int f = DEFAULT_F; int m = DEFAULT_M; int k0 = DEFAULT_K0; int k1 = DEFAULT_K1; int k2 = DEFAULT_K2; int d = DEFAULT_D; /* Read arguments */ while(-1 != (opt = getopt(argc, argv, "d:i:j:k:l:f:m:h"))) { switch(opt) { case 'd': d = atoi(optarg); break; case 'j': k0 = atoi(optarg); break; case 'k': k1 = atoi(optarg); break; case 'l': k2 = atoi(optarg); break; case 'm': m = atoi(optarg); break; case 'f': f = atoi(optarg); break; case 'i': inFile = fopen(optarg, "r"); if (inFile == NULL) { fprintf(stderr, "Failed to open %s for reading\n", optarg); print_help_and_exit(); } break; case 'h': /* Fall through */ default: print_help_and_exit(); break; } } dout("Processor Settings\n"); dout("D: %i\n", d); dout("k0: %i\n", k0); dout("k1: %i\n", k1); dout("k2: %i\n", k2); dout("F: %i\n", f); dout("M: %i\n", m); dout("\n"); /* Setup the processor */ setup_proc(inFile, d, k0, k1, k2, f, m); /* Setup statistics */ proc_stats_t stats; memset(&stats, 0, sizeof(proc_stats_t)); /* Run the processor */ run_proc(&stats); /* Finalize stats */ complete_proc(&stats); print_statistics(&stats); return 0; }