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); }
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)); }
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 ); }
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 ); }
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 ); }