There are lots of tidbits that don't easily fall into a specific category for developers, so here are some miscellaneous and somewhat random tips that have been gleaned from conversations with the FreeSWITCH™ authors.
Click here to expand Table of Contents
Apache Portable Runtime
Be sure to familiarize yourself with the Apache Portable Runtime (APR) - it contains lots of handy functions, data types, objects, etc. that make FreeSWITCH™ development a bit easier and more consistent across platforms. To prevent namespace collisions,
apr_ objects have been mapped to the
switch_ namespace. Please use the
switch_ versions of
apr_ objects. (Note: there is an exception to this -
**switch_file_open** in place of
**switch_file_read** in place of
**switch_file_write** in place of
**switch_file_close** in place of
You get the idea. See
switch_apr.c for LOTS of great detail.
When writing your own application within FreeSWITCH™, you can use
switch_channel_set_private to create a hash in which you can put data specific to your own application. Example:
switch_channel_set_private(channel, "mydata", some_pointer_to_my_data);
some_pointer_to_my_data = switch_channel_get_private(channel, "mydata");
When debug printing, consider using alternatives to raw
**printf()** calls. Raw
printf() calls require a STDOUT which is not always available, i.e. when running as a service under Windows or under certain circumstances when running as a daemon under Linux/Unix. Better options are available:
*** switch_log_printf()**- the most generic way to print a debug message. Allows for debug levels and printing messages to disk files, remote apps, etc. See here and here for more information.
**stream->write_function()**- more memory efficient; this avoids a
**malloc()**call and therefore has a lesser impact on program performance. See here for more information.