[[PageOutline(2-5,Содержание:)]] = Канальное окончание R2DTMF = Канальное окончание R2DTMF предназначено для подключения к соединительным линиям АТС с использованием варианта системы сигнализации R2, известного как "R2-DTMF". == Линейные сигналы канального окончания R2DTMF == Для передачи линейных сигналов "Занятие", "Подтверждение занятия", "Ответ", "Разъединение", "Блокировка", "Контроль исходного" канальное окончание R2DTMF использует два выделенных сигнальных канала (СУВ a и b). || '''Комбинация СУВ ab''' || '''Значение сигнала''' || || 00 || Занятие || || 01 || Ответ || || 10 || Разъединение / контроль исходного || || 11 || Подтверждение занятия / Clear Back / блокировка || == Сигналы межрегистровой сигнализации == Для передачи адресной информации между регистрами канальное окончание R2DTMF использует двухчастотные тональные сигналы DTMF. В прямом направлении передаются цифры номера вызываемого абонента в виде последовательности тональных сигналов длительностью 80 мс и паузами 80 мс. В обратном направлении никакие сигналы не передаются. == Описание работы канального окончания == === Входящий вызов === Входящий (со стороны канала TDM) вызов начинается с приема из канала линейного сигнала "Занятие". В ответ на получении сигнала "Занятие" канальное окончание R2DTMF передает в канал линейный сигнал "Подтверждение занятия", переходит в состояние `NumRecv` и ожидает номер вызываемого абонента. В состоянии `NumRecv` при получении каждой новой цифры номера вызываемого абонента эта цифра добавляется к ранее принятым цифрам, формируя номер вызываемого абонента. После получения каждой новой цифры производится проверка принятого номера на совпадение с регулярным выражением, установленным конфигурационным параметром "Рег. выражение набора", а также на достижение максимальной длины номера, установленной конфигурационным параметром "Макс. длина номера". Система сигнализации R2-DTMF предполагает, что принимающая вызов сторона заранее "знает", какое количество цифр должно быть в номере вызываемого абонента. Если обнаружено совпадение номера с регулярным выражением или достижение максимальной длины номера, канальное окончание R2DTMF формирует и передает сообщение INVITE в сеть IP и переходит в состояние `Outgoing`. При получении от вызываемого абонента ответа "180 Ringing" и отсутствии медиапотока канальное окончание R2DTMF формирует и передает в канал TDM акустический сигнал "Контроль посылки вызова" (КПВ). При получении от вызываемого абонента неуспешного ответа (4xx/5xx/6xx) канальное окончание R2DTMF передает линейный сигнал "Контроль исходного" и переходит в состояние `Blocked`, ожидая линейного сигнала "Контроль исходного" от вызывающей стороны. После получения линейного сигнала "Контроль исходного" канальное окончание R2DTMF переходит в исходное состояние (`Idle`). При получении от вызываемого абонента ответа "200 OK" канальное окончание R2DTMF передает линейный сигнал "Ответ" и переходит в состояние `Connected`. Пример приема входящего вызова: {{{#!plantuml @startuml skinparam ParticipantPadding 80 skinparam sequenceMessageAlign center participant АТС participant "Окончание R2DTMF" as R2 participant "Вызываемый абонент" as A АТС <-[#red]> R2: исходное состояние (10) ... АТС -[#red]> R2: Занятие (00) R2 -[#red]> АТС: Подтверждение занятия (11) АТС -> R2: DTMF "1" АТС -> R2: DTMF "2" АТС -> R2: DTMF "3" АТС -> R2: DTMF "4" АТС -> R2: DTMF "5" R2 --> A: INVITE\nTo: A --> R2: 100 Trying A --> R2: 180 Ringing note right: Вызываемый абонент слышит звонок R2 o-[#blue]> АТС: КПВ ... note over A: абонент ответил на вызов A --> R2: 200 OK R2 --> A: ACK A <-[#blue]-> R2: //медиапоток// R2 -[#red]> АТС: Ответ (01) АТС <-[#blue]> R2: //разговорное состояние// note over АТС, A: абоненты ведут разговор @enduml }}} Если в ответ на запрос INVITE канальное окончание R2DTMF получает ответ "180 Ringing" или "183 Session progress", содержащий ответ SDP (early media), канальное окончание активирует медиапоток, давая возможность вызывающему абоненту прослушивать анонсы и другие акустические сигналы, формируемые оборудованием вызываемого абонента. За передачу сигнала КПВ в таком сценарии отвечает оборудование вызываемой стороны. Пример входящего вызова с early media: {{{#!plantuml @startuml skinparam ParticipantPadding 80 skinparam sequenceMessageAlign center participant АТС participant "Окончание R2DTMF" as R2 participant "Вызываемый абонент" as A АТС <-[#red]> R2: исходное состояние (10) ... АТС -[#red]> R2: Занятие (00) R2 -[#red]> АТС: Подтверждение занятия (11) АТС -> R2: DTMF "1" АТС -> R2: DTMF "2" АТС -> R2: DTMF "3" АТС -> R2: DTMF "4" АТС -> R2: DTMF "5" R2 --> A: INVITE\nTo: A --> R2: 100 Trying A --> R2: 183 Session Progress + SDP A <-[#blue]-> R2: //медиапоток// АТС <-[#blue]> R2: //разговорное состояние// A o-[#gray]> АТС: КПВ note right: Вызываемый абонент слышит звонок ... note over A: абонент ответил на вызов A --> R2: 200 OK R2 --> A: ACK R2 -[#red]> АТС: Ответ (01) note over АТС, A: абоненты ведут разговор @enduml }}} === Исходящий вызов === При получении сообщения INVITE канальное окончание R2DTMF занимает канал, передавая линейный сигнал "Занятие", переходит в состояние `Seizure` и ожидает линейный сигнал "Подтверждение занятия" от удаленной стороны. При получении сигнала "Подтверждение занятия" канальное окончание R2DTMF переходит в состояние `Dialing` и начинает передавать цифры номера вызываемого абонента. Передаваемый номер формируется из имени пользователя (username) вызываемого URI по следующим правилам: * передача номера выполняется в порядке следования символов слева направо; * символы '0'-'9', '*', '#', 'a'-'d', 'A'-'D' передаются в канал TDM соответствующими посылками DTMF; * остальные символы username игнорируются. После того как канальное окончание R2DTMF передало все цифры номера вызываемого абонента, оно передает вызывающей стороне ответ "183 Session Progress", содержащий ответ SDP, активирует медиапоток и переходит в состояние `Dialed`, ожидая линейный сигнал "Ответ" либо "Clear Back". При получении линейного сигнала "Ответ" в состояниях `Dialing` или `Dialed` канальное окончание R2DTMF передает вызывающей стороне ответ "200 OK" и переходит в состояние `Connected`. Пример исходящего вызова: {{{#!plantuml @startuml skinparam ParticipantPadding 80 skinparam sequenceMessageAlign center participant "Вызывающий абонент" as A participant "Окончание R2DTMF" as R2 participant АТС АТС <-[#red]> R2: исходное состояние (10) ... A --> R2: INVITE sip:12345@domain.org R2 --> A: 100 Trying R2 -[#red]> АТС: Занятие (00) АТС -[#red]> R2: Подтверждение занятия (11) R2 -> АТС: DTMF "1" R2 -> АТС: DTMF "2" R2 -> АТС: DTMF "3" R2 -> АТС: DTMF "4" R2 -> АТС: DTMF "5" R2 --> A: 183 Session Progress A <-[#blue]-> R2: //медиапоток// note right of АТС: Вызываемый абонент слышит звонок АТС o-[#gray]> A: КПВ ... note right of АТС: абонент ответил на вызов АТС -[#red]> R2: Ответ (01) R2 --> A: 200 OK A --> R2: ACK note over АТС, A: абоненты ведут разговор @enduml }}} === Отбой соединения === ==== Отбой со стороны IP ==== При получении BYE со стороны сети IP процедура отбоя зависит от того, было ли соединение входящим или исходящим. Если соединение было входящим (инициировано со стороны канала TDM), канальное окончание R2DTMF передает линейный сигнал "Clear Back" (11). Если соединение было исходящим, в канал передается линейный сигнал "Контроль исходного" (10). После этого канальное окончание переходит в состояние `Blocked` и ожидает линейного сигнала "Контроль исходного" от удаленной стороны. При получении сигнала "Контроль исходного", если ранее передавался линейный сигнал "Clear Back", он меняется на "Контроль исходного" (10), и канальное окончание переходит в исходное состояние (`Idle`). ==== Отбой со стороны TDM ==== При получении канальным окончанием R2DTMF линейного сигнала "Clear Back" (11) или линейного сигнала "Разъединение / Контроль исходного" (10), канальное окончание передает в сеть IP сообщение BYE и передает в канал линейный сигнал "Контроль исходного" (10). Затем, если от удаленной стороны был принят линейный сигнал "Контроль исходного", канальное окончание переходит в исходное состояние (`Idle`), если же был принят линейный сигнал "Clear Back" (11), канальное окончание R2DTMF переходит в состояние `Blocked` и ожидает от удаленной стороны линейный сигнал "Контроль исходного" (10). При получении от удаленной стороны линейного сигнала "Контроль исходного" канальное окончание переходит в исходное состояние (`Idle`). == Параметры конфигурации канального окончания == Пример конфигурации канального окончания R2DTMF: [[Image(ss1.jpg, 600px)]] Канальное окончание R2DTMF не имеет конфигурационных параметров, специфичных только для данного типа канальных окончаний. Все имеющиеся конфигурационные параметры описаны на странице EndpointParameters. == Состояния канального окончания == Idle:: Исходное состояние канального окончания. Канальное окончание свободно: способно принимать вызовы со стороны сети IP и ожидает занятие со стороны канала TDM. Seizure:: Выполняется исходящее занятие: передан линейный сигнал "Занятие", ожидается линейный сигнал "Подтверждение занятия" от удаленной стороны. Dialing:: Выполнено исходящее занятие канала TDM, передается адресная информация (номер вызываемого абонента). Dialed:: Передача адресной информации завершена, активирован медиапоток, ожидается ответ вызываемого абонента. Blocked:: Ожидается линейный сигнал "Контроль исходного" от удаленной стороны. !NumRecv:: Получен линейный сигнал "Занятие", принимается адресная информация (номер вызываемого абонента). Outgoing:: Отправлено сообщение INVITE в сеть IP, ожидается ответ. Connected:: Соединение установлено, ведется разговор. {{{#!plantuml @startuml title Упрощенная диаграмма состояний канального окончания R2DTMF state Idle: исходное состояние state Seizure: ожидается\nподтверждение\nзанятия state Dialing: передается адресная\nинформация state Dialed: ожидается ответ state Blocked: ожидается\nконтроль исходного state NumRecv: принимается адресная\nинформация state Outgoing: ожидается ответ state Connected: ведется разговор Idle --> NumRecv: Принято\n"Занятие" NumRecv --> Idle: Принят сигнал\n"Контроль исходного" NumRecv --> Outgoing: Прием новера завершен NumRecv --> Blocked: Принят сигнал\n"Блокировка" Outgoing --> Blocked: Принят ответ\n4xx, 5xx или 6xx Outgoing --> Connected: Принят ответ\n"200 OK" Idle --> Seizure: Принят INVITE Seizure --> Dialing: Прият сигнал\n"Подтверждение занятия" Dialing --> Connected: Принят\n"Ответ" Dialing --> Dialed: Принят сигнал\n"Линия свободна"\nили "Адрес завершен" Dialed --> Connected: Принят\n"Ответ" Blocked --> Idle: Принят сигнал\n"Контроль исходного" Connected --> Blocked: Принято BYE Connected --> Idle: Принято BYE @enduml }}} == См. также == [EndpointParameters сводная таблица параметров], [wiki:EndpointMFC-R2 окончание MFC R2], [wiki:Endpoint1Ind окончание 1IND], [wiki:Endpoint канальные окончания плат VE-01/VE-02].