💾 Archived View for any-key.press › vostok › reports › 0.1.0.gmi captured on 2023-11-04 at 11:31:14. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-09-08)

➡️ Next capture (2024-05-10)

🚧 View Differences

-=-=-=-=-=-=-

vostok: сервер Gemini, версия 0.1.0

А вот и свежая версия Gemini сервера vostok! В течении её разработки код был подвергнут сильному рефакторингу, поэтому мне показалось логичным поднять версию до 0.1.0. Хотя до версии "один-точка-ноль" всё ещё далеко, если она вообще когда-нибудь будет)))

Предыдущая запись блога разработки

Что нового в версии 0.1.0:

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)

tls_close(3)

Исправление в исходном коде сервера 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. Не везде, а там где мне показалось уместным: там, где интерфейс после этого становится чище. Речь про производительность пока не идёт, но я всё равно стараюсь обходиться без ненужных копирования, выделения и освобождения памяти. Вроде бы код стал лучше. Но с уверенностью можно будет сказать через несколько месяцев, когда придётся вернуться к исходному коду, которого давно не видел. Вот тогда свежим взглядом будет понятно. Или непонятно))

Спасибо!

Ещё раз выражаю отдельную большую благодарность всем, кто оставляет обратную связь:

Следующая запись блога разработки