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 | |
| 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')
| -rwxr-xr-x | doc/TASKS.txt | 78 | ||||
| -rwxr-xr-x | doc/bugtraq.txt | 21 | ||||
| -rwxr-xr-x | doc/concepts.txt | 1 | ||||
| -rwxr-xr-x | doc/glossary.txt | 1 | ||||
| -rwxr-xr-x | doc/proto.txt | 148 |
5 files changed, 249 insertions, 0 deletions
diff --git a/doc/TASKS.txt b/doc/TASKS.txt new file mode 100755 index 0000000..c4151cd --- /dev/null +++ b/doc/TASKS.txt @@ -0,0 +1,78 @@ ++ Написать отдельную функцию, которая добавляет сообщение в исходящий буфер для заданного клиента/узла + ++ Расширение сервера до распределенного взаимодействия. Открыть еще один порт для входящих соед. от других узлов. Разработать структуру, опис. соединение с др. узлами. Написать функцию, загружающую список адресов узлов,выполняющую подключение к узлам и обновляющую список. Написать функцию работы с соединениями с другими узлами. + +- Регрессионные тесты + +- Список узлов. Разработать структуру элемента списка, функции для работы со списком, которые будут применяться клиентом и узлом. + +- Реализовать поддержку туннелей, как в SSH + +- Возле каждой функции в коде сделать ее описание. Делать описание для будущих функций + +- Сделать обработку ошибок + +-(+--) Упорядочить названия идентификаторов + +- Добавить поддержку IPv6 + +-(+--) Реализовать обработку тайм-аутов + +- Счетчики трафика входящего и исходящего, активных пользователей + +- Привести в соответствие требованиям GNU coding standards( к приемлемым требованиям) + + +- Адресные пространства + ++ Удалить понятие "название сети" из протокола и кода.Инкрементировать версию протокола + ++ Добавить в клиентскую библиотеку еще одну callback-функцию, сообщающую о неуспешной попытке создания канала./Разобраться с неконсистентностью освобождения ресурсов в (close_channel,close_connection,establish_data_connection)/ + +- Соединения между узлами шифруются при помощи ADH (не нужно?) + ++ Все входящие соединения узла через один TCP порт, а не 3 + +- Очередь задач (соединиться с узлом и т.д) + +- Балансировка нагрузки между узлами (Узлы обмениваются количеством подключенных юзеров, потом самые нагруженные узлы посылают клиентам команду "сменить узел" с отсортированным списком N наименее нагруженных узлов) + +- автоматическая регистрация аккаунтов + +- сайт, багтрекер, VCS, форум, почтовая рассылка + ++ сохранение открытых ключей контактов и их сопоставление при каждом сеансе + +- список контактов, кому разрешено видеть, когда абонент в сети + ++ хранение списка узлов pica-node в базе sqlite + +- autotools + +- хранение недоставленных сообщений на стороне клиента, в базе sqlite, пока абонент не появится в сети + +- история сообщений, с опциональным шифрованием + +- проверка сертификата клиента узлом (узел должен иметь копию корневого сертификата) + +- переводы интерфейса + +- документация пользователя + +- текст лицензий (OpenSSL, iniparser, pica pica, Qt) в окошке about и файлах LICENSE + +- собрать и протестировать под Windows (32 и 64 бита) + +- аудио-видео звонки (ffmpeg) + +- передача файлов + +- возможность прямого P2P соединения между клиентами, клиент может выбирать предпочитаемый вариант (запретить P2P / использовать по возможности) + +- периодическая смена CA ключей и уничтожение старого приватного ключа, публикация списков выданных сертификатов для каждого ключа (???) + +- конфигурация узла (конфиг файл, опции командной строки, дефолтные значения) + +- пакеты для разных дистрибутивов (ebuild, deb, rpm) + + diff --git a/doc/bugtraq.txt b/doc/bugtraq.txt new file mode 100755 index 0000000..bf312f7 --- /dev/null +++ b/doc/bugtraq.txt @@ -0,0 +1,21 @@ +1. [V] Падение test_client при вызове SSL_free: + +puts("CACA_close_channel_chkp3");//debug + +if (chn->ssl) +SSL_free(chn->ssl);<<<< + +после +verify result:10 // просроченный корневой сертификат +//////////// +причина - повторный вызов SSL_free +(сначала в функции establish_data_connection, затем в CACA_close_channel) + +Баг исправлен путем помещения вызова CACA_close_channel в establish_data_connection в случае ошибки при создании канала. Также добавлена новая callback функция channel_failed, вызываемая в случае ошибки при создании канала + +========================================================== +2. Авторизация клиента узлом без сертификата + +Клиент возможно может установить TLS соединение с узлом используя ADH схему. Узел +может выпасть с ошибкой, если не удается получить сертификат клиента. Надо явно задавать +набор разрешенных схем шифрования в клиенте и сервере diff --git a/doc/concepts.txt b/doc/concepts.txt new file mode 100755 index 0000000..2383e28 --- /dev/null +++ b/doc/concepts.txt @@ -0,0 +1 @@ +[Ïîèñê ñîáåñåäíèêà.Íåêîòîðûå ñîîáðàæåíèÿ ïî îáëåã÷åíèþ ïîèñêà] diff --git a/doc/glossary.txt b/doc/glossary.txt new file mode 100755 index 0000000..8d1c8b6 --- /dev/null +++ b/doc/glossary.txt @@ -0,0 +1 @@ + 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 пользователя на другом узле) вложенные данные + +вложенные данные - данные передаваемые через соединение КЛИЕНТ-КЛИЕНТ + + + + + + + + + |
