Команда протокола MGCP обязательно содержит заголовок, за которым может следовать описание сеанса связи (session description). Заголовок команды и описание сеанса связи представляют собой набор текстовых строк. Описание сеанса отделено от заголовка команды пустой строкой.
Заголовок содержит список параметров и командную строку вида CRCX 1204 ts/1@protei.loniis.net MGCP 0.1. Командная строка, в свою очередь, состоит из нескольких информационных полей:
1. Название команды представлено в виде кода из четырех букв (табл.8.2)
Таблица 8.2 Кодировка команд протокола MGCP
Команда | Код |
EndpointConfiguration | EPCF |
CreateConnection | CRCX |
ModifyConnection | MDCX |
DeleteConnection | DLCX |
NotificationRequest | RQNT |
Notify | NTFY |
AuditEndpoint | AUEP |
AuditConnection | AUCX |
ReStartlnProgress | RSIP |
2. Идентификатор транзакции. Протокол MGCP предусматривает корреляцию команд и ответов. Команда и ответ на нее образуют транзакцию, имеющую уникальный идентификатор (Transaction-Identifier). Идентификатор транзакции включается в заголовок и команды, и ответа. Значения идентификаторов выбираются из диапазона чисел 1 -999999999, причем значение идентификатора текущей транзакции на единицу больше идентификатора предыдущей транзакции.
3. Идентификатор порта определяет тот порт шлюза, которому надлежит выполнить команду, за исключением команд Notify и ReStartlnProgress, в которых идентификатор определяет порт, передавший команду. Идентификаторы портов кодируются также, как кодируются адреса электронной почты в соответствии с документом RFC 821 комитета IETF. Например, возможен идентификатор ts/1@protei.loniis.net, который идентифицирует первый порт (временной канал) шлюза «protei», расположенного в домене loniis.
4. Версия протокола кодируется следующим образом: MGCP 1.0.
Выше указывалось, что заголовок команды, кроме командной строки, содержит список параметров. Параметры команд протокола MGCP сведены в таблицу 8.3.
Таблица 8.3 Параметры команд протокола MGCP
Название параметра | Код | Описание и значение параметра |
ResponseAck (Подтверждение транзакции) | К | Подтверждает завершение одной или нескольких транзакций. Например, параметр К: 6234-6255, 6257, 19030-19044 подтверждает завершение транзакций, имеющих идентификаторы с 6234 по 6255, 6257 и с 19030 по 19044. |
Bearerlnformation (Сведения о виде информации) | В | Служит для доставки информации о законе кодирования речевой информации А или m |
ReasonCode (Код причины) | Определены следующие коды причины; 000 - номинальное состояние порта, передается только в ответе на запрос о состоянии порта 900 - неисправность порта 901 - порт выведен из обслуживания 902 - отказ на физическом уровне (например, потеря синхронизации) | |
CalllD (Идентификатор сеанса связи) | С | Идентифицирует сеанс связи, в котором может использоваться одно или несколько соединений. Идентификатор кодируется шестнадцатеричной последовательностью символов длиной не более 32 символом. |
ConnectionID (Идентификатор подключения) | Идентифицирует подключение данного порта к одному соединению, так как один порт может быть одновременно подключен к нескольким соединениям | |
Notified Entity (Уведомляемый объект) | N | Идентификатор объекта, к которому следует передавать уведомления об обнаруженных событиях. Если данный параметр опущен, порт передает эту информацию к объекту, от которого была получена команда. Идентификатор объекта кодируется так же, как кодируются адреса электронной почты согласно RFC 821, например, MGC@ca.anynet.com:5625 или Joe@[128.23.0.4]. При использовании IP-адреса, он должен быть заключен в квадратные скобки. |
Requestldentifier (Идентификатор запроса) | Х | Согласует требование уведомить о событии, полученное от Call Agent, с уведомлением, передаваемым шлюзом в команде Notify. |
LocalConnection Options (Параметры подключения порта к соединению) | L | Данные об алгоритме кодирования информации, размере речевых пакетов в мс, используемой полосе пропускания в Кбит/с, типе обслуживания, использовании эхокомпенсации и другие сведения. Передается от Call Agent к шлюзу, обычно в команде CRCX. |
ConnectionMode (Режим соединения) | М | Определены следующие режимы соединения: передача, прием, прием/передача, конференция, передача данных, отсутствие активности, петля, тест и другие режимы. Значение параметру присваивает Call Agent. |
RequestedEvents (Запрашиваемые события) | R | Список событий, о которых следует оповестить Call Agent, и действия шлюза при обнаружении события. Определены следующие действия: оповестить Call Agent о событии немедленно; ожидать дальнейших событий; если событием является прием сигнала DTMF, то накапливать цифры в соответствии с требованиями параметра DigitMap; в определенных ситуациях передавать в канал акустические или вызывные сигналы; обработать инкапсулированную команду Endpoint Configuration, игнорировать событие и др. |
SignalRequests (Требование передать сигнал) | S | Специфицируется сигнал, который должен быть передан абоненту, например, акустический сигнал "Ответ станции". |
DigitMap (План нумерации) | D | Специфицирует правила обработки сигналов DTMF. При накоплении количества цифр, указанного в данном параметре, шлюз должен передать их устройству управления. |
ObservedEvents (Обнаруженные события) | Список обнаруженных событий. | |
ConnectionParameters (Параметры соединения) | Р | Статистические данные о соединении, передаваемые шлюзом после его завершения. |
SpecifiedEndPointID (Идентификатор порта) | Z | Идентификатор порта в формате RFC821, например, EndPoint@hub1 .anynet.com:5625, |
Requestedlnfo (Запрашиваемая информация) | F | Описывает информацию, которую Call Agent запрашивает у шлюза, например, цифры номера вызываемого абонента, набранные вызывающим абонентом. |
QuarantineHandling (Карантинная обработка) | Q | Определяет правила обработки событий, которые были обнаружены до получения данной команды в период так называемого карантина (quarantine period), и о которых Call Agent еще не был оповещен. |
DetectEvents (Выявляемые события) | Т | Перечень событий, которые порт должен отслеживать, а при их обнаружении - извещать об этом Call Agent. |
EventStates (Состояния, обусловленные событиями) | ES | Перечень состояний порта, обусловленных, например, тем, что абонент снял или положил трубку; информация об этих состояниях должна передаваться к Call Agent в ответ на команду AuditEndpoint. |
RestartMethod (Метод рестарта) | RM | Способ индикации шлюзом вывода порта из обслуживания или ввода его в обслуживание. Поддерживаются несколько вариантов рестарта: "graceful", "forced", "restart", "disconnected" or "cancel-graceful". |
RestartDelay (Задержка рестарта) | RD | Определяет время в секундах, после которого производится производится порта. Если этот параметр отсутствует, задержка рестарта равна нулю. При получении от Call Agent требования о принудительном рестарте порта команда выполняется незамедлительно. |
Capabilities (Функциональные возможности порта) | А | Информацию о функциональных возможностях порта запрашивает Call Agent при помощи команды AuditEndpoint. Эти возможности порта включают в себя: поддерживаемые алгоритмы кодирования, период пакетизации, полосу пропускания, эхокомпенсацию, подавление пауз речи, режимы соединения, тип обслуживания, совокупность событий и др. |
Не все параметры, приведенные в таблице 8.3, должны обязательно присутствовать во всех командах протокола MGCR В таблице 8.4 представлены возможные комбинации параметров в командах протокола MGCR Буква «М» означает обязательное присутствие параметра в команде, буква «О» - не обязательное присутствие, буква «F» запрещает присутствие параметра.
Таблица 8.4 Комбинации параметров в командах протокола MGCP
Имя параметра | EP CF | CR CX | MD CX | DL CX | RQ NT | NT FY | AU EP | AU CX | RS IP |
ResponseAck | |||||||||
Bearerlnformation | M | F | F | F | F | ||||
Callld | F | M | M | F | F | F | F | F | |
Connectionid | F | F | M | F | F | F | M | F | |
Requestldentifier | F | 0** | o** | о** | M | M | F | F | F |
LocalConnection | F | F | F | F | F | F | F | ||
Options | |||||||||
Connection Mode | F | M | M | F | F | F | F | F | F |
Requested Events | F | O* | F | F | F | F | |||
SignalRequests | F | O* | F | F | F | F | |||
NotifiedEntity | F | F | F | F | |||||
ReasonCode | F | F | F | F | F | F | F | ||
Observed Events | F | F | F | F | F | M | F | F | F |
DigitMap | F | F | F | F | F | ||||
Connection | F | F | F | F | F | F | F | F | |
Parameters | |||||||||
Specific Endpoint ID | F | F | F | F | F | F | F | F | F |
Second Endpoint ID | F | F | F | F | F | F | F | F | |
Requestedlnfo | F | F | F | F | F | F | M | M | F |
QuarantineHandling | F | F | F | F | F | ||||
DetectEvents | F | F | F | F | F | ||||
EventStates | F | F | F | F | F | F | F | F | F |
RestartMethod | F | F | F | F | F | F | F | F | M |
RestartDelay | F | F | F | F | F | F | F | F | |
SecondConnectionID | F | F | F | F | F | F | F | F | F |
Capabilities | F | F | F | F | F | F | F | F | F |
RemoteConnection | F | F | F | F | F | F | F | ||
Descriptor | |||||||||
LocalConnection | F | F | F | F | F | F | F | F | F |
Descriptor |
** - параметр Requestldentifier не обязателен для команд Create-Connection, ModifyConnection и DeleteConnection, но если эти команды содержат инкапсулированную команду NotificationRequest, присутствие в них параметра Requestldentifier становится обязательным;
* - параметры Requested Events и SignalRequests не обязательны для команды NotificationRequest.