commit 22155b86873471fb323812c6e59513ba1873d912 from: Aleksey Ryndin date: Wed Sep 06 09:48:16 2023 UTC Add vostok/reports/0.1.0.gmi commit - fa9b355d4aeb366f7e40b9c1e99a0a3d29cc443e commit + 22155b86873471fb323812c6e59513ba1873d912 blob - ead84456eb0e78a951a0303ce7fbd1a310257c62 blob + 158547f4cc6099f0ec5a59cf6de05974745d686d --- .gitignore +++ .gitignore @@ -1 +1,2 @@ **/*.swp +**/*.mp3 blob - 15433943e06dc9bd6ff3f46e6516971541062385 blob + c8c9da556b3a3f711a45052cd32a0893a7be5fca --- capsule/index.gmi +++ capsule/index.gmi @@ -10,11 +10,6 @@ Материалы на русском языке распосложены здесь: => vostok/ Простой Gemini сервер vostok (Восток), написанный на C++11 -## Архив аудио лекции - -В своей капсуле я храню архив интересных (по моему мнению) аудиолекции. -=> not_my_voice/ Аудио лекции - ## Связаться со мной При желании со мной можно связаться следующими способами: blob - 0477a6acf5d20fef77079ab233891b5944a58dd6 blob + 83182f06d02ec1fb5d002bb109b56ea35f77e933 --- capsule/vostok/index.gmi +++ capsule/vostok/index.gmi @@ -8,12 +8,12 @@ ssh://anonymous@got.any-key.press/vostok Название сервера отсылает к имени советского космического корабля "Восток-1", на котором Юрий Алексеевич Гагарин совершил первый пилотируемый полёт человека в космос. -=> /vostok/how_to_run_on_openbsd.gmi Как запустить сервер vostok на OpenBSD +=> how_to_run_on_openbsd.gmi Как запустить сервер vostok на OpenBSD ## Блог разработки сервера vostok на русском языке -=> /vostok/reports/ Блог разработки сервера vostok +=> reports/ Блог разработки сервера vostok ## Обратная связь blob - d6c72cf91243fce51adda90b4e62394aeddec284 blob + 4212469ed027c0ac0b056461f4998d6a51d234f3 --- capsule/vostok/reports/0.0.1.gmi +++ capsule/vostok/reports/0.0.1.gmi @@ -105,4 +105,4 @@ vostok@to.any-key.press Если вы не знакомы с практикой отсылки git-патчей через элетронную почту, то рекомендую к ознакомлению ресурс: => https://git-send-email.io/ Learn to use email with git -=> /vostok/reports/0.0.2.gmi Следующая запись блога разработки +=> 0.0.2.gmi Следующая запись блога разработки blob - e4dc3f51ce37cbd73031bba8b0494d613e845af0 blob + 0c70256faf35fa55291603c86c3c811ba310bb19 --- capsule/vostok/reports/0.0.2.gmi +++ capsule/vostok/reports/0.0.2.gmi @@ -2,7 +2,7 @@ Ого, энтузиазма хватила на вторую версию сервера? Это уже что-то значит... наверное) -=> /vostok/reports/0.0.1.gmi Предыдущая запись блога разработки +=> 0.0.1.gmi Предыдущая запись блога разработки Что нового в версии 0.0.2: * открытие директории перенаправляется на открытие файла index.gmi в этой диреткории; @@ -69,4 +69,6 @@ extern "C" int main(int, char **){ return vostok::test ## Спасибо! Отдельная большая благодарность всем, кто присылает патчи. В частности: -* la-ninpre , Makefile: compile files separately +* la-ninpre , Makefile: compile files separately + +=> 0.1.0.gmi Следующая запись блога разработки blob - 4dcd988632b06ef423c1916743ebbd9b6422562e blob + 56cb604864a4f3e3ffc33fc9899a3634062dafff --- capsule/vostok/reports/index.gmi +++ capsule/vostok/reports/index.gmi @@ -1,4 +1,5 @@ # Блог разработки сервера vostok -=> /vostok/reports/0.0.2.gmi v0.0.2 (2023-08-23) -=> /vostok/reports/0.0.1.gmi v0.0.1 (2023-08-17) +=> 0.1.0.gmi v0.1.0 (2023-09-06) +=> 0.0.2.gmi v0.0.2 (2023-08-23) +=> 0.0.1.gmi v0.0.1 (2023-08-17) blob - /dev/null blob + 875af0d7f9ac8781f8b2fda68dad2e12fa70cd36 (mode 644) --- /dev/null +++ capsule/vostok/reports/0.1.0.gmi @@ -0,0 +1,49 @@ +# vostok: сервер Gemini, версия 0.1.0 + +А вот и свежая версия Gemini сервера vostok! В течении её разработки код был подвергнут сильному рефакторингу, поэтому мне показалось логичным поднять версию до 0.1.0. Хотя до версии "один-точка-ноль" всё ещё далеко, если она вообще когда-нибудь будет))) + +=> 0.0.2.gmi Предыдущая запись блога разработки + +Что нового в версии 0.1.0: +* Появилась поддержка MIME типов. +* Улучшено соответствие спецификации протокола Gemini (TLS `close_notify`). +* Добавлена команда "make install". +* Сформирован документ по стилю исходного кода сервера. +* Проведён глубокий рефакторинг существующего кода. + +## MIME + +Если смотреть на сервер со стороны, то главное нововведение в новой версии это добавление поддержки MIME типов. Для того, что бы сервер получил знания о том, какие расширения файлов соответствуют типам их содержимого, в командной строке появилась опция -m в аргументе которой нужно указать путь в файлу mime.types. POSIX не регламентирует расположение этого файла в системе. На всех доступных мне Linux машинах этот файл имеет путь "/etc/mime.types", а, например, в OpenBSD системе путь к этому файлу "/usr/share/misc/mime.types". + +Получив в распоряжение содержимое такого файла, сервер указывает "правильные" MIME-типы в своих ответах. Что приводит к тому, что, например, картинки будут открываться как картинки, если ваш Gemini клиент такое умеет. А даже если не умеет, то, возможно, он не будет пытаться отображать бинарные файлы в виде текста, а сразу предложит сохранить их в файл на диске. Например: +=> gemini://vostok.any-key.press/capsule/vostok.png + +## TLS `close_notify` + +А тут стоит сказать спасибо nervuri. Я как-то недоглядел, что в спецификации Gemini, в разделе 4 TLS, есть требование явно закрывать TLS сессию: +> As per RFCs 5246 and 8446, Gemini servers MUST send a TLS `close_notify` prior to closing the connection after sending a complete response. +=> gemini://gemini.circumlunar.space/docs/specification.gmi + +Благо это довольно просто решается вызовом tls_close(3) +=> https://man.openbsd.org/tls_close.3 tls_close(3) +=> https://got.any-key.press/?action=diff&commit=63be947448f2ae6d0a939be08cf39c01cd907b1f&path=vostok.git Исправление в исходном коде сервера vostok + +## Установка + +Еще одно нововведение: добавлена команда "make install". Естественно её нужно выполнять с правами пользователя root. Эта команда устанавливает исполняемый файл собранного сервера vostok в вашу систему. Классические тройка команд ("make", "make install" и "make clean") теперь присутствует. + +## Стиль + +Я решил набросать небольшой документ по стилю C++ кодирования сервера vostok: +=> gemini://vostok.any-key.press/capsule/coding_style.gmi + +Меня иногда начинает подбешивать разный стиль именования, хотя пока весь C++ код я пишу в одно лицо. Поэтому в первую очередь для себя я написал этот документ. Что бы в случае сомнений не грепать по исходникам примеры, а заглянуть в capsule/coding_style.gmi. Ну и, при случае, дополнять его. + +## Рефакторинг + +Вырабатывая новый стиль кодирования пришлось сильно отрефакторить исходники. Перечитывая исходный код я понял, что слишком сильно стал грешить "велосепедостроительством", поэтому попутно перешёл на стандартные контейнеры из STL. Не везде, а там где мне показалось уместным: там, где интерфейс после этого становится чище. Речь про производительность пока не идёт, но я всё равно стараюсь обходиться без ненужных копирования, выделения и освобождения памяти. Вроде бы код стал лучше. Но с уверенностью можно будет сказать через несколько месяцев, когда придётся вернуться к исходному коду, которого давно не видел. Вот тогда свежим взглядом будет понятно. Или непонятно)) + +## Спасибо! + +Ещё раз выражаю отдельную большую благодарность всем, кто оставляет обратную связь: +* nervuri , Vostok server issues blob - /dev/null blob + 461c541f7e0b8bac2840b3630a8a81940699dffb (mode 644) --- /dev/null +++ capsule/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /*.mp3$