SDS Foil no 1 PBX Make your own PBX – solution sketch
SDSFoil no 2
First structure
• Is this sufficient to make a real PBX?• Is this sufficient to make a real PBX?
system LocalSwitch
t[*]:Terminal ua[*]:UserAgtMessage
router
Nameserver
SDSFoil no 3
Voice over IP solution
system LocalSwitch
t[*]:Terminal ua[*]:UserAgtlMessage
router
Nameserver
IP network
voice
SDSFoil no 4
Line switched voice solution
system LocalSwitch
t[*]:Terminal ua[*]:UserAgtlMessage
router
Nameserver
Line switch
voice
SDSFoil no 5
First step – the a role as specified in the MSCprocess type UserAgent
1(2)
CallTo
Idle
Alerting
Inviting
Alerted
Request
Busy
Idle
Connect
Alerted
Connected
Busy
Connected-a
SDSFoil no 6
Second step – adding the b role
process type UserAgent1(2)
CallTo
Idle
Alerting
Inviting
Alerted
Setup
Busy
Idle
Answer
Ringing
Connect
Busy
Request
Ringing
Ringing
Alerting
Connected-b
Ringing
Connect
Alerted
Connected
Connected-a
Ringing
Note that addressing is not considered yetNote that disconnection is not shown
SDSFoil no 7
Third step – considering signal addressing process type UserAgent
1(2)
CallTo(b,ta)
Idle
Alerting
Inviting
Alerted
Request To b
Busy
Idle
Connect
Alerted
Connect To ta
Busy To ta
Connected-a
DCL a,b,ta PId;
SDSFoil no 8
Fourth step – considering multiple initiatives and busyprocess type UserAgent
2(2)
*(Idle)
Request
-
Busy
Note that Busy handling is very simple hereNote that CallTo may collide with Request
SDSFoil no 9
Remarks
• What if the b agent is identified by an external name instead of a PId – how to get the b PId then??
• What if more intelligent busy treatment is needed?
• What if the b agent is identified by an external name instead of a PId – how to get the b PId then??
• What if more intelligent busy treatment is needed?
SDSFoil no 10
Adding allocator and nameserver
system LocalSwitch
nameserver
ua:UserAllo
us:UserServ
U(*):UserAgent
MessageRouter
t[*]:Terminal
• Note that external names maps to allocators now!
• Note that we need to: 1) define the behaviour of UserAllo and 2) change the previous UserAgt to become the new UserServer.
• Note that we may split the UserServer according to roles: Originating (A) and Terminating (B)
• Note that external names maps to allocators now!
• Note that we need to: 1) define the behaviour of UserAllo and 2) change the previous UserAgt to become the new UserServer.
• Note that we may split the UserServer according to roles: Originating (A) and Terminating (B)
SDSFoil no 11
Adding the allocators and the nameserver
CallTo Request_self
MSC Succesful_Outgoing_Call_modified
AlertingAlerting
ReleaseComplete
Connected
Disconnect
a:Terminal a: UserServer b:UserServer
Connect
b:Terminal
RingingAnswer
b:UserAlloa:UserAllo
Grant_self
RequestGrant Sieze
Free Free
LookupLookupResult
Nameserver
SDSFoil no 12
Adding agents for external switches
• If we have a standard internal interface, we can just add different types of agents!
• If we have a standard internal interface, we can just add different types of agents!
system LocalSwitch
nameserver
ua:UserAllo
us:UserServ
U(*):UserAgent
MessageRouter
t[*]:Terminal
(*):NodeType1
pa:LinkAllo
l(l):protokol
o(k):OtherAgent
SDSFoil no 13
Adding agents for operators
• If we have a standard internal interface, we can just add different types of agents!
• If we have a standard internal interface, we can just add different types of agents!
system LocalSwitch
nameserver
ua:UserAllo
us:UserServ
U(*):UserAgent
MessageRouter
t[*]:Terminal
(*):NodeType1
pa:LinkAllo
l(l):protokol
o(k):OtherAgent
Oa:OPAllo
Os:OpServ
O(*):OPAgent
ot[*]:Operatorl