Board.KolibriOS.org
http://board.kolibrios.org/

http качалка
http://board.kolibrios.org/viewtopic.php?f=40&t=1207
Page 1 of 7

Author:  barsuk [ Sat Jan 31, 2009 11:45 pm ]
Post subject:  http качалка

Quote:
Тебе только GET нужен, даже частичные запросы и кеширование не нужны, так что меняеш GET * HTTP/1.0 на GET * HTTP/1.1 и будет тебе счастье.

Все же пришлось добавить заголовки Host и Connection-type. Кое-что стало лучше. Загружается, например, страница menuetos.net.
Но почему-то при попытке скачать www.yandex.ru виснет намертво вся система, включая qemu (похоже на баг сетевого стека, т.к. httpc тоже виснет).

Attachments:
wget.7z [9.01 KiB]
Downloaded 290 times

Author:  diamond [ Sat Jan 31, 2009 11:51 pm ]
Post subject:  Re: http качалка

Quote:
виснет намертво вся система, включая qemu (похоже на баг сетевого стека, т.к. httpc тоже виснет).

Ага, это действительно баг сетевого стека, мне уже сообщили. Под VirtualBox тоже виснет вся система. Скриншоты снял (очень похоже на то, что где-то то ли стек не восстанавливается, то ли его содержимое перезаписывается чем-то), весь трафик сдампил, буду разбираться...

Author:  diamond [ Sun Feb 01, 2009 2:34 pm ]
Post subject:  Re: http качалка

В общем, сервер www.yandex.ru слишком быстрый для httpc :) Побайтовое чтение из сокета - вещь на редкость тормозная (особенно в текущей реализации), так что функция 53.3 крайне не рекомендуется, а вместо неё следует использовать 53.11. Конкретно httpc просто не успевал считывать все данные, а поступали всё новые и новые, что быстро приводило к переполнению буфера для данных сокета со всеми вытекающими последствиями. В svn.1019 добавил проверку на переполнение, переполняющие пакеты тупо отбрасываются в надежде на tcp-перепосылку, система больше не виснет, но необходимости перехода на 53.11 это не отменяет.

Author:  diamond [ Mon Feb 02, 2009 2:30 pm ]
Post subject:  Re: http качалка

С новым ядром httpc успешно открывает http://www.yandex.ru, но wget просто падает. Снимки доски отладки прилагаю.

Attachments:
File comment: вывод приложения
board2k.png
board2k.png [ 3.95 KiB | Viewed 8673 times ]
File comment: вывод ядра
board1k.png
board1k.png [ 5.25 KiB | Viewed 8678 times ]

Author:  barsuk [ Mon Feb 02, 2009 4:03 pm ]
Post subject:  Re: http качалка

diamond
Перевел wget на 53.11 (чтение из сокета группы байт вместо побайтового чтения) и убрал задержку при чтении. Теперь yandex.ru открывается и скачивается (даже похож на правильный, если смотреть на код). Сейчас буду писать поддержку командной строки.

Attachments:
wget.7z [9.2 KiB]
Downloaded 232 times

Author:  Gluk [ Mon Feb 02, 2009 4:07 pm ]
Post subject:  Re: http качалка

ура ура ура))

извините за флуд)

Author:  barsuk [ Mon Feb 02, 2009 4:44 pm ]
Post subject:  Re: http качалка

diamond, а если происходит переполнение, а приложение, заказавшее данные, прибить, то буфер остается заполненным навечно и с сетью до перезагрузки работать невозможно?

Author:  diamond [ Mon Feb 02, 2009 5:12 pm ]
Post subject:  Re: http качалка

Так, www.yandex.ru уже грузится.
Следующий тест: www.wasm.ru не грузится. На доску отладки выводится "1FF0 content-length not found" и программа аварийно завершается.
Кстати, функции 53.11 нужно всё-таки передавать значение в esi - размер буфера, а то сейчас esi вообще не инициализируется, иногда это приводит к вылету программы из-за кода ядра.

Author:  diamond [ Mon Feb 02, 2009 5:15 pm ]
Post subject:  Re: http качалка

barsuk wrote:
diamond, а если происходит переполнение, а приложение, заказавшее данные, прибить, то буфер остается заполненным навечно и с сетью до перезагрузки работать невозможно?

Переполнение вообще влияет только на один сокет, и кривая работа с одним сокетом не влияет на остальные сокеты.

Author:  barsuk [ Mon Feb 02, 2009 6:02 pm ]
Post subject:  Re: http качалка

Quote:
Кстати, функции 53.11 нужно всё-таки передавать значение в esi - размер буфера, а то сейчас esi вообще не инициализируется, иногда это приводит к вылету программы из-за кода ядра.

Спасибо, забыл написать.

На wasm.ru используется Chunked transfer encoding, и заголовка Content-Length, на который я раньше ориентировался для определения размера буфера, нет. Буду разбираться.

Author:  barsuk [ Wed Feb 04, 2009 8:54 pm ]
Post subject:  Re: http качалка

Готова версия, которая способна скачать: 1) www.yandex.ru, 2) www.wasm.ru.
Поменял название на downloader, т.к. это все же не wget :)
Запускается также из командной строки, после завершения загрузки закрывается.

Attachments:
downloader-0.8.7z [10.62 KiB]
Downloaded 249 times

Author:  diamond [ Sat Feb 07, 2009 7:18 pm ]
Post subject:  Re: http качалка

Протестировал. Падает, причём на всём подряд. На рамдиск сбрасывается файл A, но он явно обрывается посередине.

Attachments:
downbug.png
downbug.png [ 5.17 KiB | Viewed 8458 times ]

Author:  barsuk [ Sat Feb 07, 2009 10:33 pm ]
Post subject:  Re: http качалка

А оно падает при запуске из командной строки или через gui?

Author:  diamond [ Sat Feb 07, 2009 10:37 pm ]
Post subject:  Re: http качалка

И через командную строку, и через GUI.

Author:  barsuk [ Thu Feb 12, 2009 5:45 pm ]
Post subject:  Re: http качалка

Падение исправил.
Подумал, что кидать результат в /rd/1/a нехорошо. Теперь он попадает в /rd/1/.download.

Добавил маленькую либу и пример работы с ней. Сейчас либа вызывает downloader с указанным параметром, но в будущем, возможно, я перенесу всю работу по скачиванию файла в нее. То есть в сторонних приложения рекомендуется юзать именно либу.

Attachments:
downloader-0.82.7z [11.82 KiB]
Downloaded 286 times

Page 1 of 7 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/