-- Leo's gemini proxy

-- Connecting to any-key.press:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

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


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


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


Что нового в версии 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)

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


Спасибо!


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

nervuri <seva () nervuri ! net>, Vostok server issues


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

-- Response ended

-- Page fetched on Mon May 20 09:59:49 2024