Skip to main content

Presence

About​

Presence allows one UA to "watch" others by subscribing to related event packages.

Click here to expand Table of Contents

SIP Presence​

FreeSWITCH supports presence out of the box.

On the client side, if you use xlite/eyebeam, create a new contact and check "Show this contact's availability". It should then SUBSCRIBE to that contact and start getting NOTIFY messages like this:

   NOTIFY sip:1004@192.168.0.24:16106 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.24;rport;branch=z9hG4bK1ZyZg6vmjcQXK
Max-Forwards: 70
From: "1000" <sip:1000@192.168.0.24>;tag=DUpS1eSZBN9Sj
To: "Seven3" <sip:1004@192.168.0.24>;tag=e0dec858
Call-ID: MDcxOTc1ODZlMGFhN2M4Yjc0YmViYzYyMzdjYzVhOTk.
CSeq: 20695499 NOTIFY
Contact: <sip:1000@192.168.0.24:5060>
User-Agent: FreeSWITCH-mod_sofia/1.0.head-git-dac9d6e 2011-11-19 19-12-08 -0600
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, precondition, path, replaces
Event: presence
Allow-Events: talk, hold, presence, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
Subscription-State: terminated;reason=noresource
Content-Type: application/pidf+xml
Content-Length: 431

<?xml version="1.0" encoding="ISO-8859-1"?>
<presence xmlns='urn:ietf:params:xml:ns:pidf'
xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model'
xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid'
xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='sip:1000@192.168.0.24'>
<tuple id='t6a5ed77e'>
<status>
<basic>open</basic>
</status>
</tuple>
<dm:person id='p06360c4a'>
<dm:note>Available</dm:note>
</dm:person>
</presence>

FreeSWITCH as a client​

FreeSWITCH can work as a client to SUBSCRIBE to a server (another FreeSWITCH), to enable this, add a subscriptions section to your gateway config, e.g.

<include>
<gateway name="fs2">
<param name="realm" value="192.168.7.2"/>
<param name="username" value="1000"/>
<param name="password" value="1234"/>
<param name="register" value="false"/>
<subscriptions name="x">
<!-- <subscription event="presence">
<param name="retry-seconds" value="50"/>
<param name="expire-seconds" value="60"/>
<param name="content-type" value="application/pidf+xml"/>
</subscription> -->
<subscription event="dialog">
<param name="retry-seconds" value="40"/>
<param name="expire-seconds" value="60"/>
<param name="content-type" value="application/dialog-info+xml"/>
<!-- when username-in-request is true the SIP request line will be in the format sip:user@server
by default it's false and request line sill be in the format of sip:server -->
<param name="username-in-request" value="true"/>
</subscription>
<!-- <subscription event="eventlist">
<param name="retry-seconds" value="40"/>
<param name="expire-seconds" value="60"/>
<param name="content-type" value="application/rlmi+xml"/>
</subscription> -->
</subscriptions>
</gateway>
</include>

Note, FreeSWITCH (server) also supports dialog events in addition to presence. eventlist is not supported (on server side) at this time.

On getting NOTIFY, a NOTIFY_IN event will be fired.

XMPP presence​

not tested.

See Also​

PRESENCE IN event example