Make(delphi) ver(4.04 build 185) Add(MainForm,3781812,476,63) { Width=431 Height=671 Caption="Get_HTTP_ChunkingBlocks" Position=1 Point(onClose) } Add(Button,4736585,28,147) { Left=180 Top=600 TabOrder=-1 Caption="Get" link(onClick,12478535:doEvent1,[]) } Add(Memo,5823448,140,77) { @Color=14474240 Left=5 Top=5 Width=405 Height=275 Strings=#15:HTTP/1.1 200 OK|24:X-GData-User-Country: UA|60:Content-Type: application/atom+xml; charset=UTF-8; type=feed|38:Expires: Sat, 04 Jun 2011 23:47:25 GMT|35:Date: Sat, 04 Jun 2011 23:47:25 GMT|64:Cache-Control: private, max-age=0, must-revalidate, no-transform|7:Vary: *|18:GData-Version: 2.0|34:ETag: W/"C0UARHs6eSp7ImA9WhZUEk4."|44:Last-Modified: Sat, 04 Jun 2011 23:47:25 GMT|26:Transfer-Encoding: chunked|31:X-Content-Type-Options: nosniff|27:X-Frame-Options: SAMEORIGIN|31:X-XSS-Protection: 1; mode=block|11:Server: GSE|0:|4:7006|28678:tag:youtube.com,2008:user:sxxxch:uploads2011-06-04T23:47:25.511ZUploads by sxxxchhttp://www.youtube.com/img/pic_youtubelogo_123x63.gifsxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchYouTube data API8125tag:youtube.com,2008:video:mAwdjvqETSk2011-06-04T23:43:49.000Z2011-06-04T23:44:01.000Z2011-06-04T23:44:01.000Ztest opisniesxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchEntertainmentsxxxchtest opisnietest, tegi, (7dog.avi)test opisnie2011-06-04T23:43:49.000ZmAwdjvqETSktag:youtube.com,2008:video:pjT8HWLl1hk2011-06-04T23:43:41.000Z2011-06-04T23:43:53.000Z2011-06-04T23:43:53.000Ztest opisniesxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchEntertainmentsxxxchtest opisnietest, tegi, (6dog.avi)test opisnie2011-06-04T23:43:41.000ZpjT8HWLl1hktag:youtube.com,2008:video:tMuvdRGg-bM2011-06-04T23:43:33.000Z2011-06-04T23:43:44.000Z2011-06-04T23:43:44.000Ztest opisniesxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchEntertainmentsxxxchtest opisnietest, tegi, (5dog.avi)test opisnie2011-06-04T23:43:33.000ZtMuvdRGg-bMtag:youtube.com,2008:video:YOHkefb9oew2011-06-04T23:43:27.000Z2011-06-04T23:43:39.000Z2011-06-04T23:43:39.000Ztest opisniesxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchEntertainmentsxxxchtest opisnietest, tegi, (4dog.avi)test opisnie2011-06-04T23:43:27.000ZYOHkefb9oewtag:youtube.com,2008:video:wfGCxSByBz42011-06-04T23:43:20.000Z2011-06-04T23:43:30.000Z2011-06-04T23:43:30.000Ztest opisniesxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchEntertainmentsxxxchtest opisnietest, tegi, (3dog.avi)test opisnie2011-06-04T23:43:20.000ZwfGCxSByBz4tag:youtube.com,2008:video:FF6EIFkdvkY2011-06-04T23:43:10.000Z2011-06-04T23:43:22.000Z2011-06-04T23:43:22.000Ztest opisniesxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchEntertainmentsxxxchtest opisnietest, tegi, (2kaktus.avi)test opisnie2011-06-04T23:43:10.000ZFF6EIFkdvkYtag:youtube.com,2008:video:gew_lBfvFLE2011-06-04T23:43:02.000Z2011-06-04T23:43:20.000Z2011-06-04T23:43:20.000Ztest opisniesxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchEntertainmentsxxxchtest opisnietest, tegi, (2dog.avi)test opisnie2011-06-04T23:43:02.000Zgew_lBfvFLEtag:youtube.com,2008:video:0MfpFy1m1Lk2011-06-04T23:42:52.000Z2011-06-04T23:43:10.000Z2011-06-04T23:43:10.000Ztest opisniesxxxchhttp://gdata.youtube.com/feeds/api/users/sxxxchEntertainmentsxxxchtest opisnietest, tegi, (1kaktus.avi)test opisnie2011-06-04T23:42:52.000Z0MfpFy1m1Lk|1:0|0:| ScrollBars=3 } Add(Convertor,5663935,140,154) { Mode=12 link(onResult,10840435:doCopy,[]) link(Data,5823448:Text,[]) } Add(MemoryStream,10840435,203,154) { Point(Position) Point(doPosition) link(onCopy,10840435:doPosition,[(247,160)(247,141)(190,141)(190,174)]) } Add(Hub,12478535,98,147) { OutCount=4 link(onEvent1,1155281:doWork1,[(333,153)]) link(onEvent2,5663935:doConvert,[]) link(onEvent3,2240897:doReset,[(133,167)(133,293)]) link(onEvent4,13262669:doStart,[(126,174)(126,237)]) } Add(StreamCopy,1291776,259,231) { link(onCopy,4415293:doEvent1,[]) link(Dest,9170318:Var1,[(265,215)]) link(Source,10840435:Stream,[(272,209)(209,209)]) link(Count,5854545:Value,[]) } Add(Memory,5854545,273,168) { @Hint=#8:MTU=1400| Default=Integer(1400) AddHint(47,-43,69,13,@Hint) } Add(MemoryStream,8511131,399,168) { Point(doPosition) } Add(Convertor,510008,399,238) { Mode=11 link(onResult,169976:doEvent1,[]) link(Data,9170318:Var2,[]) } Add(GetDataEx,9170318,399,210) { link(Data,8511131:Stream,[]) } Add(Hub,4415293,301,231) { OutCount=3 link(onEvent1,9868220:doData,[(324,237)(324,188)]) link(onEvent2,510008:doConvert,[]) link(onEvent3,1155281:doWork3,[(333,251)]) } Add(HubEx,1155281,329,175) { link(onEvent,8511131:doClear,[]) } Add(DoData,9868220,350,182) { Data=Integer(0) link(onEventData,8511131:doPosition,[]) } Add(InfoTip,15841640,84,35) { Info=#18:Имитатор интернета| Font=[MS Sans Serif,8,1,0,1] Frame=3 Width=365 Height=354 Margin=10 } Add(MultiElementEx,517210,672,245) { @Hint=#23:Декодер цепочных блоков| link(onOutput,13111453:doText,[]) AddHint(60,-52,150,13,@Hint) } BEGIN_SDK Add(EditMultiEx,6686078,21,21) { WorkCount=#5:Input|0:| EventCount=#8:onOutput|10:onNotChunk| Width=874 Height=494 VOffset=245 HOffset=91 link(Input,6231818:doSearch,[]) } Add(Hub,2493116,637,371) { link(onEvent1,15090588:doData,[]) link(onEvent2,5614668:doReset,[(664,384)(664,433)(178,433)(178,244)]) } Add(BlockFind,6231818,70,266) { @Hint=#15:Поиск заголовка| @Color=9360639 Delete=0 StartBlock="HTTP" EndBlock="\13\10\13\10" link(onSearch,10319589:doSearch,[(110,272)(110,181)]) link(onEndSearch,3368143:doEvent,[]) } Add(InfoTip,2843267,49,63) { Info=#30:Блок обработки цепочных блоков| Font=[MS Sans Serif,8,1,0,1] Frame=3 Width=806 Height=424 Margin=10 } Add(DataToFile,6680998,399,287) { @Hint=#30:Считываем длину текущего блока| Type=7 link(onGet,12148694:doEvent1,[]) link(Stream,6682483:Var2,[]) } Add(MemoryStream,1391143,399,175) { @Hint=#25:Главный накопитель потока| Point(doPosition) Point(Position) } Add(IndexToChanel,3368143,210,273) { @Hint=#18:Коммутатор потоков| Point(Index) link(onEvent2,14894745:doReplace,[]) link(Index,5614668:State,[]) } Add(Hub,7703246,175,175) { OutCount=3 link(onEvent1,6306103:doClear,[(371,181)(371,165)(841,165)(841,314)]) link(onEvent2,1391143:doClear,[]) link(onEvent3,5614668:doOn,[(199,195)(199,251)]) } Add(Switch,5614668,210,231) { @Hint=#128:Переключатель коммутатора потоков. Если поймали начало нового цикла, то переключаемся на накопление и обработку потоковых данных| DataOn=Integer(1) DataOff=Integer(0) Point(State) Point(doOn) } Add(Convertor,1135957,483,294) { @Hint=#34:Переводим длину блока из HEX в DEC| Mode=5 link(onResult,14421341:doCompare,[]) } Add(Hub,10564680,350,280) { OutCount=3 link(onEvent1,1391143:doCopy,[(382,286)(382,181)]) link(onEvent2,1391143:doPosition,[(390,293)(390,195)]) link(onEvent3,13907938:doWork2,[]) } Add(Hub,12148694,448,287) { link(onEvent1,5532038:doClear,[(475,293)(475,195)]) link(onEvent2,1135957:doConvert,[]) } Add(StreamCopy,14141361,588,294) { @Color=9360639 link(onCopy,15286111:doEvent1,[]) link(Dest,2024157:Var2,[]) link(Source,6835375:Var2,[]) } Add(MemoryStream,5532038,588,182) { @Hint=#20:Буфер текущего блока| Point(doPosition) Point(Position) } Add(GetDataEx,6682483,399,252) { link(Data,1391143:Stream,[]) } Add(Hub,15286111,637,294) { OutCount=4 link(onEvent1,11831134:doData,[(671,300)(671,239)(514,239)(514,202)]) link(onEvent2,2371067:doConvert,[]) link(onEvent3,2846727:doGet,[(672,314)(672,342)]) link(onEvent4,13907938:doWork3,[(663,321)(663,353)(382,353)]) } Add(DoData,11831134,532,196) { @Hint=#44:Перемещаем указатель буфера на начало данных| Data=Integer(0) link(onEventData,5532038:doPosition,[]) } Add(GetDataEx,2024157,588,217) { link(Data,5532038:Stream,[]) } Add(DataToFile,2846727,686,329) { @Hint=#174:В конце каждого блока есть перевод строки, который не попадает в счетчик. Перемещаем указатель за него к началу следующего блока. После чего, сохраняем указатель в хранилище | Type=7 link(Stream,6835375:Var3,[(692,257)]) } Add(GetDataEx,6835375,595,252) { Angle=3 link(Data,6682483:Var3,[]) } Add(Replace,14894745,259,280) { @Hint=#60:Приводим к UNIX-формату перевода строк, оставляем только #13| SubStr="\10" link(onReplace,7479129:doConvert,[]) } Add(If_else,14421341,532,294) { @Hint=#66:Если длина блока равна нулю, то заканчиваем операцию чтения блоков| Type=5 Op2=Integer(0) link(onTrue,14141361:doCopy,[]) link(onFalse,2493116:doEvent1,[(576,307)(576,377)]) } Add(StrCat,6306103,784,301) { @Hint=#20:Строковый накопитель| Point(doClear) link(Str1,8951436:Var3,[(790,289)(827,289)(827,348)]) } Add(GetDataEx,8951436,784,343) { link(Data,6306103:Result,[]) } Add(DoData,15090588,784,371) { @Hint=#22:Перенаправление данных| link(onEventData,6686078:onOutput,[(870,377)(870,272)]) link(Data,8951436:Var2,[]) } Add(BlockFind,10319589,119,175) { @Hint=#36:Поиск режима Chunked передачи данных| @Color=9360639 Delete=0 StartBlock="Transfer-Encoding:" EndBlock="chunked" Point(onNotFind) link(onSearch,7703246:doEvent1,[]) link(onNotFind,6686078:onNotChunk,[(167,195)(167,442)(879,442)(879,279)]) } Add(Convertor,7479129,301,280) { @Hint=#22:Преобразователь данных| Mode=12 link(onResult,10564680:doEvent1,[]) } Add(Convertor,2371067,728,301) { @Hint=#22:Преобразователь данных| Mode=11 link(onResult,6306103:doStrCat,[]) link(Data,2024157:Var3,[(734,222)]) } Add(HubEx,13907938,378,294) { link(onEvent,6680998:doGet,[]) } END_SDK Add(If_else,3798920,210,231) { Type=2 link(onTrue,1291776:doCopy,[]) link(onFalse,2240897:doOn,[(250,244)(250,300)]) link(Op1,10840435:Size,[]) link(Op2,10840435:Position,[]) } Add(Thread,13262669,147,231) { Delay=10 Point(doDelay) link(onExec,3798920:doCompare,[]) link(onSyncExec,7144370:doEvent,[(192,244)(192,335)]) } Add(IndexToChanel,7144370,259,329) { Point(Index) link(onEvent1,966521:doRandom,[]) link(onEvent2,13262669:doStop,[(305,342)(305,370)(126,370)(126,244)]) link(Index,2240897:State,[]) } Add(Switch,2240897,259,280) { DataOn=Integer(1) DataOff=Integer(0) Point(State) Point(doOn) } Add(Random,966521,329,329) { Max=30 link(onRandom,13262669:doDelay,[(373,335)(373,377)(119,377)(119,251)]) } Add(Memo,13111453,735,224) { @Color=14474240 Left=5 Top=285 Width=405 Height=275 ScrollBars=3 } Add(StrCat,8029442,581,182) { Point(doClear) link(Str1,4232550:Var1,[(587,169)(625,169)(625,222)]) } Add(Hub,8548926,623,245) { link(onEvent1,517210:Input,[]) link(onEvent2,8029442:doClear,[(655,258)(655,283)(564,283)(564,195)]) } Add(GetDataEx,4232550,581,217) { link(Data,8029442:Result,[]) } Add(Hub,169976,469,238) { link(onEvent1,8029442:doStrCat,[(499,244)(499,188)]) link(onEvent2,1560143:doSearch,[]) } Add(DoData,4883273,581,245) { link(onEventData,8548926:doEvent1,[]) link(Data,4232550:Var2,[]) } Add(BlockFind,1560143,511,245) { IncludeBlock=1 StartBlock="" EndBlock="" Point(doStop) link(onSearch,4883273:doData,[]) }