Browse code

- restructured and added documentation - added text files generated from doxygen docs

git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1660 8eb893ce-cfd4-0310-b710-fb5ebe64c474

Stefan Sayer authored on 17/03/2010 13:17:37
Showing 18 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,183 @@
1
+     * [1]Main Page
2
+     * [2]Related Pages
3
+     * [3]Namespaces
4
+     * [4]Data Structures
5
+     * [5]Files
6
+     * [6]Directories
7
+     * [7]Examples
8
+
9
+Application Modules Documentation
10
+
11
+   Documentation for the applications that come with SEMS. The
12
+   applications can be found in the apps/ directory and are installed by
13
+   default if they do not depend on special libraries (eg. liblame). A set
14
+   of [8]Example Applications that illustrate how to make use certain
15
+   aspects of the SEMS framework can be found in the apps/examples
16
+   directory. These are not installed by default.
17
+
18
+Announcement Applications
19
+
20
+   Applications that play announcements to the caller. For plain
21
+   announcements, there is the announcement module.
22
+     * [9]Module Documentation: announcement Application
23
+
24
+   Pre-call announcements can either be implemented using early media with
25
+   the early_announce application,
26
+     * [10]Module Documentation: early_announce Application
27
+
28
+   or the session is established and after the announcement SEMS acts as
29
+   B2BUA, inviting the original r-uri, and finally reinviting the caller:
30
+     * [11]Module Documentation: ann_b2b Application
31
+
32
+   Another possibility is to establish the session and then REFER the
33
+   caller:
34
+     * [12]Module Documentation: announce_transfer Application
35
+
36
+   As SEMS can also do UAC authentication for a call using the uac_auth
37
+   component plugin ( ModuleDoc_uac_auth). An example where this is used
38
+   is the announce_auth example application:
39
+     * [13]Module Documentation: announce_auth Application
40
+
41
+Voicemail and Mailbox
42
+
43
+   SEMS has a voicemail application, which send a recorded message via
44
+   Email (voicemail2email), saves the message to the voicebox, or does
45
+   both:
46
+     * [14]Module Documentation: voicemail Application
47
+
48
+   Messages saved to voicebox can be listened to using the voicebox
49
+   application:
50
+     * [15]Module Documentation: voicebox Application
51
+
52
+   The annrecorder application can be used to record a personal greeting
53
+   message.:
54
+     * [16]Module Documentation: annrecorder Application
55
+
56
+   There is also a simpler mailbox application, which stores recorded
57
+   messages (in an IMAP server) and users can dial in to check their
58
+   messages:
59
+     * [17]Module Documentation: mailbox Application
60
+
61
+Conferencing
62
+
63
+   SEMS can be a conference bridge with the conference application:
64
+     * [18]Module Documentation: conference Application
65
+
66
+Authentication for conference rooms (PIN entry)
67
+
68
+   There are two possibilies how a PIN entry for conference rooms (or for
69
+   other services) can be implemented: after the PIN is collected and
70
+   verified against a XMLRPC authentication server, the call can be
71
+   connected to the conference room either using B2BUA, or it can be
72
+   transfered to the conference bridge using a (proprietary) REFER call
73
+   flow. The b2bua solution, which also gives the possibility to limit the
74
+   call time, is implemented in the conf_auth plugin:
75
+     * [19]Module Documentation: conf_auth Application
76
+
77
+   The other call flow can be implemented using the pin_collect
78
+   application:
79
+     * [20]Module Documentation: pin_collect Application
80
+
81
+Web controlled conference rooms
82
+
83
+   Using the webconference application, conference rooms can be controlled
84
+   from e.g. a web control page, or some other external mechanism:
85
+     * [21]Module Documentation: webconference Application
86
+
87
+Prepaid
88
+
89
+   This is a signalling-only prepaid engine.
90
+     * [22]Module Documentation: prepaid_sip application plugin
91
+
92
+Click2Dial
93
+
94
+   An xmlrpc-enabled way to initiate authenticated calls:
95
+     * [23]Module Documentation: click2dial application plugin
96
+
97
+Defining and developing applications as state machine charts
98
+
99
+   The DSM module allows to define an application as simple, easy to read,
100
+   self-documenting, concise state diagram. This state machine definition
101
+   is then interpreted and executed by the DSM application.
102
+     * [24]DSM: State machine notation for VoIP applications
103
+
104
+Scripting SEMS with Python
105
+
106
+   There are two application modules which embed a python interpreted into
107
+   SEMS: the ivr module and the py_sems module.
108
+
109
+   The ivr module plugin embeds a python interpreter into SEMS. In it,
110
+   applications written in python can be run (mailbox, conf_auth,
111
+   pin_collect for example) and new applications can be prototyped and
112
+   implemented very quickly:
113
+     * [25]Module Documentation: ivr Application
114
+
115
+   The ivr module has a simple to use, yet limited API, which uses
116
+   hand-written wrappers for the python bindings.
117
+
118
+   py_sems uses a binding generator to make python classes from the SEMS
119
+   core C++ classes, thus exposing a lot more functionality natively to
120
+   python:
121
+     * [26]Module Documentation: py_sems Application
122
+
123
+Registering SEMS at a SIP registrar
124
+
125
+   The reg_agent module together with the registar_client module can be
126
+   used to register at a SIP registrar.
127
+     * [27]Module Documentation: reg_agent Application
128
+
129
+     * [28]Module Documentation: registrar_client Application
130
+
131
+Various applications
132
+
133
+   xmlrpc2di ([29]Module Documentation: xmlrpc2di Application) exposes DI
134
+   interfaces as XMLRPC server. This is very useful to connect SEMS with
135
+   other software, that e.g. trigger click2dial calls, create
136
+   registrations at SIP registrar, do monitoring, etc.
137
+     * [30]Module Documentation: callback application plugin
138
+
139
+     * [31]Module Documentation: auth_b2b application plugin
140
+
141
+Other components
142
+
143
+     * [32]Module Documentation: diameter_client component plugin
144
+     __________________________________________________________________
145
+
146
+
147
+    Generated on Wed Mar 17 14:15:58 2010 for SEMS by  [33]doxygen 1.6.1
148
+
149
+References
150
+
151
+   1. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/index.html
152
+   2. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/pages.html
153
+   3. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/namespaces.html
154
+   4. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/annotated.html
155
+   5. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/files.html
156
+   6. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/dirs.html
157
+   7. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/examples.html
158
+   8. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/AppDocExample.html
159
+   9. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_announcement.html
160
+  10. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_early_announce.html
161
+  11. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_ann_b2b.html
162
+  12. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_announce_transfer.html
163
+  13. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_announce_auth.html
164
+  14. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_voicemail.html
165
+  15. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_voicebox.html
166
+  16. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_annrecorder.html
167
+  17. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_mailbox.html
168
+  18. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_conference.html
169
+  19. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_conf_auth.html
170
+  20. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_pin_collect.html
171
+  21. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_webconference.html
172
+  22. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_sw_prepaid_sip.html
173
+  23. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_click2dial.html
174
+  24. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_dsm.html
175
+  25. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_ivr.html
176
+  26. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_py_sems.html
177
+  27. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_reg_agent.html
178
+  28. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_registrar_client.html
179
+  29. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_xmlrpc2di.html
180
+  30. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_callback.html
181
+  31. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_auth_b2b.html
182
+  32. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_diameter_client.html
183
+  33. http://www.doxygen.org/index.html
0 184
new file mode 100644
... ...
@@ -0,0 +1,34 @@
1
+     * [1]Main Page
2
+     * [2]Related Pages
3
+     * [3]Namespaces
4
+     * [4]Data Structures
5
+     * [5]Files
6
+     * [6]Directories
7
+     * [7]Examples
8
+
9
+Component Modules Documentation
10
+
11
+   SEMS is extensible with modules. Component modules are modules which
12
+   implement functionality which can be used by other modules, e.g. by
13
+   application modules.
14
+     * [8]Module Documentation: registrar_client Application :
15
+       registrar_client
16
+
17
+     * [9]Module Documentation: uac_auth component : uac_auth
18
+     __________________________________________________________________
19
+
20
+
21
+    Generated on Wed Mar 17 14:15:58 2010 for SEMS by  [10]doxygen 1.6.1
22
+
23
+References
24
+
25
+   1. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/index.html
26
+   2. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/pages.html
27
+   3. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/namespaces.html
28
+   4. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/annotated.html
29
+   5. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/files.html
30
+   6. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/dirs.html
31
+   7. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/examples.html
32
+   8. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_registrar_client.html
33
+   9. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_uac_auth.html
34
+  10. http://www.doxygen.org/index.html
0 35
new file mode 100644
... ...
@@ -0,0 +1,210 @@
1
+     * [1]Main Page
2
+     * [2]Related Pages
3
+     * [3]Namespaces
4
+     * [4]Data Structures
5
+     * [5]Files
6
+     * [6]Directories
7
+     * [7]Examples
8
+
9
+How to try out SEMS without setting up a proxy
10
+
11
+Introduction
12
+
13
+   This text describes how one can try out services in SEMS without
14
+   setting up a proxy. This is the simplest way to try services in SEMS,
15
+   or start with developing a service.
16
+
17
+   The way this works is that SEMS registers to a SIP server (registrar)
18
+   with one account (bob), just like any other SIP phone, and we call SEMS
19
+   from another account (alice). If the SIP server provides DID calling
20
+   from the PSTN, we can use any landline or mobile phone for testing or
21
+   using the service.
22
+
23
+   Note:
24
+          What is not possible with this method is to use applications,
25
+          which need additional information for a call, from the
26
+          subscriber data. For example, in order to send a voicemail as
27
+          email, the SEMS server needs the email address to send the mail
28
+          to.
29
+
30
+Requirements
31
+
32
+   For compiling SEMS, as a minimum a C++ compiler and make is needed. In
33
+   debian, do
34
+ apt-get install g++ make
35
+
36
+With a public SIP server
37
+
38
+   Two accounts at a public SIP server are needed. We recommend to use
39
+   iptel.org's SIP service for testing, an account can be registered for
40
+   free at [8]http://iptel.org/service/.
41
+
42
+   Any SIP phone, hardphone or softphone, can be used for testing.
43
+   Cross-platform, [9]sip-communicator is recommended, for Linux
44
+   [10]twinkle, for Windows sip-communicator, xten eyebeam or NCH express.
45
+
46
+With a PSTN DID provider
47
+
48
+   Alternatively a PSTN DID provider can be used. In that case, we can
49
+   test and use the service with any phone. A list of DID providers is for
50
+   example available at [11]voip-info . [12]Sipgate for example, provides
51
+   free DID numbers in Germany.
52
+
53
+Installing SEMS from source
54
+
55
+   First, the SEMS source is downloaded from iptel.org and extracted:
56
+     $ wget ftp.iptel.org/pub/sems/sems-latest.tar.gz
57
+     $ tar xzvf sems-latest.tar.gz
58
+
59
+   SEMS is compiled:
60
+    $ cd sems-x.y.z/
61
+    $ make
62
+
63
+   Note:
64
+          Compilation may fail for some modules due to missing
65
+          dependencies. For most modules, that can be ignored for the
66
+          moment.
67
+
68
+   Then SEMS is installed:
69
+    $ make install
70
+
71
+   This will install
72
+     * configuration in /usr/local/etc/sems/
73
+     * the sems binary in /usr/local/sbin/sems
74
+     * modules in /usr/local/lib/sems/plug-in/
75
+     * audio files in /usr/local/lib/sems/audio/
76
+
77
+Installing SEMS from source
78
+
79
+Configuring the application for SEMS
80
+
81
+   There are many many modules shipped with SEMS, applications like
82
+   announcement, voicemail, conference, etc, codec modules, and some
83
+   things like SIP registrar client.
84
+
85
+   Now we configure SEMS to load the conference application and execute
86
+   the conference application for incoming calls. We also set it to have
87
+   itself register to our SIP server.
88
+
89
+   In /usr/local/etc/sems/sems.conf, we set
90
+   load_plugins=sipctrl;wav;uac_auth;registrar_client;reg_agent;conference
91
+
92
+   to load the modules we need; sipctrl loads the SIP stack, wav is for
93
+   reading WAV files and for the G711 codec, uac_auth is the module which
94
+   implements authentication, registrar_client facilitates registration at
95
+   a SIP server, and reg_agent is the application that uses
96
+   registrar_client to have SEMS register at a SIP server.
97
+
98
+   We also set
99
+   application=conference
100
+
101
+   so that SEMS executes the conference application for an incoming call.
102
+
103
+   We want SEMS to register at a SIP server, so we need to tell it about
104
+   the user name and the password, this is set in
105
+   /usr/local/etc/sems/etc/reg_agent.conf (of course this user name bob
106
+   and the password need to be set to the ones used for testing):
107
+     domain=iptel.org
108
+     user=bob
109
+     display_name=bob
110
+     auth_user=bob
111
+     pwd=verysecret
112
+
113
+Testing the setup
114
+
115
+   Now we can test the configuration by running SEMS from the command line
116
+   like this:
117
+    /usr/local/sbin/sems -f /usr/local/etc/sems/sems.conf -D 3 -E
118
+
119
+   -D 3 sets the debug level higher so that we see what is going on, and
120
+   -E makes SEMS start in the foreground and go to daemon mode. It also
121
+   makes the log appear on the terminal and not in the system log file.
122
+
123
+   If everything is alright, SEMS starts up with a lot of messages, and
124
+   hopefully no ERROR. There should also be some messages appearing which
125
+   show that SEMS registered successfully to the SIP server.
126
+
127
+   Now we can call bob from the other phone or our PSTN telephone. In the
128
+   SEMS log, we see the call appearing, and on the phone we hear a message
129
+   saying that we are the first participant in the conference.
130
+
131
+   If it doesnt work.... we examine the log for the ERROR that occured.
132
+   Possibly, depending on the network setup, we need to change the
133
+   interface that SEMS is running on; this can be changed by setting the
134
+   media_ip and sip_ip options in sems.conf. Also, it might be that there
135
+   is already someone using that port (default config: 5070), in that case
136
+   sip_port needs to be set.
137
+
138
+Running as daemon
139
+
140
+   If SEMS is started without the -E option, it will continue running as
141
+   daemon in the background. The log can be seen in syslog (e.g. with tail
142
+   -f /var/log/daemon.log).
143
+
144
+Running other applications
145
+
146
+   If we want to run other applications, the load_plugins= and
147
+   application= parameters need to be adapted. See [13]Application Modules
148
+   Documentation for a description of the shipped applications.
149
+
150
+Creating and running a simple DSM applications
151
+
152
+   The DSM is a service development platform, that makes it simple to
153
+   create powerful services. The service logis is defined as a state
154
+   machine, and the DSM application interprets this state machine for the
155
+   calls, evaluating when to change state, and which actions to execute.
156
+
157
+   To use a DSM application, we set in /usr/local/etc/sems/sems.conf
158
+   load_plugins=sipctrl;wav;uac_auth;registrar_client;reg_agent;session_timer;ds
159
+m
160
+   application=mydsmapp
161
+
162
+   and in /usr/local/etc/sems/etc/dsm.conf :
163
+    diag_path=/usr/local/lib/sems/dsm/
164
+    load_diags=mydsmapp
165
+    register_apps=mydsmapp
166
+
167
+   Then we paste this little script in
168
+   /usr/local/lib/sems/dsm/mydsmapp.dsm :
169
+  initial state BEGIN {
170
+    playFile(/usr/local/lib/sems/audio/webconference/first_participant.wav
171
+  };
172
+  transition "file ends" BEGIN - noAudioTest -> TYPING;
173
+
174
+  state TYPING;
175
+  transition "typed a key" BEGIN - keyTest(#key < 10) / {
176
+    set($myfile=/usr/local/lib/sems/audio/webconference/);
177
+    append($myfile, #key);
178
+    append($myfile, .wav);
179
+    playFile($myfile);
180
+  } -> TYPING;
181
+
182
+  transition "BYE received" (BEGIN, TYPING) - hangup / stop(false) -> END;
183
+  state END;
184
+
185
+   This little script welcomes the caller, and then plays the key that the
186
+   caller entered. More documentation about DSM and examples are in
187
+   apps/dsm/doc, and also [14]DSM: State machine notation for VoIP
188
+   applications .
189
+     __________________________________________________________________
190
+
191
+
192
+    Generated on Wed Mar 17 14:15:58 2010 for SEMS by  [15]doxygen 1.6.1
193
+
194
+References
195
+
196
+   1. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/index.html
197
+   2. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/pages.html
198
+   3. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/namespaces.html
199
+   4. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/annotated.html
200
+   5. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/files.html
201
+   6. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/dirs.html
202
+   7. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/examples.html
203
+   8. http://iptel.org/service/
204
+   9. http://www.sip-communicator.org/
205
+  10. http://twinklephone.com/
206
+  11. http://www.voip-info.org/wiki/view/DID+Service+Providers
207
+  12. http://sipgate.de/
208
+  13. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/AppDoc.html
209
+  14. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_dsm.html
210
+  15. http://www.doxygen.org/index.html
0 211
new file mode 100644
... ...
@@ -0,0 +1,115 @@
1
+     * [1]Main Page
2
+     * [2]Related Pages
3
+     * [3]Namespaces
4
+     * [4]Data Structures
5
+     * [5]Files
6
+     * [6]Directories
7
+     * [7]Examples
8
+
9
+How to set up a simple proxy for trying out and using SEMS
10
+
11
+Introduction
12
+
13
+   This text describes how one can set up a simple SIP proxy in order to
14
+   try out services in SEMS.
15
+
16
+   We will use the Kamailio 3.0 default proxy installation, and add a
17
+   route SERVICES which adds the application name, and forwards the call
18
+   to SEMS. The same configuration can be used with the original SER
19
+   (iptel.org/ser), sip-router (sip-router.org) or other SER derivatives,
20
+   like OpenSIPS (opensips.org).
21
+
22
+Installing Kamailio
23
+
24
+   To install Kamailio 3.0, there is excellent documentation on the
25
+   [8]Kamailio website. In debain lenny, or for example in Ubuntu 9.10,
26
+   one can install Kamailio with
27
+    $ wget http://www.kamailio.org/pub/kamailio/latest/packages/debian-lenny/kam
28
+ailio_3.0.1_i386.deb
29
+    $ dpkg -i kamailio_3.0.1_i386.deb
30
+
31
+   To activate kamailio, one needs to set RUN_KAMAILIO=yes in
32
+   /etc/default/kamailio.
33
+
34
+Adding a service route
35
+
36
+   Kamailio processes all requests according to the logic that is set in
37
+   the route section of its configuration file, which is a very flexible
38
+   one. In order to have services executed when some special numebrs are
39
+   called (e.g. 200 and 300), we add another route to
40
+   /etc/kamailio/kamailio.cfg:
41
+   route[SERVICES] {
42
+        if ($rU=~"^200.*") {
43
+                remove_hf("P-App-Name");
44
+                append_hf("P-App-Name: echo\r\n");
45
+                $ru = "sip:" + $rU + "@" + "127.0.0.1:5070";
46
+                route(RELAY);
47
+                exit;
48
+        }
49
+        if ($rU=~"^300.*") {
50
+                remove_hf("P-App-Name");
51
+                append_hf("P-App-Name: conference\r\n");
52
+                $ru = "sip:" + $rU + "@" + "127.0.0.1:5070";
53
+                route(RELAY);
54
+                exit;
55
+        }
56
+   }
57
+
58
+   This route block can be added anywhere, for example at the end, or
59
+   between the PSTN and the SERVICES routes.
60
+
61
+   Then, in the main route section, which is the one marked with the
62
+   comment # main request routing logic, we call our SERVICES-route,
63
+   preferably before (or after) the PSTN route:
64
+   ...
65
+        if ($rU==$null) {
66
+                # request with no Username in RURI
67
+                sl_send_reply("484","Address Incomplete");
68
+                exit;
69
+        }
70
+
71
+        route(SERVICES);
72
+
73
+        route(PSTN);
74
+
75
+        # apply DB based aliases (uncomment to enable)
76
+        ##alias_db_lookup("dbaliases");
77
+
78
+        if (!lookup("location")) {
79
+   ...
80
+
81
+   Now, if we register a phone to the server, and call the 200 or the 300
82
+   number, the INVITE gets sent to 127.0.0.1:5070, with the application
83
+   that is to be called, added as header to the INVITE.
84
+
85
+Setting up SEMS to select the application
86
+
87
+   If we load several applications in SEMS, we can select which
88
+   application to execute by the P-App-Name header. In sems.conf we set
89
+   application= so that SEMS looks into the P-App-Name header to determine
90
+   which application to run:
91
+   application=$(apphdr)
92
+   load_plugin=sipctrl;wav;gsm;ilbc;speex;session_timer;conference;echo
93
+   sip_ip=127.0.0.1
94
+   sip_port=5070
95
+   media_ip=some.public.ip.here
96
+
97
+   Note:
98
+          in this simple case, we could also have set application= and
99
+          used regular expression mapping in app_mapping.conf
100
+     __________________________________________________________________
101
+
102
+
103
+    Generated on Wed Mar 17 14:15:58 2010 for SEMS by  [9]doxygen 1.6.1
104
+
105
+References
106
+
107
+   1. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/index.html
108
+   2. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/pages.html
109
+   3. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/namespaces.html
110
+   4. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/annotated.html
111
+   5. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/files.html
112
+   6. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/dirs.html
113
+   7. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/examples.html
114
+   8. http://www.kamailio.org/dokuwiki/doku.php#setup
115
+   9. http://www.doxygen.org/index.html
0 116
new file mode 100644
... ...
@@ -0,0 +1,198 @@
1
+     * [1]Main Page
2
+     * [2]Related Pages
3
+     * [3]Namespaces
4
+     * [4]Data Structures
5
+     * [5]Files
6
+     * [6]Directories
7
+     * [7]Examples
8
+
9
+How to set up the proxy for voicemail and voicebox in SEMS
10
+
11
+Introduction
12
+
13
+   This text describes how one can set up a SER based home proxy SIP proxy
14
+   with voicemail and voicebox service implemented in SEMS.
15
+
16
+   With minor modifications, this should work with home proxies
17
+   implemented with SER derivatives ([8]Kamailio 1.x, [9]OpenSIPS), and
18
+   also with [10]sip-router (e.g. Kamailio 3.0) based proxy
19
+   configurations. For other types of proxies or SIP platforms, it should
20
+   give an idea of what is required to use a SEMS based voicemail system.
21
+
22
+Features of a voicemail system with SEMS
23
+
24
+   The voicemail system that comes with SEMS supports the following
25
+   features
26
+     * voicemail2email and/or dial-in voicebox
27
+     * greeting only mode
28
+     * voicebox plays message count
29
+     * new and saved messages
30
+     * user can record personal greeting message (as a separate service
31
+       number)
32
+     * multi-domain capable
33
+     * multi-language capable (e.g. as user setting), supports
34
+       single-digits pre and post
35
+     * supports domain and user aliases (domain/user string or domain-ID
36
+       (DID)/user-ID (UID) )
37
+     * prompts per domain/language
38
+     * default greeting message per domain/language
39
+     * configurable key bindings for menu
40
+
41
+Parameters to voicemail applications
42
+
43
+   Usually, when a call should be sent to the voicemail system, the home
44
+   proxy already knows some parts or all of the user profile, for example
45
+   the email address of a user, or the voicemail settings; for example the
46
+   user profile is already loaded from a DB (or LDAP, RADIUS, DIAMETER
47
+   etc). For this reason, in a SEMS based voicemail system, the proxy adds
48
+   the relevant information as parameters to the INVITE request. Those
49
+   parameters are set in the P-App-Param header.
50
+
51
+   Example:
52
+     INVITE sip:1000@sems01.iptel.org:5080 SIP/2.0.
53
+
54
+     From: "sayer@iptel" <sip:sayer@iptel.org>;tag=d3olt2dqvl.
55
+
56
+     To: <sip:1000@iptel.org>.
57
+
58
+     ...
59
+     P-App-Name: voicebox.
60
+
61
+     P-App-Param: usr=sayer;dom=iptel.org;lng=en;uid=3ab0a114-ceff-11da-8607-000
62
+2b3abca3a;did=2f2091f5-ceff-11da-8220-0002b338cf3a;.
63
+
64
+   If the proxy does not support this, or does not have access to the user
65
+   profile, there are two solutions:
66
+     * add another SER-based proxy in front of SEMS that has access to
67
+       user profile, and adds those headers
68
+     * add the functionality for accessing the user profile to SEMS (e.g.
69
+       access DB in SEMS)
70
+
71
+   For both solutions, the main complexity lies in the fact that the right
72
+   user needs to be identified (with support for multi domain, aliases,
73
+   call forwarding etc).
74
+
75
+Features of a voicemail system with SEMS
76
+
77
+   There is three applications involved in a voicemail/voicebox system in
78
+   SEMS: voicemail, voicebox and annrecorder. Voicemail is the application
79
+   that records a message, and sends the message as email or stores it
80
+   into the voicebox storage. Voicebox is the application that users can
81
+   dial into, listen to their messages, delete or save them. Annrecorder
82
+   is an application that lets users record their personal greeting
83
+   message.
84
+
85
+   If only voicemail2email is to be used, the voicemail application alone
86
+   can be employed. In that case, the mode must be set to voicemail (see
87
+   voicemail application parameters below).
88
+
89
+Storage for voice message files and greetings
90
+
91
+   The storage for voice messages is implemented in a separate module.
92
+   This way for example a specialized adapter to some replicated storage
93
+   system can be implemented and loaded without changing the other
94
+   applications.
95
+
96
+   A storage module only needs to support a few very simple functions:
97
+   Create, get and delete messages, mark a message as read, list a user's
98
+   directory, and get the number of messages in the user's directory. The
99
+   sender and the message record time is encoded in the message name.
100
+
101
+   The default storage module, msg_storage, is an implementation that just
102
+   uses the normal file system calls (fopen(), readdir(), opendir() etc).
103
+   As 'saved' flag, the mtime of the file is compared to the atime.
104
+
105
+   Note:
106
+          If your file system does not support atime, this will not work,
107
+          i.e. all messages will always appear as unread!
108
+
109
+Domain/User text or domain ID (DID) and user ID (UID)
110
+
111
+   If the platform supports user and domain aliases (e.g. sip.iptel.org
112
+   and iptel.org, or numeric aliases), there may not be a canonical user
113
+   name available. For that case, the user ID and domain ID (canonical
114
+   user/domain ID) may be used, by setting UID/DID application parameters.
115
+   This overrides the user name and domain name, so that the correct user
116
+   and domain is identified.
117
+
118
+Voicemail application modes
119
+
120
+   The voicemail application has four modes:
121
+     * voicemail : send email (default)
122
+     * box : leave in voicebox (store in msg_storage)
123
+     * both : send email and leave in voicebox
124
+     * ann : just play greeting, don't record message.
125
+
126
+   For voicemail and both mode, the email address must be given as
127
+   parameter.
128
+
129
+Voicemail specific AVPs
130
+
131
+   The following user AVPs should be configured in SerWeb to be
132
+   user-configurable:
133
+     * voicemail : voicemail mode - 'voicemail', 'box', 'both', or 'ann'
134
+     * email: email address
135
+     * lang: language - selectable from those for which prompts are
136
+       present
137
+
138
+Proxy configuration for ser-oob.cfg
139
+
140
+   These route fragments could be inserted into a typical ser-oob or
141
+   default Kamailio configuration.
142
+
143
+Leaving a message
144
+
145
+   This should be added to native SIP destinations which are not found in
146
+   usrloc, i.e. instead of replying 480 User temporarily not available,
147
+   and in FAILURE_ROUTE:
148
+       append_hf("P-App-Name: voicemail\r\n");
149
+       append_hf("P-App-Param: mod=%$t.voicemail%|;eml='%$t.email%|';usr=%@ruri.
150
+user%|;snd='%@from.uri%|';dom=%@ruri.host%|;uid=%$t.uid%|;did=%$t.did%|;");
151
+       rewritehostport("voicemail.domain.net:5080");
152
+       route(FORWARD);
153
+
154
+Calling voicebox
155
+
156
+   This should be added to SITE-SPECIFIC route:
157
+     if (uri=~"^sip:1000") {               # 1000 is voicebox access number
158
+         append_hf("P-App-Name: voicebox\r\n");
159
+         append_hf("P-App-Param: usr=%@from.uri.user%|;dom=%@from.uri.host%|;lng
160
+=%$f.lang%|;uid=%$f.uid%|;did=%$f.did%|;\r\n");
161
+         rewritehostport("voicemail.domain.net:5080");
162
+         route(FORWARD);
163
+     }
164
+
165
+Recording the greeting
166
+
167
+   This is very similar to the one above, and should be added to
168
+   SITE_SPECIFIC as well:
169
+     if (uri=~"^sip:1001") {               # 1001 is recod greeting number
170
+         append_hf("P-App-Name: annrecorder\r\n");
171
+         append_hf("P-App-Param: usr=%@from.uri.user%|;dom=%@from.uri.host%|;lng
172
+=%$f.lang%|;uid=%$f.uid%|;did=%$f.did%|;typ=vm;\r\n");
173
+         rewritehostport("voicemail.domain.net:5080");
174
+         route(FORWARD);
175
+     }
176
+
177
+   Note the type (typ) here; the annrecorder application can be used to
178
+   record different greetings (e.g. away greeting when recording message,
179
+   or normal away greeting). This type can be used when sending a call to
180
+   voicemail application.
181
+     __________________________________________________________________
182
+
183
+
184
+    Generated on Wed Mar 17 14:15:58 2010 for SEMS by  [11]doxygen 1.6.1
185
+
186
+References
187
+
188
+   1. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/index.html
189
+   2. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/pages.html
190
+   3. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/namespaces.html
191
+   4. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/annotated.html
192
+   5. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/files.html
193
+   6. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/dirs.html
194
+   7. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/examples.html
195
+   8. http://kamailio.org/
196
+   9. http://opensips.org/
197
+  10. http://sip-router.org/
198
+  11. http://www.doxygen.org/index.html
... ...
@@ -1,6 +1,16 @@
1 1
 .PHONY: doc
2 2
 doc:
3 3
 	make -C ../core doc
4
+	lynx -dump doxygen_doc/html/index.html >index.txt
5
+	lynx -dump doxygen_doc/html/howtostart_noproxy.html >Howtostart_noproxy.txt
6
+	lynx -dump doxygen_doc/html/howtostart_simpleproxy.html >Howtostart_simpleproxy.txt
7
+	lynx -dump doxygen_doc/html/howtostart_voicemail.html >Howtostart_voicemail.txt
8
+
9
+	lynx -dump doxygen_doc/html/AppDoc.html >Applications.txt
10
+	lynx -dump doxygen_doc/html/ZRTP.html >ZRTP.txt
11
+	lynx -dump doxygen_doc/html/Tuning.html >Tuning.txt
12
+	lynx -dump doxygen_doc/html/ComponentDoc.html >ComponentModules.txt
13
+
4 14
 
5 15
 .PHONY: fulldoc
6 16
 fulldoc:
7 17
new file mode 100644
... ...
@@ -0,0 +1,59 @@
1
+     * [1]Main Page
2
+     * [2]Related Pages
3
+     * [3]Namespaces
4
+     * [4]Data Structures
5
+     * [5]Files
6
+     * [6]Directories
7
+     * [7]Examples
8
+
9
+Tuning SEMS for high load
10
+
11
+   For high load, there are several compile and run time options to make
12
+   SEMS run smoothly.
13
+
14
+   When running SEMS, make sure that you have the ulimit for open files
15
+   (process.max-file-descriptor) set to an value which is high enough. You
16
+   may need to adapt raise the system wide hard limit (on Linux see
17
+   /etc/security/limits.conf), or run SEMS as super user. Note that an
18
+   unlimited open files limit is not possible, but it is sufficient to set
19
+   it to some very high value (e.g. ulimit -n 100000).
20
+
21
+   There is a compile-time variable that sets a limit on how many RTP
22
+   sessions are supported concurrently, this is MAX_RTP_SESSIONS. You may
23
+   either add this at compile time to your value, or edit Makefile.defs
24
+   and adapt the value there.
25
+
26
+   SEMS uses one thread per session (processing of the signaling). This
27
+   thread sleeps on a mutex (the session's event queue) most of the time
28
+   (RTP/audio processing is handled by the [8]AmMediaProcessor threads,
29
+   which is only a small, configurable, number), thus the scheduler should
30
+   usually not have any performance issue with this. The advantage of
31
+   using a thread per call/session is that if the thread blocks due to
32
+   some blocking operation (DB, file etc), processing of other calls is
33
+   not affected. The downside of using a thread per session is that you
34
+   will spend memory for the stack for every thread, which can fill up
35
+   your system memory quickly, if you have many sessions. The default for
36
+   the stack size is 1M, which for most cases is quite a lot, so if memory
37
+   consumption is an issue, you could adapt this in [9]AmThread, at the
38
+   call to pthread_attr_setstacksize. Note that, at least in Linux, the
39
+   memory is allocated, but if a page is not used, the page is not really
40
+   consumed, which means that most of that empty memory space for the
41
+   stack is not really consumed anyway. If you allocate more than system
42
+   memory for stack, though, thread creation may still fail with ENOMEM.
43
+     __________________________________________________________________
44
+
45
+
46
+    Generated on Wed Mar 17 14:15:58 2010 for SEMS by  [10]doxygen 1.6.1
47
+
48
+References
49
+
50
+   1. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/index.html
51
+   2. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/pages.html
52
+   3. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/namespaces.html
53
+   4. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/annotated.html
54
+   5. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/files.html
55
+   6. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/dirs.html
56
+   7. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/examples.html
57
+   8. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/classAmMediaProcessor.html
58
+   9. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/classAmThread.html
59
+  10. http://www.doxygen.org/index.html
0 60
new file mode 100644
... ...
@@ -0,0 +1,107 @@
1
+     * [1]Main Page
2
+     * [2]Related Pages
3
+     * [3]Namespaces
4
+     * [4]Data Structures
5
+     * [5]Files
6
+     * [6]Directories
7
+     * [7]Examples
8
+
9
+ZRTP encryption
10
+
11
+Introduction
12
+
13
+   ZRTP is a key agreement protocol to negotiate the keys for encryption
14
+   of RTP in phone calls. It is a proposed public standard: [8]ZRTP: Media
15
+   Path Key Agreement for Secure RTP.
16
+
17
+   Even though it uses public key encryption, a PKI is not needed. Since
18
+   the keys are negotiated in the media path, support for it in signaling
19
+   is not necessary. ZRTP also offers opportunistic encryption, which
20
+   means that calls between UAs that support it are encrypted, but calls
21
+   to UAs not supporting it are still possible, but unencrypted. The
22
+   actual RTP encryption is done with [9]SRTP. For more information about
23
+   ZRTP, see the [10]Zfone project, the [11]draft and the [12]wikipedia
24
+   article.
25
+
26
+ZRTP in SEMS
27
+
28
+   Since the version 1.0 SEMS supports ZRTP with the use of the [13]Zfone
29
+   SDK.
30
+
31
+   To build SEMS with ZRTP support, install the SDK and set WITH_ZRTP=yes
32
+   in Makefile.defs, or build with
33
+ $ make WITH_ZRTP=yes
34
+
35
+   The conference application is enabled to tell the caller the SAS phrase
36
+   if it is compiled with WITH_SAS_TTS option, set in
37
+   apps/conference/Makefile. For this to work, the [14]flite
38
+   text-to-speech synthesizer version 1.2 or 1.3 is needed.
39
+
40
+Online demo
41
+
42
+   Call
43
+sip:[15]secureconference@iptel.org
44
+
45
+   or
46
+sip:[16]zrtp@iptel.org
47
+
48
+   for a test drive of ZRTP conferencing. If you call that number with a
49
+   ZRTP enabled phone, you should be told the SAS string that is also
50
+   displayed in your phone. Press two times the hash (##) while in the
51
+   call to read out the SAS string again.
52
+
53
+How to use ZRTP in your application
54
+
55
+   Have a look at the conference application on how to add ZRTP support in
56
+   your application. There is a void AmSession::onZRTPEvent(zrtp_event_t
57
+   event, zrtp_stream_ctx_t *stream_ctx) event that is called with the
58
+   appropriate ZRTP event type and the zrtp stream context, if the state
59
+   of the ZRTP encryption changes. The zrtp_event are defined in the Zfone
60
+   SDK, e.g. ZRTP_EVENT_IS_SECURE.
61
+
62
+Licensing
63
+
64
+   The Zfone SDK is licensed under the Affero GPL v3. As SEMS is licensed
65
+   under GPL 2+, you may use SEMS under GPLv3 and link with libZRTP under
66
+   Affero GPL v3. You may use the resulting program under the restrictions
67
+   of both GPLv3 and AGPLv3.
68
+
69
+   Note that due to the nature of the GPL, without written consent of the
70
+   authors of SEMS as with any other non-free library, it is not possible
71
+   to distribute SEMS linked to specially licensed commercial version of
72
+   the libZRTP SDK, nor the AGPL version. If in doubt, talk to your
73
+   lawyer.
74
+
75
+Phones with ZRTP
76
+
77
+     * [17]Zfone turns every softphone into a secure phone by tapping into
78
+       the RTP sent and received
79
+     * [18]Twinkle is a very good free softphone for Linux. It can speak
80
+       ZRTP with the use of GNU [19]libzrtpcpp.
81
+     __________________________________________________________________
82
+
83
+
84
+    Generated on Wed Mar 17 14:15:58 2010 for SEMS by  [20]doxygen 1.6.1
85
+
86
+References
87
+
88
+   1. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/index.html
89
+   2. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/pages.html
90
+   3. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/namespaces.html
91
+   4. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/annotated.html
92
+   5. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/files.html
93
+   6. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/dirs.html
94
+   7. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/examples.html
95
+   8. http://tools.ietf.org/html/draft-zimmermann-avt-zrtp
96
+   9. http://www.ietf.org/rfc/rfc3711.txt
97
+  10. http://zfoneproject.com/
98
+  11. http://tools.ietf.org/html/draft-zimmermann-avt-zrtp
99
+  12. http://en.wikipedia.org/wiki/ZRTP
100
+  13. http://zfoneproject.com/prod_sdk.html
101
+  14. http://cmuflite.org/
102
+  15. mailto:secureconference@iptel.org
103
+  16. mailto:zrtp@iptel.org
104
+  17. http://zfoneproject.com/
105
+  18. http://twinklephone.com/
106
+  19. http://www.gnutelephony.org/index.php/GNU_ZRTP
107
+  20. http://www.doxygen.org/index.html
0 108
new file mode 100644
... ...
@@ -0,0 +1,84 @@
1
+     * [1]Main Page
2
+     * [2]Related Pages
3
+     * [3]Namespaces
4
+     * [4]Data Structures
5
+     * [5]Files
6
+     * [6]Directories
7
+     * [7]Examples
8
+
9
+SEMS Documentation
10
+
11
+News & Changes
12
+
13
+     * [8]Changelog (from 0.10.0-rc1 onwards)
14
+
15
+General
16
+
17
+     * [9]SEMS Readme file
18
+
19
+How to get started
20
+
21
+     * [10]How to try out SEMS without setting up a proxy
22
+     * [11]How to set up a simple proxy for trying out and using SEMS
23
+     * [12]How to set up the proxy for voicemail and voicebox in SEMS
24
+
25
+User's documentation
26
+
27
+     * [13]SEMS core configuration parameters
28
+     * [14]Compilation instructions
29
+     * [15]Application Modules Documentation
30
+     * [16]DSM: State machine notation for VoIP applications
31
+     * [17]ZRTP encryption
32
+     * [18]Tuning SEMS for high load
33
+
34
+Developer's documentation
35
+
36
+     * [19]SEMS Design Overview
37
+     * [20]Application Development Tutorial
38
+     * [21]Example Applications
39
+     * [22]Component Modules Documentation
40
+
41
+Web sites
42
+
43
+     * Main: SEMS website [23]http://iptel.org/sems
44
+     * sems & semsdev Lists: List server [24]http://lists.iptel.org
45
+     * Bugs: Bug tracker: [25]http://tracker.iptel.org/browse/SEMS
46
+
47
+Outdated documentation bits
48
+
49
+     * [26]Changes in SEMS from 0.9 versions to 0.10
50
+     * Configure-Sems-Ser-HOWTO
51
+     __________________________________________________________________
52
+
53
+
54
+    Generated on Wed Mar 17 14:15:58 2010 for SEMS by  [27]doxygen 1.6.1
55
+
56
+References
57
+
58
+   1. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/index.html
59
+   2. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/pages.html
60
+   3. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/namespaces.html
61
+   4. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/annotated.html
62
+   5. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/files.html
63
+   6. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/dirs.html
64
+   7. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/examples.html
65
+   8. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/changelog.html
66
+   9. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/Readme.html
67
+  10. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/howtostart_noproxy.html
68
+  11. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/howtostart_simpleproxy.html
69
+  12. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/howtostart_voicemail.html
70
+  13. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/sems.conf.sample.html
71
+  14. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/Compiling.html
72
+  15. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/AppDoc.html
73
+  16. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ModuleDoc_dsm.html
74
+  17. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ZRTP.html
75
+  18. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/Tuning.html
76
+  19. http://www.iptel.org/files/semsng-designoverview.pdf
77
+  20. http://www.iptel.org/sems/sems_application_development_tutorial
78
+  21. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/AppDocExample.html
79
+  22. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/ComponentDoc.html
80
+  23. http://iptel.org/sems
81
+  24. http://lists.iptel.org/
82
+  25. http://tracker.iptel.org/browse/SEMS
83
+  26. file://localhost/home/stefan/devel/sems/trunk/doc/doxygen_doc/html/whatsnew_0100.html
84
+  27. http://www.doxygen.org/index.html
0 85
similarity index 100%
1 86
rename from doc/doc_applications.h
2 87
rename to doc/src/doc_applications.h
3 88
similarity index 100%
4 89
rename from doc/doc_componentmods.h
5 90
rename to doc/src/doc_componentmods.h
6 91
similarity index 100%
7 92
rename from doc/doc_exampleapps.h
8 93
rename to doc/src/doc_exampleapps.h
9 94
similarity index 100%
10 95
rename from doc/doc_howtostart_noproxy.h
11 96
rename to doc/src/doc_howtostart_noproxy.h
12 97
similarity index 100%
13 98
rename from doc/doc_howtostart_simpleproxy.h
14 99
rename to doc/src/doc_howtostart_simpleproxy.h
15 100
similarity index 100%
16 101
rename from doc/doc_howtostart_voicemail.h
17 102
rename to doc/src/doc_howtostart_voicemail.h
18 103
similarity index 100%
19 104
rename from doc/doc_tutorialapps.h
20 105
rename to doc/src/doc_tutorialapps.h
21 106
similarity index 100%
22 107
rename from doc/doc_zrtp.h
23 108
rename to doc/src/doc_zrtp.h
24 109
similarity index 100%
25 110
rename from doc/doxyref.h
26 111
rename to doc/src/doxyref.h