summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2012-06-17 21:15:12 +0000
committerme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2012-06-17 21:15:12 +0000
commit8df9466ada46e4b07990b9cb7e8b1cd61b96844a (patch)
tree2cb652e5839bed672133ffa90e7ad477f55cfb6b /doc
downloadpica-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-xdoc/TASKS.txt78
-rwxr-xr-xdoc/bugtraq.txt21
-rwxr-xr-xdoc/concepts.txt1
-rwxr-xr-xdoc/glossary.txt1
-rwxr-xr-xdoc/proto.txt148
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 пользователя на другом узле) вложенные данные
+
+вложенные данные - данные передаваемые через соединение КЛИЕНТ-КЛИЕНТ
+
+
+
+
+
+
+
+
+