OberonCore https://forum.oberoncore.ru/ |
|
Http (от Josef Templ) посыл-прием пакетов https://forum.oberoncore.ru/viewtopic.php?f=47&t=6588 |
Страница 1 из 1 |
Автор: | ddn1 [ Пятница, 20 Март, 2020 17:35 ] |
Заголовок сообщения: | Http (от Josef Templ) посыл-прием пакетов |
Вот смотрю расширение Http и не могу понять, какие его модуль и процедуры вызывают команды windowds API (работа с сокетами), чтобы отправить уже сформированный сетевой пакет в сеть (на роутер) или принять его? Преобразует ли (обволакивает, перекодирует) windowds этот сетевой пакет, или оставляет неизменным байт в байт? |
Автор: | adimetrius [ Пятница, 20 Март, 2020 17:59 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
ddn1 писал(а): Вот смотрю расширение Http и не могу понять, какие его модуль и процедуры вызывают команды windowds API (работа с сокетами), чтобы отправить уже сформированный сетевой пакет в сеть (на роутер) или принять его? Преобразует ли (обволакивает, перекодирует) windowds этот сетевой пакет, или оставляет неизменным байт в байт? Кмк, работа с сокетами делается в CommTCP, а не в подсистеме Http. Если речь про HTTPS, то HttpCommSSL. |
Автор: | ddn1 [ Пятница, 20 Март, 2020 19:55 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
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 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
ddn1 писал(а): adimetrius писал(а): Кмк, работа с сокетами делается в CommTCP, а не в подсистеме Http. Ну его же (CommTCP) надо импортировать, а модули HttpServers и HttpWeb его (WinApi как оказалось, а не CommTCP) не импортируют. Видимо они только формируют пакеты.Его не надо импортировать. Он загружается динамически, так как указан в параметрах процедуры CommStreams.NewListener. Смотрите документацию и примеры подсистемы Comm. В частности CommObxStreamsServer. |
Автор: | adimetrius [ Пятница, 20 Март, 2020 21:54 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
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, что вызывало у меня сильное раздражение. |
Автор: | Trurl [ Пятница, 20 Март, 2020 22:21 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
ddn1 писал(а): Вот смотрю расширение Http и не могу понять, какие его модуль и процедуры вызывают команды windowds API (работа с сокетами), чтобы отправить уже сформированный сетевой пакет в сеть (на роутер) или принять его? Никакие. И сетевые пакеты там не формируются. Этим занимается windows. |
Автор: | Иван Денисов [ Суббота, 21 Март, 2020 05:21 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
В GNU/Linux это расширение Йозефа тоже работает, кстати. Проверял https://community.blackboxframework.org ... t=162#p928 |
Автор: | ddn1 [ Понедельник, 19 Октябрь, 2020 21:15 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
adimetrius писал(а): Вот команда запуска сервера: В модуле Http нет процедуры StartHttpServer. Что за модуль KeepRemote, он опубликован?Код: KeepRemote.StartHttpServer('CommTCP', '0.0.0.0:1081', '/BB/') adimetrius писал(а): Для обычного веб-сервера - т.е. для раздачи html-файлов - уже все реализовано в Http, только запустить, программировать ничего не надо. Что-то сомневаюсь, как раздать папку с файлами через заданный порт?Вообще, язык html-запросов, это какой-то маразм. Зачем он нужен? Проще сделать ftp-сервер, работающий с файловой системой через модуль Files, параметры сервера будут в txt-файлах служебного каталога, авторизацию можно сделать через запись команд в служебный файл, данные - в каталогах пользователей. Остальное - забота браузера, без маразматических протоколов. adimetrius писал(а): Чтобы получить документ по http, я пользовался модулем от Ивана Денисова. Что за модуль, где его достать?
|
Автор: | Иван Денисов [ Вторник, 20 Октябрь, 2020 18:44 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
CommHttp есть в старой сборке https://oberoncore.ru/projects/intron Посмотрите файл CommObxHttp Всё пока руки не дойдут его отдельно нормально опубликовать. А вот тут ещё есть сервер для раздачи файлов: https://github.com/bbcb/bbcp/tree/maste ... les/server Если посмотреть TcpTask, то увидите, что там любое динамическое содержимое также возможно отдавать. Но обработку POST запросов я так и не доделал пока. Ну и в целом реализация требует доработки. |
Автор: | adimetrius [ Вторник, 20 Октябрь, 2020 20:59 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
Упс, нестыковочка вышла. Действительно, 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. Но - пока не достаточно оттестировал и не опубликовал. |
Автор: | Иван Денисов [ Четверг, 23 Декабрь, 2021 23:24 ] |
Заголовок сообщения: | Re: Http (от Josef Templ) посыл-прием пакетов |
Иван Денисов писал(а): CommHttp есть в старой сборке https://oberoncore.ru/projects/intron Посмотрите файл CommObxHttp Всё пока руки не дойдут его отдельно нормально опубликовать. Не написал документацию, на там в целом довольно понятные примеры. Зато опубликовал! https://blackbox.oberon.org/extension/Hyper Для замечаний и пулреквестов: https://github.com/bbext/hyper |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |