README.md

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":                 ""
   }
}

Описание

SIP client based on PJSIPlibrary

Конвейеры
0 успешных
0 с ошибкой