1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
msc {
hscale="4";
ms [label="MS"], bts [label="BTS"], nitb [label="NITB"], emh [label="External MNCC Hdlr"];
|||;
... [label="Mobile Originated call handled via OsmoNITB, no RTP proxy, IPBTS and external MNCC Handler"];
|||;
--- [label="User on A-side dials a MO call from his phone"];
ms <=> nitb [label="RF Channel Establishment"];
...;
# MS sends CC SETUP, deliver it to MNCC
ms -> nitb [label="CC SETUP [MSISDN]"];
nitb rbox nitb [label="CSTATE_INITIATED"];
nitb -> emh [label="MNCC-SETUP.ind [CALLING, BEARER_CAP,
FACILITY, CALLED, USERUSER, SSVERSION, CCCAP"];
emh rbox emh [label="1 CALL_INIT"];
...;
--- [label="Exact time of RTP-CREATE up to Ext MNCC Hdlr"];
nitb <- emh [label="MNCC_RTP_CREATE[.req]"];
bts <- nitb [label="RSL IPA CRCX"];
bts -> nitb [label="RSL IPA CRCX ACK (BTS-IP, BTS-PORT)"];
nitb -> emh [label="MNCC_RTP_CREATE[.cnf] (BTS-IP, BTS-PORT)"];
...;
nitb <- emh [label="MNCC-CALL-PROC.req [BEARER_CAP, FACILITY, PROGRESS]"];
emh rbox emh [label="3 MO_CALL_PROC"];
nitb rbox nitb [label="CSTATE_MO_CALL_PROC"];
ms <- nitb [label="CC CALL PROCEDING"];
...;
# optional
--- [label="Optional PROGRESS, can happen 0-N times"];
nitb <- emh [label="MNCC-PROGRESS.req [USERUSER]"];
emh rbox emh [label="3 MO_CALL_PROC"];
ms <- nitb [label="CC PROCEDING"];
...;
# optional
--- [label="Optional; Indicates when B-side is ringing"];
nitb <- emh [label="MNCC-ALERT.req [FACILITY, PROGRESS, USERUSER]"];
emh rbox emh [label="4 CALL_DELIVERED"];
nitb rbox nitb [label="CSTATE_CALL_DELIVERED"];
ms <- nitb [label="CC ALERTING"];
...;
# ask the BTS to connect its RTP stream to the given IP+PORT
--- [label="Exact time of RTP-CONNECT up to Ext MNCC Hdlr"];
nitb <- emh [label="MNCC_RTP_CONNECT[.req] (EMH-IP, EMH-PORT)"];
bts <- nitb [label="RSL IPA MDCX (EMH-IP, EMH-PORT)"];
bts -> nitb [label="RSL IPA MDCX ACK"];
nitb -> emh [label="MNCC_RTP_CONNECT[.cnf] (BTS-IP, BTS-PORT)"];
...;
--- [label="User on B-side answers the call"];
nitb <- emh [label="MNCC-SETUP.rsp [FACILITY, PROGRERSS, CONNETED, USERUSER]"];
emh rbox emh [label="? CONNECT_INDICATION"];
nitb rbox nitb [label="CSTATE_CONNECT_IND"];
ms <- nitb [label="CC CONNECT"];
...;
ms -> nitb [label="CC CONNECT ACK"];
nitb rbox nitb [label="CSTATE_ACTIVE"];
nitb -> emh [label="MNCC-SETUP-COMPL.ind"];
emh rbox emh [label="10 ACTIVE"];
...;
...;
...;
--- [label="User on A-side hangs up the call"];
ms -> nitb [label="CC DISCONNECT"];
nitb rbox nitb [label="CSTATE_DISCONNET_REQ"];
nitb -> emh [label="MNCC-DISC.ind [CAUSE, FACILITY, USERUSER, SSVERSION]"];
emh rbox emh [label="12 DISCONNET_IND"];
...;
nitb <- emh [label="MNCC-RELEASE.req [CAUSE, FACILITY, USERUSER]"];
emh rbox emh [label="19 RELEASE_REQ"];
nitb rbox nitb [label="CSTATE_RELEASE_REQ"];
ms <- nitb [label="CC RELEASE"];
...;
ms -> nitb [label="CC RELEASE COMPLETE"];
nitb -> emh [label="MNCC-RELEASE.cnf [CAUSE, FACILITY, USERUSER, SSVERSION]"];
...;
ms <=> nitb [label="RF Channel Release"];
...;
# bridge two voice calls (by call reference) inside NITB
# nitb <- emh [label="MNCC_BRIDGE"];
# nitb <- emh [label="MNCC_FRAME_DROP"];
# nitb <- emh [label="MNCC_FRAME_RECV"];
# not implemented so far
# nitb <- emh [label="MNCC_RTP_FREE"];
# direct input/output of voice frames via MNCC socket
# nitb <- emh [label="MNCC_TCHF_FRAME, GSM_TCHF_FRAME_EFR, GSM_TCHH_FRAME, GSM_TCH_FRAME_AMR"];
}
|