SIP-client
Данный SIP-клиент в своей основе использует библиотеки из проекта PJSIP.
Взаимодействие с клиентом реализовано через IPC-сокет посредством обмена JSON-структурами.
Параметры запуска клиента можно посмотреть при помощи вызова:
./sip-client -h
В директории example
находятся примеры реализации кода управления клиентом и примеры JSON-структур.
Первой командой клиент будет ждать ClientConfig
- в ней содержится основная конфигурация для запуска PJSIP. Пример основного конфигурационного файла приведен в example/cmd_config.json
. С имплементацией данной структуры можно ознакомиться в файле config.hpp
.
Команды
Каждая команда отправляемая SIP-клиенту должна представлять из себя JSON-структуру вида:
{
"kind": "Command",
"id": "1",
"type": "SomeCommandName",
"data": {
// ... data
}
}
Например, команда добавления и регистрации SIP-аккаунта может выглядеть следующим образом:
{
"kind": "Command",
"id": "1",
"type": "AccountCreate",
"data": {
"idUri": "sip:test1@pjsip.org",
"registrarUri": "sip:pjsip.org",
"timeoutSec": 300,
"retryIntervalSec": 300,
"rtpPortStart": 16384,
"rtpPortRange": 200,
"proxyUse": 3,
"proxies": [ ],
"authCreds": [
{
"scheme": "digest",
"realm": "*",
"username": "test1",
"dataType": 0,
"data": "secret1"
}
]
}
}
Содержимое структур конфигурации (с примером заполнения) можно посмотреть в директории example
в отдельных JSON документах без приставки cmd_*
.
Наименования команд, доступных для отправки на клиент, можно посмотреть в файле include/api/ipc_types.hpp
- enum CommandType
, имя пункта перечисления и есть имя команды. Все команды в enum
разделены на группы. Каждую группу предворяет комментарий в котором указано какая конфигурационная структура должна содержаться в теле JSON.
Например:
enum class CommandType
{
/// AccountConfig
AccountCreate = 1,
AccountModify,
/// dstAddress string
MakeCall,
...
};
Все структуры определены в том же файле или других файлах в каталоге API.
Ответ на команду
Команды, на которые будет отправлен возврат результата их выполнения перечислены в enum class AnswerType
.
Например, на команду AccountCreate
будет возвращена структура Result
:
{
"kind": "Answer",
"id": "1",
"type": "AccountCreate",
"data": {
"result": 0,
"info": ""
}
}
Уведомление
Клиент отправляет JSON-документы Notify
на различные события. События можно посмотреть в enum class NotifyType
.
Об ошибках клиент может уведомить следующим образом:
{
"kind": "Notify",
"type": "InternalError",
"data": {
"result": 1,
"info": "Received empty command"
}
}
При успешной регистрации клиент отправит информацию об этом:
{
"kind": "Notify",
"type": "RegisterState",
"data": {
"state": 2,
"code": 200,
"codeInfo": "OK",
"reason": ""
}
}
При завершении работы (после получения команды Exit
) приложение отправит уведомление:
{
"kind": "Notify",
"type": "Exit",
"data": {
"result": 0,
"info": ""
}
}