SipDeveloperGuide

Version 65 (Adrian Georgescu, 11/13/2009 10:27 pm)

1 61 Adrian Georgescu
= Developer Guide =
2 1 Adrian Georgescu
3 1 Adrian Georgescu
[[TOC(WikiStart, Sip*, depth=2)]]
4 1 Adrian Georgescu
5 16 Adrian Georgescu
The main goal of this library is to provide a simple to use API to create real-time communications applications between end-points based on SIP protocol. 
6 16 Adrian Georgescu
7 41 Adrian Georgescu
== Prerequisites ==
8 41 Adrian Georgescu
9 50 Adrian Georgescu
To use the library and the concepts described below you must be familiar with Python programming language and SIP call flows from [http://www.tech-invite.com/Ti-sip-CF3665.html RFC 3665]. Understanding of TCP/IP networking in general and real time application development in particular are strongly recommended.
10 1 Adrian Georgescu
11 32 Adrian Georgescu
Instructions for installing the library are found [wiki:SipInstallation here].
12 31 Adrian Georgescu
13 11 Adrian Georgescu
== Middleware ==
14 1 Adrian Georgescu
15 58 Adrian Georgescu
To develop your application you should use the middleware API that is event-driven, non-blocking and hides the complexity and the interactions of the lower level SIP, SDP, RTP, ICE, MSRP, XCAP and related protocols. 
16 58 Adrian Georgescu
With a minimal amount of coding you can create a rich client application for setting up audio, instant messaging, file transfer and desktop sharing sessions.
17 1 Adrian Georgescu
18 59 Adrian Georgescu
 * [wiki:SipMiddlewareApi Middleware API] - middleware suitable for developing interactive user interfaces (e.g. GUI)
19 60 Adrian Georgescu
 * [wiki:SipConfigurationAPI Configuration API] - used for managing the settings used by the middleware
20 24 Adrian Georgescu
21 64 Adrian Georgescu
=== Sample Code ===
22 38 Adrian Georgescu
23 64 Adrian Georgescu
The middleware is used by the command line tools used for [wiki:SipTesting testing the library]. The command line tools are the best example for how to use the library.
24 1 Adrian Georgescu
25 64 Adrian Georgescu
=== Components ===
26 50 Adrian Georgescu
27 1 Adrian Georgescu
If you wish to develop your own middleware and/or application while having control over the underlying protocol layers yourself, you can use the following APIs that provides granular control over their respective components:
28 61 Adrian Georgescu
29 65 Adrian Georgescu
 * [wiki:SipStreamsApi Streams API]  - The API for Media Streams based on RTP and MSRP transports
30 36 Adrian Georgescu
 * [wiki:SipPresenceApi Presence API]  - The API for payloads carried within SIP signaling used for publication, subscription and notifications of SIP events
31 65 Adrian Georgescu
 * [wiki:SipCoreApiDocumentation SIP Core API] - The API for the SIP, RTP, ICE and audio engine (cross platform sound-card abstraction, codecs)
32 65 Adrian Georgescu
 * [wiki:SipMSRPApi MSRP API]  - The API for Message Session Relay Protocol (MSRP) and its relay extension
33 65 Adrian Georgescu
 * [wiki:SipXCAPApi XCAP API]  - The API for XCAP document manipulation used for storage of buddy lists and presence policy documents
34 42 Adrian Georgescu
35 50 Adrian Georgescu
You may use for example the above components API to create a SIP application server, something the high level middleware was not designed for.
36 43 Adrian Georgescu
37 65 Adrian Georgescu
== Network ==
38 1 Adrian Georgescu
39 43 Adrian Georgescu
To use a SIP application you need access to a TCP/IP network (e.g. the Internet). The library uses the following ports when active:
40 43 Adrian Georgescu
41 43 Adrian Georgescu
|| '''Local port''' || '''Direction''' || '''Remote port''' || '''Protocol''' || '''Description''' || '''Allocation''' || '''Setting''' ||
42 64 Adrian Georgescu
|| 1xport >1024 || In/Out || Typically 5060 set in DNS|| UDP || [wiki:SipCoreApiDocumentation#Engine SIP over UDP] || At start || Global.sip.udp_port ||
43 64 Adrian Georgescu
|| 1xport >1024 || In/Out || Typically 5060 set in DNS ||TCP || [wiki:SipCoreApiDocumentation#Engine SIP over TCP] || At start ||Global.sip.tcp_port ||
44 64 Adrian Georgescu
|| 1xport >1024 || In/Out || Typically 5061  set in DNS ||TCP|| [wiki:SipCoreApiDocumentation#Engine SIP over TLS] || At start || Global.sip.tls_port ||
45 54 Adrian Georgescu
|| 2xport >1024 || In/Out || Random negotiated in SDP || UDP || [wiki:SipCoreApiDocumentation#RTPTransport RTP/RTCP stream] || Per session || Global.rtp.port_range ||
46 54 Adrian Georgescu
|| 1xport >1024 || In/Out || Typically 2855 negotiated in SDP || TCP || [wiki:SipMSRPApi#transport.MSRPTransport MSRP stream] || Per session || Global.msrp.local_port ||
47 57 Adrian Georgescu
|| 1xport >1024 || Out || Typically 443, configured || TCP || [wiki:SipXCAPApi XCAP requests] || Per request|| ||