aboutsummaryrefslogtreecommitdiffstats
path: root/doc/google-soc2009-ideas.txt
blob: 43bee263970cbeb0986f30e84cc30726c5f36511 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
================================================================================
===                     Google Summer of Code 2009                           ===
===                                                                          ===
===                      http://www.asterisk.org/                            ===
===                                                                          ===
===                      <asteriskteam@digium.com>                           ===
================================================================================

--------------------------------------------------------------------------------
--- Personnel ------------------------------------------------------------------
--------------------------------------------------------------------------------

Administrator: Russell Bryant

Mentors:       Russell Bryant
               Joshua Colp
               Mark Michelson
               Tilghman Lesher
               Luigi Rizzo

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
--- Project Ideas --------------------------------------------------------------
--------------------------------------------------------------------------------

Project difficulty is listed on a 1 through 5 scale.  A 1 would be a project
appropriate for a college student with familiarity with C programming, but no
experience with the Asterisk code base, or even Asterisk itself.  A project with
a difficulty of 5 would be something appropriate for a student that already has
significant experience with the Asterisk code base.

1) There are a number of projects that fall into the category of improving and
   creating new interfaces for developers to interface with Asterisk.  To get a
   bit of an idea for the higher level vision of this effort, see the following
   wiki page: <http://astridevcon.pbwiki.com/Codename-Pinemango/>.  
  
   Some insight regarding the motivation for this overall effort is captured
   in this mailing list post, written by Brian Degenhardt.

    - http://lists.digium.com/pipermail/asterisk-dev/2008-October/034700.html

   Specific project ideas in this area are listed here:

   a) Create a generic "data get" layer for Asterisk components to be able to
      expose data that they maintain.  Currently, modules implement specific
      code to implement CLI commands, manager interface actions, and so forth,
      while it would be much nicer to have this data available through a common
      interface.  For example, SNMP support has been added to Asterisk but is
      limited in what it can expose due to the lack of this interface.  This
      project would be to create the infrastructure for this data layer and some
      uses to prove its functionality.  Then, various parts of Asterisk could
      be converted as time permits.  Note that this may end up sharing some code
      with the "data put" interface in part b.

      Difficulty - 2
      Language   - C

   b) Create a generic "data put" layer for Asterisk components to allow
      external interfaces to update configuration items, as opposed to having
      to issue a full configuration reload to account for a single change.
      This project would involve writing the infrastructure and some basic usage
      to prove its functionality.  Various parts of Asterisk could be converted
      as time permits.  Note that this may end up sharing some code with the
      "data get" interface in part a.

      Difficulty - 2
      Language   - C

   c) Improve the performance of cache handling in the event core.  The event
      API in Asterisk provides a generic interface for subscribing to and
      publishing asynchronous events.  It also provides a caching mechanism for
      events that represent state changes.  So, to find out a state, you can
      pull it out of the event cache.  For example, the state of devices as used
      for presence is handled using this mechanism.  The data structures
      currently used for maintaining the cache are not optimal for performance
      when the cache gets large.  This project would be to write code to
      benchmark the performance of the caching mechanism, and then implement a
      new storage mechanism that is more efficient.

      Difficulty - 3
      Language   - C

   d) Develop a method for federating Asterisk servers using distributed events
      with a transport suitable for communication beyond a LAN.  The current
      event infrastructure includes ways to hook in and distribute events
      between servers.  There is a module which implements this, res_ais, but
      it is only suitable for federating servers on a high speed LAN.  This
      project would be to implement a new event distribution module using a
      protocol such as XMPP, or something else if deemed appropriate.

      Difficulty - 2
      Language   - C

   e) Implement a method that makes it very easy to add synchronous hooks 
      throughout the code base.  Hooks are arbitrary callbacks within the 
      internals of asterisk where external components can modify asterisk's 
      behavior.  While the dialplan allows applications to control much of the 
      asterisk behavior, hooks allow for business logic to be applied to 
      situations that are not associated with a call (eg: a sip registration 
      hook could allow time-governed registration period), or for situations 
      that occur during the execution of a dialplan application (eg: codec 
      negotiation hook to apply business logic to codecs proposed in the middle 
      of a Dial command, or a transfer hook to execute business logic when a 
      SIP REINVITE is received).

      Difficulty - 3
      Language   - C

2) This section contains projects related to Voicemail support in Asterisk.

   a) Extract the support for storage backends into an API to reduce code
      complexity and its ability to be reused.  The current Asterisk voicemail
      application supports storing voicemail on the filesystem, in a database
      via ODBC, and on an IMAP server.  All of the storage code should be pulled
      out into a form such that it makes the current app_voicemail easier to
      maintain, but also allows the backend storage code to be used in a next
      generation voicemail implementation, or potentially other things in
      Asterisk that would like to use these interfaces.

      Difficulty - 3
      Language   - C

   b) One feature that has been widely desired for Asterisk voicemail is the
      ability to customize menu layout.  This project would be to improve
      existing code, or develop a new voicemail application that supports
      customizable menu layout.  The app_minivm module currently in Asterisk
      is one way of approaching this project, which is to break up current
      Voicemail functionality into smaller applications to make it easier to
      build a custom voicemail system in the dialplan.  Luigi Rizzo had a
      student work on a project to create a new voicemail system that included
      these features that has some work left to be completed.

      Difficulty - 4
      Language   - C

3) This section includes projects related to improving the Asterisk console and
   logging interfaces.

   a) Improve the way "verbose logging" works in Asterisk.  Currently, the
      Asterisk console and logging system only supports a single verbose level.
      However, it would be extremely useful to allow a verbose setting per
      console, and per log file that verbose output is being sent to.

      Difficulty - 1
      Language   - C

   b) Improve Asterisk logging such that advanced filtering is available at the
      console so that output related to a single call is available without
      having to see the output for other calls.  Lack of support for debugging
      individual calls has been a long standing difficulty for Asterisk
      administrators on busy systems.

      Difficulty - 1
      Language   - C
   
   c) In addition to being used as an administrative interface, the Asterisk
      console can also be used for making calls using the system audio and
      video interfaces.  In this sense, Asterisk can be used as a highly
      configurable console based soft phone.  Luigi Rizzo and some of his
      students have put a lot of work into adding video support to the Asterisk
      console when being used as a softphone.  This project would be to work
      with Luigi to continue this effort to improve the GUI that opens up for
      handling calls.  This would involve adding some buttons to handle calls
      and contact lists, controlling the active audio source for a call, and
      adding standard telephone buttons.

      Difficulty - 3
      Language   - C

4) This section includes projects related to internationalization.

   a) One of the projects that Luigi Rizzo previously worked on was replacing
      the "say.c" code that implemented language support for saying dates and
      times in C code, with an implementation that allows additional languages
      to be added via a configuration file with special syntax.  This project
      would be to work with Luigi to enhance this code to better handle
      languages where words change in multiple ways depending on gender and
      number, and also adding more languages to the sample configuration file
      that is distributed with Asterisk.

      Difficulty - 3
      Language   - C

5) This section includes projects related to portability to other operating
   systems.

   a) Asterisk has been ported to cygwin a couple of times over the years, but
      tends to bitrot due to lack of continued support by developers.  This
      project would be to revisit the current state of cygwin support and get
      it working well in Asterisk 1.6.  It should already compile, or be very
      close to it.  However, there is some testing to be done to ensure that
      things work properly.  Also, it would be most excellent to get a console
      channel driver functioning in cygwin (chan_oss, chan_console, etc.).

      Difficulty - 3
      Language   - C

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

================================================================================
================================================================================