SlideShare a Scribd company logo
Asterisk, Instant Messaging and
        Presence, how?
    Saúl Ibarra Corretgé <saghul@gmail.com>

                  http://www.saghul.net

                  http://www.sipdoc.net

                  saghul



                        http://www.irontec.com
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                  About me



●   saghul
       – VoIP enthusiast, playing around with Asterisk since 2k5
       – GNU/Linux lover likes everything “Software Libre”
       – Co-founder of http://sipdoc.net
       – Highly involved in spanish VoIP comunities




                                                                                2
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                            This presentation

●   http://www.saghul.net/blog/downloads/astricon2k9/
●   http://www.slideshare.net/saghul/
      –   Slides
      –   Complete configuration files
      –   Database example data




                                                                                  3
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                       Index

1. Asterisk and presence status
2. SIP SIMPLE or XMPP?
3. The XMPP solution
     1. OpenFire setup
4. The SIMPLE solution
     1. Kamailio + Asterisk setup
5. Conclusions




                                                                               4
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                       What we do have now

●   Asterisk SIP support (chan_sip)
      –   In-dialog MESSAGE :-(
      –   SUBSCRIBE and NOTIFY support
            ●   For Event: dialog
            ●   What about Event: Presence? :-(
      –   No PUBLISH support :-(
●   Asterisk XMPP support
      –   res_jabber
            ●   JabberSend, JABBER_RECEIVE, JABBER_STATUS
      –   chan_gtalk, chan_jingle
●   Am I missing something?


                                                                                    5
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                            Do we need presence and IM?

●   “I want to talk to you, not to your phone”
●   Are you available?
      –   For an audio conference?
      –   Just for IM?
      –   For whom?
●   Where are you?
      –   Mobile
      –   Office
      –   Home
      –   ...

We need to know if a user is available
       and what his status is
                                                                                   6
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                           What we need

●   A presence server
●   Users may publish their status
●   Users may subscribe to other users status
●   Instant Messaging between users

              Is it possible only with Asterisk?



                             NO

                                                                               7
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?




SIMPLE or XMPP?
                                                                   8
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                              SIMPLE vs XMPP

●   Did SIMPLE reinvent the wheel?
●   Large companies started adopting SIMPLE (Microsoft,
    …)
       –   Propietary extensions :-(
●   XMPP does not provide voice capabilities
       –   Well, there is Jingle...
●   If SIP is the VoIP protocol: why not use it also for
    presence and IM?




                                                                                    9
The XMPP solution
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                      The XMPP solution

●   Integrate Asterisk with a XMPP server




                                                                           11
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                  OpenFire

●   Open Source
●   Java based
●   Multiplatform
●   Asterisk integration plugin
●   SIP softphone plugin
●   Gateways to multiple mi services: MSN, Yahoo, …
●   Easy installation!




                                                                           12
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                   OpenFire (II)
●   Download deb package
●   dpkg -i openfire_3.6.4_all.deb




                                                                                13
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                               OpenFire (III)

●   Web based configuration
●   Clustering architecture
●   Connection to the Asterisk Manager Interface
      –   Multiple connections
●   Mapping between Asterisk SIP users and OpenFire
    XMPP users
●   Multiplatform Java client: Spark
●   Flash based web client: SparkWeb




                                                                             14
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                              OpenFire (IV)




                                                            15
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                              OpenFire (V)

●   When a user is talking OpenFire puts it “On the phone”




                                                                           16
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                              OpenFire (VI)




                                                            17
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                OpenFire (VI)

●   What we get
      –   Instant Messaging
      –   Presence
      –   Gateways to other mi services
      –   Text conferencing
●   Problems
      –   Duplicated users (we could partially fix it with LDAP)
      –   Need to handle 2 protocols
      –   Not many softphones support SIP and XMPP
      –   Do any hardphones support XMPP?




                                                                              18
The SIP solution
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                          A complex protocol

●   SIMPLE IETF working group
      –   Presence RFCs
            ●   3856, 3857, 3858, 3863, 4479, 4480, 4482, ...
      –   XCAP
            ●   4825, 4826, 4827, 5025, …
      –   Instant Messaging
            ●   3428, 3994, 4975, …




     SIMPLE is NOT simple!

                                                                                20
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                             The SIP solution

●   Integrate Asterisk and Kamailio to provide IM and
    presence.
●   Users are registered to Kamailio.
●   INVITE requests are routed through the Asterisk server.
      –   Asterisk RealTime user integration with Kamailio's
            subscriber table.
●   PUBLISH, SUBSCRIBE and MESSAGE requests are
    handled by Kamailio.




                                                                              21
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                           Registration




REGISTER



                 Store location            Asterisk does
                                             nothing!



                                                                       22
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                             Kamailio – Asterisk RealTime integration

●   Asterisk peers are Kamailio's subscribers.
●   MySQL view so that Asterisk 'sees' the users as his own.
●   Peers IP → Kamailio IP.
●   Calls between users go through Kamailio and Asterisk.
●   We need to call to alphanumeric users → DB Alias




                                                                            23
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                             Kamailio – Asterisk RealTime integration (2)

CREATE VIEW sip_peers AS
SELECT subscriber.username AS name,
subscriber.username AS defaultuser,
'friend' AS type,
NULL AS secret,
subscriber.domain AS host,
concat(subscriber.rpid,' ','<',subscriber.username,'>') AS callerid,
'from-users' AS context,
subscriber.username AS mailbox,
'yes' AS nat,
'no' AS qualify,
'info' AS dtmfmode,
subscriber.username AS fromuser,

                                                                                24
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                           Kamailio – Asterisk RealTime integration (3)

NULL AS authuser,
subscriber.domain AS fromdomain,
NULL AS insecure,
'no' AS canreinvite,
NULL AS disallow,
'all' AS allow,
NULL AS restrictcid,
subscriber.domain AS defaultip,
subscriber.domain AS ipaddr,
subscriber.domain AS outboundproxy,
'5060' AS port,
NULL AS regseconds
FROM kamailio_1.subscriber;

                                                                              25
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                       Invitation

                    2. Find numeric Alias                  5. Dial to the X-
                    3. Add X-Subscriber                    Subscriber user
                    header
          1. INVITE
Alice       (Bob)
                                              4. INVITE
                                               (2001)

                                            6. INVITE (Bob)

        8. INVITE          7. Lookup
Bob       (Bob)           user location



                                                                                26
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                              Invitation (2)

# Route all INVITE requests to Asterisk
if (is_method("INVITE")) {
     # Remove X-Subscriber header so that no one sees it...
     remove_hf("X-Subscriber");


     # We don't have to route the requests coming FROM Asterisk
     # back to Asterisk. We would make a loop!
     if (!($si == "AST_IP" && $sp == "AST_PORT")) {
          route(ASTERISK_USERS_ROUTE);
     }
}




                                                                           27
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                  Invitation (3)

# Send INVITE requests to the Asterisk server
route[ASTERISK_USERS_ROUTE] {
     # Call to the numeric alias
     avp_db_query("SELECT alias_username FROM dbaliases WHERE username
= '$rU' AND domain = '$avp(AVP_ORIGDOMAIN)'LIMIT 1",
"$avp(AVP_NUMALIAS)”);
     if (is_avp_set("$avp(AVP_NUMALIAS)")) {
          # Save the subscriber in a header so we can use it in Asterisk
          append_hf("X-Subscriber: $rUrn");
          $rU = $avp(s:numalias);
     }


     $rd = "AST_IP";
     $rp = "AST_PORT";
     route(RELAY_ROUTE);
}                                                                              28
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                              Invitation (4)


[from-users]
exten => _X.,1,NoOp()
exten => _X.,n,Set(SUBSCRIBER=${SIP_HEADER(X-Subscriber)})
exten => _X.,n,GotoIf($[${LEN(${SUBSCRIBER})} = 0]?hang)
exten => _X.,n,Dial(SIP/${SUBSCRIBER})
exten => _X.,n(hang),Hangup




                                                                           29
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                               SIMPLE presence



        1. SUBSCRIBE
            (Bob)              2. handle_subscribe

Alice

         5. NOTIFY



        3. PUBLISH                4. handle_publish             Asterisk does
Bob                                                               nothing!



                                                                                 30
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                      SIMPLE presence (2)
# Handle presence requests
    if(is_method("PUBLISH|SUBSCRIBE")) {
            route(PRESENCE_ROUTE);
    }


# Handle presence
route[PRESENCE_ROUTE] {
    if (is_method("PUBLISH")) {
            handle_publish();
            t_release();
    } else if (is_method("SUBSCRIBE")) {
            handle_subscribe();
            t_release();
    }
    exit;
}                                                                            31
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                     Messaging



        1. MESSAGE (Bob)
                                2. Lookup location
Alice




           3. MESSAGE
                                                              Asterisk does
Bob                                                             nothing!



                                                                               32
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                NAT handling

●   We just need to fix the NAT in signalling.
●   Our Asterisk 'peers' are configured with nat=yes
      –   COMEDIA mode
      –   Audio will go through Asterisk




                                                                              33
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                 Further improvements...




                                                            34
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                          Further improvements... (2)




What about mixing both?
   –   OpenFire's Asterisk plugin still works! (regardless
        of the integration with Kamailio)




                                                                         35
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?




SIMPLE or XMPP?
                                                               36
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                    Thanks!

BYE sip:astricon@astricon.net SIP/2.0
Via: SIP/2.0/UDP guest.astricon.net:5060;branch=z9hG4bKnashds7
Max-Forwards: 70
From: saghul <sip:saghul@sipdoc.net>;tag=8321234356
To: AstriCon <sip:astricon@astricon.net>;tag=9fxced76sl
Call-ID: 3848276298220188511@astricon.net
CSeq: 1 BYE
Content-Length: 0


    Thanks for watching!


                                                                           37
Any questions?
AstriCon 2009: Asterisk, Instant Messaging and Presence, how?

                                                                 License




  http://creativecommons.org/licenses/by-sa/3.0/




All images are property of their respective authors.
                                                                       39

More Related Content

PDF
Asterisk Xenified
PDF
ICE: The ultimate way of beating NAT in SIP
PDF
Asterisk Complete Training
PDF
Telephony Service Development on Asterisk Platform
PPT
Download It
PDF
Jonny_Martin-Asterisk
PDF
Using Asterisk in a SIP softswitch
PPTX
Eric Vyncke - IPv6 Security Vendor Point of View
Asterisk Xenified
ICE: The ultimate way of beating NAT in SIP
Asterisk Complete Training
Telephony Service Development on Asterisk Platform
Download It
Jonny_Martin-Asterisk
Using Asterisk in a SIP softswitch
Eric Vyncke - IPv6 Security Vendor Point of View

What's hot (10)

PDF
Home Automation with Asterisk - Astricon 2015 - Alberto Sagredo Castro
PDF
Shmcfarl slb66-slb64-nat64-proxy
PDF
Snappy Kamailio
PPTX
SDN/NFV Sudanese Research Group Initiative
PPT
CCNA Security 010-configuring cisco asa
PPTX
The A2530x24xx AIR Module for ZigBee Standard Applications
PDF
Hands-on Experience with IPv6 Routing and Services
PDF
Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...
PDF
Data Centre Portfolio Update
PDF
IPv6 In z/VSE:IBM z/VSE Live Virtual Class 2012
Home Automation with Asterisk - Astricon 2015 - Alberto Sagredo Castro
Shmcfarl slb66-slb64-nat64-proxy
Snappy Kamailio
SDN/NFV Sudanese Research Group Initiative
CCNA Security 010-configuring cisco asa
The A2530x24xx AIR Module for ZigBee Standard Applications
Hands-on Experience with IPv6 Routing and Services
Внутренняя архитектура IOS-XE: средства траблшутинга предачи трафика на ASR1k...
Data Centre Portfolio Update
IPv6 In z/VSE:IBM z/VSE Live Virtual Class 2012
Ad

Viewers also liked (20)

ODP
Presente y futuro de las comunicaciones VoIP
PDF
OpenSIPS Workshop
PDF
SIP2SIP: SIP gratis para las masas
PDF
SIP is hard, let's go shopping!
PDF
Asterisk presence-im-091015103222-phpapp02
PPT
Pwning Your Phone with Adhearsion and Asterisk
PDF
Asterisk-Java Framework Presentation
PDF
Jonny_Martin-Asterisk
PPT
02 asterisk - the future of telecommunications
PPTX
Implementation Lessons using WebRTC in Asterisk
PDF
The 12 tasks of Asterisk
PDF
Blink: voice is not enough
PDF
Blink: SIP beyond VoIP
PDF
Blink: SIP conferencing done right
PDF
Rethinking the PBX
PDF
Developing rich SIP applications with SIPSIMPLE SDK
PDF
SIP y XMPP: amigos para siempre
PDF
SIP Conferencing Reloaded
PDF
CDRTool: CDR mediation and rating engine for OpenSIPS
PDF
De SIP a XMPP y vice versa
Presente y futuro de las comunicaciones VoIP
OpenSIPS Workshop
SIP2SIP: SIP gratis para las masas
SIP is hard, let's go shopping!
Asterisk presence-im-091015103222-phpapp02
Pwning Your Phone with Adhearsion and Asterisk
Asterisk-Java Framework Presentation
Jonny_Martin-Asterisk
02 asterisk - the future of telecommunications
Implementation Lessons using WebRTC in Asterisk
The 12 tasks of Asterisk
Blink: voice is not enough
Blink: SIP beyond VoIP
Blink: SIP conferencing done right
Rethinking the PBX
Developing rich SIP applications with SIPSIMPLE SDK
SIP y XMPP: amigos para siempre
SIP Conferencing Reloaded
CDRTool: CDR mediation and rating engine for OpenSIPS
De SIP a XMPP y vice versa
Ad

Similar to Asterisk, IM and Presence: how? (20)

PDF
Open Source Telephony Disruptive Solutions
PDF
XMPP Intro - The camp2012
PPT
PDF
Presence and the Real-Time Internet
PDF
Asterisk Update
PDF
DESIGN AND DEVELOPMENT OF ASTERISK BASED COMPUTER SERVICES ACCESSING FRAMEWOR...
PDF
Design and development of asterisk based computer services accessing framewor...
PDF
Chat app case study - xmpp vs SIP
PDF
"Reinventing the Dialplan" slides from Twilio's Astricon 2009 talk
PDF
Sculpturing SIP World
PDF
Ridhwana Mohammad (071403056)
PDF
Asterisk - Glen Bastes
PDF
SIP Beyond VoIP
PDF
Powering your website with realtime data
PDF
voip2day 2012 - Asterisk update by Steve Sokol
DOCX
Ubuntu VOIP &amp; IM
PPTX
Asterisk Deployments
PDF
PDF
SeaBeyond 2011 ProcessOne - David Banes: Cleartext microblogging
PPT
Open Source Telephony Disruptive Solutions
XMPP Intro - The camp2012
Presence and the Real-Time Internet
Asterisk Update
DESIGN AND DEVELOPMENT OF ASTERISK BASED COMPUTER SERVICES ACCESSING FRAMEWOR...
Design and development of asterisk based computer services accessing framewor...
Chat app case study - xmpp vs SIP
"Reinventing the Dialplan" slides from Twilio's Astricon 2009 talk
Sculpturing SIP World
Ridhwana Mohammad (071403056)
Asterisk - Glen Bastes
SIP Beyond VoIP
Powering your website with realtime data
voip2day 2012 - Asterisk update by Steve Sokol
Ubuntu VOIP &amp; IM
Asterisk Deployments
SeaBeyond 2011 ProcessOne - David Banes: Cleartext microblogging

More from Saúl Ibarra Corretgé (20)

PDF
JanusCon 2024: Mom there are robots in my meeting
PDF
Challenges running Jitsi Meet at scale during the pandemic
PDF
The Road to End-to-End Encryption in Jitsi Meet
PDF
Jitsi: State of the Union 2020
PDF
Jitsi Meet: our tale of blood, sweat, tears and love
PDF
Jitsi Meet: Video conferencing for the privacy minded
PDF
Jitsi - Estado de la unión 2019
PDF
Get a room! Spot: the ultimate physical meeting room experience
PDF
Going Mobile with React Native and WebRTC
PDF
Going Mobile with React Native and WebRTC
PDF
Jitsi: Estado de la Unión (2018)
PDF
Jitsi: state-of-the-art video conferencing you can self-host
PDF
WebRTC: El epicentro de la videoconferencia y IoT
PDF
Jitsi: Open Source Video Conferencing
PDF
Jitsi: State of the Union
PDF
libuv: cross platform asynchronous i/o
PDF
Videoconferencias: el santo grial de WebRTC
PDF
SylkServer: State of the art RTC application server
PDF
Escalabilidad horizontal desde las trincheras
PDF
A deep dive into libuv
JanusCon 2024: Mom there are robots in my meeting
Challenges running Jitsi Meet at scale during the pandemic
The Road to End-to-End Encryption in Jitsi Meet
Jitsi: State of the Union 2020
Jitsi Meet: our tale of blood, sweat, tears and love
Jitsi Meet: Video conferencing for the privacy minded
Jitsi - Estado de la unión 2019
Get a room! Spot: the ultimate physical meeting room experience
Going Mobile with React Native and WebRTC
Going Mobile with React Native and WebRTC
Jitsi: Estado de la Unión (2018)
Jitsi: state-of-the-art video conferencing you can self-host
WebRTC: El epicentro de la videoconferencia y IoT
Jitsi: Open Source Video Conferencing
Jitsi: State of the Union
libuv: cross platform asynchronous i/o
Videoconferencias: el santo grial de WebRTC
SylkServer: State of the art RTC application server
Escalabilidad horizontal desde las trincheras
A deep dive into libuv

Recently uploaded (20)

PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PDF
Web App vs Mobile App What Should You Build First.pdf
PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PDF
2021 HotChips TSMC Packaging Technologies for Chiplets and 3D_0819 publish_pu...
PDF
DP Operators-handbook-extract for the Mautical Institute
PDF
project resource management chapter-09.pdf
PPTX
The various Industrial Revolutions .pptx
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Enhancing emotion recognition model for a student engagement use case through...
PDF
1 - Historical Antecedents, Social Consideration.pdf
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPTX
TLE Review Electricity (Electricity).pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
Tartificialntelligence_presentation.pptx
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Final SEM Unit 1 for mit wpu at pune .pptx
Web App vs Mobile App What Should You Build First.pdf
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
2021 HotChips TSMC Packaging Technologies for Chiplets and 3D_0819 publish_pu...
DP Operators-handbook-extract for the Mautical Institute
project resource management chapter-09.pdf
The various Industrial Revolutions .pptx
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
Zenith AI: Advanced Artificial Intelligence
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
Programs and apps: productivity, graphics, security and other tools
Enhancing emotion recognition model for a student engagement use case through...
1 - Historical Antecedents, Social Consideration.pdf
Univ-Connecticut-ChatGPT-Presentaion.pdf
TLE Review Electricity (Electricity).pptx
Assigned Numbers - 2025 - Bluetooth® Document
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Tartificialntelligence_presentation.pptx
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx

Asterisk, IM and Presence: how?

  • 1. Asterisk, Instant Messaging and Presence, how? Saúl Ibarra Corretgé <saghul@gmail.com> http://www.saghul.net http://www.sipdoc.net saghul http://www.irontec.com
  • 2. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? About me ● saghul – VoIP enthusiast, playing around with Asterisk since 2k5 – GNU/Linux lover likes everything “Software Libre” – Co-founder of http://sipdoc.net – Highly involved in spanish VoIP comunities 2
  • 3. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? This presentation ● http://www.saghul.net/blog/downloads/astricon2k9/ ● http://www.slideshare.net/saghul/ – Slides – Complete configuration files – Database example data 3
  • 4. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Index 1. Asterisk and presence status 2. SIP SIMPLE or XMPP? 3. The XMPP solution 1. OpenFire setup 4. The SIMPLE solution 1. Kamailio + Asterisk setup 5. Conclusions 4
  • 5. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? What we do have now ● Asterisk SIP support (chan_sip) – In-dialog MESSAGE :-( – SUBSCRIBE and NOTIFY support ● For Event: dialog ● What about Event: Presence? :-( – No PUBLISH support :-( ● Asterisk XMPP support – res_jabber ● JabberSend, JABBER_RECEIVE, JABBER_STATUS – chan_gtalk, chan_jingle ● Am I missing something? 5
  • 6. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Do we need presence and IM? ● “I want to talk to you, not to your phone” ● Are you available? – For an audio conference? – Just for IM? – For whom? ● Where are you? – Mobile – Office – Home – ... We need to know if a user is available and what his status is 6
  • 7. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? What we need ● A presence server ● Users may publish their status ● Users may subscribe to other users status ● Instant Messaging between users Is it possible only with Asterisk? NO 7
  • 8. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? SIMPLE or XMPP? 8
  • 9. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? SIMPLE vs XMPP ● Did SIMPLE reinvent the wheel? ● Large companies started adopting SIMPLE (Microsoft, …) – Propietary extensions :-( ● XMPP does not provide voice capabilities – Well, there is Jingle... ● If SIP is the VoIP protocol: why not use it also for presence and IM? 9
  • 11. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? The XMPP solution ● Integrate Asterisk with a XMPP server 11
  • 12. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? OpenFire ● Open Source ● Java based ● Multiplatform ● Asterisk integration plugin ● SIP softphone plugin ● Gateways to multiple mi services: MSN, Yahoo, … ● Easy installation! 12
  • 13. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? OpenFire (II) ● Download deb package ● dpkg -i openfire_3.6.4_all.deb 13
  • 14. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? OpenFire (III) ● Web based configuration ● Clustering architecture ● Connection to the Asterisk Manager Interface – Multiple connections ● Mapping between Asterisk SIP users and OpenFire XMPP users ● Multiplatform Java client: Spark ● Flash based web client: SparkWeb 14
  • 15. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? OpenFire (IV) 15
  • 16. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? OpenFire (V) ● When a user is talking OpenFire puts it “On the phone” 16
  • 17. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? OpenFire (VI) 17
  • 18. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? OpenFire (VI) ● What we get – Instant Messaging – Presence – Gateways to other mi services – Text conferencing ● Problems – Duplicated users (we could partially fix it with LDAP) – Need to handle 2 protocols – Not many softphones support SIP and XMPP – Do any hardphones support XMPP? 18
  • 20. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? A complex protocol ● SIMPLE IETF working group – Presence RFCs ● 3856, 3857, 3858, 3863, 4479, 4480, 4482, ... – XCAP ● 4825, 4826, 4827, 5025, … – Instant Messaging ● 3428, 3994, 4975, … SIMPLE is NOT simple! 20
  • 21. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? The SIP solution ● Integrate Asterisk and Kamailio to provide IM and presence. ● Users are registered to Kamailio. ● INVITE requests are routed through the Asterisk server. – Asterisk RealTime user integration with Kamailio's subscriber table. ● PUBLISH, SUBSCRIBE and MESSAGE requests are handled by Kamailio. 21
  • 22. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Registration REGISTER Store location Asterisk does nothing! 22
  • 23. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Kamailio – Asterisk RealTime integration ● Asterisk peers are Kamailio's subscribers. ● MySQL view so that Asterisk 'sees' the users as his own. ● Peers IP → Kamailio IP. ● Calls between users go through Kamailio and Asterisk. ● We need to call to alphanumeric users → DB Alias 23
  • 24. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Kamailio – Asterisk RealTime integration (2) CREATE VIEW sip_peers AS SELECT subscriber.username AS name, subscriber.username AS defaultuser, 'friend' AS type, NULL AS secret, subscriber.domain AS host, concat(subscriber.rpid,' ','<',subscriber.username,'>') AS callerid, 'from-users' AS context, subscriber.username AS mailbox, 'yes' AS nat, 'no' AS qualify, 'info' AS dtmfmode, subscriber.username AS fromuser, 24
  • 25. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Kamailio – Asterisk RealTime integration (3) NULL AS authuser, subscriber.domain AS fromdomain, NULL AS insecure, 'no' AS canreinvite, NULL AS disallow, 'all' AS allow, NULL AS restrictcid, subscriber.domain AS defaultip, subscriber.domain AS ipaddr, subscriber.domain AS outboundproxy, '5060' AS port, NULL AS regseconds FROM kamailio_1.subscriber; 25
  • 26. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Invitation 2. Find numeric Alias 5. Dial to the X- 3. Add X-Subscriber Subscriber user header 1. INVITE Alice (Bob) 4. INVITE (2001) 6. INVITE (Bob) 8. INVITE 7. Lookup Bob (Bob) user location 26
  • 27. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Invitation (2) # Route all INVITE requests to Asterisk if (is_method("INVITE")) { # Remove X-Subscriber header so that no one sees it... remove_hf("X-Subscriber"); # We don't have to route the requests coming FROM Asterisk # back to Asterisk. We would make a loop! if (!($si == "AST_IP" && $sp == "AST_PORT")) { route(ASTERISK_USERS_ROUTE); } } 27
  • 28. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Invitation (3) # Send INVITE requests to the Asterisk server route[ASTERISK_USERS_ROUTE] { # Call to the numeric alias avp_db_query("SELECT alias_username FROM dbaliases WHERE username = '$rU' AND domain = '$avp(AVP_ORIGDOMAIN)'LIMIT 1", "$avp(AVP_NUMALIAS)”); if (is_avp_set("$avp(AVP_NUMALIAS)")) { # Save the subscriber in a header so we can use it in Asterisk append_hf("X-Subscriber: $rUrn"); $rU = $avp(s:numalias); } $rd = "AST_IP"; $rp = "AST_PORT"; route(RELAY_ROUTE); } 28
  • 29. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Invitation (4) [from-users] exten => _X.,1,NoOp() exten => _X.,n,Set(SUBSCRIBER=${SIP_HEADER(X-Subscriber)}) exten => _X.,n,GotoIf($[${LEN(${SUBSCRIBER})} = 0]?hang) exten => _X.,n,Dial(SIP/${SUBSCRIBER}) exten => _X.,n(hang),Hangup 29
  • 30. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? SIMPLE presence 1. SUBSCRIBE (Bob) 2. handle_subscribe Alice 5. NOTIFY 3. PUBLISH 4. handle_publish Asterisk does Bob nothing! 30
  • 31. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? SIMPLE presence (2) # Handle presence requests if(is_method("PUBLISH|SUBSCRIBE")) { route(PRESENCE_ROUTE); } # Handle presence route[PRESENCE_ROUTE] { if (is_method("PUBLISH")) { handle_publish(); t_release(); } else if (is_method("SUBSCRIBE")) { handle_subscribe(); t_release(); } exit; } 31
  • 32. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Messaging 1. MESSAGE (Bob) 2. Lookup location Alice 3. MESSAGE Asterisk does Bob nothing! 32
  • 33. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? NAT handling ● We just need to fix the NAT in signalling. ● Our Asterisk 'peers' are configured with nat=yes – COMEDIA mode – Audio will go through Asterisk 33
  • 34. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Further improvements... 34
  • 35. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Further improvements... (2) What about mixing both? – OpenFire's Asterisk plugin still works! (regardless of the integration with Kamailio) 35
  • 36. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? SIMPLE or XMPP? 36
  • 37. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? Thanks! BYE sip:astricon@astricon.net SIP/2.0 Via: SIP/2.0/UDP guest.astricon.net:5060;branch=z9hG4bKnashds7 Max-Forwards: 70 From: saghul <sip:saghul@sipdoc.net>;tag=8321234356 To: AstriCon <sip:astricon@astricon.net>;tag=9fxced76sl Call-ID: 3848276298220188511@astricon.net CSeq: 1 BYE Content-Length: 0 Thanks for watching! 37
  • 39. AstriCon 2009: Asterisk, Instant Messaging and Presence, how? License http://creativecommons.org/licenses/by-sa/3.0/ All images are property of their respective authors. 39