9
Nov

BLF : subscribe & notify dialog event (rfc 4235)

Busy Lamp Fields is de techniek om vanaf een IP-telefoontoestel de toestand van een bepaalde SIP-account te monitoren aan de hand van lichtjes die groen, rood of rood flikkerend oplichten.

In RFC 4235 wordt deze functionaliteit van het SIP protocol beschreven. In deze post wil ik een begrijpbaar overzicht maken van wat in RFC 4235 wordt beschreven.

Dit is een technische benadering van hoe SIP subscribe en notify pakketten vloeien tussen de OpenSource PBX Asterisk en een Grandstream GXP 2010 IP-phone.

 

Opvolgen:

Via het dialog event kan een gebruiker A zich inschrijven op status veranderingen van een andere gebruiker B. De gebruiker A dient zich eerst in te schrijven om daarna telkens status veranderingen te ontvangen via een SIP notify. Deze notify komt niet rechtstreeks van gebruiker B, maar wordt gecommuniceerd door Asterisk aan gebruiker A. Deze functionaliteit moet dus ondersteunt worden door de PBX.

Het IP-telefoontoestel die een bepaalde extensie wil monitoren, zal dus een subscribe sturen naar de Asterisk PBX :

SUBSCRIBE sip:60@asterisk.yocan.local SIP/2.0
Via: SIP/2.0/UDP 192.168.1.102:5066;branch=z9hG4bK58d402271a47b5a3
From: <sip:gebruikerA@asterisk.yocan.local>;tag=b991c6fa5c280ec0
To: <sip:60@asterisk.yocan.local>
Contact: <sip:gebruikerA@192.168.1.102:5066;transport=udp>
Supported: eventlist, path
Call-ID: 84b402c4d0691f40@192.168.1.102
CSeq: 19801 SUBSCRIBE
User-Agent: Grandstream GXP2010 1.2.4.3
Max-Forwards: 70
Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE,UPDATE,PRACK,MESSAGE
Event: dialog
Expires: 3600
Accept: application/dialog-info+xml, multipart/related, application/rlmi+xml
Content-Length: 0

Bovenstaand is een SIP subscribe boodschap van gebruiker A naar Asterisk.

SUBSCRIBE sip:60@asterisk.yocan.local SIP/2.0: de duidelijke subscribe en de te monitoren extensie

Via: SIP/2.0/UDP 192.168.1.102:5066;branch=z9hG4bK58d402271a47b5a3: ieder SIP bewust netwerkelement die in het communicatiepad wil blijven zal een Via-header toevoegen. Hier heeft enkel het Grandstream IP-telefoontoestel een Via-header toegevoegd.

From: <sip:gebruikerA@asterisk.yocan.local>;tag=b991c6fa5c280ec0: de FROM-tag vertelt van welke SIP account het SIP pakketje afkomstig is, en waar dus een antwoord (eventueel via via-headers) mag naartoe gestuurd worden.

To: <sip:60@asterisk.yocan.local>: hier duidt de To-header aan welke account/extensie we willen monitoren

Contact: <sip:gebruikerA@192.168.1.102:5066;transport=udp>: op welke SIP URI is de initiërende partij graag wil gecontacteerd worden

CSeq: 19801 SUBSCRIBE: sequentie nummer om verschillende requests van elkaar te scheiden + methode (hier subscribe natuurlijk)

Event: dialog: de SIP Events Architecture, hier dialog.

 

De Grandstream IP-phone zal een 200 OK ontvangen als antwoord op zijn subscribe.

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.102:5066;branch=z9hG4bKe8c34a7a942a3f45;received=192.168.1.102
From: <sip:gebruikerA@asterisk.yocan.local>;tag=b991c6fa5c280ec0
To: <sip:60@asterisk.yocan.local>;tag=as2d052fc2
Call-ID: 84b402c4d0691f40@192.168.1.102
CSeq: 19802 SUBSCRIBE
Server: Asterisk PBX 1.6.2.10
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO
Supported: replaces, timer
Expires: 60
Contact: <sip:60@asterisk.yocan.local>;expires=60
Content-Length: 0

Contact: <sip:60@asterisk.yocan.local>;expires=60: in het antwoord de SIP URI waarnaar een nieuwe subscribe moet gestuurd worden. Dit zal moeten gebeuren vóór het verstrijken van de Expires-tag.

De Grandstream IP-phone zal voortaan een notify ontvangen bij elke status wijziging. Een eerste notify wordt alvast ontvangen meteen na de subscribe :

NOTIFY sip:gebruikerA@192.168.1.102:5066;transport=udp SIP/2.0
Via: SIP/2.0/UDP 192.168.1.150:5060;branch=z9hG4bK648f87c9;rport
Max-Forwards: 70
From: <sip:60@asterisk.yocan.local>;tag=as2d052fc2
To: <sip:gebruikerA@asterisk.yocan.local>;tag=b991c6fa5c280ec0
Contact: <sip:60@asterisk.yocan.local>
Call-ID: 84b402c4d0691f40@192.168.1.102
CSeq: 102 NOTIFY
User-Agent: Asterisk PBX 1.6.2.10
Event: dialog
Content-Type: application/dialog-info+xml
Subscription-State: active
Content-Length: 202

NOTIFY sip:testcorp5@192.168.1.102:5066;transport=udp SIP/2.0: een notify wordt gestuurd naar de SIP URI zoals opgenomen in de Contact-header van de SIP subscribe.

Via: SIP/2.0/UDP asterisk.yocan.local:5060;branch=z9hG4bK648f87c9;rport: een Via-header wordt toegevoegd door de Asterisk PBX

From: <sip:60@asterisk.yocan.local>;tag=as2d052fc2: zelfde als To-header in subscribe, met toegevoegde tag

To: <sip:gebruikerA@asterisk.yocan.local>;tag=b991c6fa5c280ec0: zelfde als FROM-header in subscribe, met bijpassende tag

Contact: <sip:60@asterisk.yocan.local>: de SIP URI waarnaar alle communicatie mag gestuurd worden

Call-ID: 84b402c4d0691f40@192.168.1.102: nog steeds hetzelfde unieke Call-ID aangezien het hier nog steeds gaat om dezelfde communicatie (subscribe - notify)

CSeq: 102 NOTIFY: sequentie nummer om verschillende boodschappen van elkaar te scheiden + methode (hier notify natuurlijk)

Content-Type: application/dialog-info+xml: de status van de gemonitorde extensie (60) wordt meegegeven in de dialog-info en ook in de body van een aangehechte xml-code.

 

Zo ziet de xml-body er uit wanneer de extensie niet in gebruik is (maw de gebruiker is niet aan het bellen en wordt ook niet gebeld) :

<?xml version="1.0"?>
<dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="194" state="full" entity="sip:60@
asterisk.yocan.local">
<dialog id="60">
<state>terminated</state>
</dialog>
</dialog-info>

Zo ziet de xml-body er uit wanneer de extensie gebeld wordt :

<?xml version="1.0"?>
<dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="199" state="full" entity="sip:60@
asterisk.yocan.local">
<dialog id="60">
<state>early</state>
</dialog>
</dialog-info>

Zo ziet de xml-body er uit wanneer de extensie in gesprek is :

<?xml version="1.0"?>
<dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="202" state="full" entity="sip:60@
asterisk.yocan.local">
<dialog id="60">
<state>confirmed</state>
</dialog>
</dialog-info>

 

Door de SIP subscribe en notify met deze xml-informatie kunnen we dus de status van een extensie en/of SIP account monitoren.



free b2evolution skin