Project

General

Profile

Applications » History » Version 10

Adrian Georgescu, 03/31/2013 09:29 AM

1 1 Tijmen de Mes
SylkServer is an application server that behaves like a SIP end-point and therefore must be deployed behind a SIP Proxy/Registrar server for registration, proxy, presence agent, accounting and authorization functions. The SIP Proxy must be configured to route certain flows to SylkServer and handle incoming requests from it as necessary. 
2 9 Adrian Georgescu
3 10 Adrian Georgescu
h1. Applications
4 7 Adrian Georgescu
5 1 Tijmen de Mes
h2. Multiparty Conference
6
7
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.
8
9 3 Tijmen de Mes
h3. Supported Media
10 1 Tijmen de Mes
11
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.
12
13
+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.
14
<pre>
15
Content-Type: application/sdp
16
Content-Length: 233
17
18
v=0
19
o=- 3526098545 3526098547 IN IP4 81.23.228.139
20
s=SylkServer-1.2.3
21
t=0 0
22
c=IN IP4 81.23.228.139
23
m=audio 55324 RTP/AVP 9 101
24
c=IN IP4 85.17.186.7
25
a=rtcp:55325
26
a=rtpmap:9 G722/8000
27
a=rtpmap:101 telephone-event/8000
28
a=fmtp:101 0-15
29
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:1nDEh/WrJ57RBaHwhBG4+RAwzV9k/HxZhg1wClnx
30
a=sendrecv
31
</pre>
32
33
+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.
34
35
<pre>
36
Content-Type: application/sdp
37
Content-Length: 213
38
39
v=0
40
o=- 3526098545 3526098547 IN IP4 81.23.228.139
41
s=SylkServer-1.2.3
42
t=0 0
43
m=message 60167 TCP/TLS/MSRP *
44
c=IN IP4 81.23.228.139
45
a=path:msrps://81.23.228.139:60167/f8d1058769bebacacf62;tcp
46
a=accept-types:message/cpim
47
a=accept-wrapped-types:*
48
a=setup:passive
49
a=chatroom:private-messages
50
</pre>
51
52
+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.
53
54
<pre>
55
Content-Type: application/sdp
56
Content-Length:   407
57
58
v=0
59
o=- 3526099467 3526099468 IN IP4 81.23.228.139
60
s=SylkServer-1.2.3
61
c=IN IP4 81.23.228.139
62
t=0 0
63
m=message 39084 TCP/TLS/MSRP *
64
a=path:msrps://81.23.228.139:39084/a06af01b810519fb6090;tcp
65
a=recvonly
66
a=accept-types:*
67
a=accept-wrapped-types:*
68
a=setup:passive
69
a=file-selector:name:"Blink.pdf" type:application/pdf size:151036 hash:sha1:49:AD:49:...
70
</pre>
71
72 3 Tijmen de Mes
+Screen Sharing.+ This functionality is implemented as _com.ag-projects.screen-sharing_ extension to the chatroom functionality.
73 1 Tijmen de Mes
74
<pre>
75
Content-Type: application/sdp
76
...
77
78
m=message 40278 TCP/TLS/MSRP *
79
a=path:msrps://81.23.228.149:40278/2aa5bbb5d37731ef85c0;tcp
80
a=accept-types:message/cpim
81
a=accept-wrapped-types:*
82
a=setup:passive
83 3 Tijmen de Mes
a=chatroom:private-messages *com.ag-projects.screen-sharing*
84 1 Tijmen de Mes
</pre>
85
86 3 Tijmen de Mes
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.
87 1 Tijmen de Mes
<pre>
88
MSRP eea58af6af1b788 SEND
89
To-Path: msrps://81.23.228.149:41652/a65812de6f6a0725ee1a;tcp
90
From-Path: msrps://192.168.1.6:2855/e7028b404511ed77d6a2;tcp
91
Message-ID: 641f9960ded0638d
92
Byte-Range: 1-*/245347
93
Success-Report: yes
94
Failure-Report: yes
95
Content-Type: message/cpim
96
97
From: Adrian Georgescu <sip:31208005169@ag-projects.com>
98
To: <sip:nnauyj@conference.sip2sip.info>
99
DateTime: 2011-12-22T09:12:04+01:00
100
101
MIME-Version: 1.0
102
Content-Type: application/blink-screensharing
103
ÿØÿàJFIF .............
104
</pre>
105
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.
106
107 3 Tijmen de Mes
h3. Conference Information
108 1 Tijmen de Mes
109 2 Tijmen de Mes
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.
110
<pre>
111 1 Tijmen de Mes
Content-Type: application/conference-info+xml
112
Content-Length:   975
113
114
<?xml version='1.0' encoding='UTF-8'?>
115
<conference-info xmlns:agp-conf="urn:ag-projects:xml:ns:conference-info" 
116
    xmlns="urn:ietf:params:xml:ns:conference-info" 
117
    entity="sip:agp@conference.sip2sip.info" state="full">
118
    <conference-description>
119
        <display-text>Ad-hoc conference</display-text>
120
        <free-text>Hosted by SylkServer-1.2.3</free-text>
121
        <agp-conf:resources>
122
            <agp-conf:files>
123
                <agp-conf:file name="Blink.pdf" hash="sha1:49:AD:49:...."
124
                size="151036" sender="AG <sip:31208005169@ag-projects.com>" status="OK"/>
125
            </agp-conf:files>
126
        </agp-conf:resources>
127
    </conference-description>
128
    <host-info>
129
        <web-page>http://sylkserver.com</web-page>
130
    </host-info>
131
    <conference-state>
132
        <user-count>1</user-count>
133
        <active>true</active>
134
    </conference-state>
135
    <users state="full">
136
        <user entity="sip:31208005169@ag-projects.com" state="full">
137
            <display-text>Adrian Georgescu</display-text>
138
            <agp-conf:screen_image_url>https://81.23.228.146/?image=WfPeNYF195.jpg</agp-conf:screen_image_url>
139
            <endpoint entity="sip:pbvusniw@95.97.50.27:54325" state="full">
140
                <display-text>Adrian Georgescu</display-text>
141
                <status>connected</status>
142
                    <joining-info>
143
                        <when>2011-09-27T09:49:05+02:00</when>
144
                    </joining-info>
145
                <media id="170092876"><type>message</type></media>
146
                <media id="2977223756"><type>audio</type></media>
147
            </endpoint>
148
        </user>
149
    </users>
150
</conference-info>
151
</pre>
152 3 Tijmen de Mes
153
h3. Participant Management
154 1 Tijmen de Mes
155 2 Tijmen de Mes
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.
156 1 Tijmen de Mes
157 2 Tijmen de Mes
<pre>
158 1 Tijmen de Mes
REFER sip:agp@conference.sip2sip.info SIP/2.0
159
Via: SIP/2.0/UDP 10.211.55.2:54325;rport;branch=z9hG4bKPj7PFxy8RLtr20jfVyUx2eis1H7.1aY7Np
160
Max-Forwards: 70
161
From: "Adrian Georgescu" <sip:31208005169@ag-projects.com>;tag=ZtGlJFOgGvwWQEMae6uTpuhT1aREkQeR
162
To: <sip:agp@conference.sip2sip.info>
163
Contact: <sip:pbvusniw@192.168.1.6:54325>
164
Call-ID: rYp1GQbSQ8kFrC1xccpfA5t9GXaR5qwt
165
CSeq: 6839 REFER
166
Event: refer
167
Accept: message/sipfrag;version=2.0
168
Allow-Events: conference, message-summary, presence, presence.winfo, xcap-diff, refer
169
Refer-To: <3333@sip2sip.info>;method=INVITE
170
Referred-By: sip:31208005169@ag-projects.com
171
User-Agent: Blink Pro 1.3.1 (MacOSX)
172
Content-Length:  0
173 2 Tijmen de Mes
</pre>
174 4 Adrian Georgescu
175
h2. XMPP Gateway
176 1 Tijmen de Mes
177 5 Adrian Georgescu
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.
178 4 Adrian Georgescu
179 5 Adrian Georgescu
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.
180 6 Adrian Georgescu
181
Multiparty conferencing (XMPP MUC to SIP MSRP chat) is also supported including adding and removing participants.
182
183
h2. Echo
184
185 1 Tijmen de Mes
Playback audio and accept MSRP chat requests.
186 10 Adrian Georgescu
187
h1. Creating new applications
188
189
To create a new application you must write it in a way to comply with the ISylkApplication interface. The interface is described in sylk/applications folder. See the conference room application provided with the server for a complete working example. You will need to define at least a handler by overwriting one of the following functions and then add the application to the server registry:
190
191
 * incoming_session
192
 * incoming_referral
193
 * incoming_subscription
194
 * incoming_sip_message
195
196
The Protocols Layer is described in the "Middleware API section of SIP SIMPLE client SDK":http://sipsimpleclient.org/projects/sipsimpleclient/wiki/SipMiddlewareApi