diff --git a/CHANGELOG.md b/CHANGELOG.md
index 96aeab7..61f75ae 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,30 +1,44 @@
## Next Release
-BREAKING CHANGES:
-FEATURES:
-IMPROVEMENTS:
+BREAKING CHANGES:
+FEATURES:
+IMPROVEMENTS:
+BUG FIXES:
+
+## v3.22
+
BUG FIXES:
+ * last online time did not save
+
+IMPROVEMENTS:
+
+* Added functions for aggregating statistics of using server
+* Added settings to .ini file for controll content-type header
+* Added dosc in dokuwiki format
+* Was translated comments in comet.ini
+* Added the white list of hosts to .ini file
+
## v3.21
IMPROVEMENTS:
* Added caching in memory for sending static files
* Added cache-control headers for get requests
-
+
## v3.2
BUG FIXES:
* Js Api version 3.28 (Fix bug in auth callbacks)
* Fix bug in auth callbacks
* complete api function getTrackPipeUsers
-
+
## v3.1
-
-FEATURES:
+
+FEATURES:
* Added function to getting users in track_pipes from js api
- * Added deleting api query for pipes history #5
+ * Added deleting api query for pipes history #5
* Added CODE_OF_CONDUCT.md
* Added CONTRIBUTING.md
* Added CHANGELOG.md
diff --git a/comet.ini b/comet.ini
index 667c2b3..a05d64e 100644
--- a/comet.ini
+++ b/comet.ini
@@ -1,11 +1,7 @@
-[main]
-isTest = false; включение тестов
-
-node_name = n1
-useQueryLoger = false
-
-; пароль для доступа к api комет сервера
-;password = 0000000000000000000000000000000000000000000000000000000000000000
+[main]
+
+; Password for accessing comet server api
+password = 0000000000000000000000000000000000000000000000000000000000000000
[db]
host = localhost
@@ -15,36 +11,32 @@ name = comet_db
port = 3305
[ws]
-ip = 0.0.0.0
-backlog = 10000
-epoll_size = 100000
-thread_num = 12
-benchmark = 1 ;Интервал между замерами нагрузки (0 = не замерять)
-port = 8087 ; При подключении в js api не забудте указать порт в параметре node
-uptimeTestInterval = 600 ; Интервал для проверок uptime у соединений (так же за одно выправляет значение счётчика пользователей онлайн)
-maxUptime = 0 ; Максимально значение uptime после которого конект отключается.
+ip = 0.0.0.0
+thread_num = 4 ; number of threads for receive message from websockets
+statistics = 10 ;Interval between load measurements (0 = not measured)
+port = 8087 ; When connecting to js api, do not forget to specify the port in the node parameter
+uptimeTestInterval = 600 ; The interval for checking the uptime of the connections (it also corrects the value of the online user count for one)
+maxUptime = 0 ; The maximum value of uptime after which the connection is disconnected.
+host = * ; comma separated hosts from which allows receiving connections, or asterisk symbol for allowing connections from any host
[cometql]
-ip = 0.0.0.0
-backlog = 1000
-epoll_size = 10000
-thread_num = 4
-benchmark = 0
+ip = 0.0.0.0
+thread_num = 3 ; number of threads for receive message from cometql
+statistics = 10
port = 3300
uptimeTestInterval = 600
maxUptime = 0
-
-[benchmark]
-to_log = false ; Вывод замеров о нагрузке в лог
-
+
[log]
-level = 500
+level = 200; Logging level (600 output all, 200 errors only)
+; Logging levels for individual subsystems
+; Change only if debugging is necessary
Any = 500
TagLoger = 500
appConf = 500
pipeCommands = 500
-benchmark = 500
+statistics = 500
removeOldConnections = 500
MySqlServer = 500
UserIndex = 500
diff --git a/docs/dokuwiki/data/media/comet/%D1%81%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_%D0%BE%D1%82_2017-06-08_15-35-11.png b/docs/dokuwiki/data/media/comet/%D1%81%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_%D0%BE%D1%82_2017-06-08_15-35-11.png
new file mode 100644
index 0000000..67dd3b8
Binary files /dev/null and b/docs/dokuwiki/data/media/comet/%D1%81%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_%D0%BE%D1%82_2017-06-08_15-35-11.png differ
diff --git a/docs/dokuwiki/data/media/comet/htop.png b/docs/dokuwiki/data/media/comet/htop.png
new file mode 100644
index 0000000..07b6a25
Binary files /dev/null and b/docs/dokuwiki/data/media/comet/htop.png differ
diff --git a/docs/dokuwiki/data/media/comet/out.png b/docs/dokuwiki/data/media/comet/out.png
new file mode 100644
index 0000000..9c6c69b
Binary files /dev/null and b/docs/dokuwiki/data/media/comet/out.png differ
diff --git a/docs/dokuwiki/data/media/comet/server-browser-cometserver.png b/docs/dokuwiki/data/media/comet/server-browser-cometserver.png
new file mode 100644
index 0000000..37b4218
Binary files /dev/null and b/docs/dokuwiki/data/media/comet/server-browser-cometserver.png differ
diff --git a/docs/dokuwiki/data/media/en/comet/chat.gif b/docs/dokuwiki/data/media/en/comet/chat.gif
new file mode 100644
index 0000000..7818ce9
Binary files /dev/null and b/docs/dokuwiki/data/media/en/comet/chat.gif differ
diff --git a/docs/dokuwiki/data/media/en/comet/scheme-of-chat.jpg b/docs/dokuwiki/data/media/en/comet/scheme-of-chat.jpg
new file mode 100644
index 0000000..ddf24a3
Binary files /dev/null and b/docs/dokuwiki/data/media/en/comet/scheme-of-chat.jpg differ
diff --git a/docs/dokuwiki/data/media/scheme-of-comet-using.gif b/docs/dokuwiki/data/media/scheme-of-comet-using.gif
new file mode 100644
index 0000000..660dd83
Binary files /dev/null and b/docs/dokuwiki/data/media/scheme-of-comet-using.gif differ
diff --git a/docs/dokuwiki/data/media/star-comet-chat/%D1%81%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_%D0%BE%D1%82_2017-03-06_14-39-30.png b/docs/dokuwiki/data/media/star-comet-chat/%D1%81%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_%D0%BE%D1%82_2017-03-06_14-39-30.png
new file mode 100644
index 0000000..d4ff7c2
Binary files /dev/null and b/docs/dokuwiki/data/media/star-comet-chat/%D1%81%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_%D0%BE%D1%82_2017-03-06_14-39-30.png differ
diff --git a/docs/dokuwiki/data/media/star-comet-chat/screenshot_17_.png b/docs/dokuwiki/data/media/star-comet-chat/screenshot_17_.png
new file mode 100644
index 0000000..7b9701a
Binary files /dev/null and b/docs/dokuwiki/data/media/star-comet-chat/screenshot_17_.png differ
diff --git a/docs/dokuwiki/data/media/star-comet-chat/screenshot_18_.png b/docs/dokuwiki/data/media/star-comet-chat/screenshot_18_.png
new file mode 100644
index 0000000..5118b29
Binary files /dev/null and b/docs/dokuwiki/data/media/star-comet-chat/screenshot_18_.png differ
diff --git a/docs/dokuwiki/data/media/star-comet-chat/screenshot_19_.png b/docs/dokuwiki/data/media/star-comet-chat/screenshot_19_.png
new file mode 100644
index 0000000..564bf56
Binary files /dev/null and b/docs/dokuwiki/data/media/star-comet-chat/screenshot_19_.png differ
diff --git a/docs/dokuwiki/data/media/star-comet-chat/screenshot_21_.png b/docs/dokuwiki/data/media/star-comet-chat/screenshot_21_.png
new file mode 100644
index 0000000..3077694
Binary files /dev/null and b/docs/dokuwiki/data/media/star-comet-chat/screenshot_21_.png differ
diff --git a/docs/dokuwiki/data/media/star-comet-chat/screenshot_4_.png b/docs/dokuwiki/data/media/star-comet-chat/screenshot_4_.png
new file mode 100644
index 0000000..0d0d0ce
Binary files /dev/null and b/docs/dokuwiki/data/media/star-comet-chat/screenshot_4_.png differ
diff --git a/docs/dokuwiki/data/media/user/app/modx-messenger.png b/docs/dokuwiki/data/media/user/app/modx-messenger.png
new file mode 100644
index 0000000..fa26cf9
Binary files /dev/null and b/docs/dokuwiki/data/media/user/app/modx-messenger.png differ
diff --git a/docs/dokuwiki/data/media/user/mogutacms-plugin1.png b/docs/dokuwiki/data/media/user/mogutacms-plugin1.png
new file mode 100644
index 0000000..d8d480e
Binary files /dev/null and b/docs/dokuwiki/data/media/user/mogutacms-plugin1.png differ
diff --git a/docs/dokuwiki/data/media/user/picture.jpg b/docs/dokuwiki/data/media/user/picture.jpg
new file mode 100644
index 0000000..218a7d7
Binary files /dev/null and b/docs/dokuwiki/data/media/user/picture.jpg differ
diff --git a/docs/dokuwiki/data/media/wiki/dokuwiki-128.png b/docs/dokuwiki/data/media/wiki/dokuwiki-128.png
new file mode 100644
index 0000000..f3f1d66
Binary files /dev/null and b/docs/dokuwiki/data/media/wiki/dokuwiki-128.png differ
diff --git a/docs/dokuwiki/data/pages/comet/authentication.txt b/docs/dokuwiki/data/pages/comet/authentication.txt
new file mode 100644
index 0000000..2c7f2de
--- /dev/null
+++ b/docs/dokuwiki/data/pages/comet/authentication.txt
@@ -0,0 +1,77 @@
+RU::002-API::004-Авторизация пользователей на комет сервере
+
+====== Авторизация пользователей ======
+
+Помимо каналов где каждый кто знает имя канала может подписаться на него, есть возможность авторизации пользователей на комет сервере и отправки личных сообщений пользователям по их идентификаторам. Авторизация пользователя происходит в 2 этапа. Первый этап это отправка идентификатора пользователя в вашей системе и случайного хеша в комет сервер.
+
+
+mysql> INSERT INTO users_auth (id, hash )VALUES (1, 'auth_hash1');
+
+ * Здесь строка auth_hash1 - это текстовый ключ авторизации. Вы его сами генерируете на своём сервере и отправляете сначала в комет по средствам insert запроса в таблицу users_auth, а затем передаёте в JavaScript для авторизации конкретного пользователя на комет сервере.
+ * Числовой_Идентификатор_пользователя - Это id пользователя на вашем сайте, любое целое положительное число не более чем из 9 цифр.
+
+
+// На втором этапе эти сведения (идентификатор пользователя и хеш) надо передать в JavaScript Api
+$(document).ready(function()
+{
+ CometServer().start({dev_id:15, user_key:"auth_hash1", user_id:"Числовой_Идентификатор_пользователя" })
+});
+
+И теперь пользователь будет авторизован на комет сервере.
+
+====== Отправка сообщений для авторизованных пользователей ======
+
+При отправке сообщений авторизованным пользователям по их идентификатору ([[comet:cometql#таблица_users_messages|insert запрос в таблицу users_messages]]) сообщения доставляются пользователю на все устройства (До 16 устройств) на которых он прошёл авторизацию в данный момент. Это очень удобно в том случаи если человек зашёл на ваш сайт и авторизовался на нём более чем с одного устройства (к примеру телефон и компьютер или просто в двух разных браузерах сидит одновременно).
+
+Если человек в данный момент ofline то сообщение помещается в очередь сообщений и будет доставлено когда человек появится online.
+
+Основное назначение очереди сообщений это доставка сообщений после кратковременного перехода человека в ofline. Например в тех случаях когда человек обновляет страницу сайта на которой было открыто соединение он уходит в ofline примерно на 1 секунду.
+
+
+
+====== Подписка на получение личных сообщений ======
+Для того чтобы получать личные сообщения. Надо подписаться на них. Подписка на сообщения с именем события "event1" от сервера доставленные в соответствии с данными авторизации (то есть по id пользователя) осуществляется следующим образом.
+CometServer().subscription("msg.event1", function(e){ console.log(e)})
+
+Канал msg относиться к [[comet:javascript_api:pipe-types|списку каналов с особыми свойствами]]
+
+====== Определение статуса авторизации ======
+
+Что бы определится авторизовались мы на комет сервере или нет есть несколько специальных функций
+
+Функция isAuthorized вернёт текущее значение состояния авторизации. Бывает три значения в ответе.
+
+ * undefined - статус ещё не определён, на пример не было подключения или оно в процессе.
+ * true - авторизованы
+ * false - не авторизованны
+
+
+cometApi.isAuthorized()
+
+
+Функция onAuthSuccess служит для подписки на оповещения о том моменте кода статус поменялся с любого на "авторизован"
+
+cometApi.onAuthSuccess(function()
+{
+ alert("Авторизовались успешно")
+})
+
+
+Функция onAuthFalill служит для подписки на оповещения о том моменте кода статус поменялся с любого на "не авторизован"
+
+cometApi.onAuthFalill(function()
+{
+ alert("Не авторизовались")
+})
+
+
+====== Онлайн демо отправки личных сообщений ======
+
+[[https://github.com/CppComet/auth-example|Код примера]] [[https://cppcomet.github.io/auth-example/index.html|online demo on github]] [[https://codepen.io/Levhav/pen/XaWLra|Смотреть на codepen.io]]
+
+Откройте пример в двух или более браузерах, Скопируйте ваш `USER_ID` из одного окна и вставьте его в другое окно. В поле с подписью ` Identificator of user who must will receive the message` введите текст сообщения и нажмите отправить. Вы увидите что сообщение придёт только в то окно у которого задан то же USER_ID который вы и указали при отправке.
+
+
+
+
diff --git a/docs/dokuwiki/data/pages/comet/building-from-source.txt b/docs/dokuwiki/data/pages/comet/building-from-source.txt
new file mode 100644
index 0000000..09c1cdc
--- /dev/null
+++ b/docs/dokuwiki/data/pages/comet/building-from-source.txt
@@ -0,0 +1,171 @@
+RU::004-Администрирование
+
+====== Установка ======
+
+Рекомендуемые ОС ubuntu, debian, centos
+
+apt-get update
+apt-get install cmake make cpp gcc libssl-dev g++ nginx libmysqlclient-dev mysql-server mysql-client flex mailutils uuid-dev
+
+
+====== Собираем из исходных кодов ======
+
+git clone https://github.com/Levhav/comet-server
+cd comet-server
+cmake .
+make
+
+
+====== Настройки ======
+
+CppComet использует базу данных mysql для хранения данных пользователей для авторизации на сервере. И хранения времени, когда пользователь был в сети. И для хранения временных данных, таких как не доставленные сообщения и другие данные.
+
+ * Создайте базу в mysql на основе файла [[https://github.com/Levhav/comet-server/blob/master/db.sql|db.sql]]
+ * В файле [[https://github.com/CppComet/comet-server/blob/master/comet.ini|comet.ini]] укажите реквизиты для доступа к бд в секции [db]
+
+[db]
+host = localhost
+user = root
+password = root
+name = comet_db
+port = 3305
+
+Укажите пароль для доступа к api комет сервера
+
+[main]
+; пароль для доступа к api комет сервера
+password = 0000000000000000000000000000000000000000000000000000000000000000
+
+Остальные настройки из файла [[https://github.com/CppComet/comet-server/blob/master/comet.ini|comet.ini]] можно не менять.
+
+====== Запуск ======
+Запуск в консольном режиме
+
+./cpp_comet
+
+Запуск в режиме демона
+
+systemctl start comet.service
+
+
+===== Добавление в автозагрузку =====
+
+
+cp ./comet.service /etc/systemd/system
+systemctl daemon-reload
+systemctl enable comet.service
+====== Настройка nginx в качестве реверс прокси ======
+
+Для того чтоб настроить работу комет сервера на одной машине с другим сервером. Или просто иметь возможность работы не только по http но и по https надо настроить реверс прокси.
+
+Ниже приведён пример конфигурации nginx для проксирования трафика до комет сервера с /comet-server на комет сервер запущенный на порту 82 и всего остального трафика на веб сервер запущенном на порту 8080
+
+server {
+ listen 0.0.0.0:80;
+ server_name comet-server.com;
+
+ location / {
+ proxy_pass http://127.0.0.1:8080;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $remote_addr;
+ proxy_connect_timeout 120;
+ proxy_send_timeout 120;
+ proxy_read_timeout 180;
+ }
+
+ keepalive_disable none;
+ lingering_close always;
+ send_timeout 3600s;
+
+ location /comet-server {
+ proxy_pass http://127.0.0.1:82;
+
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-NginX-Proxy true;
+
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+
+ proxy_redirect off;
+ keepalive_timeout 900;
+ proxy_read_timeout 900;
+ }
+}
+
+# HTTPS server
+
+
+server {
+ listen 0.0.0.0:443;
+ server_name comet-server.com;
+
+ ssl on;
+ ssl_certificate /etc/letsencrypt/live/comet-server.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/comet-server.com/privkey.pem;
+
+ ssl_session_timeout 70m;
+
+ ssl_protocols SSLv3 TLSv1;
+ ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
+ ssl_prefer_server_ciphers on;
+
+ keepalive_disable none;
+ lingering_close always;
+ send_timeout 3600s;
+
+ location / {
+ proxy_pass http://127.0.0.1:8080;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $remote_addr;
+ proxy_connect_timeout 120;
+ proxy_send_timeout 120;
+ proxy_read_timeout 180;
+
+ }
+
+ location /comet-server {
+ proxy_pass http://127.0.0.1:82;
+
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-NginX-Proxy true;
+
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+
+ proxy_redirect off;
+ keepalive_timeout 900;
+ proxy_read_timeout 900;
+ }
+}
+
+
+====== Возможные проблемы после установки ======
+
+Обратите внимание на то какие значения параметра port указаны в секциях [ws] и [cometql] именно на этих портах комет сервер будет ожидать входящие подключения.
+
+В шаблоне comet.ini поставляемом в репозитории параметр port для подключений из JavaScrip api выставлен в 8087
+Это значит что подключатся надо так:
+cometApi.start({user_id:1, user_key:"userHash", node:"example.ru:8087"})
+
+Параметр port для подключений из CometQL выставлен в 3300
+Это значит что подключатся надо так:
+$link = mysqli_connect("example.ru", "root", "", "CometQL_v1", 3300);
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/dokuwiki/data/pages/comet/chat-with-authorization.txt b/docs/dokuwiki/data/pages/comet/chat-with-authorization.txt
new file mode 100644
index 0000000..5798edd
--- /dev/null
+++ b/docs/dokuwiki/data/pages/comet/chat-with-authorization.txt
@@ -0,0 +1,511 @@
+RU::12-Примеры::Как сделать чат
+
+====== Как сделать чат ======
+В данной статье рассмотрим как сделать чат с авторизацией на php с использованием комет сервера. Наш php chat будет работать по технологии websocket. Для связи php с websocket сервером надо использовать php comet api.
+
+Первый пример это html скрипт чата для сайта, он будет работать без регистрации пользователей и легко вставится в любую html страницу. Мы его рассмотрим первым по тому что это наиболее простой пример чата использующего комет сервер, а затем на его основе напишем чат для сайта на php с авторизацией пользователей в чате и уведомлениями о входе и выходе пользователей.
+
+В данной статье рассматривается вопрос создания чата где все пользователи общаются в одной общей комнате. Если вам нужен чат для личного общения пользователей между собой (общение в диалогах один на один) то вам больше подойдёт [[comet:star-comet-chat|чат плагин личной переписки между пользователями]]
+====== Пример создания простейшего чата на php ======
+
+Первое в чём следует разобраться что такое каналы (pipe) в комет сервере. Канал это именованный поток сообщений, в который можно самому отправлять сообщения и можно подписаться на те сообщения которые туда отправляются кем то другим.
+
+Если рассматривать наиболее простой скрипт чата для сайта то нам понадобится всего один канал. Все участники подписываются на сообщения из этого канала, а для добавления сообщения в чат просто отправляем сообщение в канал.
+
+Вот принцип работы простого чата для сайта
+ - Все сообщения от всех пользователей отправляются в общий канал web_chat_pipe.
+ - Структура сообщения содержит в себе текст сообщения и имя отправившего это сообщение.
+ - Все пользователи участвующие в чате подписаны на канал чата. И полученные из него сообщения отображаются в ленте общения.
+**Примечание:** В примерах будет использована библиотека JQuery.
+
+Сначала разберём как работает простой скрипт онлайн чата. Приведу сразу весь код а потом разберём его подробно.
+Первое что надо отметить это то что в данном чате люди общаются используя только лишь комет сервер. Это имеет ряд недостатков делающий из чата скорее прощёную учебную модель.
+
+Недостатки:
+ - Нет возможности забанить человека
+ - Нет авторизации, это позволяет любому представится кем угодно.
+Достоинства:
+ - Просто в реализации, фактически это javascript чат (php не используется)
+ - Прост поцес установки чата на сайт
+
+
+
+Comet Server - Пример php чата
+
+
+
+
+
+
+
+
+
+
+
+
+
+