OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 23 Апрель, 2021 06:16

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Http (от Josef Templ) посыл-прием пакетов
СообщениеДобавлено: Пятница, 20 Март, 2020 17:35 

Зарегистрирован: Вторник, 29 Ноябрь, 2011 08:46
Сообщения: 35
Вот смотрю расширение Http и не могу понять, какие его модуль и процедуры вызывают команды windowds API (работа с сокетами), чтобы отправить уже сформированный сетевой пакет в сеть (на роутер) или принять его?

Преобразует ли (обволакивает, перекодирует) windowds этот сетевой пакет, или оставляет неизменным байт в байт?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 20 Март, 2020 17:59 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 459
ddn1 писал(а):
Вот смотрю расширение Http и не могу понять, какие его модуль и процедуры вызывают команды windowds API (работа с сокетами), чтобы отправить уже сформированный сетевой пакет в сеть (на роутер) или принять его?

Преобразует ли (обволакивает, перекодирует) windowds этот сетевой пакет, или оставляет неизменным байт в байт?


Кмк, работа с сокетами делается в CommTCP, а не в подсистеме Http. Если речь про HTTPS, то HttpCommSSL.


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

Зарегистрирован: Вторник, 29 Ноябрь, 2011 08:46
Сообщения: 35
adimetrius писал(а):
Кмк, работа с сокетами делается в CommTCP, а не в подсистеме Http.
Ну его же (CommTCP) надо импортировать, а модули HttpServers и HttpWeb его (WinApi как оказалось, а не CommTCP) не импортируют. Видимо они только формируют пакеты.

adimetrius писал(а):
Если речь про HTTPS, то HttpCommSSL.
То есть по протоколу HTTP (без шифрования) пакеты в сеть не отправяются? Логично тогда назвать расширение Https.

Вот схема импорта расширения Http:
Код:
HttpServers (IMPORT Strings, Services, CommStreams, Files, Dates, StdLog)
   HttpWeb (IMPORT HttpServers, Files := Files64, Strings)
      HttpCmds (IMPORT HttpServers, HttpWeb, Strings, Files, CommStreams, TextModels, TextViews, Views)
WinApi
   HttpOpenssl ["libssl32"] (IMPORT WinApi)
      HttpCommSSL (IMPORT SYSTEM, WinNet, Strings, Dialog, CommStreams, HttpOpenssl, StdLog)
         HttpSSLCmds (IMPORT CommSSL := HttpCommSSL, CommStreams, TextModels, TextViews, Views)


Хочу написать (и скомпилировать на чем-нибудь) свой сервер, чтобы можно было программно работать с интернетом, с прокси, с поисковиками, загружать и раздавать файлы и т.д., потому что сторонний софт так работать не умеет. Поскольку в этих IT протоколах и миллионе "технологиях" я ни черта не разбираюсь - документация у них расплывчатая, свой птичий сленг и все на английском, то причесанная, без лишнего мусора реализация на понятном Паскале может помочь разобраться, как это работает, для начала в общих чертах. Смотрел сетевые модули A2, они довольно сложные и вообще там много лишнего логирования всего подряд, у Josef Templ-а смотрится проще. Лет через 30 может разберусь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 20 Март, 2020 20:03 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4509
Откуда: Россия, Орёл
ddn1 писал(а):
adimetrius писал(а):
Кмк, работа с сокетами делается в CommTCP, а не в подсистеме Http.
Ну его же (CommTCP) надо импортировать, а модули HttpServers и HttpWeb его (WinApi как оказалось, а не CommTCP) не импортируют. Видимо они только формируют пакеты.

Его не надо импортировать. Он загружается динамически, так как указан в параметрах процедуры CommStreams.NewListener. Смотрите документацию и примеры подсистемы Comm. В частности CommObxStreamsServer.


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

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 459
ddn1,

я согласен с Борисом. Http не импортирует CommTCP, и вообще не импортирует напрямую ни один транспортный протокол-модуль. Наименование модуля-транспорта передается как строка, и модуль-транспорт загружается динамически (не через IMPORT, а через Dialog.Call). И в этом красота и мосчь: Http может работать с произвольными транспортами, возможно, написанными позже, чем сама Http.
Вот команда запуска сервера:
Код:
KeepRemote.StartHttpServer('CommTCP', '0.0.0.0:1081', '/BB/')

Как видите, я использую транспорт CommTCP, а мог бы указать HttpCommSSL

На Templ's Http я смог быстро сделать сервер для обслуживания запросов моего приложения. Для обычного веб-сервера - т.е. для раздачи html-файлов - уже все реализовано в Http, только запустить, программировать ничего не надо. И, кста, это самое внятное и лаконичное определение веб-сервера, которое я встречал, как раз в духе оберона. И как раз для изучения. Сложностью может быть, пожалуй, использованная - вполне уместно - машина состояний, чтобы разбить обработку запроса на этапы; но тоже довольно ясно все сделано.

К сожалению, Хттп построена только как сервер. Чтобы получить документ по http, я пользовался модулем от Ивана Денисова. А было бы логично и здорово, чтобы Хттп-клиент и Хттп-сервер пользовались единым набором Хттп-понятий.

Ну и еще, Джозеф широко использовал SHORTCHAR, что вызывало у меня сильное раздражение.


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

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1366
ddn1 писал(а):
Вот смотрю расширение Http и не могу понять, какие его модуль и процедуры вызывают команды windowds API (работа с сокетами), чтобы отправить уже сформированный сетевой пакет в сеть (на роутер) или принять его?


Никакие. И сетевые пакеты там не формируются. Этим занимается windows.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3057
В GNU/Linux это расширение Йозефа тоже работает, кстати. Проверял https://community.blackboxframework.org ... t=162#p928


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Октябрь, 2020 21:15 

Зарегистрирован: Вторник, 29 Ноябрь, 2011 08:46
Сообщения: 35
adimetrius писал(а):
Вот команда запуска сервера:
Код:
KeepRemote.StartHttpServer('CommTCP', '0.0.0.0:1081', '/BB/')
В модуле Http нет процедуры StartHttpServer. Что за модуль KeepRemote, он опубликован?

adimetrius писал(а):
Для обычного веб-сервера - т.е. для раздачи html-файлов - уже все реализовано в Http, только запустить, программировать ничего не надо.
Что-то сомневаюсь, как раздать папку с файлами через заданный порт?

Вообще, язык html-запросов, это какой-то маразм. Зачем он нужен? Проще сделать ftp-сервер, работающий с файловой системой через модуль Files, параметры сервера будут в txt-файлах служебного каталога, авторизацию можно сделать через запись команд в служебный файл, данные - в каталогах пользователей. Остальное - забота браузера, без маразматических протоколов.

adimetrius писал(а):
Чтобы получить документ по http, я пользовался модулем от Ивана Денисова.
Что за модуль, где его достать?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 20 Октябрь, 2020 18:44 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3057
CommHttp есть в старой сборке https://oberoncore.ru/projects/intron
Посмотрите файл CommObxHttp
Всё пока руки не дойдут его отдельно нормально опубликовать.

А вот тут ещё есть сервер для раздачи файлов:
https://github.com/bbcb/bbcp/tree/maste ... les/server
Если посмотреть TcpTask, то увидите, что там любое динамическое содержимое также возможно отдавать.
Но обработку POST запросов я так и не доделал пока. Ну и в целом реализация требует доработки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 20 Октябрь, 2020 20:59 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 459
Упс, нестыковочка вышла. Действительно, StartHttpServer есть только в KeepRemote, а Http ее нет. Но StartHttpServer проста:

Код:
   TYPE Servlet = POINTER TO RECORD (HttpServers.Servlet) ... END;
   VAR server: HttpServers.Server;
   PROCEDURE StartHttpServer* (IN protocol, localAdr, prefix: ARRAY OF CHAR);
      CONST methods = { HttpServers.METHOD_GET, HttpServers.METHOD_PUT,
         HttpServers.METHOD_DELETE, HttpServers.METHOD_PATCH };
      VAR servlet: Servlet;
   BEGIN
      IF server = NIL THEN server := Http.NewServer() ELSE server.Stop END;
      NEW(servlet);
      server.RegisterServlet(servlet, prefix, methods);
      server.Start(protocol, localAdr);
   END StartHttpServer;   (* "KeepRemote.StartHttpServer('CommTCP', '0.0.0.0:1081', '/BB/')" *)


Чтобы раздавать файлы через Http (т.е. по сути веб-сервер организовать), воспользуйтесь HttpWeb.Servlet. Чтобы на произвольный порт его повесить, смотрите на строки инициализации в примере.

ddn1 писал(а):
Вообще, язык html-запросов, это какой-то маразм. Зачем он нужен?

Вот чтобы его заменить там, где он неуместен, я делал KeepRemote: чтобы вызывать из ББ1 процедуры в ББ2 и получать результаты обратно в ББ1. Но - пока не достаточно оттестировал и не опубликовал.


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

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


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

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


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

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