Page 5 of 7

Re: http качалка

Posted: Fri Jun 01, 2012 8:38 pm
by Leency
Какие на то причины? Марио вот наоборот на трекере сказал ,что неплохо бы прикрутить.
Ну и... Я ЧУТЬ НЕ ВЫУЧИЛ АСМ ПОКА ЕГО ПРИКРУЧИВАЛ И ОНО РАБОТАЕТ потому если придётся удалять, будет немного грусно.

Re: http качалка

Posted: Fri Jun 01, 2012 9:29 pm
by Leency
Network Downloader 0.6

- прикручен edit_box
- используются ситемные цвета
- удалён старый код

Editbox я прикручивал основываясь на изменениях IgorA в программе hex2dec2bin, и ему же огромное спасибо за статью об EditBox'e на Вики. Реально без этого ничего бы не вышло.

Осталась одна проблема: не работает мышь. Как к этой строке добавить обработку мыши?

Code: Select all

mcall 40, 10000000b ; only net event!!!

Re: http качалка

Posted: Fri Jun 01, 2012 9:33 pm
by Mario
Как однажды сказал один человек "Мнение пишущего код более приоритетно, чем мнение советующих".

Вообще можно было подойти к проблеме с другой стороны - написать GUI часть отдельным приложением, которое будет вызывать программу, также как это сейчас делает HTMLv. В этом случае вообще не было бы вопросов. Кстати даже прикрутить edit_box можно так чтобы в безоконном режиме box_lib вообще не загружался.

Re: http качалка

Posted: Fri Jun 01, 2012 9:45 pm
by Mario
Leency wrote:Осталась одна проблема: не работает мышь. Как к этой строке добавить обработку мыши?

Code: Select all

mcall 40, 10000000b ; only net event!!!
Установкой нужного бита.
http://wiki.kolibrios.org/wiki/SysFn40/ru
ebx = маска: бит i соответствует событию i+1 (см. список событий)
http://wiki.kolibrios.org/wiki/Ru/api/kernel
Spoiler:
Список событий
Очередное событие можно получить вызовом одной из функций 10 (ожидать события), 11 (проверить без ожидания), 23 (ожидать в течение заданного времени). Эти функции возвращают только те события, которые входят в маску, устанавливаемую функцией 40. По умолчанию это первые три, чего вполне достаточно для многих приложений. Коды событий:
1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша";
сбрасывается, когда все клавиши из буфера считаны функцией 2
3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит;
поступает, только когда окно активно;
сбрасывается, когда все кнопки из буфера считаны функцией 17)
4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке функцией 40)
5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит)
6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
7 = произошло событие IPC (смотри функцию 60 - Inter Process Communication; сбрасывается при прочтении)
8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью)
9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему)
16..31 - ранее использовались для проверки соответвующих IRQ (16=IRQ0, 31=IRQ15) (на новых версиях ядра не генерируются)
Следовательно из номера события вычитаем единицы и получаем порядковый номер бита который надо установить. Бит нумеруются с нулевого.
6 - 1 = 5 получается 100000b
10000000b + 100000b = 10100000b

Только сдается мне комментарий
; only net event!!!
там не просто так стоит, и возможно ты хочешь исправить не то место.
В коде есть еще один участок:

Code: Select all

prepare_event:
; Report events
; Stack 8 + defaults
	mcall 40,10000111b
И если немного использовать верхнее утолщение позвоночника, то можно догадаться, что первый вызов ф. 40, используется для безоконного режима работы - добавление в него лишних событий не будет полезным. Более того оно не решит возникшую проблему с мышкой.

Re: http качалка

Posted: Fri Jun 01, 2012 9:57 pm
by Rock_maniak_forever
Leency wrote:Осталась одна проблема: не работает мышь. Как к этой строке добавить обработку мыши?

Code: Select all

mcall 40, 10000000b ; only net event!!!
5-ый бит отвечает за мышь.

Code: Select all

mcall 40, 10100000b ; only net event!!!
Вот таблица. По ней легко определить, какой бит надо включить/выключить.

Code: Select all

;  |----------------------------------------------------------------------------|                                            ;
;  |                       Таблица желаемых событий.                            |                                            ;
;  |----------------------------------------------------------------------------|                                            ;
;  | 00000000 00000000 00000000 00000111b  Cобытия:                             |                                            ;
;  |                                   I   Перерисовка окна.                    |                                            ;
;  |                                  I    Клавиша в буфере.                    |                                            ;
;  |                                 I     Кнопка в буфере.                     |                                            ;
;  |                                I      Забранировано.                       |                                            ;
;  |                               I       Перерисовывается фон рабочего стола. |                                            ;
;  |                              I        Мышь.                                |                                            ;
;  |                             I         IPC                                  |                                            ;
;  |                            I          Сетевое событие.                     |                                            ;
;  |                          I            Отладочное событие.                  |                                            ;
;  | I---------------I                     Данные IRQ.                          |                                            ;
;  |----------------------------------------------------------------------------|                                            ;

Re: http качалка

Posted: Fri Jun 01, 2012 10:08 pm
by Leency
Спасибо! С битами буду разбираться.

Программу залил на SVN.

Что хотелось бы сделать в будущем: отображение статуса процесса в окне. Ну или хотя бы индикатор окончания загрузки.

P.S. Да, исправление было для другого места.

Re: http качалка

Posted: Tue Mar 19, 2013 4:17 pm
by SoUrcerer
Сейчас качалка не поддерживает коды 301/302. Особенность в том, что часто адрес, куда делается редирект, не сообщается в содержимом документа, а только в качестве ответа качалке (HTTP/1.1 301 Moved .. и тут адрес). Без обработки этих кодов ошибок зачастую невозможно посещать некоторые сайты.

Re: http качалка

Posted: Tue Mar 19, 2013 4:25 pm
by Leency
Я уже писал, что часты случаи, когда сайт http://ololo.lo не будет работать просто потому он посылает 301/302 на http://www.ololo.lo или http://ololo.lo/[b]index.php[/b], что делает неработоспосособными чуть менее, чем половину хостов.

Re: http качалка

Posted: Wed Mar 20, 2013 9:17 am
by Mario_r4

Re: http качалка

Posted: Thu Apr 18, 2013 8:51 am
by Mario_r4
По мотивам "Винни Пух и все-все-все 256 байт адреса"

http://paradigm.ru/url-max-length
http://www.manhunter.ru/webmaster/481_k ... a_url.html

По первой ссылке похвалили Opera, обосрали IE и скромно промолчали про Хром.
По второй ссылке похвалили Opera, обосрали IE и Хром все равно сосет.
Фуррифокс и Сафари бодрячком.

Итого делаем вывод - долбодятлы криворукие веб-мастера могут взять любое значение полной длинны ссылки.

В Колибри в случае использования расшаренной "именованной" памяти для передачи полного пути можно также использовать любой доступный объем памяти.

Re: http качалка

Posted: Thu Apr 18, 2013 8:54 am
by SoUrcerer
Я еще года два назад делал такие тесты, Хром вешается на 65534м байте адреса. Ну, или вешался. Опера действительно работала стабильно, а фуррифокс просто малеха подтормаживал на мегабайтных ссылках. Но на статью это не тянуло.

Re: http качалка

Posted: Fri Apr 19, 2013 2:21 am
by Mario_r4
SoUrcerer wrote:Сейчас качалка не поддерживает коды 301/302. Особенность в том, что часто адрес, куда делается редирект, не сообщается в содержимом документа, а только в качестве ответа качалке (HTTP/1.1 301 Moved .. и тут адрес). Без обработки этих кодов ошибок зачастую невозможно посещать некоторые сайты.
На каких сайтах кроме http://google.com можно гарантированно получить такое перенаправление? Нужна статистика, поскольку придется разбирать содержимое выдаваемой страницы.

Re: http качалка

Posted: Fri Apr 19, 2013 9:16 am
by SoUrcerer
На http://kolibrios.org :)
Разбирать содержимое страницы не нужно, потому что в ответе 301/302 передается конкретно адрес, куда нужно сделать редирект. Это уже поддерживается в тестовой сборке HTMLv со своей встроенной качалкой HTTP.

Re: http качалка

Posted: Fri Apr 19, 2013 9:18 am
by Mario_r4
SoUrcerer wrote:На http://kolibrios.org :)
Разбирать содержимое страницы не нужно, потому что в ответе 301/302 передается конкретно адрес, куда нужно сделать редирект. Это уже поддерживается в тестовой сборке HTMLv со своей встроенной качалкой HTTP.
Хорошо, тогда я не буду тратить время на решение этой проблемы.

Re: http качалка

Posted: Fri Apr 19, 2013 9:19 am
by SoUrcerer

Code: Select all

telnet kolibrios.org 80
GET / HTTP/1.0
Host: kolibrios.org

Code: Select all

HTTP/1.0 301 Moved Permanently
Location: http://kolibrios.org/en/
Content-Length: 0
Connection: close
Date: Fri, 19 Apr 2013 06:18:29 GMT
Server: lighttpd/1.4.32