Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

Версия 1 Текущий »

В процессе обслуживания вызова участвуют все компоненты системы. Основными компонентами являются Adapter и Core, которые непосредственно работают с сигнализацией и отслеживают фазы вызова. Обмен сообщениями осуществляется через интеграционную шину, которую обеспечивает кластер BUS. Кластера Adapter и Core обмениваются сообщениями внутреннего протокола ACP (Adapter Core Protocol). Этот протокол является модификацией протокола DSS и основан на примитивах обмена, описанных в стандарте ITU-T Q.1238 для интеллектуальных сетей.
В протоколе ACP выделяют следующие типы сообщений:
Setup - сообщение для установления соединения (запрос, подтверждение, ответ);
SubsequentAddress - сообщение с информацией о дополнительных цифрах;
AddressEnd - сообщение с информацией о завершении набора номера и набранными цифрами;
ServiceFeature - сообщение с индикацией об активации сервисной логики;
CallProgress - сообщение для передачи информации без смены фазы обслуживания вызова
Release - сообщения о разъединении вызова.
Для этих сообщений применяются модификаторы, которые описывают фазу передачи сообщения.
Различают следующие модификаторы:
Ind - индикация события;
Req - запрос;
Resp - ответ;
Conf - подтверждение;
Ack - подтверждение в приеме сообщения.
Полный набор сообщений, которые присутствуют в протоколе ACP с учетом модификаторов, имеет вид:
SetupInd - сообщение передается, когда адаптер определил факт входящего занятия;
SetupIndAck - сообщение передается на адаптер как подтверждение начала обработки SetupInd;
SetupReq - сообщение передается на адаптер, когда ядро инициирует исходящее занятие;
SetupReqAck - сообщение передается на ядро как подтверждение начала обработки SetupReq
SetupConf - сообщение передается на ядро, когда адаптер получил индикацию об ответе (подтверждение об установлении соединения);
SetupResp - сообщение передается на адаптер, когда ядро подтверждает установление соединения (ответ);
SubsequentAddressInd - сообщение передается на ядро, когда адаптер получил донабор от абонента (ситуация dig-by-dig набора);
AddressEndInd - сообщение передается, когда определено завершение набора номера;
CallProgressInd - сообщение передается, когда адаптер информирует ядро о событии;
CallProgressReq - сообщение передается, когда ядро отправляет на адаптер запрос на передачу сообщения;
ServiceFeatureInd - сообщение передается на ядро, когда адаптер определил событие активации сервисной логики;
ReleaseInd - сообщение передается на ядро, когда адаптер определил факт разъединения;
ReleaseReq - сообщение передается на адаптер, когда ядро отправляет запрос на разъединение.
Основные параметры сигнальных сообщений:
SetupInd/Req.
CallRef - идентификатор вызова;
CallingPartyNumber - номер вызывающего абонента (номер А);
CalledPartyNumber - номер вызываемого абонента (номер Б);
CallingPartysCategory - категория вызывающего абонента;
CalledPartysCategory - категория вызываемого абонента;
CallingPartyInfo - параметры вызывающего абонента (домен, интерфейс, информация о подключенных услугах);
CalledPartyInfo - параметры вызываемого абонента (домен, интерфейс, информация о подключенных услугах);
TrunkGroupId - идентификатор входящей транковой группы для вызова, пришедшего с транка;
sdp - информация о медиапотоке.
SetupResp/Conf.
CallRef - идентификатор вызова;
ConnectedNumber - номер вызываемого абонента, ответившего на вызов (если он отличается от изначально набранного номера);
sdp - информация о медиапотоке.
SubsequentAddressInd.
CallRef - идентификатор вызова;
Digits - цифры номера.
AddressEndInd.
CallRef - идентификатор вызова;
Digits - цифры номера.
CallProgressInd/Req.
CallRef - идентификатор вызова;
Cause - внутренний индикатор причины отправки сообщения;
CauseInitiator - инициатор события (система, пользователь или событие обнаружено на сети);
CauseIsup - индикатор причины в формате ISUP;
EventInformation - описание события;
gNotification - информационные флаги;
sdp - информация о медиапотоке;
TrunkGroupId - идентификатор исходящей транковой группы для исходящего вызова.
ReleaseInd/Req.
CallRef - идентификатор вызова;
Cause - внутренний индикатор причины разъединения;
CauseInitiator - инициатор события (система или события обнаружено на сети);
CauseIsup - индикатор причины разъединения в формате ISUP;
TrunkGroupId - идентификатор исходящей транковой группы для исходящего вызова.
Далее будут рассмотрены процессы обслуживания вызова на sequence-диаграммах, из которых будет виден процесс обмена сообщениями.
Пример 1 - Базовый вызов по протоколу SIP в режиме "enblock", упрощенный вид:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A: "Абонент снял трубку и набрал номер Б"
A->PA_A: INVITE telB@ssw From A
PA_A->A: 100 Trying
PA_A->Core: SetupInd(A, B, ifaceA, domain)
note over Core: "Выполняется маршрутизация\nдля поиска интерфейса абонента Б"
Core->PA_A: SetupIndAck
Core->PA_B: SetupReq(A, B, ifaceB, domain)
PA_B->B: INVITE telB From A
PA_B->Core: SetupReqAck
B->PA_B: 100 Trying
note over B: "У абонента Б звонит телефон"
B->PA_B: 180 Ringing
PA_B->Core: CallProgressInd(bPtyAlerted)
Core->PA_A: CallProgressReq(bPtyAlerted)
PA_A->A: 180 Ringing
note over A: "Абонент слышит сигнал КПВ (Ringing tone)"
note over B: "Абонент снимает трубку"
B->PA_B: 200 OK
PA_B->Core: SetupResp
Core->PA_A: SetupConf
PA_A->A: 200 OK
note over A,B: "Абоненты разговаривают"
Пример 2 - Разъединение вызова по инициативе абонента А, упрощенный вид:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A,B: "Абоненты разговаривают"
note over A: "Абонент закончил разговор и положил трубку"
A->PA_A: BYE
note over A: "Абонент свободен"
PA_A->Core: ReleaseInd(normal)
Core->PA_B: ReleaseReq(aPtyAbandon)
PA_B->B: BYE
note over B: "Абоненту выдается сигнал Занято (Busy tone)"
note over B: "После того как абонент положил трубку\nАбонент свободен"
Пример 3 - Разъединение вызова по инициативе абонента Б, упрощенный вид:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A,B: "Абоненты разговаривают"
note over B: "Абонент закончил разговор и положил трубку"
B->PA_B: BYE
note over B: "Абонент свободен"
PA_B->Core: ReleaseInd(normal)
Core->PA_A: ReleaseReq(normal)
PA_A->A: BYE
note over A: "Абоненту выдается сигнал Занято (Busy tone)"
note over A: "После того как абонент положил трубку\nАбонент свободен"
Пример 4 - Базовый вызов по протоколу H.248/Megaco в режиме "enblock", упрощенный вид:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A:"Абонент снял трубку"
A->PA_A: "Notify portA offhook"
PA_A->A: "Add portA to Context1\nAdd vportA to Context1\nAllocate media resource"
PA_A->Core: SetupInd(A, ifaceA, domain)
note over Core: "Выполняется маршрутизация по номеру А, определяется digitmap"
Core->PA_A: SetupIndAck
PA_A->A: "Subscribe on onhook event\nSet digitmap\nGenerate dialtone"
note over A: "Абонент слышит ответ станции"
note over A: "Абонент набрал номер Б"
A->PA_A: Notify(B)
PA_A->Core: AddressEndInd(B)
note over Core: "Выполняется маршрутизация для поиска интерфейса абонента Б"
Core->PA_B: SetupReq(A, B, ifaceB, domain)
PA_B->Core: SetupReqAck
PA_B->B: Add portB to Context2\nAdd vportB to Context2\nAllocate media resource\nSubscribe on offhook event\nGenerate ring tone"
note over B: "У абонента Б звонит телефон"
PA_B->Core: CallProgressInd(bPtyAlerted)
Core->PA_A: CallProgressReq(bPtyAlerted)
PA_A->A: Generate ringing tone
note over A: "Абонент слышит сигнал КПВ\n(Ringing tone)"
note over B: "Абонент снял трубку"
B->PA_B: Notify portB offhook
PA_B->B: Stop ring, Subscrive on onhook event\nmode sendrecv
PA_B->Core: SetupResp
Core->PA_A: SetupConf
PA_A->A: Stop ringing tone portA, mode sendrecv
note over A,B: "Абоненты разговаривают"
Пример 5 - Разъединение вызова по инициативе абонента А по протоколу H.248/Megaco, упрощенный вид:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A,B: "Абоненты разговаривают"
note over A: "Абонент закончил разговор и положил трубку"
A->PA_A: Notify portA onhook
PA_A->Core: ReleaseInd(normal)
PA_A->A: Substruct vportA from Context1\nSubscruct portA from Context1\nSubscribe on offhook
note over A: "Абонент свободен"
Core->PA_B: ReleaseReq(aPtyAbandon)
PA_B->B: Subscruct vportB from Context2\nportB generate Busy tone
note over B: "Абоненту выдается сигнал Занято (Busy tone)"
note over B: "Абонент положил трубку"
B->PA_B: Notify portB onhook
PA_B: Subscruct portB from Context2\nSubscribe on offhook
note over B: "Абонент свободен"
Пример 6 - Разъединение вызова по инициативе абонента Б по протоколу H.248/Megaco, упрощенный вид:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A,B: "Абоненты разговаривают"
note over B: "Абонент закончил разговор и положил трубку"
B->PA_B: Notify portB onhook
PA_B->Core: ReleaseInd(normal)
PA_B->B: Substruct vportB from Context2\nSubscruct portB from Context2\nSubscribe on offhook
note over B: "Абонент свободен"
Core->PA_A: ReleaseReq(normal)
PA_A->A: Subscruct vportA from Context1\nportA generate Busy tone
note over A: "Абоненту выдается сигнал Занято (Busy tone)"
note over A: "Абонент положил трубку"
A->PA_A: Notify portA onhook
PA_A->A: Subscruct portA from Context1\nSubscribe on offhook
note over A: "Абонент свободен"
Примеры неуспешных вызовов.
Пример А - Неуспешный вызов по причине того, что номер Б не существует:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A: "Абонент снял трубку и набрал номер Б"
A->PA_A: INVITE telB@ssw From A
PA_A->A: 100 Trying
PA_A->Core: SetupInd(A, B, ifaceA, domain)
note over Core: "Выполняется маршрутизация\nдля поиска интерфейса абонента Б"
note over Core: "Маршрутизация выполнена,\nно абонент с номером Б не существует\nрезультат unassignedNumber"
Core->PA_A: SetupIndAck
Core->PA_A: ReleaseReq(unassignedNumber)
PA_A->A: BYE
note over A: "Абоненту выдается сигнал Занято (Busy tone)\nлибо проигрывается сообщение: Номер не существует"
note over A: "После того как абонент положил трубку\nАбонент свободен"
Пример Б - Неуспешный вызов по причине того, что номер Б не существует:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A: "Абонент снял трубку и набрал номер Б"
A->PA_A: INVITE telB@ssw From A
PA_A->A: 100 Trying
PA_A->Core: SetupInd(A, B, ifaceA, domain)
note over Core: "Выполняется маршрутизация\nдля поиска интерфейса абонента Б"
note over Core: "Направления для номера Б не найдено\nрезультат invalidNumber"
Core->PA_A: SetupIndAck
Core->PA_A: ReleaseReq(invalidNumber)
PA_A->A: BYE
note over A: "Абоненту выдается сигнал Занято (Busy tone)\nлибо проигрывается сообщение: Неправильно набран номер"
note over A: "После того как абонент положил трубку\nАбонент свободен"
Пример В - Неуспешный вызов по причине того, что интерфейс абонента Б не активен:
participant "Абонент А" as A
participant "Adapter A" as PA_A
participant Core
participant "Adapter Б" as PA_B
participant "Абонент Б" as B
note over A: "Абонент снял трубку и набрал номер Б"
A->PA_A: INVITE telB@ssw From A
PA_A->A: 100 Trying
PA_A->Core: SetupInd(A, B, ifaceA, domain)
note over Core: "Выполняется маршрутизация\nдля поиска интерфейса абонента Б"
note over Core: "Интерфейс для номера Б найден\nопределяется, что он не активен\nрезультат terminationDenied"
Core->PA_A: SetupIndAck
Core->PA_A: ReleaseReq(terminationDenied)
PA_A->A: BYE
note over A: "Абоненту выдается сигнал Занято (Busy tone)\nлибо проигрывается сообщение: Абонент временно недоступен"
note over A: "После того как абонент положил трубку\nАбонент свободен"

  • Нет меток