Using Open Source SIP to provide PBX-equivalent telephony features Alan Crosswell TIP January 2008
2 Couldn't have done any of this without help from our friends (and vendors) University of Pennsylvania –Started with their SER cfg and web provisioning tool University of North Carolina Chapel Hill MIT OpenSER developers and users special thanks to Anca Vamanu who wrote the PUA_BLA module Voice-System SRL Internet2 PIC, SIP.edu and VoIP working groups –First learned about SER and used the SIP.edu cookbook Polycom Cisco
3 NetPhone Voice over IP service in Studebaker Building First “new” building on new Manhattanville campus First step in replacing 20,000 obsolete ROLM PBX phones at 12 sites 700 users are administrative staff in IT, Finance and HR departments including senior VPs PBX-equivalent phone service with some difficult (for SIP) “business” features: –Bridged/Shared Line Appearance –Directed/Group Call Pickup Compatibility/interop with existing PBX dial plan
4 Converged IP Network Applications Physical access control Surveillance cameras Intrusion & fire systems monitoring HVAC monitoring Electric meters NetPhone Voice over IP service
5 Survivable IP Network L1 –Diverse outside fiber routes – ring via Broadway & 12 th Ave –Diverse in-building vertical riser fiber ring –Dual power supplies, dual UPS –Diesel generator –PoE for phones, cameras, WiFi APs L2/L3 –Dual switch uplinks w/HSRP –802.1q voice VLAN (learned via CDP) –protected by ACLs (port 5060) POTS lines for emergency backup “just in case” –Digital Centrex – same dial plan
6 CU NetPhone Feature Summary (1/2) Multiple line appearances Bridged lines Privacy Multiple “Stacked” lines per registration Call Waiting Caller & Called number & name display Speaker Headset Cordless Headset Mute Hold Transfer – Consultative & Blind Call Forward Always/Busy/No Answer Do Not Disturb Redial Call Return Call Log Buzz Intercom Intercom groups Hunt groups Call Park/Pickup Directed/Group Call pickup Message Waiting Indicator Conference Speed Dial Distinctive Ring Personal Security Codes DTMF passthru
7 CU NetPhone Feature Summary (2/2) Anonymous Call Reject Anonymous Calling Restricted Calling Conference Bridge Analog Lines Fax Voic as Voic forwarding Voic broadcast Voic distribution groups Voic referral extension Automatic Call Distribution E911 Improvements over current PBX: –Call Waiting –Multiple Lines per Registration –Call Log –Redial –Voic as –Web settings (my NetPhone)
8
9 OpenSER – Open SIP Express Router branch of SER ( SIP Proxy, Registrar, Location Server, etc. Modular add-ins for features like Presence Automatic tracking of SIP session state Scripting language permits customization to implement, e.g.: –dial plans (R-URI rewriting & forwarding) –permissions –selective editing of SIP requests/response headers, SDP, etc. Does not handle media – use Asterisk.
10 Easy: Adding Called Name Display w/OpenSER Polycom UA dials x12345 and the display shows name of called party F1: INVITE F2: 180 Ringing Remote-Party-ID: “Jane Doe”
11 Easy: Adding Called Name Display w/OpenSER route[2] {... if (is_method(“INVITE”)) { if (avp_db_query(“select name from subscriber where username=$rU”,”$avp(callee)”)) {...}... t_on_reply(“2”) } onreply_route[2] { if (t_check_status("180|183")) { append_hf("Remote-Party-ID: \"$avp(callee)\" \r\n","To"); }
12 Difficult: Bridged/Shared Line Appearance Two or more phones all with the same “extension” number, like a key system. In-use LED goes on for all phones when one phone is taken “off hook” (before dialing, that is no INVITE or response to INVITE generated yet). Off when phone is hung up (put “on hook”) even if never dialed (BYE, CANCEL or response never generated). Flashing LED on all phones when call is on hold. Can put a call on hold on phone A and pick up from phone B “Sylantro” spec in draft-anil-sipping-bla-02.txt (expired:-( Uses RFC3265 SUBSCRIBE/NOTIFY –RFC4235 “dialog” event package –RFC3680 “reg” event package
13 Subscribing to Bridged Line Appearance Presence State 1.Phone REGISTERs with Proxy. 2.Proxy notifies Presence User Agent (PUA) of registration. 3.PUA SUBSCRIBEs to dialog state of Phone's Contact address 4.Phone SUBSCRIBEs to dialog state of Address of Record (AOR) 5.repeat for each additional bridged phone. if (is_method(“REGISTER”)) {... bla_set_flag(); } # causes PUA_BLA module to SUBSCRIBE to phone's dialog state.
14 Phone A REGISTERs ProxyPUA Phone A Phone B Phone C REGISTER SUBSCRIBE SUBSCRIBE AOR Subscriber
15 Taking the phone off-hook and lighting all the LEDs 1.Phone A goes off-hook. Lights the LED. 2.Sends NOTIFY to subscriber for (PUA) 3.PUA links this NOTIFY to subscriptions for AOR 4.PUA sends NOTIFY to all subscribers (phone B, C, etc.) 5.Each of phone B, C, etc. turns on the LED. if (is_method("NOTIFY")) { if (bla_handle_notify()) { t_reply("200", "OK"); } else { t_reply("404", "Not found (BLA notify)"); }
16 Phone A NOTIFYs ProxyPUA Phone A Phone B Phone C NOTIFY NOTIFY AOR Subscriber NOTIFY
17 A sample NOTIFY showing an in-process dialog Request-Line: NOTIFY SIP/2.0 Message Header To: From: CSeq: 391 NOTIFY Call-ID: Content-Type: application/dialog-info+xml Message body <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="1965" state="partial” <dialog id="id890b80b6" local-tag="7BA0524C-E77B349D" remote-tag="D9C DD" direction="initiator"> confirmed
18 Moving an on-hold call from Phone A to Phone B 1.Phone C calls Phone A and is put on hold. 1.NOTIFY sent to PUA. This includes unique dialog identifier. 2.“hold” SDP sent to Phone C to stop the media. 2.All that other stuff happens to make the LEDs blink on all other phones. 3.Phone B goes off-hook to seize the on-hold call. 4.In addition to all the Presence NOTIFYs, Phone B: 1.Sends a CANCEL to Phone A 2.Sends a re-INVITE with Replaces header to Phone C. This includes all the SDP negotiation to establish the new media path.
19 A sample Re-INVITE w/Replaces Request-Line: INVITE SIP/2.0 Message Header Via: SIP/2.0/UDP ;branch=z9hG4bK4dc4feb71C2C7080 From: "Alan Crosswell" ;tag=B2E6BFBD-768BFF36 To: CSeq: 2 INVITE Call-ID: Contact: Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER User-Agent: PolycomSoundPointIP-SPIP_650-UA/ Supported: 100rel,replaces Allow-Events: talk,hold,conference P-Preferred-Identity: Replaces: from-tag=2868F3C5-BF031C32 Proxy-Authorization:... Max-Forwards: 70 Content-Type: application/sdp Content-Length:
20 Simple! Iff your UAs implement the Sylantro stuff for BLA At least it's a published spec! Iff your UAs implement Re-INVITE w/Replaces header What happens when Phone C is coming in from the legacy PBX? It happens to work since Cisco media GWs implement Replaces. But BLA can't be implemented across the PBX/SIP boundary (notwithstanding some IOS bugs:-) What happens when Phone C is coming in from an ITSP? Sometimes works... The moral of the story: There are too many ways to do the same thing in SIP and too many optional features to make this stuff work across multi-vendor systems. Hence, recent formation of the IETF BLISS working group.