Разговоры о личных сообщениях в сетях IDEC ведутся давно – года два. Но к какому либо решению, договоренности так и не пришли. Самая большая проблема – это оставить IDEC простым, plaintext. В этом документе попробуем набросать некий протип, который может быть войдет в стандарт.
- [-] Описание стандарта в этом документе
    - [-] Формат бадла
- [-] Формат сообщения на отправку
- [-] Формат node2node API
- [-] Формат client API
 
- [-] Согласие на принятие стандарта от core-team(ники с Github)
    - [-] vit1-irk
- [-] btimofeev
- [-] spline1986
- [-] Difrex
 
- [-] Реализация PoC
    - [-] Сервер
- [-] Клиент
 
Сейчас у нас есть практически не используемые поля, такие как, tags и address.
- tags
    Теги в IDEC в сообщении представляют из себя список с разделителем /. Так обязательные теги, которые проверяют все ноды/клиенты – этоii/ok. Также у нас имеется тег ответа на сообщение -repto/IZXhLBKJx0rhx0lXYu3LДля личного сообщения предлагается добавить некий тег, например,type/xmailпо которому нода сможет определять, что это сообщение является личным.
- address Адрес сейчас не используется никак и только говорит о том, с какой ноды пишет человек. Предлагается исправить этот недостаток. Мы можем использовать адреса для отправки сообщения определенному поинту на его адрес.
На основе нижеизложенных фактов предлагается к рассмотрению следующий формат бандла
ii/ok/repto/IZXhLBKJx0rhx0lXYu3L/type/xmail # Тут мы проставлем тег ответа, а так же сообщаем, что сообщение является личным
dynamic,1                              # Вместо эхи мы используем адрес поинта, кому предназначено это сообщение
1455789357                             # Время сообщения в unixtime
Pupkin                                 # Имя пользователя отправившего сообщение
Lunar, 2                               # Адрес поинта отправившего сообщение
Vasya                                  # Имя пользователя, которому предназначенно сообщение
Re: Мое первое сообщение в эху         # Заголовок сообщения
                                       # Пустая строка
текст сообщения                        # Текст сообщения
dynamic,1                                      # Вместо эхи используем адрес
Vasya                                          # Имя пользователя, которому предназначено сообщение
Тестируем                                      # Заголовок сообщения
                                               # Пустая строка
@repto:2hEUbMAxKSA83vcmgU4s                    # Проставляем тег ответа, либо строка относится к телу сообщения
И вот я пишу своё первое письмо в нашу секту.  # Текст
Меня видно?                                    # сообщения
Т.к. мы используем теги, то API отправки сообщения можно не менять, но поменять конечный эндпоинт, вынеся его в расширения протокола.
Т.е.:
curl -XPOST -d 'pauth=authstring' -d 'tmsg=BASE64' http://node.domain.tld/x/m/point
# Либо
curl -XGET http://node.domain.tld/x/m/point/authstring/BASE64А для получения сообщений адресованных вам делаем запрос вида
curl -XGET http://node.domain.tld/x/m/mail/authstring
# Либо
curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/
# Получение сообщений со сдвигом
curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/-10:10Т.к. нода по authstring может узнать информацию о поинте, то она должна знать о том какие сообщения адресованные этому поинту есть на этой ноде и возвращает их.
Так, ответ от ноды предлагается сделать аналогичным /u/e:
curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/-1:1
HTTP/1.1 200 Ok
Content-Type: text/plain
dynamic,1
IZXhLBKJx0rhx0lXYu3LПолучаем это сообщение
curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/IZXhLBKJx0rhx0lXYu3L
HTTP/1.1 200 Ok
Content-Type: text/plain
IZXhLBKJx0rhx0lXYu3L:BASE64Либо несколько сообщений, по аналогии с существующей схемой /u/e
curl -XPOST -d 'pauth=authstring' http://node.domain.tld/x/m/IZXhLBKJx0rhx0lXYu3L/IZahLHKJ10rZx0ZXAAA0/...
HTTP/1.1 200 Ok
Content-Type: text/plain
IZXhLBKJx0rhx0lXYu3L:BASE64
IZahLHKJ10rZx0ZXAAA0:BASE64
...:BASE64