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