opensips - an event-driven sip routing engine - fosdem · 2017-08-21 · liviu chircu - 4th feb...
TRANSCRIPT
Liviu Chircu- 4th Feb 2017 -
OpenSIPS - an event-drivenSIP routing engine
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Outline
● Architecture timeline
● Event subscribe-notify
● Usage scenarios
● OpenSIPS scripts
● Conclusions
2
Architecture timeline
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Step 1: “Linear” architecture
OpenSIPS 1.X
4
TimeSIP packet arrivals
Thread 1
Thread 2
CPU bound
I/O bound
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Step 2: “Async” architecture
OpenSIPS 2.1, 2.2
5
TimeSIP packet arrivals
Thread 1
CPU bound
I/O bound
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Limitation: Processing is still linear!
Advanced SIP scenarios:
● Push Notifications● FreeSWITCH ESL Events (e.g. DTMF)● Call Pick-up
What’s missing:
● Communication & data exchange between different processing contexts
6
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Step 3: “Event-driven” architecture
7
TimeSIP packet arrivals
Thread 1
Thread 2
SIP msg A
SIP msg B
wait(event X) resume()
event X
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Step 3: “Event-driven” architecture
8
TimeSIP packet arrival
Thread 1
SIP msg A 4xx SIP replywait(event X) resume()
timeout!
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Step 3: “Event-driven” architecture
9
TimeSIP packet arrivals
Thread 1
Thread 2
SIP msg A
SIP msg B
trigger(handler, eventX)
eventX
handler
Event subscribe/notify
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Event Definition
● Triggered by actions / data processing during runtime● Events hold key/value attributes● OpenSIPS has a list of predefined events
11
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Subscribe
● interested OpenSIPS workers subscribe to events● event subscriptions may contain filtering attributes
12
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Notify
● Notification == event● Events are generated during runtime● They are dispatched to all relevant subscribers● Events are parametrized (e.g. DTMF digit, REG Contact)
13
Usage scenarios
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Push Notifications
15
INVITE bob
1xxPN
REGISTER
INVITE bob
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Push Notifications
Current way
1. incoming call for “bob”
2. send PN to “bob”’s mobile device
3. async sleep (N)
4. call(“bob”) if registered(“bob”) else goto 3.
16
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Push Notifications
Current way (limitations)
1. performance killer
2. inflexible, cannot handle complex scenarios
● parallel forking (desk + mobile devices)● multiple gateways
17
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Push Notifications
In 2.3:
1. incoming call for “bob”
2. subscribe(“REGISTER”, “aor=bob”, “reg_handler”)
3. send PN to “bob”’s mobile device
4. fork calls to existing registrations
...
route [reg_handler] { fork_call(“$event(contact)”); }
18
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
DTMF-based fax/voicemail detection
In 2.3:
1. incoming call for “bob”
2. subscribe(“DTMF”, “callid=$ci”, “dtmf_handler”)
3. send call to “bob”
...
route [dtmf_handler] { hangup() if $event(digit) != 2 }
19
OpenSIPS Script
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Push Notifications
subscribe("REGISTER", "aor=bob", "reg_handler");
route(SEND_APN);
if (lookup("location"))
t_relay();
halt();
21
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Push Notifications
route [SEND_APN] {
rest_append_hf("Authorization: key=CONSOLE_API_KEY");
rest_append_hf("Content-Type: \"application/json\"");
rest_post("https://android.googleapis.com/gcm/send",
"{ \"data\" : {\"foo\": \"bar\"},
\"registration_ids\":[\"REGISTRATION_ID\"] }"...);
}22
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Push Notifications
route [reg_handler] {
route(CHECK_IF_MOBILE, "$event(contact)");
t_relay();
}
23
Conclusions
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
Conclusions
Event-driven approach:
● powerful & easy to use● complex scenarios with simple script● lightning fast!
25
- FOSDEM ‘17 -Liviu Chircu - OpenSIPS Project
OpenSIPS 2.3 - “integration”
● SIP capturing - Homer/SIPCapture● billing - CGRateS● software PBX - FreeSWITCH● middleware - RabbitMQ
26
● Liviu Chircu○ OpenSIPS Project: www.opensips.org○ [email protected]
Take-Away Message
Under development!