コード例 #1
0
/**
 * モジュールを実行します。
 */
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;
}
コード例 #2
0
ファイル: procsim_driver.cpp プロジェクト: ogennadi/p2
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;
}