| 26 | Входящий (со стороны канала TDM) вызов начинается с приема из канала линейного сигнала "Занятие". В ответ на получении сигнала "Занятие" канальное окончание R2DTMF передает в канал линейный сигнал "Подтверждение занятия", переходит в состояние `NumRecv` и ожидает номер вызываемого абонента. |
| 27 | |
| 28 | В состоянии `NumRecv` при получении каждой новой цифры номера вызываемого абонента эта цифра добавляется к ранее принятым цифрам, формируя номер вызываемого абонента. После получения каждой новой цифры производится проверка принятого номера на совпадение с регулярным выражением, установленным конфигурационным параметром "Рег. выражение набора", а также на достижение максимальной длины номера, установленной конфигурационным параметром "Макс. длина номера". Система сигнализации R2-DTMF предполагает, что принимающая вызов сторона заранее "знает", какое количество цифр должно быть в номере вызываемого абонента. Если обнаружено совпадение номера с регулярным выражением или достижение максимальной длины номера, канальное окончание R2DTMF формирует и передает сообщение INVITE в сеть IP и переходит в состояние `Outgoing`. |
| 29 | |
| 30 | При получении от вызываемого абонента ответа "180 Ringing" и отсутствии медиапотока канальное окончание R2 формирует и передает в канал TDM акустический сигнал "Контроль посылки вызова" (КПВ). |
| 31 | |
| 32 | При получении от вызываемого абонента неуспешного ответа (4xx/5xx/6xx) канальное окончание R2DTMF передает линейный сигнал "Контроль исходного" и переходит в состояние `Blocked`, ожидая линейного сигнала "Контроль исходного" от вызывающей стороны. После получения линейного сигнала "Контроль исходного" канальное окончание R2DTMF переходит в исходное состояние (`Idle`). |
| 33 | |
| 34 | При получении от вызываемого абонента ответа "200 OK" канальное окончание R2DTMF передает линейный сигнал "Ответ" и переходит в состояние `Connected`. |
| 35 | |
| 36 | Пример приема входящего вызова: |
| 37 | |
| 38 | {{{#!plantuml |
| 39 | @startuml |
| 40 | skinparam ParticipantPadding 80 |
| 41 | skinparam sequenceMessageAlign center |
| 42 | |
| 43 | participant АТС |
| 44 | participant "Окончание R2DTMF" as R2 |
| 45 | participant "Вызываемый абонент" as A |
| 46 | |
| 47 | АТС <-[#red]> R2: <font color=red>исходное состояние (10) |
| 48 | ... |
| 49 | АТС -[#red]> R2: <font color=red>Занятие (00) |
| 50 | R2 -[#red]> АТС: <font color=red>Подтверждение занятия (11) |
| 51 | АТС -> R2: DTMF "1" |
| 52 | АТС -> R2: DTMF "2" |
| 53 | АТС -> R2: DTMF "3" |
| 54 | АТС -> R2: DTMF "4" |
| 55 | АТС -> R2: DTMF "5" |
| 56 | R2 --> A: INVITE\nTo: <sip:12345@domain.tld> |
| 57 | A --> R2: 100 Trying |
| 58 | A --> R2: 180 Ringing |
| 59 | note right: Вызываемый абонент слышит звонок |
| 60 | R2 o-[#blue]> АТС: <font color=blue>КПВ |
| 61 | ... |
| 62 | note over A: абонент ответил на вызов |
| 63 | A --> R2: 200 OK |
| 64 | R2 --> A: ACK |
| 65 | A <-[#blue]-> R2: <font color=blue>//медиапоток// |
| 66 | R2 -[#red]> АТС: <font color=red>Ответ (01) |
| 67 | АТС <-[#blue]> R2: <font color=blue>//разговорное состояние// |
| 68 | note over АТС, A: абоненты ведут разговор |
| 69 | |
| 70 | @enduml |
| 71 | }}} |
| 72 | |
| 73 | |
| 74 | |