The STORM ProjectAnalysis, Design and Implementation
- Wajdi Elleuch (Researcher Engineer)
- Alain C. Houle (Professor - Université de Sherbrooke)
- Samuel Guénette (Chief of Technology - M5T)
- Éric Rodrigue (Programmer - Mediatrix)
STORM : OverviewBlack Phone and IP Phone interfaces are limited for advanced services
STORM is an interface allowing cooperation between a PC and an APA for advanced/new telephony services:
Make Call Caller Id Call History Voice Mail Call Recording Simple APA Configuration
Example of new services :
IP Phone
STORM Enabled APA
POTS Phone
PC Running the STORM GUI
Network
STORM : Service Use cases
Make Call
Caller ID
Show and handle current call
Reject
Handle incoming call
Forward
Accept
Call Recording
Call History
APA Configuration
Modify Configuration
Voice mail Configuration
Hold/Unhold Call
Display call Info
Display call-history-list
Compose call
Free to-calladdress Input
Select from Address book
Default APABehavior configuration
Set Configuration
Get Configuration
uses
uses
uses
uses
uses
uses
uses
uses
uses
uses
uses
uses
uses
uses uses
uses
uses
uses
uses
uses
uses
extends
uses
Storm PC user
STORM : The Protocol ?
Sip User APA PC
SIP STORM Protocol ?
Distributed Object Technology ?
- JAVA/RMI : C++ Compatibility ?- COM/DCOM : Compatibility with non-Microsoft systems ?- CORBA : Text data support ? XML support ?
Web Services related technology to support XML ?
- SOAP: Client/Server Model (slave/master) - XML/RPC: Limited XML structure (methodName, params, param, value)
- XML STORM: Use XML structure to describe the exchanged data between Storm devices
STORM : The Protocol ?
Sip User APA PC
SIP XML Data conveyed by ?
Web Protocol to transport XML Data ?
- HTTP : Having a HTTP listener (HTTP Server on the APA) ? Managing device presence ? Statefull ?
- SMTP : Same limitation as HTTP
- SIP : The Solution !!
- Using the Payload of the SIP paquet to encapsulate XML message
- Using INFO request through a session already established (session created by an INVITE between Storm devices) ? Or using Subscribe/Notify mechanism (Subscribe request to create a session and Notify request to convey the Storm XML messages ?
- Using the SIP Stack implemented on the APA (M5T SIP stack V 3.5 )
- Using sip existing headers and probably some extra-headers
STORM : Sequence Diagram
Sip User APA PC
SIP STORM Protocol based on SIP
INVITE
SUBSCRIBE
Ack : 202 OK
100 TRYING
180 RINGINGNOTIFY (Caller-Id)
Ack : 202 OK
Get and apply answer rules saved on the APA
Notify remote Storm device if subscribed to
this service
Request line: NOTIFY sip:PC_SIP_URI SIP/2.0Method: NOTIFYMessage Header Max-Forwards: 70 Content-Length: … Via: SIP/2.0/UDP Local_IP_Addr;branch=z9hG4bKe89100756 Call-ID: a0ca01198b4afc1 From: APA_SIP_URI;tag=9f82847c9fbb5ee To: PC_SIP_URI CSeq: 736513480 NOTIFY Expires: 600 Event: CallerId Content-Type: STORM/CallerId User-Agent: ApaSoftPhone/1.3.1.2 MxSF/v3.5.3.4Payload <rpc> <operation-name>caller-id</operation-name> <call-description>
<from>Caller_Sip_Uri</from><to>Called_Sip_Uri</to><call-id>Call-Id</call-id><cseq>CSeq</cseq><contact>Contact</contact>
</call-description> </rpc>
STORM : Sequence Diagram
Sip User APA PC
SIP STORM Protocol based on SIP
INVITE
SUBSCRIBE
Ack : 202 OK
100 TRYING
180 RINGINGNOTIFY (Caller-Id)
Ack : 202 OK
NOTIFY (Caller-Id-Reply)
Ack : 202 OK200 OK
NOTIFY (Caller-Id-Reply)
Ack : 202 OK
NOTIFY (Caller-Id-Reply)
Ack : 202 OK486 BusyHere/603 Decline/302 Forward
BYE NOTIFY (Current-Call-Notify)
Ack : 202 OK
200 OK
Call accepted
by PC
The APA accepts the Call / gets the
handset
<rpc> <operation-name>caller-id-reply</operation-name> <content>Accept</content> <call-description>
<from>Caller_Sip_Uri</from><to>Called_Sip_Uri</to><call-id>Call-Id</call-id><cseq>CSeq</cseq><contact>Contact</contact>
</call-description> </rpc>
Update the incoming call state
Call rejected by PC
APA terminates the call
Update call state
STORM : The Subscribe/Notify mechanism
StormUser_A StormUser_B
GenerateContext
SendRequest EvNewContextNeeded
EvBasRequest
SendStatus
SendRequest
EvBasStatus
EvBasStatus
EvBasRequest
SendStatus
202 OK
Subscribe
NOTIFY
202 OK
TimeOutEvBasTimeOut
CancelRequestEvBasRequestCancelled Cancel()
- How to support the Subscribe/Notify Mechanism using the M5T Sip Stack V3.5 ?
M5TFramework (MITOS)
Stack SIP M5T v 3.5
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
Stack SIP M5T v 3.5
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
Stack SIP M5T v 3.5
CSipEngine
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
Stack SIP M5T v 3.5
CApaSoftPhoneDlg
CSipEngine
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
Stack SIP M5T v 3.5
GUI
CApaSoftPhoneDlg
+NewCallA()+AcceptedA()+AckReceivedA()+RegistrationStateA(()+TerminatedA()+...()
«interface»ISipInterface
«uses»
CSipEngine<<realize>>
+InviteA()+AcceptA()+RejectA()+TerminateA()+ShutdownA()+...()
«interface»ISipSignaling
«uses»
<<realize>>
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
Stack SIP M5T v 3.5
GUI
+OnInitDialog()()
-m_strDisplayName-...
CInviteUserDlg
+...()
-m_bConnectTcp-m_uTcpRemoteConnectionPort-...
CConfigPersistentConnections
+...()-...
CAddressBookDlg CNewCallDlg
CApaSoftPhoneDlg
11
1
1
+NewCallA()+AcceptedA()+AckReceivedA()+RegistrationStateA(()+TerminatedA()+...()
«interface»ISipInterface
«uses»
CSipEngine<<realize>>
+InviteA()+AcceptA()+RejectA()+TerminateA()+ShutdownA()+...()
«interface»ISipSignaling
«uses»
<<realize>>
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
Stack SIP M5T v 3.5
+OnInitDialog()()
-m_strDisplayName-...
CLastCallsDlg
1
GUI
+OnInitDialog()()
-m_strDisplayName-...
CInviteUserDlg
+...()
-m_bConnectTcp-m_uTcpRemoteConnectionPort-...
CConfigPersistentConnections
+...()-...
CAddressBookDlg CNewCallDlg
CApaSoftPhoneDlg
11
1
1
+NewCallA()+AcceptedA()+AckReceivedA()+RegistrationStateA(()+TerminatedA()+...()
«interface»ISipInterface
«uses»
CSipEngine<<realize>>
+InviteA()+AcceptA()+RejectA()+TerminateA()+ShutdownA()+...()
«interface»ISipSignaling
«uses»
<<realize>>
CStormEngine
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
«uses»«uses»
«uses» «uses»
«uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
1
Stack SIP M5T v 3.5
+OnInitDialog()()
-m_strDisplayName-...
CLastCallsDlg
1
GUI
+OnInitDialog()()
-m_strDisplayName-...
CInviteUserDlg
+...()
-m_bConnectTcp-m_uTcpRemoteConnectionPort-...
CConfigPersistentConnections
+...()-...
CAddressBookDlg CNewCallDlg
CApaSoftPhoneDlg
11
1
1
+NewCallA()+AcceptedA()+AckReceivedA()+RegistrationStateA(()+TerminatedA()+...()
«interface»ISipInterface
«uses»
CSipEngine<<realize>>
+InviteA()+AcceptA()+RejectA()+TerminateA()+ShutdownA()+...()
«interface»ISipSignaling
«uses»
<<realize>>
+StormMakeCallReceivedA()+StormMakeCallReplyReceivedA()+StormCallerIdReceivedA()+StormCurrentCallNotifyReceivedA()+StormCallHistoryReceivedA()+...()
«interface»IStormInterface +StormMakeCallA()
+StormMakeCallReplyA()+StormCallerIdA()+StormCallerIdReplyA()+StormCallHistoryA()+StormCurrentCallNotifyA()+StormCallHistoryReplyA()+...()
«interface»IStormSignaling
«uses»
<<realize>>
CStormEngine<<realize>>
«uses»
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
«uses»«uses»
«uses» «uses»
«uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
1
Stack SIP M5T v 3.5
+OnInitDialog()()
-m_strDisplayName-...
CLastCallsDlg
1
GUI
+OnInitDialog()()
-m_strDisplayName-...
CInviteUserDlg
+...()
-m_bConnectTcp-m_uTcpRemoteConnectionPort-...
CConfigPersistentConnections
+...()-...
CAddressBookDlg CNewCallDlg
CApaSoftPhoneDlg
11
1
1
+NewCallA()+AcceptedA()+AckReceivedA()+RegistrationStateA(()+TerminatedA()+...()
«interface»ISipInterface
«uses»
CSipEngine<<realize>>
+InviteA()+AcceptA()+RejectA()+TerminateA()+ShutdownA()+...()
«interface»ISipSignaling
«uses»
<<realize>>
+StormMakeCallReceivedA()+StormMakeCallReplyReceivedA()+StormCallerIdReceivedA()+StormCurrentCallNotifyReceivedA()+StormCallHistoryReceivedA()+...()
«interface»IStormInterface +StormMakeCallA()
+StormMakeCallReplyA()+StormCallerIdA()+StormCallerIdReplyA()+StormCallHistoryA()+StormCurrentCallNotifyA()+StormCallHistoryReplyA()+...()
«interface»IStormSignaling
«uses»
<<realize>>
CStormEngine<<realize>>
«uses»
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
«uses»«uses»
«uses» «uses»
«uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
1
Stack SIP M5T v 3.5
+OnInitDialog()()
-m_strDisplayName-...
CLastCallsDlg
1
GUI
«utility»Expat Parser
+OnInitDialog()()
-m_strDisplayName-...
CInviteUserDlg
+...()
-m_bConnectTcp-m_uTcpRemoteConnectionPort-...
CConfigPersistentConnections
+...()-...
CAddressBookDlg CNewCallDlg
CApaSoftPhoneDlg
11
1
1
+NewCallA()+AcceptedA()+AckReceivedA()+RegistrationStateA(()+TerminatedA()+...()
«interface»ISipInterface
«uses»
CSipEngine<<realize>>
+InviteA()+AcceptA()+RejectA()+TerminateA()+ShutdownA()+...()
«interface»ISipSignaling
«uses»
<<realize>>
+StormMakeCallReceivedA()+StormMakeCallReplyReceivedA()+StormCallerIdReceivedA()+StormCurrentCallNotifyReceivedA()+StormCallHistoryReceivedA()+...()
«interface»IStormInterface +StormMakeCallA()
+StormMakeCallReplyA()+StormCallerIdA()+StormCallerIdReplyA()+StormCallHistoryA()+StormCurrentCallNotifyA()+StormCallHistoryReplyA()+...()
«interface»IStormSignaling
«uses»
<<realize>>
CStormEngine<<realize>>
«uses»
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
«uses»«uses»
«uses» «uses»
«uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
1
Stack SIP M5T v 3.5
+OnInitDialog()()
-m_strDisplayName-...
CLastCallsDlg
1
GUI
«utility»Expat Parser
+StartElementHandler()+EndElementHandler()+CharacterDataHandler()+CommentHandler()+DefaultHandler()
«interface»IXMLParserMgr
<<realize>>
+OnInitDialog()()
-m_strDisplayName-...
CInviteUserDlg
+...()
-m_bConnectTcp-m_uTcpRemoteConnectionPort-...
CConfigPersistentConnections
+...()-...
CAddressBookDlg CNewCallDlg
CApaSoftPhoneDlg
11
1
1
+NewCallA()+AcceptedA()+AckReceivedA()+RegistrationStateA(()+TerminatedA()+...()
«interface»ISipInterface
«uses»
CSipEngine<<realize>>
+InviteA()+AcceptA()+RejectA()+TerminateA()+ShutdownA()+...()
«interface»ISipSignaling
«uses»
<<realize>>
+StormMakeCallReceivedA()+StormMakeCallReplyReceivedA()+StormCallerIdReceivedA()+StormCurrentCallNotifyReceivedA()+StormCallHistoryReceivedA()+...()
«interface»IStormInterface +StormMakeCallA()
+StormMakeCallReplyA()+StormCallerIdA()+StormCallerIdReplyA()+StormCallHistoryA()+StormCurrentCallNotifyA()+StormCallHistoryReplyA()+...()
«interface»IStormSignaling
«uses»
<<realize>>
CStormEngine<<realize>>
«uses»
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
«uses»«uses»
«uses» «uses»
«uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
1
Stack SIP M5T v 3.5
+OnInitDialog()()
-m_strDisplayName-...
CLastCallsDlg
1
GUI
«utility»Expat Parser
CStormXML«uses»
+StartElementHandler()+EndElementHandler()+CharacterDataHandler()+CommentHandler()+DefaultHandler()
«interface»IXMLParserMgr
<<realize>>
-Fin1
1
-Fin2
*
+OnInitDialog()()
-m_strDisplayName-...
CInviteUserDlg
+...()
-m_bConnectTcp-m_uTcpRemoteConnectionPort-...
CConfigPersistentConnections
+...()-...
CAddressBookDlg CNewCallDlg
CApaSoftPhoneDlg
11
1
1
+NewCallA()+AcceptedA()+AckReceivedA()+RegistrationStateA(()+TerminatedA()+...()
«interface»ISipInterface
«uses»
CSipEngine<<realize>>
+InviteA()+AcceptA()+RejectA()+TerminateA()+ShutdownA()+...()
«interface»ISipSignaling
«uses»
<<realize>>
CStorm...Dlg
1
+StormMakeCallReceivedA()+StormMakeCallReplyReceivedA()+StormCallerIdReceivedA()+StormCurrentCallNotifyReceivedA()+StormCallHistoryReceivedA()+...()
«interface»IStormInterface +StormMakeCallA()
+StormMakeCallReplyA()+StormCallerIdA()+StormCallerIdReplyA()+StormCallHistoryA()+StormCurrentCallNotifyA()+StormCallHistoryReplyA()+...()
«interface»IStormSignaling
«uses»
<<realize>>
CStormEngine<<realize>>
«uses»
+DispatchAsyncMsg()+DispatchSyncMsg()+DispatchTimer()
CSipThread
+EvBasReques()+EvBasRequestCancelled()+EvBasStatus()+EvBasTimeout()
«interface»IBasicEvMgr
+EvNewContextNeeded()+EvReadyToDestroy()
«interface»IUaEventMgr
+EvDialogTerminated()
«interface»IDialogMgr
«interface»IClientAuthenticationEvMgr
«interface»IRedirectionEvMgr
«interface»IReliableProvisionalResponseEvMgr
«interface»IRegistrationEvMgr
«interface»ISessionEvMgr
«interface»SessionTimerEvMgr04
«uses»
MxSFMxRTP
M5TFramework (MITOS)
«uses» «uses»
«uses»«uses»
«uses» «uses»
«uses»
+SendRequest()+SendStatus()+SetEventManager()+CancelRequest()
«interface»IBasicSvcMgr
1
Stack SIP M5T v 3.5
+OnInitDialog()()
-m_strDisplayName-...
CLastCallsDlg
1
GUI
«utility»Expat Parser
CStormXML«uses»
+StartElementHandler()+EndElementHandler()+CharacterDataHandler()+CommentHandler()+DefaultHandler()
«interface»IXMLParserMgr
<<realize>>
-Fin1
1
-Fin2
*
The Demo !