diff options
| author | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2012-06-17 21:15:12 +0000 |
|---|---|---|
| committer | me_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac> | 2012-06-17 21:15:12 +0000 |
| commit | 8df9466ada46e4b07990b9cb7e8b1cd61b96844a (patch) | |
| tree | 2cb652e5839bed672133ffa90e7ad477f55cfb6b /doc/proto.txt | |
| download | pica-pica-8df9466ada46e4b07990b9cb7e8b1cd61b96844a.tar.gz pica-pica-8df9466ada46e4b07990b9cb7e8b1cd61b96844a.zip | |
todo list update
git-svn-id: svn://localhost/project_picapica/trunk@128 fb96df88-216d-11de-830c-f3023f12d8ac
Diffstat (limited to 'doc/proto.txt')
| -rwxr-xr-x | doc/proto.txt | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/doc/proto.txt b/doc/proto.txt new file mode 100755 index 0000000..1390698 --- /dev/null +++ b/doc/proto.txt @@ -0,0 +1,148 @@ +Формат пакета +[Заголовок] - 2 байта с одинаковым значением, определяющим тип сообщения +[Хвост] - остальная часть пакета. Может быть пустым. Имеет либо фиксированную длину, заданную для данного сообщения, +либо содержит в начале 1 или 2 байта, содержащих размер (в виде целого беззнакового числа, порядок байт-младший байт по младшему адресу) остальной части, не включая байты размера + +Протокол авторизации и пересылки данных (между сервером и клиентом) + ++++[запрос на подключение] -клиент +0xCA 0xCA Ver_major Ver_minor - версия протокола клиента +-4 байта + +===============новый вариант ++++[ответ сервера] - сервер +0x01 0x01 'O' 'K' +===============новый вариант +При удачном прохождении проверки клиент ожидает инициирования защищенного соединения по протоколу TLS, выступая в роли сервера. Сервер выступает в роли TLS-клиента. + + ++++[различные версии протокола] -сервер +0x02 0x02 Ver_major Ver_minor - версия протокола сервера + +после отправки данного пакета сервер разрывает соединение. + + Нижеследующие сообщения передаются через защищенное управляющее соединение клиента с сервером. +|КЛИЕНТ-СЕРВЕР| + ++++[запрос на установление соединения с собеседником] - клиент, по установленному защищенному соединению +0x03 0x03 (UIN вызываемого пользователя, в формате little-endian) + ++++[запрос на разрешение соединения] - сервер, по установленному защищенному соединению +0x04 0x04 (UIN инициатора, в формате little-endian) + ++++[пользователь с данным UIN не найден (в оффлайне, отказался от разговора)] +- сервер, по установленному защищенному соединению +0x05 0x05 (UIN вызываемого пользователя, в формате little-endian) + ++++[разрешение соединения от вызываемого пользователя] -вызываемый клиент, по установленному защищенному соединению +0x06 0x06 (UIN вызывающего пользователя, в формате little-endian) +после отправки данного сообщения вызваемый клиент осуществляет подключение к серверу на порт обмена данными (_DATA_PORT) и отправляет через это соединение сообщение 0x20 -идентификация нового соединения + ++++[пользователь с данным UIN найден и готов общаться] - сервер вызывающему клиенту +0x07 0x07 (UIN вызываемого пользователя, в формате little-endian) + ++++[отказ от общения]-вызываемый клиент +0x08 0x08 (UIN вызывающего пользователя, в формате little-endian) + ++++[запрос списка узлов] - клиент +0x09 0x09 (2 случайных байта) + ++++[список узлов] - сервер +0x0A 0x0A -- см формат 0xA4 + + Нижеследующие сообщения передаются через соединение сервера с клиентом для передачи данных + ++++[идентификация нового соединения] - клиент +0x20 0x20 (UIN вызывающего пользователя) (UIN вызываемого пользователя) + +сервер при получении данного сообщения проверяет UINы. При несовпадении соединение разрывается. После проверки сервер переходит в режим пересылки данных между двумя клиентами. Вызывающий клиент инициирует установку соединения по протоколу TLS + + + +Протокол обмена сообщениями (между клиентами через сервер(ы) ) |КЛИЕНТ-КЛИЕНТ| + ++++[сообщение - текст в кодировке UTF8] +0x30 0x30 (длина сообщения в байтах- 2 байта в формате little-endian) сообщение в кодировке UTF8 + ++++[отчет о доставке предыдущего сообщения] +0x40 0x40 (2 случайных байта) + + +Пинг + ++++[пинг-запрос] - может быть отправлен любой стороной, как по управляющему соединению, так и по межклиентскому +0x68 0x68 (2 случайных байта) + ++++[пинг-ответ] +0x69 0x69 (2 случайных байта) + + + +Протокол межсерверного взаимодействия | СЕРВЕР-СЕРВЕР (УЗЕЛ-УЗЕЛ) + ++++[запрос на подключение сервера] -узел узлу +0xCB 0xCB Ver_major Ver_minor - версия протокола узла + +(варианты ответа сервера - 0x01,0x02 - те же, что и для клиента) + ++++[анонс нового узла - IPv4 адрес] +0xA0 0xA0 | IP -адрес нового узла - 4 байта, сетевой порядок байт| номер порта - 2 байта, сетевой порядок байт| + ++++[анонс нового узла - IPv6 адрес] +0xA1 0xA1 | IPv6 -адрес нового узла - 16 байт, сетевой порядок байт| номер порта - 2 байта, сетевой порядок байт| + ++++[анонс нового узла - DNS адрес] +0xA2 0xA2 | длина адреса - 1 байт | DNS адрес нового узла| номер порта - 2 байта, сетевой порядок байт| + +Заявленный в анонсе адрес должнен соответствовать адресу, с которого произошло подключение. Получивший анонс узел должен это проверить. + ++++[список узлов] +0xA4 0xA4 | размер списка адресов в байтах, 2 байта - 0..65532| список адресов +список адресов представляет собой последовательность из элементов 3 возможных типов +|0xA0|IP -адрес - 4 байта | номер порта - 2 байта| - 7 байт +|0xA1|IPv6 -адрес | номер порта - 2 байта|- 19 байт +|0xA2|длина адреса - 1байт| DNS адрес| номер порта - 2 байта| 4 ... 259байт + +Первым в списке всегда идет собственный адрес узла-отправителя (в данном адресном пространстве). +Сообщение может содержать не весь список узлов, а только часть. Весь список в таком случае будет пересылаться по частям. Адреса и номера портов имеют "сетевой" порядок байтов. +Размер всего пакета не превышает 64кб + ++++[запрос списка узлов] @@@ +0x90 0x90 (2 случайных байта) + + ++++[поиск клиента] - отправляется всем узлам. Узел-получатель отвечает на это сообщение, только если искомый UIN найден среди локальных клиентов либо в кэше +0xA5 0xA5 (UIN вызываемого пользователя, в формате little-endian) + ++++[результат поиска клиента-клиент найден ] - отправляется узлом, получившим 0xA5, если искомый UIN найден среди локальных подключенных клиентов +0xA8 0xA8 (UIN вызываемого пользователя, в формате little-endian) + ++++[результат поиска клиента-клиент найден в кэше ] - отправляется узлом, получившим 0xA5, если искомый UIN найден в кэше (т.е есть информация о подключении искомого клиента к другому узлу) +0xA9 0xA9 (размер - два байта, [13-263] )(UIN вызываемого пользователя, в формате little-endian) (адрес узла, на котором может быть искомый UIN, в формате A0|A1|A2 см. описание 0xA4) + + ++++[запрос на разрешение соединения c клиентом узла-получателя] +0xAA 0xAA (UIN инициатора, в формате little-endian) (UIN вызываемого пользователя, в формате little-endian) + ++++[разрешение соединения от вызываемого пользователя]-отправляется после того, как вызываемый локальный клиент ответил сообщением 0x06 и создал новое соединение для обмена сообщениями +0xAB 0xAB (UIN инициатора, в формате little-endian) (UIN вызываемого пользователя, в формате little-endian) + ++++[клиент не найден (в оффлайне, отказался от разговора)] +отправляется узлом в ответ на сообщение 0xD0, адресованное данному UIN-у, +если данный пользователь уже отключился или его нету в списке локальных клиентов, +либо в ответ на 0xAA, если вызываемый клиент отказался от соединения. +0xB8 0xB8 (UIN инициатора, в формате little-endian)(UIN вызываемого пользователя, в формате little-endian) + ++++[сообщение, передаваемое клиентами между узлами] +0xD0 0xD0 (длина вложенного сообщения в байтах [8 - 65532] , - 2 байта в формате little-endian) (UIN локального пользователя-отправителя) (UIN пользователя на другом узле) вложенные данные + +вложенные данные - данные передаваемые через соединение КЛИЕНТ-КЛИЕНТ + + + + + + + + + |
