Технологии

База данных

База данных стандартной реализации ii состоит из двух каталогов: echo/ и msg/. В msg/ хранятся сами сообщения, имена файлов (они же номера сообщений или msgid) генерируются как 20 первых символов base64 sha256-bin хэша сообщения. В echo/ хранятся индексы сообщений: там находятся файлы эхоконференций (имя файла = название эхи).

Файл в echo/эха.постфикс состоит из списка имён файлов сообщений, находящихся в msg/, по порядку, в конце пустая строка. Из-за простой структуры базы данных сообщения можно передавать даже оффлайн, на флешке: достаточно лишь положить сообщение в msg/ и в файле эхоконференции прописать его хэш (вручную или простейшим скриптом).

Получение данных

Получить данные из нужных эх может любой пользователь, авторизованный или нет. Сначала нужно получить список сообщений эхи, и потом загрузить недостающие сообщения, которых ещё нет в базе данных. Подобным образом могут получать данные любые пойнты, и так же, настроив взаимное получение данных друг с друга, обмениваться между собой ноды.

бандл (нод2нод)

Бандл - это полное, сформированное сообщение, уже имеющее идентификатор. В отличие от просто получения сообщения по его номеру, бандл уже содержит и само сообщение (и, возможно, не одно).

Формат бандла - строка НОМЕРСООБЩЕНИЯ:BASE64код. В base64 и закодировано само сообщение - файл, идентичный лежащему в msg/

По умолчанию, при распаковке, бандл создаёт все эхи, которые указаны в заголовках. То есть, распаковка бандла - это команда создать такое сообщение и прописать его во все эхи.

Бандлу не нужен онлайн. Можно создать бандл со всеми нужными сообщениями и передать его любым способом - после его распаковки в базе создадутся все сообщения.

Пойнты никогда не генерируют бандлы для нод, у них свои бандлы (называемые msgline)

Сообщения

Письма - это то, что пишет пойнт. Пойнты пишут письма, а ноды - только обмениваются. То, как письмо появляется, из чего создаётся, где гуляет до получения идентификатора - это вне компетенции сети.

В прошлой жизни это могло быть смс, сообщение на форуме или написанная заметка. Пока оно не получило свой номер - это не сообщение сети, это просто текст. Сообщением сети оно становится только тогда, когда нода присвоит ему номер и включит его в нодообмен. С тех пор, формально, сообщение считается "навечно сохранённым", и будет гулять по всему нодообменнику, согласно выстроенной иерархии (может вообще никогда не покидать пределов ноды, если эха не гейтуемая).

"Бандл" для сообщения называется msgline. Это тоже закодированный base64-файл, но без номера, и содержащий только сабж, msgto, название эхи, и, возможно, repto. Поля msgfrom, addr, date и номер сообщения присваиваются уже нодом.

Файлы

Формат хранимого сообщения в /msg (и текста в бандле)

строкаполеописание
1разные тэги в виде: имя/значение/имя2/значениев текущем виде используются только для repto и для рекомендуемого идентификатора ii/ok
2echoareaосновная эхоконференция, в которую помещается сообщение
3dateчисло секунд от эпохи unix, в utc
4msgfromотправитель сообщения
5addrадрес отправителя сообщения
6msgtoпользователь, которому предназначено сообщение (либо All)
7subjтема сообщения
8-пустая строка
9 и далееmsgтекст сообщения

Формат кодирования: ИДЕНТИФИКАТОР:СТРОКА

где СТРОКА - это просто текстовый файл, кодированный base64, а ИДЕНТИФИКАТОР - номер сообщения, обеспечивающий его уникальность.

Разделитель нескольких сообщений - новая линия (LF, код 10).

Пояснение: первая строка(теги) при обычном сообщении обычно принимает значение ii/ok, а при сообщении-ответе значение ii/ok/repto/pn5x7OaFxSKfGwHAD2Hd, где то, что находится после repto/, является id сообщения, на которое отвечаешь.

Формат сообщения, которое отправляют пойнты (msgline)

строкаполеописание
1echoareaэхоконференция, в которую помещается сообщение
2msgtoпользователь, которому предназначено сообщение (либо All)
3subjтема сообщения
4-пустая строка
5reptoесли начинается с @repto:, то проставляет тэг repto. Иначе строка относится к тексту сообщения
6 и далееmsgтекст сообщения

Формат кодирования: СТРОКА

где СТРОКА - это просто текстовый файл, кодированный base64

Внимание! Пустое поле subj и/или пустой текст сообщения не допускаются.

Стандарты

Имя эхи - от 3 до 120 символов: маленькие латинские буквы, цифры, символы подчёркивания, минуса и точки. Название должно содержать минимум одну точку. В старых версиях обязано заканчиваться на точку и число. Разные фильтры могут устанавливать разные ограничения, поэтому придерживайтесь пределов разумного при создании своих эх.

Примеры правильных названий эх: 1.1 ii.14 ii.about.14 to.ivan.15, my.beseda

Адрес практического смысла не имеет, служит для того чтобы узнавать, с какой станции пришло сообщение.

Номер_сообщения - уникальный идентификатор, 20 символов, содержащий только A-Z, a-z и 0-9

Рекомендации

Файл текста отдавать именно в том виде, в каком он лежит в базе данных (в случае стандартной базы данных). Для списка эх требуется заканчивать последнюю запись переносом строки, но пустые строки при этом не допускаются.