OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:06

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
СообщениеДобавлено: Пятница, 10 Март, 2023 17:15 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
по ходу, запустил O3 на пинусах. порт заключался в том, что я скопипастил нужный код из HostTCP/Lin в O3bbHostNet, вместо баз данных воткнул виндозаголовок ODBC с поправленым именем библиотеки (всё равно примеры базы не используют), а реестр и процессы просто выкинул нафиг. примеры, опять же, этим не пользуются.

а, и в Debug-модуле от O3 поправил по лекалам DevDebug.

всё работает за одним маленьким исключением: начальная страница отчего-то грузится бесконечно, надо нажать «стоп» чтобы она появилась. с остальными страницами такого не наблюдается.

кстати, о портабельности: всё это заняло неспешные тридцать минут. да, пол-часа. остальное Просто Заработало.

в отдельную тему не надо, пожалуйста: это просто эксперимент, там наверняка намного больше чинить надо (как минимум главную страницу). ну, и документацию к O3 ребята забыли дать, это печально. надо самим писать.

p.s.: баг с бесконечной загрузкой присутствует и в виндоверсии, так что это не пинус-специфичное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 10 Март, 2023 19:03 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
по ходу, как минимум в HostTCP/Lin баг: неправильно выставляется non-blocking для сокетов, поэтому читалка тупо уходит в блок. я у себя заодно переделал на линукс-специфичные вызовы, без ioctl. в итоге ни BB, ни браузер больше не блочатся, но… есть другая проблема: O3 не детектит ситуацию "connection closed by peer", и крутит пустой recv пока не случится таймаут. я не очень понял, специфика ли это неблокирующих сокетов, или я/O3 таки что-то делают не так.

а, отбой тревоги: это PaleMoon держит сокет на всякий случай. если пойти через telnet, то всё корректно, закрытие ловится как надо.

а-а-а, всё ещё смешнее! ребята зачем-то HTTP/1.1 сделали по спекам, а не как все остальные. при HTTP/1.0 O3 сразу после первого запроса сокет закрывает, а при 1.1 — держит открытым. насколько помню, по спекам-то это вроде бы правильно, а на деле… ну, так поступают далеко не все.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 10 Март, 2023 20:09 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
эх. я вообще не собирался с O3 играться, оно как-то само вышло… простите, что пришлось тему отделять. собирался бы — завёл бы сам.

ну, оно работает, тестовое приложение прямо как настоящее. ещё базы данных бы с прямой работы с ODBC перетащить на Sql с его драйверами — но я пока (кажется) к такому подвигу не готов.

рабочий вариант залит в репозиторий Lament Configuration. учтите, что для сборки под обычным BB надо поубирать везде `IN ComponentPascal` после `MODULE`. Ultra Pascal не совсем с CP совместим, поэтому для LC нужен такой вот флаг. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 10 Март, 2023 23:12 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
по ходу, как минимум в HostTCP/Lin баг: неправильно выставляется non-blocking для сокетов, поэтому читалка тупо уходит в блок. я у себя заодно переделал на линукс-специфичные вызовы, без ioctl. в итоге ни BB, ни браузер больше не блочатся, но… есть другая проблема: O3 не детектит ситуацию "connection closed by peer", и крутит пустой recv пока не случится таймаут. я не очень понял, специфика ли это неблокирующих сокетов, или я/O3 таки что-то делают не так.


Это интересно, сайт вот: https://oberon.org/ на текущей реализации CommTCP крутится, и мне не нравится, что приходится его периодически перезапускать. Браузер он не держит, но почему-то иногда сервер падает, может быть у меня какой-то алгоритм с утечкой, я думал, поэтому сервер каждую ночь по крону перезапускаю на всякий случай, и так уже давно работает стабильно. Там ещё не было трасировки падения в консоль. Надо бы презапустить на последнем Блэкбоксе 2.0, может картина прояснится. А также может быть ваши правки могут это дело исправить, и не придётся перезапускать. Стоит попробовать как-нибудь. Исходники выложу также.


Последний раз редактировалось Иван Денисов Суббота, 11 Март, 2023 00:26, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 11 Март, 2023 00:24 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
ну, в принципе если вы не реализуете там HTTP/1.1 с keep-alive по-умолчанию, то мои правки могут и не дать эффекта (тем более если падения — я там ничего про падения не правил). в O3 проблема была в том, что он ожидал дальнейших запросов в keep-alive сокет, а их не было. и `recv()` уходил в блок. а пока нормальный обмен шёл — то блока не случалось. если правильно писать код и не делать keep-alive — то и не удивительно, что можно не заметить.

и хочу сразу предупредить, что обработку неблокирующего `connect()` я писал по докам, но вслепую, на предмет работоспособности не проверял. для сервера, впрочем, это неважно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 11 Март, 2023 00:30 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
вообще, жаль, что O3 не умеет в SSL/TLS. правда, писать реализацию этой фигни — лопнуть можно, и вовсе не потому что шифров нет. я может потом попробую пересадить O3 на GnuTLS (потому что у GnuTLS намного более адекватный апи, чем у этой, как её… ну, которая дырявая постоянно).

вообще, TLS, конечно, гуано адское, но там есть одна интересная штука: авторизация по сертификату. то есть, при соединении с сервером можно серверу передать сформированый специально для него сертификат — и опа! никаких паролей не надо. но почти никто почему-то не использует. а жаль, это единственное, ради чего вообще имеет смысл пытаться делать TLS.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 11 Март, 2023 00:39 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
вообще, жаль, что O3 не умеет в SSL/TLS. правда, писать реализацию этой фигни — лопнуть можно, и вовсе не потому что шифров нет. я может потом попробую пересадить O3 на GnuTLS (потому что у GnuTLS намного более адекватный апи, чем у этой, как её… ну, которая дырявая постоянно).

вообще, TLS, конечно, гуано адское, но там есть одна интересная штука: авторизация по сертификату. то есть, при соединении с сервером можно серверу передать сформированый специально для него сертификат — и опа! никаких паролей не надо. но почти никто почему-то не использует. а жаль, это единственное, ради чего вообще имеет смысл пытаться делать TLS.

Йозеф сделал реализацию серверов, там и поддержка SSL через OpenSSL.
http://www.zinnamturm.eu/downloadsDH.htm#Http
Я запускал давно на Linux версии, только без SSL, там чуть заголовочный модуль надо было подправить. А остальное работало.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 11 Март, 2023 01:50 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
у O3 всё категорически своё, они даже части BB зачем-то дублировали у себя. ну и — добавить GnuTLS очень просто, это минут десять работы (плюс трансляция заголовков). предпочитаю именно его. openssl я не буду трогать даже километровой палкой и в костюме полной химзащиты.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 11 Март, 2023 02:21 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
у O3 всё категорически своё, они даже части BB зачем-то дублировали у себя. ну и — добавить GnuTLS очень просто, это минут десять работы (плюс трансляция заголовков). предпочитаю именно его. openssl я не буду трогать даже километровой палкой и в костюме полной химзащиты.

из-за истории с Heartbleed? Или есть ещё причины?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 11 Март, 2023 02:28 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Или есть ещё причины?
из-за абсолютно упоротого API. у меня такое впечатление, что эту хреновину дизайнили специально так, чтобы правильно использовать было невозможно. сколько раз пытался — всегда какой-нибудь афедрон вылезал. GnuTLS с первого раза и будучи незнакомым вкрячил в дишечку за час, с тех пор оно несколько лет уже работает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 12 Март, 2023 01:48 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
поскольку я уже запилил в LC поддержку GnuTLS в режиме клиента, и допиливаю в режиме сервера — то потом портирую это же самое и в O3. только для GNU/Linux, потому что на винду мне лень. блин, какого чёрта O3 не пользуется стандартными CommStreams? у внутренних потоков O3 совершенно тот же самый API (санс маленькая разница в именах методов). нафига было переизобретать велосипед-то? надо будет пересадить O3 на стандартные потоки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Март, 2023 03:36 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
пересадил O3 на CommStreams (интерфейсы не менял, просто обернул CommStreams в O3 Streams). можно было, конечно, по всему коду поменять, но зачем: обёртки работают ничем не хуже.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 05:37 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
роняем O3 лёгким движением руки: отсылаем запрос со строкой в заголовках, где нет двоеточия. потрясающие парни: надо иметь воистину огромное сердце, чтобы так твёрдо верить в доброжелательность мира!

страшного, конечно, ничего не происходит, всё просто трапается, но тем не менее.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 08:32 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
баг с двоеточием починил (ребята одно условие забыли, и вышел классический off-by-one). заодно впилил поддержку TLS через HostTLS/Lin в LC. научил сервер иметь два listener: для обычного TCP, и для TLS. и тот, и другой опциональны. в принципе, надо бы просто завести массив listener'ов в сервере, чтобы один сервер можно было цеплять на кучу портов.

p.s.: а обнаружил баг с двоеточием как раз когда полез на обычный TCP порт через https нечаянно. тут-то O3 и удивился.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Март, 2023 16:23 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
подумал, кстати: время отклика сетевых потоков на GNU/Linux можно ведь повысить. сейчас они все проверяются по таймеру — а можно иначе: добавлять в цикл проверки сообщений fd всех открытых сокетов. соответственно, как только в сокете активность (или он готов для записи) — wait_message перестаёт wait, и мы крутим actions.

на самом деле надо механику чуть сложнее: сигнализировать, ожидаем ли мы чтения, и хотим ли писать. это чтобы не крутить акшоны если, например, сокет готов для записи, а писать нам сейчас туда нечего. самому O3 оно, может, и не сильно поможет, но всяким хитрым TCP-сервисам — может помочь больше.

я попытался с наскоку это сделать, но ниасилил gtk. надо будет порыть в сети какой-нибудь рабочий пример. обожаю gtk: чисто «программирование через поисковик».

для винды тоже это сделать можно, там есть режим, в котором сокеты посылают обычные сообщения, но я наглухо не помню, как это делать, и вспоминать как-то… в любом случае: если обкатать интерфейс, то потом портировать будет проще.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB