Expand upon documentation of manager event project
[asterisk/asterisk.git] / doc / google-soc2009-ideas.txt
1 ================================================================================
2 ===                     Google Summer of Code 2009                           ===
3 ===                                                                          ===
4 ===                      http://www.asterisk.org/                            ===
5 ===                                                                          ===
6 ===                      <asteriskteam@digium.com>                           ===
7 ================================================================================
8
9 --------------------------------------------------------------------------------
10 --- Personnel ------------------------------------------------------------------
11 --------------------------------------------------------------------------------
12
13 Administrator: Russell Bryant
14
15 Mentors:       Russell Bryant
16                Joshua Colp
17                Mark Michelson
18                Tilghman Lesher
19                Luigi Rizzo
20
21 --------------------------------------------------------------------------------
22 --------------------------------------------------------------------------------
23
24 --------------------------------------------------------------------------------
25 --- Project Ideas --------------------------------------------------------------
26 --------------------------------------------------------------------------------
27
28 Project difficulty is listed on a 1 through 5 scale.  A 1 would be a project
29 appropriate for a college student with familiarity with C programming, but no
30 experience with the Asterisk code base, or even Asterisk itself.  A project with
31 a difficulty of 5 would be something appropriate for a student that already has
32 significant experience with the Asterisk code base.
33
34 1) There are a number of projects that fall into the category of improving and
35    creating new interfaces for developers to interface with Asterisk.  To get a
36    bit of an idea for the higher level vision of this effort, see the following
37    wiki page: <http://astridevcon.pbwiki.com/Codename-Pinemango/>.  
38   
39    Some insight regarding the motivation for this overall effort is captured
40    in this mailing list post, written by Brian Degenhardt.
41
42     - http://lists.digium.com/pipermail/asterisk-dev/2008-October/034700.html
43
44    Specific project ideas in this area are listed here:
45
46    a) Create a generic "data get" layer for Asterisk components to be able to
47       expose data that they maintain.  Currently, modules implement specific
48       code to implement CLI commands, manager interface actions, and so forth,
49       while it would be much nicer to have this data available through a common
50       interface.  For example, SNMP support has been added to Asterisk but is
51       limited in what it can expose due to the lack of this interface.  This
52       project would be to create the infrastructure for this data layer and some
53       uses to prove its functionality.  Then, various parts of Asterisk could
54       be converted as time permits.  Note that this may end up sharing some code
55       with the "data put" interface in part b.
56
57       Difficulty - 2
58       Language   - C
59
60    b) Create a generic "data put" layer for Asterisk components to allow
61       external interfaces to update configuration items, as opposed to having
62       to issue a full configuration reload to account for a single change.
63       This project would involve writing the infrastructure and some basic usage
64       to prove its functionality.  Various parts of Asterisk could be converted
65       as time permits.  Note that this may end up sharing some code with the
66       "data get" interface in part a.
67
68       Difficulty - 2
69       Language   - C
70
71    c) Improve the performance of cache handling in the event core.  The event
72       API in Asterisk provides a generic interface for subscribing to and
73       publishing asynchronous events.  It also provides a caching mechanism for
74       events that represent state changes.  So, to find out a state, you can
75       pull it out of the event cache.  For example, the state of devices as used
76       for presence is handled using this mechanism.  The data structures
77       currently used for maintaining the cache are not optimal for performance
78       when the cache gets large.  This project would be to write code to
79       benchmark the performance of the caching mechanism, and then implement a
80       new storage mechanism that is more efficient.
81
82       Difficulty - 3
83       Language   - C
84
85    d) Develop a method for federating Asterisk servers using distributed events
86       with a transport suitable for communication beyond a LAN.  The current
87       event infrastructure includes ways to hook in and distribute events
88       between servers.  There is a module which implements this, res_ais, but
89       it is only suitable for federating servers on a high speed LAN.  This
90       project would be to implement a new event distribution module using a
91       protocol such as XMPP, or something else if deemed appropriate.
92
93       Difficulty - 2
94       Language   - C
95
96    e) Implement a method that makes it very easy to add synchronous hooks 
97       throughout the code base.  Hooks are arbitrary callbacks within the 
98       internals of asterisk where external components can modify asterisk's 
99       behavior.  While the dialplan allows applications to control much of the 
100       asterisk behavior, hooks allow for business logic to be applied to 
101       situations that are not associated with a call (eg: a sip registration 
102       hook could allow time-governed registration period), or for situations 
103       that occur during the execution of a dialplan application (eg: codec 
104       negotiation hook to apply business logic to codecs proposed in the middle 
105       of a Dial command, or a transfer hook to execute business logic when a 
106       SIP REINVITE is received).
107
108       Difficulty - 3
109       Language   - C
110
111    f) Asterisk has a relatively new generic asynchronous event API. While it 
112       has been implemented in several areas of the code base, one place where 
113       it has not been utilized but would make a great fit would be to replace 
114       the legacy code used for generating events on the Asterisk Manager 
115       Interface (AMI).  The first phase of this project would be to go through
116       the code base and generate new generic Asterisk events in places where
117       manager events are generated today.  That means that those events would
118       be available to any part of Asterisk that would be interested in doing
119       something with them in a binary format as opposed to a big string.
120       
121       As time permits, a second phase to this project would be to either write
122       a new socket based interface that exposes the generic event API, or to
123       modify the existing manager interface to use the ast_event API to handle
124       receiving events from inside of Asterisk to send to manager clients.
125        
126       Difficulty - 3
127       Language   - C
128
129 2) This section contains projects related to Voicemail support in Asterisk.
130
131    a) Extract the support for storage backends into an API to reduce code
132       complexity and its ability to be reused.  The current Asterisk voicemail
133       application supports storing voicemail on the filesystem, in a database
134       via ODBC, and on an IMAP server.  All of the storage code should be pulled
135       out into a form such that it makes the current app_voicemail easier to
136       maintain, but also allows the backend storage code to be used in a next
137       generation voicemail implementation, or potentially other things in
138       Asterisk that would like to use these interfaces.
139
140       Difficulty - 3
141       Language   - C
142
143    b) One feature that has been widely desired for Asterisk voicemail is the
144       ability to customize menu layout.  This project would be to improve
145       existing code, or develop a new voicemail application that supports
146       customizable menu layout.  The app_minivm module currently in Asterisk
147       is one way of approaching this project, which is to break up current
148       Voicemail functionality into smaller applications to make it easier to
149       build a custom voicemail system in the dialplan.  Luigi Rizzo had a
150       student work on a project to create a new voicemail system that included
151       these features that has some work left to be completed.
152
153       Difficulty - 4
154       Language   - C
155
156 3) This section includes projects related to improving the Asterisk console and
157    logging interfaces.
158
159    a) Improve the way "verbose logging" works in Asterisk.  Currently, the
160       Asterisk console and logging system only supports a single verbose level.
161       However, it would be extremely useful to allow a verbose setting per
162       console, and per log file that verbose output is being sent to.
163
164       Difficulty - 1
165       Language   - C
166
167    b) Improve Asterisk logging such that advanced filtering is available at the
168       console so that output related to a single call is available without
169       having to see the output for other calls.  Lack of support for debugging
170       individual calls has been a long standing difficulty for Asterisk
171       administrators on busy systems.
172
173       Difficulty - 1
174       Language   - C
175    
176    c) In addition to being used as an administrative interface, the Asterisk
177       console can also be used for making calls using the system audio and
178       video interfaces.  In this sense, Asterisk can be used as a highly
179       configurable console based soft phone.  Luigi Rizzo and some of his
180       students have put a lot of work into adding video support to the Asterisk
181       console when being used as a softphone.  This project would be to work
182       with Luigi to continue this effort to improve the GUI that opens up for
183       handling calls.  This would involve adding some buttons to handle calls
184       and contact lists, controlling the active audio source for a call, and
185       adding standard telephone buttons.
186
187       Difficulty - 3
188       Language   - C
189
190 4) This section includes projects related to internationalization.
191
192    a) One of the projects that Luigi Rizzo previously worked on was replacing
193       the "say.c" code that implemented language support for saying dates and
194       times in C code, with an implementation that allows additional languages
195       to be added via a configuration file with special syntax.  This project
196       would be to work with Luigi to enhance this code to better handle
197       languages where words change in multiple ways depending on gender and
198       number, and also adding more languages to the sample configuration file
199       that is distributed with Asterisk.
200
201       Difficulty - 3
202       Language   - C
203
204 5) This section includes projects related to portability to other operating
205    systems.
206
207    a) Asterisk has been ported to cygwin a couple of times over the years, but
208       tends to bitrot due to lack of continued support by developers.  This
209       project would be to revisit the current state of cygwin support and get
210       it working well in Asterisk 1.6.  It should already compile, or be very
211       close to it.  However, there is some testing to be done to ensure that
212       things work properly.  Also, it would be most excellent to get a console
213       channel driver functioning in cygwin (chan_oss, chan_console, etc.).
214
215       Difficulty - 3
216       Language   - C
217
218 6) There are a number of potential projects that could be done to improve
219    security in Asterisk.  A document that lists some of the security challenges
220    currently faced and some ideas for improvements that could be made can be
221    found in the following document:
222
223    http://astridevcon.pbwiki.com/Network-Security-Framework
224
225    Difficulty - 1 to 5
226    Language   - C
227
228 --------------------------------------------------------------------------------
229 --------------------------------------------------------------------------------
230
231 ================================================================================
232 ================================================================================