Example #1
0
ScriptInterpreter::ScriptInterpreter(JSObject* global, Frame* frame)
    : Interpreter(global)
    , m_frame(frame)
    , m_currentEvent(0)
    , m_inlineCode(false)
    , m_timerCallback(false)
{
    // Time in milliseconds before the script timeout handler kicks in.
    setTimeoutTime(5000);
}
Example #2
0
JSDOMWindowBase::JSDOMWindowBase(PassRefPtr<Structure> structure, PassRefPtr<DOMWindow> window, JSDOMWindowShell* shell)
    : JSDOMGlobalObject(structure, new JSDOMWindowBaseData(window, shell), shell)
{
    // Time in milliseconds before the script timeout handler kicks in.
    setTimeoutTime(10000);

    GlobalPropertyInfo staticGlobals[] = {
        GlobalPropertyInfo(Identifier(globalExec(), "document"), jsNull(), DontDelete | ReadOnly),
        GlobalPropertyInfo(Identifier(globalExec(), "window"), d()->shell, DontDelete | ReadOnly)
    };
    
    addStaticGlobals(staticGlobals, sizeof(staticGlobals) / sizeof(GlobalPropertyInfo));
}
Example #3
0
BOOL
postPhotoOnGyazo(
    const char *filename,   // (I)   Gyazo に投稿する画像のファイル名
    size_t     filesize,    // (I)   Gyazo に投稿する画像のファイルサイズ
    char       *gyazoID,    // (I/O) Gyazo ID
    char       *url )       // (O)   アップロード先URL
{
    BOOL    ret = FALSE;
    char    *request;
    char    *response;
    char    *imageData;
    char    *p;
    char    *base;
    char    *tail;
    size_t  sz1 = filesize * 6 + BUFSIZ;
    size_t  sz2 = MAX_CONTENT_SIZE;
    size_t  szz = 0;
    FILE    *fp;
    char    contentType[MAX_LOGICALLINELEN];
    char    *separator = getMultiPartID();
    FILEINF fInfo;

    imageData = (char *)malloc( filesize + 1 );
    if ( !imageData ) {
        return ( ret );
    }

    fp = fopen( filename, "rb" );
    if ( !fp ) {
        free( imageData );
        return ( ret );
    }
    fread( imageData, filesize, 1, fp );
    fclose( fp );

    request  = (char *)malloc( sz1 );
    if ( !request ) {
        free( imageData );
        return ( ret );
    }
    response = (char *)malloc( sz2 );
    if ( !response ) {
        free( request );
        free( imageData );
        return ( ret );
    }
    memset( request, 0x00, sz1 );

    // アップロードするファイルの情報をセット
    strcpy( fInfo.type, "application/unknown" );    /* 暫定 */
    strcpy( fInfo.name, filename );

    p = base64( (unsigned char*)imageData, filesize );
    if ( !p ) {
        base64( NULL, 0 );
        free( response );
        free( request );
        free( imageData );
        return ( ret );
    }
    fInfo.bits = (unsigned char *)p;

    // multipart/form-data の組み立て
    getSendBufferPointer( request, base );
    tail = base;

    sprintf( contentType, "multipart/form-data; boundary=%s", separator );

    strcpy( tail, 
            makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_STRING,
                               "id", 0, getIDforGyazo( gyazoID ), NULL ) );

    szz  =  strlen( tail );
    tail += szz;
    szz  =  0;
    p    =  makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_FILE,
                               "imagedata", 0, (char *)&fInfo, &szz );
    memcpy( tail, p, szz );
    tail += szz;

    sprintf( tail + strlen( tail ), "--%s--\r\n", separator );
    szz  =  strlen( tail );
    tail += szz;

    makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_BUFFERFREE,
                       NULL, 0, NULL, NULL );

    // リクエスト発行
    setTimeoutTime( DEFAULT_HTTP_TIMEOUT * (1 + (filesize / (1024 * 1024))) );
                                    // サイズに比例したタイムアウト時間を設定
    szz = tail - base;
    setUpSendBuffer( request, szz, base );
    setUpReceiveBuffer( response, sz2 );
    http_post( "http://gyazo.com/upload.cgi",
               contentType,
               request, response );

    if ( *response ) {
        if ( !strncmp( response, "http://gyazo.com/", 17 ) ) {
            ret = TRUE;
            if ( url )
                strcpy( url, response );
        }
    }

    base64( NULL, 0 );
    free( response );
    free( request  );
    free( imageData );

    return ( ret );
}
Example #4
0
int
uploadCocologFiles( FILEINF *fileInf, // (I)   アップロードするファイルに関す
                                      //       る情報
                    char    *url,     // (O)   アップロードしたファイルの URL
                    char    *cookie ) // (I/O) クッキー
{
    int     ret = 0;
    char    targetURL[MAX_URLLENGTH];
    char    contentType[MAX_LOGICALLINELEN];
    char    magic_token[MAX_KEYLENGTH];
    char    *request;
    char    *response;
    char    *separator = getMultiPartID();
    size_t  szz = 0;
    size_t  sz  = MAX_CONTENT_SIZE * 4;
    size_t  bt;
    char    *base;
    char    *tail;
    char    *p;

    if (!cookie || !(*cookie) ||
         !fileInf             ||
         !(fileInf->bits)     ||
         !url                    )
        return ( ret );

    if ( xmlrpc_p->verbose )
        dprintf( "uploadCocologFiles: アップロードしようとしているファイル"
                 " → %s\n",
                 fileInf->name );

    bt = strlen( (char *)(fileInf->bits) );
    request  = (char *)malloc( MAX_CONTENT_SIZE + bt );
    if ( !request ) 
        return ( ret );
    response = (char *)malloc( sz );
    if ( !response ) {
        free( request );
        return ( ret );
    }
    memset( request, 0x00, MAX_CONTENT_SIZE + bt );
    getSendBufferPointer( request, base );
    tail = base;

    /* magic_token を取得 */
    getMagicToken( "", magic_token, &response, &sz, cookie );
    if ( magic_token[0] == NUL ) {
        free( response );
        free( request  );
        return ( ret );
    }

    /* ファイルをアップロード */
    sprintf( contentType, "multipart/form-data; boundary=%s", separator );
    strcpy( targetURL, 
            xmlrpc_p->blogKind == BLOGKIND_COCOLOGFREE
                ? COCOLOGFREE_FILEMANAGER
                : COCOLOG_FILEMANAGER );
    setTargetURL( targetURL );
    strcpy( tail, 
            makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_STRING,
                               "__mode", 0, "upload", NULL ) );
    strcat( tail, 
            makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_STRING,
                               "magic_token", 0, magic_token, NULL ) );
    strcat( tail, 
            makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_STRING,
                               "path", 0, NULL, NULL ) );

    szz  =  strlen( tail );
    tail += szz;
    szz  =  0;
    p    =  makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_FILE,
                               "file", 0, (char *)fileInf, &szz );
    memcpy( tail, p, szz );
    tail += szz;

    strcat( tail,
            makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_STRING,
                               "submit", 0,
                               encodeURL(sjis2utf("アップロード")),
                               NULL ) );
    sprintf( tail + strlen( tail ), "--%s--\r\n", separator );
    szz  =  strlen( tail );
    tail += szz;

    makeMultiPartItem( separator, MULITIPART_ITEM_TYPE_BUFFERFREE,
                       NULL, 0, NULL, NULL );

    szz = tail - base;
    setUpSendBuffer( request, szz, base );
    setUpReceiveBuffer( response, sz );

    setTimeoutTime( DEFAULT_HTTP_TIMEOUT * (1 + (bt / (1024 * 1024))) );
                                    // サイズに比例したタイムアウト時間を設定
    ret = httpPostWithSession( xmlrpc_p->webServer, xmlrpc_p->webPage,
                               contentType,
                               request, response, cookie,
                               NULL, NULL );
    setTimeoutTime( DEFAULT_HTTP_TIMEOUT ); // デフォルト値に戻しておく

    /* url 取得 */
    url[0] = NUL;
    if ( response[0] ) {
        char    *p = strstr( response, "\"/t/app/control/files\"" );
        char    *q = strstr( response, "id=\"duplicate_file\"" );
        char    *r;

        if ( xmlrpc_p->verbose )
            dputs( "uploadCocologFiles: アップロードリクエスト発行成功\n" );

        if ( ( r = strrchr( fileInf->name, '/' ) ) == NULL )
            r = fileInf->name;
        else
            r++;

        if ( q ) {
            // 「同じ名前の古いファイルがこのフォルダ内にあります」の場合
            char    temp[32];
            char    *s = strstr( q, "name=\"temp\" value=\"" );

            if ( xmlrpc_p->verbose )
                dputs( "uploadCocologFiles: 同じ名前の古いファイルが"
                       "このフォルダ内にあります\n" );

            p = NULL;
            if ( s ) {
                char    *t;
                s += 19;
                t = strchr( s, '"' );
                strncpy( temp, s, t - s );
                temp[t - s] = NUL;

                // ファイルを置き換え
                memset( request,  0x00, MAX_CONTENT_SIZE );
                strcpy( url,
                        xmlrpc_p->blogKind == BLOGKIND_COCOLOGFREE
                            ? COCOLOGFREE_FILEMANAGER
                            : COCOLOG_FILEMANAGER );
                setTargetURL( url );
                sprintf( request,
                         "__mode=upload&"
                         "magic_token=%s&"
                         "temp=%s&"
                         "path=&"
                         "name=%s&"
                         "overwrite_yes=%s",
                         magic_token,
                         temp, r,
                         encodeURL(sjis2utf("ファイルを置き換えます")) );
                setUpReceiveBuffer( response, sz );
                ret = httpPostWithSession(
                            xmlrpc_p->webServer, xmlrpc_p->webPage,
                            "application/x-www-form-urlencoded",
                            request, response, cookie,
                            NULL, NULL );
                if ( response[0] ) {
                    if ( xmlrpc_p->verbose )
                        dputs("uploadCocologFiles: 置換リクエスト発行成功\n");
                    p = strstr( response, "\"/t/app/control/files\"" );
                }
                else {
                    if ( xmlrpc_p->verbose )
                        dputs("uploadCocologFiles: 置換リクエスト発行失敗\n");
                }
            }
        }

        if ( p ) {
            char    targetString[BUFSIZ];

            p += 22;
            sprintf( targetString, ">%s</a>", r );
            q = strstr( p, targetString );
            if ( !q ) {
                /* ファイルをアップロードするとファイル名中の大文字が小文字 */
                /* に変えられてしまうため、以下の対策を実施                 */
                char    *s = targetString;
                while ( *s ) {
                    if ( (*s >= 'A') && (*s <= 'Z') )
                        *s = (char)(*s - 'A' + 'a');
                    s++;
                }
                q = strstr( p, targetString );
            }
            if ( q ) {
                while ( (q >= response) && *q && (strncmp( q, "href=\"", 6 ) != 0) )
                    q--;
                if ( !strncmp( q, "href=\"", 6 ) ) {
                    q += 6;
                    p = strchr( q, '"' );
                    if ( p ) {
                        strncpy( url, q, p - q );
                        url[p - q] = NUL;
                        if ( xmlrpc_p->verbose )
                            dprintf( "uploadCocologFiles: アップロードした"
                                     "ファイルのURL → %s\n",
                                     url );
                    }
                }
            }
        }
    }
    else {
        if ( xmlrpc_p->verbose )
            dputs( "uploadCocologFiles: アップロードリクエスト発行失敗\n" );
    }

    encodeURL( NULL );
    free( response );
    free( request  );

    return ( ret == -1 ? 0 : 1 );
}
Example #5
0
void
rebuildOnLivedoor(
        const char *username,
        const char *password,
        const char *blogID
    )
{
    char    *request;
    char    *response;
    char    *cookie;
    char    url[MAX_URLLENGTH * 16];
    int     ret;
    size_t  sz = MAX_CONTENT_SIZE * 32;

    cookie = (char *)malloc( MAX_COOKIE_LEN );
    if ( !cookie )
        return;
    request = (char *)malloc( MAX_COOKIE_LEN );
    if ( !request ) {
        free( cookie );
        return;
    }
    response = (char *)malloc( sz );
    if ( !response ) {
        free( request );
        free( cookie );
        return;
    }

    // livedoor Blog に login
    memset( cookie, 0x00, MAX_COOKIE_LEN );
    ret = loginLivedoor( username, password, cookie );
    if ( ret ) {
        // 「全ページ」の再構築を実行
        setTimeoutTime( DEFAULT_HTTP_TIMEOUT * 4 );
        strcpy( url, "http://cms.blog.livedoor.com/cms/rebuild/index" );
        sprintf( request,
                 "blog_id=%s&"
                 "command=css,index,rss,atom,monthly,category,articles:all&"
                 ".popup=0",
                 blogID );
        setUpReceiveBuffer( response, sz );
        http_postEx( url, "application/x-www-form-urlencoded",
                     request, response, cookie );
        while ( *response ) {
            char    *p = strstr(response,
                                "<body onLoad=\"JavaScript: location.href='");
            char    *q;

            if ( p ) {
                 p += 41;
                 q = strchr( p, '\'' );
                 if ( q ) {
                    int    len;

                    strcpy(url, "http://cms.blog.livedoor.com/cms/rebuild/");
                    len = strlen( url );
                    strncat( url, p, q - p );
                    url[len + (q - p)] = NUL;

                    setTargetURL( url );
                    if ( isatty( fileno( stderr ) ) )
                        fprintf( stderr, "再構築中 %s ...", url );
                    setUpReceiveBuffer( response, sz );
                    http_getEx( url, response, cookie );
                    if ( isatty( fileno( stderr ) ) )
                        fputs( "\n", stderr );
                 }
            }
            else
                break;
        }
        setTimeoutTime( DEFAULT_HTTP_TIMEOUT );
    }

    free( response );
    free( request );
    free( cookie );
}