Applications
Version 7 (Adrian Georgescu, 02/27/2013 02:29 pm) → Version 8/11 (Adrian Georgescu, 02/28/2013 01:41 pm)
h1. Built-in Applications
SylkServer is an application server that behaves not designed to transparently route packets, authorization, accounting and handle NAT traversal for signaling or media. Performing applications like a SIP end-point and therefore Proxy, Registrar, or Presence Agent are out of its scope. SylkServer must be typically deployed behind a SIP Proxy/Registrar server Proxy for registration, proxy, presence agent, accounting and authorization providing such functions. The SIP Proxy must be configured to route certain flows to SylkServer and handle incoming requests from it as necessary.
h2. Multiparty Conference
SylkServer allows SIP end-points to create ad-hoc conference rooms by sending INVITE with SDP content to a random username at the hostname or domain where the server runs. Other participants can then join by sending an INVITE to the same SIP URI used to create the room.
h3. Supported Media
The INVITE and subsequent re-INVITE methods may contain one or more media types supported by the server. Each conference room mixed audio, instant messages and uploded files are dispatched to all participants.
+Audio+ The INVITE must propose a session with RTP (m=audio in SDP). Re-INVITE to add or remove audio to existing session is supported. G722, speex (both in wideband) and G711 codecs are supported.
<pre>
Content-Type: application/sdp
Content-Length: 233
v=0
o=- 3526098545 3526098547 IN IP4 81.23.228.139
s=SylkServer-1.2.3
t=0 0
c=IN IP4 81.23.228.139
m=audio 55324 RTP/AVP 9 101
c=IN IP4 85.17.186.7
a=rtcp:55325
a=rtpmap:9 G722/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:1nDEh/WrJ57RBaHwhBG4+RAwzV9k/HxZhg1wClnx
a=sendrecv
</pre>
+Instant Messaging.+ The INVITE must propose a session with MSRP chat over TLS (m=message and a=path:msrps in the SDP). Re-INVITE to add or remove chat to existing session is supported. Private messaging extension between participants is also supported.
<pre>
Content-Type: application/sdp
Content-Length: 213
v=0
o=- 3526098545 3526098547 IN IP4 81.23.228.139
s=SylkServer-1.2.3
t=0 0
m=message 60167 TCP/TLS/MSRP *
c=IN IP4 81.23.228.139
a=path:msrps://81.23.228.139:60167/f8d1058769bebacacf62;tcp
a=accept-types:message/cpim
a=accept-wrapped-types:*
a=setup:passive
a=chatroom:private-messages
</pre>
+File Transfer+. The INVITE must propose a session with MSRP file transfer media description. Re-INVITE to add a file to existing session is supported. Participants that join later can request the previously uploaded files by using MSRP pull method.
<pre>
Content-Type: application/sdp
Content-Length: 407
v=0
o=- 3526099467 3526099468 IN IP4 81.23.228.139
s=SylkServer-1.2.3
c=IN IP4 81.23.228.139
t=0 0
m=message 39084 TCP/TLS/MSRP *
a=path:msrps://81.23.228.139:39084/a06af01b810519fb6090;tcp
a=recvonly
a=accept-types:*
a=accept-wrapped-types:*
a=setup:passive
a=file-selector:name:"Blink.pdf" type:application/pdf size:151036 hash:sha1:49:AD:49:...
</pre>
+Screen Sharing.+ This functionality is implemented as _com.ag-projects.screen-sharing_ extension to the chatroom functionality.
<pre>
Content-Type: application/sdp
...
m=message 40278 TCP/TLS/MSRP *
a=path:msrps://81.23.228.149:40278/2aa5bbb5d37731ef85c0;tcp
a=accept-types:message/cpim
a=accept-wrapped-types:*
a=setup:passive
a=chatroom:private-messages *com.ag-projects.screen-sharing*
</pre>
If the end-point detects and supports this private extension, it can share the screen by pushing at regular intervals a jpeg image with the desktop content over the MSRP chat stream. The image must be encapsulated in a CPIM envelope using content type _application/blink-screensharing_. Blink SIP client implements this extension.
<pre>
MSRP eea58af6af1b788 SEND
To-Path: msrps://81.23.228.149:41652/a65812de6f6a0725ee1a;tcp
From-Path: msrps://192.168.1.6:2855/e7028b404511ed77d6a2;tcp
Message-ID: 641f9960ded0638d
Byte-Range: 1-*/245347
Success-Report: yes
Failure-Report: yes
Content-Type: message/cpim
From: Adrian Georgescu <sip:31208005169@ag-projects.com>
To: <sip:nnauyj@conference.sip2sip.info>
DateTime: 2011-12-22T09:12:04+01:00
MIME-Version: 1.0
Content-Type: application/blink-screensharing
ÿØÿàJFIF .............
</pre>
The server then makes the screenshot available at a HTTP URL and publishes this URL to all participants using the conference information notification using <agp-conf:screen_image_url> extension. Participants can see the screen using a specialized client or a regular web browser.
h3. Conference Information
To obtain the conference information send a SUBSCRIBE request to the room URI for Event conference "RFC 4575":http://tools.ietf.org/html/rfc4579. The NOTIFY contains detailed information with the list of participants, their connected endpoints, media type and stream status and information about uploaded files.
<pre>
Content-Type: application/conference-info+xml
Content-Length: 975
<?xml version='1.0' encoding='UTF-8'?>
<conference-info xmlns:agp-conf="urn:ag-projects:xml:ns:conference-info"
xmlns="urn:ietf:params:xml:ns:conference-info"
entity="sip:agp@conference.sip2sip.info" state="full">
<conference-description>
<display-text>Ad-hoc conference</display-text>
<free-text>Hosted by SylkServer-1.2.3</free-text>
<agp-conf:resources>
<agp-conf:files>
<agp-conf:file name="Blink.pdf" hash="sha1:49:AD:49:...."
size="151036" sender="AG <sip:31208005169@ag-projects.com>" status="OK"/>
</agp-conf:files>
</agp-conf:resources>
</conference-description>
<host-info>
<web-page>http://sylkserver.com</web-page>
</host-info>
<conference-state>
<user-count>1</user-count>
<active>true</active>
</conference-state>
<users state="full">
<user entity="sip:31208005169@ag-projects.com" state="full">
<display-text>Adrian Georgescu</display-text>
<agp-conf:screen_image_url>https://81.23.228.146/?image=WfPeNYF195.jpg</agp-conf:screen_image_url>
<endpoint entity="sip:pbvusniw@95.97.50.27:54325" state="full">
<display-text>Adrian Georgescu</display-text>
<status>connected</status>
<joining-info>
<when>2011-09-27T09:49:05+02:00</when>
</joining-info>
<media id="170092876"><type>message</type></media>
<media id="2977223756"><type>audio</type></media>
</endpoint>
</user>
</users>
</conference-info>
</pre>
h3. Participant Management
To add and remove participants, SylkServer supports INVITE and REFER methods as defined in "RFC4579 (Conferencing for User Agents)":http://tools.ietf.org/html/rfc4579#section-5 . One can remove or add participants by sending a REFER method to the conference URI.
<pre>
REFER sip:agp@conference.sip2sip.info SIP/2.0
Via: SIP/2.0/UDP 10.211.55.2:54325;rport;branch=z9hG4bKPj7PFxy8RLtr20jfVyUx2eis1H7.1aY7Np
Max-Forwards: 70
From: "Adrian Georgescu" <sip:31208005169@ag-projects.com>;tag=ZtGlJFOgGvwWQEMae6uTpuhT1aREkQeR
To: <sip:agp@conference.sip2sip.info>
Contact: <sip:pbvusniw@192.168.1.6:54325>
Call-ID: rYp1GQbSQ8kFrC1xccpfA5t9GXaR5qwt
CSeq: 6839 REFER
Event: refer
Accept: message/sipfrag;version=2.0
Allow-Events: conference, message-summary, presence, presence.winfo, xcap-diff, refer
Refer-To: <3333@sip2sip.info>;method=INVITE
Referred-By: sip:31208005169@ag-projects.com
User-Agent: Blink Pro 1.3.1 (MacOSX)
Content-Length: 0
</pre>
h2. XMPP Gateway
SylkServer can act like a transparent gateway between SIP and XMPP protocol. This can be used by a SIP service provider to bridge out to XMPP domains or to receive incoming requests from XMPP domains to the SIP users it serves. In a similar fashion, a XMPP service provider can use tehn gateway to bridge out to SIP domains and handle incoming requestes from SIP domains to the XMPP users it serves.
A media session or a presence session initiated by an incoming connection on the XMPP side is translated into an outgoing request on the SIP side and the other way around. To make this work, just add proper SIP or XMPP records into the DNS zone for the domain that needs the gateway service.
Multiparty conferencing (XMPP MUC to SIP MSRP chat) is also supported including adding and removing participants.
h2. Echo
Playback audio and accept MSRP chat requests.
SylkServer is an application server that behaves not designed to transparently route packets, authorization, accounting and handle NAT traversal for signaling or media. Performing applications like a SIP end-point and therefore Proxy, Registrar, or Presence Agent are out of its scope. SylkServer must be typically deployed behind a SIP Proxy/Registrar server Proxy for registration, proxy, presence agent, accounting and authorization providing such functions. The SIP Proxy must be configured to route certain flows to SylkServer and handle incoming requests from it as necessary.
h2. Multiparty Conference
SylkServer allows SIP end-points to create ad-hoc conference rooms by sending INVITE with SDP content to a random username at the hostname or domain where the server runs. Other participants can then join by sending an INVITE to the same SIP URI used to create the room.
h3. Supported Media
The INVITE and subsequent re-INVITE methods may contain one or more media types supported by the server. Each conference room mixed audio, instant messages and uploded files are dispatched to all participants.
+Audio+ The INVITE must propose a session with RTP (m=audio in SDP). Re-INVITE to add or remove audio to existing session is supported. G722, speex (both in wideband) and G711 codecs are supported.
<pre>
Content-Type: application/sdp
Content-Length: 233
v=0
o=- 3526098545 3526098547 IN IP4 81.23.228.139
s=SylkServer-1.2.3
t=0 0
c=IN IP4 81.23.228.139
m=audio 55324 RTP/AVP 9 101
c=IN IP4 85.17.186.7
a=rtcp:55325
a=rtpmap:9 G722/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:1nDEh/WrJ57RBaHwhBG4+RAwzV9k/HxZhg1wClnx
a=sendrecv
</pre>
+Instant Messaging.+ The INVITE must propose a session with MSRP chat over TLS (m=message and a=path:msrps in the SDP). Re-INVITE to add or remove chat to existing session is supported. Private messaging extension between participants is also supported.
<pre>
Content-Type: application/sdp
Content-Length: 213
v=0
o=- 3526098545 3526098547 IN IP4 81.23.228.139
s=SylkServer-1.2.3
t=0 0
m=message 60167 TCP/TLS/MSRP *
c=IN IP4 81.23.228.139
a=path:msrps://81.23.228.139:60167/f8d1058769bebacacf62;tcp
a=accept-types:message/cpim
a=accept-wrapped-types:*
a=setup:passive
a=chatroom:private-messages
</pre>
+File Transfer+. The INVITE must propose a session with MSRP file transfer media description. Re-INVITE to add a file to existing session is supported. Participants that join later can request the previously uploaded files by using MSRP pull method.
<pre>
Content-Type: application/sdp
Content-Length: 407
v=0
o=- 3526099467 3526099468 IN IP4 81.23.228.139
s=SylkServer-1.2.3
c=IN IP4 81.23.228.139
t=0 0
m=message 39084 TCP/TLS/MSRP *
a=path:msrps://81.23.228.139:39084/a06af01b810519fb6090;tcp
a=recvonly
a=accept-types:*
a=accept-wrapped-types:*
a=setup:passive
a=file-selector:name:"Blink.pdf" type:application/pdf size:151036 hash:sha1:49:AD:49:...
</pre>
+Screen Sharing.+ This functionality is implemented as _com.ag-projects.screen-sharing_ extension to the chatroom functionality.
<pre>
Content-Type: application/sdp
...
m=message 40278 TCP/TLS/MSRP *
a=path:msrps://81.23.228.149:40278/2aa5bbb5d37731ef85c0;tcp
a=accept-types:message/cpim
a=accept-wrapped-types:*
a=setup:passive
a=chatroom:private-messages *com.ag-projects.screen-sharing*
</pre>
If the end-point detects and supports this private extension, it can share the screen by pushing at regular intervals a jpeg image with the desktop content over the MSRP chat stream. The image must be encapsulated in a CPIM envelope using content type _application/blink-screensharing_. Blink SIP client implements this extension.
<pre>
MSRP eea58af6af1b788 SEND
To-Path: msrps://81.23.228.149:41652/a65812de6f6a0725ee1a;tcp
From-Path: msrps://192.168.1.6:2855/e7028b404511ed77d6a2;tcp
Message-ID: 641f9960ded0638d
Byte-Range: 1-*/245347
Success-Report: yes
Failure-Report: yes
Content-Type: message/cpim
From: Adrian Georgescu <sip:31208005169@ag-projects.com>
To: <sip:nnauyj@conference.sip2sip.info>
DateTime: 2011-12-22T09:12:04+01:00
MIME-Version: 1.0
Content-Type: application/blink-screensharing
ÿØÿàJFIF .............
</pre>
The server then makes the screenshot available at a HTTP URL and publishes this URL to all participants using the conference information notification using <agp-conf:screen_image_url> extension. Participants can see the screen using a specialized client or a regular web browser.
h3. Conference Information
To obtain the conference information send a SUBSCRIBE request to the room URI for Event conference "RFC 4575":http://tools.ietf.org/html/rfc4579. The NOTIFY contains detailed information with the list of participants, their connected endpoints, media type and stream status and information about uploaded files.
<pre>
Content-Type: application/conference-info+xml
Content-Length: 975
<?xml version='1.0' encoding='UTF-8'?>
<conference-info xmlns:agp-conf="urn:ag-projects:xml:ns:conference-info"
xmlns="urn:ietf:params:xml:ns:conference-info"
entity="sip:agp@conference.sip2sip.info" state="full">
<conference-description>
<display-text>Ad-hoc conference</display-text>
<free-text>Hosted by SylkServer-1.2.3</free-text>
<agp-conf:resources>
<agp-conf:files>
<agp-conf:file name="Blink.pdf" hash="sha1:49:AD:49:...."
size="151036" sender="AG <sip:31208005169@ag-projects.com>" status="OK"/>
</agp-conf:files>
</agp-conf:resources>
</conference-description>
<host-info>
<web-page>http://sylkserver.com</web-page>
</host-info>
<conference-state>
<user-count>1</user-count>
<active>true</active>
</conference-state>
<users state="full">
<user entity="sip:31208005169@ag-projects.com" state="full">
<display-text>Adrian Georgescu</display-text>
<agp-conf:screen_image_url>https://81.23.228.146/?image=WfPeNYF195.jpg</agp-conf:screen_image_url>
<endpoint entity="sip:pbvusniw@95.97.50.27:54325" state="full">
<display-text>Adrian Georgescu</display-text>
<status>connected</status>
<joining-info>
<when>2011-09-27T09:49:05+02:00</when>
</joining-info>
<media id="170092876"><type>message</type></media>
<media id="2977223756"><type>audio</type></media>
</endpoint>
</user>
</users>
</conference-info>
</pre>
h3. Participant Management
To add and remove participants, SylkServer supports INVITE and REFER methods as defined in "RFC4579 (Conferencing for User Agents)":http://tools.ietf.org/html/rfc4579#section-5 . One can remove or add participants by sending a REFER method to the conference URI.
<pre>
REFER sip:agp@conference.sip2sip.info SIP/2.0
Via: SIP/2.0/UDP 10.211.55.2:54325;rport;branch=z9hG4bKPj7PFxy8RLtr20jfVyUx2eis1H7.1aY7Np
Max-Forwards: 70
From: "Adrian Georgescu" <sip:31208005169@ag-projects.com>;tag=ZtGlJFOgGvwWQEMae6uTpuhT1aREkQeR
To: <sip:agp@conference.sip2sip.info>
Contact: <sip:pbvusniw@192.168.1.6:54325>
Call-ID: rYp1GQbSQ8kFrC1xccpfA5t9GXaR5qwt
CSeq: 6839 REFER
Event: refer
Accept: message/sipfrag;version=2.0
Allow-Events: conference, message-summary, presence, presence.winfo, xcap-diff, refer
Refer-To: <3333@sip2sip.info>;method=INVITE
Referred-By: sip:31208005169@ag-projects.com
User-Agent: Blink Pro 1.3.1 (MacOSX)
Content-Length: 0
</pre>
h2. XMPP Gateway
SylkServer can act like a transparent gateway between SIP and XMPP protocol. This can be used by a SIP service provider to bridge out to XMPP domains or to receive incoming requests from XMPP domains to the SIP users it serves. In a similar fashion, a XMPP service provider can use tehn gateway to bridge out to SIP domains and handle incoming requestes from SIP domains to the XMPP users it serves.
A media session or a presence session initiated by an incoming connection on the XMPP side is translated into an outgoing request on the SIP side and the other way around. To make this work, just add proper SIP or XMPP records into the DNS zone for the domain that needs the gateway service.
Multiparty conferencing (XMPP MUC to SIP MSRP chat) is also supported including adding and removing participants.
h2. Echo
Playback audio and accept MSRP chat requests.