Freeswitch-svn
Threads by month
- ----- 2026 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- 12151 discussions
[commit] r6417 - in freeswitch/trunk/src: . include mod/applications/mod_voicemail mod/languages/mod_spidermonkey mod/xml_int/mod_xml_rpc
by Freeswitch SVN 28 Nov '07
by Freeswitch SVN 28 Nov '07
28 Nov '07
Author: anthm
Date: Wed Nov 28 14:56:25 2007
New Revision: 6417
Modified:
freeswitch/trunk/src/include/switch_apr.h
freeswitch/trunk/src/include/switch_console.h
freeswitch/trunk/src/include/switch_module_interfaces.h
freeswitch/trunk/src/include/switch_types.h
freeswitch/trunk/src/include/switch_utils.h
freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c
freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c
freeswitch/trunk/src/switch_apr.c
freeswitch/trunk/src/switch_console.c
freeswitch/trunk/src/switch_core.c
freeswitch/trunk/src/switch_xml.cpp
Log:
rss feeds of your voicemail
Modified: freeswitch/trunk/src/include/switch_apr.h
==============================================================================
--- freeswitch/trunk/src/include/switch_apr.h (original)
+++ freeswitch/trunk/src/include/switch_apr.h Wed Nov 28 14:56:25 2007
@@ -763,6 +763,8 @@
SWITCH_DECLARE(switch_status_t) switch_file_exists(const char *filename, switch_memory_pool_t *pool);
+SWITCH_DECLARE(switch_status_t) switch_directory_exists(const char *dirname, switch_memory_pool_t *pool);
+
SWITCH_DECLARE(switch_status_t) switch_dir_make(const char *path, switch_fileperms_t perm,
switch_memory_pool_t *pool);
SWITCH_DECLARE(switch_status_t) switch_dir_make_recursive(const char *path, switch_fileperms_t perm,
Modified: freeswitch/trunk/src/include/switch_console.h
==============================================================================
--- freeswitch/trunk/src/include/switch_console.h (original)
+++ freeswitch/trunk/src/include/switch_console.h Wed Nov 28 14:56:25 2007
@@ -49,6 +49,7 @@
s.end = s.data; \
s.data_size = SWITCH_CMD_CHUNK_LEN; \
s.write_function = switch_console_stream_write; \
+ s.raw_write_function = switch_console_stream_raw_write; \
s.alloc_len = SWITCH_CMD_CHUNK_LEN; \
s.alloc_chunk = SWITCH_CMD_CHUNK_LEN
@@ -63,6 +64,8 @@
SWITCH_DECLARE(void) switch_console_printf(switch_text_channel_t channel, const char *file, const char *func, int line,
const char *fmt, ...) PRINTF_FUNCTION(5, 6);
+SWITCH_DECLARE(switch_status_t) switch_console_stream_raw_write(switch_stream_handle_t *handle, uint8_t *data, switch_size_t datalen);
+
/*!
\brief A method akin to printf for dealing with api streams
*/
Modified: freeswitch/trunk/src/include/switch_module_interfaces.h
==============================================================================
--- freeswitch/trunk/src/include/switch_module_interfaces.h (original)
+++ freeswitch/trunk/src/include/switch_module_interfaces.h Wed Nov 28 14:56:25 2007
@@ -81,6 +81,7 @@
struct switch_stream_handle {
switch_stream_handle_write_function_t write_function;
+ switch_stream_handle_raw_write_function_t raw_write_function;
void *data;
void *end;
switch_size_t data_size;
Modified: freeswitch/trunk/src/include/switch_types.h
==============================================================================
--- freeswitch/trunk/src/include/switch_types.h (original)
+++ freeswitch/trunk/src/include/switch_types.h Wed Nov 28 14:56:25 2007
@@ -1090,6 +1090,7 @@
typedef switch_status_t (*switch_state_handler_t) (switch_core_session_t *);
typedef struct switch_stream_handle switch_stream_handle_t;
typedef switch_status_t (*switch_stream_handle_write_function_t) (switch_stream_handle_t *handle, const char *fmt, ...);
+typedef switch_status_t (*switch_stream_handle_raw_write_function_t) (switch_stream_handle_t *handle, uint8_t *data, switch_size_t datalen);
typedef switch_status_t (*switch_api_function_t) (const char *cmd, switch_core_session_t *session, switch_stream_handle_t *stream);
Modified: freeswitch/trunk/src/include/switch_utils.h
==============================================================================
--- freeswitch/trunk/src/include/switch_utils.h (original)
+++ freeswitch/trunk/src/include/switch_utils.h Wed Nov 28 14:56:25 2007
@@ -132,7 +132,7 @@
*/
#define is_dtmf(key) ((key > 47 && key < 58) || (key > 64 && key < 69) || (key > 96 && key < 101) || key == 35 || key == 42 || key == 87 || key == 119)
-
+#define end_of(_s) *(_s + strlen(_s) - 1)
/*!
\brief Test for the existance of a flag on an arbitary object
\param obj the object to test
Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original)
+++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Wed Nov 28 14:56:25 2007
@@ -2119,9 +2119,423 @@
}
+#define VOICEMAIL_SYNTAX "rss [<host> <port> <uri> <user> <domain>]"
+
+struct holder {
+ vm_profile_t *profile;
+ switch_memory_pool_t *pool;
+ switch_stream_handle_t *stream;
+ switch_xml_t xml;
+ switch_xml_t x_item;
+ switch_xml_t x_channel;
+ int items;
+ char *user;
+ char *domain;
+ char *host;
+ char *port;
+ char *uri;
+};
+
+
+static int del_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+ if (argc > 8) {
+ unlink(argv[8]);
+ }
+ return 0;
+}
+
+static int play_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+ switch_file_t *fd;
+ struct holder *holder = (struct holder *) pArg;
+ char *fname, *ext;
+ switch_size_t flen;
+ uint8_t chunk[1024];
+ const char *mime_type = "audio/inline", *new_type;
+
+ if ((fname = strrchr(argv[8], '/'))) {
+ fname++;
+ } else {
+ fname = argv[8];
+ }
+
+ if ((ext = strrchr(fname, '.'))) {
+ ext++;
+ if ((new_type = switch_core_mime_ext2type(ext))) {
+ mime_type = new_type;
+ }
+ }
+
+ if (switch_file_open(&fd, argv[8], SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE, holder->pool) == SWITCH_STATUS_SUCCESS) {
+ flen = switch_file_get_size(fd);
+ holder->stream->write_function(holder->stream, "Content-type: %s\n", mime_type);
+ holder->stream->write_function(holder->stream, "Content-length: %ld\n\n", (long)flen);
+ for(;;) {
+ switch_status_t status;
+
+ flen = sizeof(chunk);
+ status = switch_file_read(fd, chunk, &flen);
+ if (status != SWITCH_STATUS_SUCCESS || flen == 0) {
+ break;
+ }
+
+ holder->stream->raw_write_function(holder->stream, chunk, flen);
+
+ }
+
+ switch_file_close(fd);
+ }
+
+ return 0;
+}
+
+static void do_play(vm_profile_t *profile, char *user, char *domain, char *file, switch_stream_handle_t *stream)
+{
+ char *sql;
+ struct holder holder;
+
+ sql = switch_mprintf("update voicemail_data set read_epoch=%ld where user='%s' and domain='%s' and file_path like '%%%s'",
+ (long)time(NULL), user, domain, file);
+
+ vm_execute_sql(profile, sql, profile->mutex);
+ free(sql);
+
+ sql = switch_mprintf("select * from voicemail_data where user='%s' and domain='%s' and file_path like '%%%s'", user, domain, file);
+ memset(&holder, 0, sizeof(holder));
+ holder.profile = profile;
+ holder.stream = stream;
+ switch_core_new_memory_pool(&holder.pool);
+ vm_execute_sql_callback(profile, profile->mutex, sql, play_callback, &holder);
+ switch_core_destroy_memory_pool(&holder.pool);
+ switch_safe_free(sql);
+
+
+}
+
+
+static void do_del(vm_profile_t *profile, char *user, char *domain, char *file, switch_stream_handle_t *stream)
+{
+ char *sql;
+ struct holder holder;
+ char *uri, *host, *port;
+
+ host = port = uri = NULL;
+
+ if (stream->event) {
+ host = switch_event_get_header(stream->event, "http-host");
+ port = switch_event_get_header(stream->event, "http-port");
+ uri = switch_event_get_header(stream->event, "http-uri");
+ }
+
+ sql = switch_mprintf("select * from voicemail_data where user='%s' and domain='%s' and file_path like '%%%s'", user, domain, file);
+ memset(&holder, 0, sizeof(holder));
+ holder.profile = profile;
+ holder.stream = stream;
+ vm_execute_sql_callback(profile, profile->mutex, sql, del_callback, &holder);
+
+ switch_safe_free(sql);
+ sql = switch_mprintf("delete from voicemail_data where user='%s' and domain='%s' and file_path like '%%%s'", user, domain, file);
+ vm_execute_sql(profile, sql, profile->mutex);
+ free(sql);
+
+ if (host && port && uri) {
+ stream->write_function(stream,"Content-type: text/html\n\n<h2>Message Deleted</h2>\n"
+ "<META http-equiv=\"refresh\" content=\"1;URL=http://%s:%s%s/rss\">", host, port, uri);
+ }
+
+}
+
+static int rss_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+ struct holder *holder = (struct holder *) pArg;
+ switch_xml_t x_tmp, x_link;
+ char *tmp, *del;
+ switch_time_exp_t tm;
+ char create_date[80] = "";
+ char read_date[80] = "";
+ char rss_date[80] = "";
+ switch_size_t retsize;
+ const char *mime_type = "audio/inline", *new_type;
+ char *ext;
+ char *fname;
+ switch_size_t flen;
+ switch_file_t *fd;
+ long l_created = 0;
+ long l_read = 0;
+ long l_duration = 0;
+ switch_core_time_duration_t duration;
+ char duration_str[80];
+ const char *fmt = "%a, %e %b %Y %T %z";
+ char heard[80];
+
+ if (argc > 0) {
+ l_created = atol(argv[0]) * 1000000;
+ }
+
+ if (argc > 1) {
+ l_read = atol(argv[1]) * 1000000;
+ }
+
+ if (argc > 9) {
+ l_duration = atol(argv[9]) * 1000000;
+ }
+
+ switch_core_measure_time(l_duration, &duration);
+ duration.day += duration.yr * 365;
+ duration.hr += duration.day * 24;
+
+ snprintf(duration_str, sizeof(duration_str), "%.2u:%.2u:%.2u",
+ duration.hr,
+ duration.min,
+ duration.sec
+ );
+
+ if (l_created) {
+ switch_time_exp_lt(&tm, l_created);
+ switch_strftime(create_date, &retsize, sizeof(create_date), fmt, &tm);
+ switch_strftime(rss_date, &retsize, sizeof(create_date), fmt, &tm);
+ }
+
+ if (l_read) {
+ switch_time_exp_lt(&tm, l_read);
+ switch_strftime(read_date, &retsize, sizeof(read_date), fmt, &tm);
+ }
+
+ holder->x_item = switch_xml_add_child_d(holder->x_channel, "item", holder->items++);
+
+ x_tmp = switch_xml_add_child_d(holder->x_item, "title", 0);
+ tmp = switch_mprintf("Message from %s %s on %s", argv[5], argv[6], create_date);
+ switch_xml_set_txt_d(x_tmp, tmp);
+ free(tmp);
+
+ x_tmp = switch_xml_add_child_d(holder->x_item, "description", 0);
+
+ snprintf(heard, sizeof(heard), switch_strlen_zero(read_date) ? "never" : read_date);
+
+ if ((fname = strrchr(argv[8], '/'))) {
+ fname++;
+ } else {
+ fname = argv[8];
+ }
+
+ del = switch_mprintf("http://%s:%s%s/del/%s", holder->host, holder->port, holder->uri, fname);
+ x_link = switch_xml_add_child_d(holder->x_item, "fsvm:rmlink", 0);
+ switch_xml_set_txt_d(x_link, del);
+
+
+ tmp = switch_mprintf("<![CDATA[Priority: %s<br>Last Heard: %s<br>Duration: %s<br><a href=%s>Delete This Message</a>]]>",
+ strcmp(argv[10], URGENT_FLAG_STRING) ? "normal" : "urgent", heard, duration_str, del);
+
+
+ switch_xml_set_txt_d(x_tmp, tmp);
+ free(tmp);
+ free(del);
+
+ x_tmp = switch_xml_add_child_d(holder->x_item, "pubDate", 0);
+ switch_xml_set_txt_d(x_tmp, rss_date);
+
+ x_tmp = switch_xml_add_child_d(holder->x_item, "itunes:duration", 0);
+ switch_xml_set_txt_d(x_tmp, duration_str);
+
+
+ tmp = switch_mprintf("http://%s:%s%s/get/%s", holder->host, holder->port, holder->uri, fname);
+
+ x_tmp = switch_xml_add_child_d(holder->x_item, "guid", 0);
+ switch_xml_set_txt_d(x_tmp, tmp);
+
+ x_link = switch_xml_add_child_d(holder->x_item, "link", 0);
+ switch_xml_set_txt_d(x_link, tmp);
+
+ x_tmp = switch_xml_add_child_d(holder->x_item, "enclosure", 0);
+ switch_xml_set_attr_d(x_tmp, "url", tmp);
+ free(tmp);
+
+
+
+ if (switch_file_open(&fd, argv[8], SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE, holder->pool) == SWITCH_STATUS_SUCCESS) {
+ flen = switch_file_get_size(fd);
+ tmp = switch_mprintf("%ld", (long) flen);
+ switch_xml_set_attr_d(x_tmp, "length", tmp);
+ free(tmp);
+ switch_file_close(fd);
+ }
+
+ if ((ext = strrchr(fname, '.'))) {
+ ext++;
+ if ((new_type = switch_core_mime_ext2type(ext))) {
+ mime_type = new_type;
+ }
+ }
+ switch_xml_set_attr_d(x_tmp, "type", mime_type);
+
+ return 0;
+}
+
+
+static void do_rss(vm_profile_t *profile, char *user, char *domain, char *host, char *port, char *uri, switch_stream_handle_t *stream)
+{
+
+ struct holder holder;
+ switch_xml_t x_tmp;
+ char *sql, *xmlstr;
+ char *tmp = NULL;
+
+ stream->write_function(stream, "Content-type: text/xml\n\n");
+ memset(&holder, 0, sizeof(holder));
+ holder.profile = profile;
+ holder.stream = stream;
+ holder.xml = switch_xml_new("rss");
+ holder.user = user;
+ holder.domain = domain;
+ holder.host = host;
+ holder.port = port;
+ holder.uri = uri;
+
+ switch_core_new_memory_pool(&holder.pool);
+ assert(holder.xml);
+
+ switch_xml_set_attr_d(holder.xml, "xmlns:itunes", "http://www.itunes.com/dtds/podcast-1.0.dtd");
+ switch_xml_set_attr_d(holder.xml, "xmlns:fsvm", "http://www.freeswitch.org/dtd/fsvm.dtd");
+ switch_xml_set_attr_d(holder.xml, "version", "2.0");
+ holder.x_channel = switch_xml_add_child_d(holder.xml, "channel", 0);
+
+ x_tmp = switch_xml_add_child_d(holder.x_channel, "title", 0);
+ tmp = switch_mprintf("FreeSWITCH Voicemail for %s@%s", user, domain);
+ switch_xml_set_txt_d(x_tmp, tmp);
+ free(tmp);
+
+ x_tmp = switch_xml_add_child_d(holder.x_channel, "link", 0);
+ switch_xml_set_txt_d(x_tmp, "http://www.freeswitch.org");
+
+ x_tmp = switch_xml_add_child_d(holder.x_channel, "description", 0);
+ switch_xml_set_txt_d(x_tmp, "http://www.freeswitch.org");
+
+ x_tmp = switch_xml_add_child_d(holder.x_channel, "ttl", 0);
+ switch_xml_set_txt_d(x_tmp, "15");
+
+
+ sql = switch_mprintf("select * from voicemail_data where user='%s' and domain='%s' order by read_flags", user, domain);
+ vm_execute_sql_callback(profile, profile->mutex, sql, rss_callback, &holder);
+
+ xmlstr = switch_xml_toxml(holder.xml);
+
+ stream->write_function(stream, "%s", xmlstr);
+
+ switch_safe_free(sql);
+ switch_safe_free(xmlstr);
+ switch_xml_free(holder.xml);
+ switch_core_destroy_memory_pool(&holder.pool);
+}
+
+SWITCH_STANDARD_API(voicemail_api_function)
+{
+ int argc = 0;
+ char *mydata = NULL, *argv[6];
+ char *host = NULL, *port = NULL, *uri = NULL;
+ char *user = NULL, *domain = NULL;
+ int ct = 0;
+ vm_profile_t *profile = NULL;
+ char *path_info = NULL;
+ int rss = 0, xarg = 0;
+
+ if (stream->event) {
+ host = switch_event_get_header(stream->event, "http-host");
+ port = switch_event_get_header(stream->event, "http-port");
+ uri = switch_event_get_header(stream->event, "http-uri");
+ user = switch_event_get_header(stream->event, "freeswitch-user");
+ domain = switch_event_get_header(stream->event, "freeswitch-domain");
+ path_info = switch_event_get_header(stream->event, "http-path-info");
+ }
+
+ if (!switch_strlen_zero(cmd)) {
+ mydata = strdup(cmd);
+ assert(mydata);
+ argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+ }
+
+ if (argc > 0) {
+ if (!strcasecmp(argv[0], "rss")) {
+ rss++;
+ xarg++;
+ }
+ }
+
+ if (!host) {
+ if (argc - rss < 5) {
+ goto error;
+ }
+ host = argv[xarg++];
+ port = argv[xarg++];
+ uri = argv[xarg++];
+ user = argv[xarg++];
+ domain = argv[xarg++];
+ }
+
+ if (!(host && port && uri && user && domain)) {
+ goto error;
+ }
+
+ profile = switch_core_hash_find(globals.profile_hash, domain);
+
+ if (!profile) {
+ profile = switch_core_hash_find(globals.profile_hash, "default");
+ }
+
+ if (!profile) {
+ switch_hash_index_t *hi;
+ void *val;
+
+ for (hi = switch_hash_first(NULL, globals.profile_hash); hi; hi = switch_hash_next(hi)) {
+ switch_hash_this(hi, NULL, NULL, &val);
+ profile = (vm_profile_t *) val;
+ break;
+ }
+ }
+
+ if (!profile) {
+ stream->write_function(stream, "Can't find profile.\n");
+ goto error;
+ }
+
+
+ if (path_info) {
+ if (!strncasecmp(path_info, "get/", 4)) {
+ do_play(profile, user, domain, path_info + 4, stream);
+ } else if (!strncasecmp(path_info, "del/", 4)) {
+ do_del(profile, user, domain, path_info + 4, stream);
+ }
+ }
+
+ if (rss || (path_info && !strncasecmp(path_info, "rss", 3))) {
+ do_rss(profile, user, domain, host, port, uri, stream);
+ }
+
+ goto done;
+
+ error:
+ if (host) {
+ if (!ct) {
+ stream->write_function(stream, "Content-type: text/html\n\n<h2>");
+ }
+ }
+ stream->write_function(stream, "Error: %s\n", VOICEMAIL_SYNTAX);
+
+ done:
+
+ switch_safe_free(mydata);
+
+
+ return SWITCH_STATUS_SUCCESS;
+
+
+}
+
+
SWITCH_MODULE_LOAD_FUNCTION(mod_voicemail_load)
{
switch_application_interface_t *app_interface;
+ switch_api_interface_t *commands_api_interface;
switch_status_t status;
if ((status = load_config()) != SWITCH_STATUS_SUCCESS) {
@@ -2137,6 +2551,8 @@
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
return SWITCH_STATUS_GENERR;
}
+
+ SWITCH_ADD_API(commands_api_interface, "voicemail", "voicemail", voicemail_api_function, VOICEMAIL_SYNTAX);
/* indicate that the module should continue to be loaded */
return SWITCH_STATUS_NOUNLOAD;
Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
==============================================================================
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Wed Nov 28 14:56:25 2007
@@ -3339,7 +3339,16 @@
SWITCH_STANDARD_API(jsapi_function)
{
struct request_obj ro = {0};
+ char *path_info = NULL;
+ if (stream->event) {
+ path_info = switch_event_get_header(stream->event, "http-path-info");
+ }
+
+ if (switch_strlen_zero(cmd) && path_info) {
+ cmd = path_info;
+ }
+
if (switch_strlen_zero(cmd)) {
stream->write_function(stream, "USAGE: %s\n", jsapi_interface.syntax);
return SWITCH_STATUS_SUCCESS;
Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c
==============================================================================
--- freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c (original)
+++ freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c Wed Nov 28 14:56:25 2007
@@ -30,6 +30,7 @@
*
*/
#include <switch.h>
+#include <switch_version.h>
#ifdef _MSC_VER
#pragma warning(disable:4142)
#endif
@@ -117,6 +118,14 @@
}
+static switch_status_t http_stream_raw_write(switch_stream_handle_t *handle, uint8_t *data, switch_size_t datalen)
+{
+ TSession *r = handle->data;
+
+ return HTTPWrite(r, (char *)data, (uint32_t) datalen) ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
+
+}
+
static switch_status_t http_stream_write(switch_stream_handle_t *handle, const char *fmt, ...)
{
va_list ap;
@@ -146,7 +155,8 @@
char *pass;
const char *mypass1 = NULL, *mypass2 = NULL;
switch_xml_t x_domain, x_domain_root = NULL, x_user, x_params, x_param;
-
+ const char *box;
+
p = RequestHeaderValue(r, "authorization");
if (p) {
@@ -162,16 +172,21 @@
*pass++ = '\0';
}
- if (switch_xml_locate_user(user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) {
+ if (switch_xml_locate_user(user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, "mailbox=check") != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", user, domain_name);
goto fail;
}
-
+
+ ResponseAddField(r, "freeswitch-user", user);
+ ResponseAddField(r, "freeswitch-domain", domain_name);
+
+ box = switch_xml_attr_soft(x_user, "mailbox");
+
if (!(x_params = switch_xml_child(x_user, "params"))) {
goto authed;
}
-
+
for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
const char *var = switch_xml_attr_soft(x_param, "name");
const char *val = switch_xml_attr_soft(x_param, "value");
@@ -184,23 +199,53 @@
ResponseAddField(r, (char *)var, (char *)val);
}
}
-
- sprintf(z, "%s:%s", user, mypass1);
- Base64Encode(z, t);
- if (!strcmp(p, t)) {
- r->user=strdup(user);
+ if (!(mypass1 && mypass2)) {
+ r->user=strdup(user);
goto authed;
- }
+ } else {
+ if (mypass1) {
+ sprintf(z, "%s:%s", user, mypass1);
+ Base64Encode(z, t);
+
+ if (!strcmp(p, t)) {
+ r->user=strdup(user);
+ goto authed;
+ }
+ }
- sprintf(z, "%s:%s", user, mypass2);
- Base64Encode(z, t);
+ if (mypass2) {
+ sprintf(z, "%s:%s", user, mypass2);
+ Base64Encode(z, t);
- if (!strcmp(p, t)) {
- r->user=strdup(user);
- goto authed;
+ if (!strcmp(p, t)) {
+ r->user=strdup(user);
+ goto authed;
+ }
+ }
+
+ if (box) {
+ if (mypass1) {
+ sprintf(z, "%s:%s", box, mypass1);
+ Base64Encode(z, t);
+
+ if (!strcmp(p, t)) {
+ r->user=strdup(box);
+ goto authed;
+ }
+ }
+
+ if (mypass2) {
+ sprintf(z, "%s:%s", box, mypass2);
+ Base64Encode(z, t);
+
+ if (!strcmp(p, t)) {
+ r->user=strdup(box);
+ goto authed;
+ }
+ }
+ }
}
-
goto fail;
@@ -242,15 +287,64 @@
*e++ = '\0';
}
+ if (!strcmp(domain_name, "this")) {
+ free(domain_name);
+ domain_name = strdup(r->host);
+ }
+
ret = !http_directory_auth(r, domain_name);
free(domain_name);
} else {
- if (globals.realm) {
- if (!RequestAuth(r, globals.realm, globals.user, globals.pass)) {
- ret = TRUE;
+ char tmp[512];
+ const char *list[2] = {"index.html", "index.txt"};
+ int x;
+
+ if (!strncmp(r->uri, "/pub", 4)) {
+ char *p = r->uri;
+ char *new_uri = p + 4;
+ if (!new_uri) {
+ new_uri = "/";
+ }
+
+ snprintf(tmp, sizeof(tmp), "%s%s",
+ SWITCH_GLOBAL_dirs.htdocs_dir,
+ new_uri
+ );
+
+
+ if (switch_directory_exists(tmp, NULL) == SWITCH_STATUS_SUCCESS) {
+ for (x = 0; x < 2; x++) {
+ snprintf(tmp, sizeof(tmp), "%s%s%s%s",
+ SWITCH_GLOBAL_dirs.htdocs_dir,
+ new_uri,
+ end_of(new_uri) == *SWITCH_PATH_SEPARATOR ? "" : SWITCH_PATH_SEPARATOR,
+ list[x]
+ );
+
+ if (switch_file_exists(tmp, NULL) == SWITCH_STATUS_SUCCESS) {
+ snprintf(tmp, sizeof(tmp), "%s%s%s",
+ new_uri,
+ end_of(new_uri) == '/' ? "" : "/",
+ list[x]
+ );
+ new_uri = tmp;
+ break;
+ }
+ }
+ }
+
+ r->uri = strdup(new_uri);
+ free(p);
+
+ } else {
+ if (globals.realm && strncmp(r->uri, "/pub", 4)) {
+ if (!RequestAuth(r, globals.realm, globals.user, globals.pass)) {
+ ret = TRUE;
+ }
}
}
+
}
return ret;
@@ -265,56 +359,71 @@
int i, j = 0;
TTableItem *ti;
char *dup = NULL;
+ int auth = 0;
+ char *fs_user = NULL, *fs_domain = NULL;
+ char *path_info = NULL;
+ abyss_bool ret = TRUE;
stream.data = r;
stream.write_function = http_stream_write;
+ stream.raw_write_function = http_stream_raw_write;
if ((command = strstr(r->uri, "/api/"))) {
command += 5;
} else {
- return FALSE;
+ ret = FALSE;
+ goto end;
+ }
+
+ if ((path_info = strchr(command, '/'))) {
+ *path_info++ = '\0';
+ }
+
+ if (strncmp(r->uri, "/domains/", 9)) {
+ goto auth;
}
for (i=0;i<r->response_headers.size;i++) {
ti=&r->response_headers.item[i];
- if (!strcasecmp(ti->name, "http-allowed-api")) {
+ if (!strcasecmp(ti->name, "freeswitch-user")) {
+ fs_user = ti->value;
+ } else if (!strcasecmp(ti->name, "freeswitch-domain")) {
+ fs_domain = ti->value;
+ } else if (!strcasecmp(ti->name, "http-allowed-api")) {
int argc, x;
char *argv[256] = { 0 };
j++;
if (!strcasecmp(ti->value, "any")) {
- goto auth;
- }
-
- if (!strcasecmp(ti->value, "none")) {
- goto unauth;
+ auth++;
}
dup = strdup(ti->value);
argc = switch_separate_string(dup, ',', argv, (sizeof(argv) / sizeof(argv[0])));
-
+
for (x = 0; x < argc; x++) {
if (!strcasecmp(command, argv[x])) {
- goto auth;
+ auth++;
}
}
-
- goto unauth;
}
}
- if (r->user && !j) {
- goto unauth;
+ if (!switch_strlen_zero(r->user) && !j) {
+ auth = 0;
+ }
+
+ if (auth) {
+ goto auth;
}
- goto auth;
-
- unauth:
+ //unauth:
ResponseStatus(r, 403);
ResponseError(r);
switch_safe_free(dup);
- return TRUE;
+ ret = TRUE;
+ goto end;
auth:
@@ -322,7 +431,12 @@
if (switch_event_create(&stream.event, SWITCH_EVENT_API) == SWITCH_STATUS_SUCCESS) {
const char * const content_length = RequestHeaderValue(r, "content-length");
-
+ if (fs_user)
+ switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "FreeSWITCH-User", "%s", fs_user);
+ if (fs_domain)
+ switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "FreeSWITCH-Domain", "%s", fs_domain);
+ if (path_info)
+ switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-Path-Info", "%s", path_info);
if (r->uri)
switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-URI", "%s", r->uri);
if (r->query)
@@ -434,7 +548,7 @@
}
/* Generation of the server field */
- ResponseAddField(r,"Server", SERVER_HVERSION);
+ ResponseAddField(r,"Server", "FreeSWITCH-" SWITCH_VERSION_FULL "-mod_xml_rpc");
for (i=0;i<r->response_headers.size;i++) {
ti=&r->response_headers.item[i];
@@ -453,7 +567,10 @@
}
//HTTPWriteEnd(r);
- return TRUE;
+
+ end:
+
+ return ret;
}
Modified: freeswitch/trunk/src/switch_apr.c
==============================================================================
--- freeswitch/trunk/src/switch_apr.c (original)
+++ freeswitch/trunk/src/switch_apr.c Wed Nov 28 14:56:25 2007
@@ -364,6 +364,28 @@
return apr_file_info_get(&finfo, APR_FINFO_SIZE, thefile) == SWITCH_STATUS_SUCCESS ? (switch_size_t)finfo.size : 0;
}
+SWITCH_DECLARE(switch_status_t) switch_directory_exists(const char *dirname, switch_memory_pool_t *pool)
+{
+ apr_dir_t *dir_handle;
+ switch_memory_pool_t *our_pool = NULL;
+ switch_status_t status;
+
+ if (!pool) {
+ switch_core_new_memory_pool(&our_pool);
+ pool = our_pool;
+ }
+
+ if ((status = apr_dir_open(&dir_handle, dirname, pool)) == APR_SUCCESS) {
+ apr_dir_close(dir_handle);
+ }
+
+ if (our_pool) {
+ switch_core_destroy_memory_pool(&our_pool);
+ }
+
+ return status;
+}
+
SWITCH_DECLARE(switch_status_t) switch_file_exists(const char *filename, switch_memory_pool_t *pool)
{
int32_t wanted = APR_FINFO_TYPE;
Modified: freeswitch/trunk/src/switch_console.c
==============================================================================
--- freeswitch/trunk/src/switch_console.c (original)
+++ freeswitch/trunk/src/switch_console.c Wed Nov 28 14:56:25 2007
@@ -34,6 +34,17 @@
#include <switch_version.h>
#define CMD_BUFLEN 1024;
+SWITCH_DECLARE(switch_status_t) switch_console_stream_raw_write(switch_stream_handle_t *handle, uint8_t *data, switch_size_t datalen)
+{
+ FILE *out = switch_core_get_console();
+
+ if (out) {
+ fwrite(data, datalen, 1, out);
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ return SWITCH_STATUS_FALSE;
+}
SWITCH_DECLARE(switch_status_t) switch_console_stream_write(switch_stream_handle_t *handle, const char *fmt, ...)
{
Modified: freeswitch/trunk/src/switch_core.c
==============================================================================
--- freeswitch/trunk/src/switch_core.c (original)
+++ freeswitch/trunk/src/switch_core.c Wed Nov 28 14:56:25 2007
@@ -551,6 +551,9 @@
SWITCH_DECLARE(const char *) switch_core_mime_ext2type(const char *ext)
{
+ if (!ext) {
+ return NULL;
+ }
return (const char *) switch_core_hash_find(runtime.mime_types, ext);
}
Modified: freeswitch/trunk/src/switch_xml.cpp
==============================================================================
--- freeswitch/trunk/src/switch_xml.cpp (original)
+++ freeswitch/trunk/src/switch_xml.cpp Wed Nov 28 14:56:25 2007
@@ -1457,7 +1457,8 @@
static char *switch_xml_ampencode(const char *s, switch_size_t len, char **dst, switch_size_t *dlen, switch_size_t *max, short a)
{
const char *e = NULL;
-
+ int immune = 0;
+
if (len) {
e = s + len;
}
@@ -1466,13 +1467,24 @@
while (*dlen + 10 > *max)
*dst = (char *)realloc(*dst, *max += SWITCH_XML_BUFSIZE);
- switch (*s) {
+ if (immune) {
+ if (*s == '\0') {
+ return *dst;
+ }
+ (*dst)[(*dlen)++] = *s;
+ } else
+ switch (*s) {
case '\0':
return *dst;
case '&':
*dlen += sprintf(*dst + *dlen, "&");
break;
case '<':
+ if (*(s+1) == '!') {
+ (*dst)[(*dlen)++] = *s;
+ immune++;
+ break;
+ }
*dlen += sprintf(*dst + *dlen, "<");
break;
case '>':
1
0
Author: cypromis
Date: Tue Nov 27 17:51:17 2007
New Revision: 6416
Added:
freeswitch/trunk/debian/compat
freeswitch/trunk/debian/conffiles
freeswitch/trunk/debian/default/
freeswitch/trunk/debian/default/freeswitch
freeswitch/trunk/debian/dirs
freeswitch/trunk/debian/freeswitch.1
freeswitch/trunk/debian/freeswitch.init (contents, props changed)
freeswitch/trunk/debian/freeswitch.monitrc
freeswitch/trunk/debian/postinst
freeswitch/trunk/debian/postrm
freeswitch/trunk/debian/preinst
Modified:
freeswitch/trunk/debian/changelog
freeswitch/trunk/debian/control
freeswitch/trunk/debian/copyright
freeswitch/trunk/debian/rules
Log:
Added configuration
added initscripts
added feeswitch user
added monit configuration
changed ownership to freeswitch:daemon
handle with care ... should work but a change in trunk can kill it any time :)
Modified: freeswitch/trunk/debian/changelog
==============================================================================
--- freeswitch/trunk/debian/changelog (original)
+++ freeswitch/trunk/debian/changelog Tue Nov 27 17:51:17 2007
@@ -1,3 +1,21 @@
+freeswitch (1.0~beta2-2) unstable; urgency=low
+
+ * Additional scripts for changing the user to freeswitch
+ Added Startup Scripts
+ Monit integration
+ Settings file for integration into init
+ init.d file
+ added user freeswitch to own and run all off freeswitch
+ cleaned up config file control
+
+ -- Michal Bielicki <michal.bielicki(a)voiceworks.pl> Tue, 27 Nov 2007 13:20:21 +0100
+
+freeswitch (1.0~beta2-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Paul van Genderen <paulvg(a)member.fsf.org> Wed, 17 Oct 2007 19:32:09 +0200
+
freeswitch (1.0~beta1-1) unstable; urgency=low
* New packages.
Added: freeswitch/trunk/debian/compat
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/compat Tue Nov 27 17:51:17 2007
@@ -0,0 +1 @@
+5
Added: freeswitch/trunk/debian/conffiles
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/conffiles Tue Nov 27 17:51:17 2007
@@ -0,0 +1,50 @@
+/opt/freeswitch/conf/default_context_old.xml
+/opt/freeswitch/conf/extensions.conf
+/opt/freeswitch/conf/freeswitch.xml
+/opt/freeswitch/conf/mime.types
+/opt/freeswitch/conf/vars.xml
+/opt/freeswitch/conf/autoload_configs/alsa.conf.xml
+/opt/freeswitch/conf/autoload_configs/cdr.conf.xml
+/opt/freeswitch/conf/autoload_configs/conference.conf.xml
+/opt/freeswitch/conf/autoload_configs/console.conf.xml
+/opt/freeswitch/conf/autoload_configs/dialplan_directory.conf.xml
+/opt/freeswitch/conf/autoload_configs/dingaling.conf.xml
+/opt/freeswitch/conf/autoload_configs/enum.conf.xml
+/opt/freeswitch/conf/autoload_configs/event_multicast.conf.xml
+/opt/freeswitch/conf/autoload_configs/event_socket.conf.xml
+/opt/freeswitch/conf/autoload_configs/iax.conf.xml
+/opt/freeswitch/conf/autoload_configs/ivr.conf.xml
+/opt/freeswitch/conf/autoload_configs/java.conf.xml
+/opt/freeswitch/conf/autoload_configs/limit.conf.xml
+/opt/freeswitch/conf/autoload_configs/local_stream.conf.xml
+/opt/freeswitch/conf/autoload_configs/modules.conf.xml
+/opt/freeswitch/conf/autoload_configs/openmrcp.conf.xml
+/opt/freeswitch/conf/autoload_configs/portaudio.conf.xml
+/opt/freeswitch/conf/autoload_configs/post_load_modules.conf.xml
+/opt/freeswitch/conf/autoload_configs/rss.conf.xml
+/opt/freeswitch/conf/autoload_configs/sofia.conf.xml
+/opt/freeswitch/conf/autoload_configs/spidermonkey.conf.xml
+/opt/freeswitch/conf/autoload_configs/switch.conf.xml
+/opt/freeswitch/conf/autoload_configs/syslog.conf.xml
+/opt/freeswitch/conf/autoload_configs/voicemail.conf.xml
+/opt/freeswitch/conf/autoload_configs/wanpipe.conf.xml
+/opt/freeswitch/conf/autoload_configs/woomera.conf.xml
+/opt/freeswitch/conf/autoload_configs/xml_cdr.conf.xml
+/opt/freeswitch/conf/autoload_configs/xml_curl.conf.xml
+/opt/freeswitch/conf/autoload_configs/xml_rpc.conf.xml
+/opt/freeswitch/conf/autoload_configs/zeroconf.conf.xml
+/opt/freeswitch/conf/dialplan/default.xml
+/opt/freeswitch/conf/dialplan/US.conf.xml
+/opt/freeswitch/conf/directory/default.xml
+/opt/freeswitch/conf/lang/de/de.xml
+/opt/freeswitch/conf/lang/de/demo/demo.xml
+/opt/freeswitch/conf/lang/de/vm/tts.xml
+/opt/freeswitch/conf/lang/en/en.xml
+/opt/freeswitch/conf/lang/en/demo/demo.xml
+/opt/freeswitch/conf/lang/en/vm/sounds.xml
+/opt/freeswitch/conf/lang/en/vm/tts.xml
+/opt/freeswitch/conf/lang/fr/fr.xml
+/opt/freeswitch/conf/lang/fr/demo/demo.xml
+/opt/freeswitch/conf/lang/fr/vm/sounds.xml
+/opt/freeswitch/conf/sip_profiles/default.xml
+/opt/freeswitch/conf/sip_profiles/nat.xml
Modified: freeswitch/trunk/debian/control
==============================================================================
--- freeswitch/trunk/debian/control (original)
+++ freeswitch/trunk/debian/control Tue Nov 27 17:51:17 2007
@@ -1,11 +1,19 @@
Source: freeswitch
Maintainer: Michael Jerris <mike(a)jerris.com>
Section: net
-Priority: optional
-Build-Depends: automake, autoconf, libtool
+Priority: extra
+Build-Depends: debhelper (>= 5), automake1.9, autoconf, libtool, unixodbc-dev, libasound2-dev, libcurl3-dev, libssl-dev
+Standards-Version: 3.7.2
Package: freeswitch
Architecture: any
-Depends: ${shlibs:Depends}
-Description: it is the winning
- lalal fixme
+Depends: ${shlibs:Depends}, unixodbc, libasound2, libcurl3, openssl
+Suggests: monit
+Description: A telephony platform that really kicks some ass...
+ FreeSWITCH is an open source telephony platform designed to facilitate the
+ creation of voice and chat driven products scaling from a soft-phone up to
+ a soft-switch. It can be used as a simple switching engine, a media gateway
+ or a media server to host IVR applications using simple scripts or XML to
+ control the callflow.
+ .
+ Homepage: http://some-project.some-place.org/
Modified: freeswitch/trunk/debian/copyright
==============================================================================
--- freeswitch/trunk/debian/copyright (original)
+++ freeswitch/trunk/debian/copyright Tue Nov 27 17:51:17 2007
@@ -1 +1,471 @@
-Freeswitch has lots of stuff. Some is MPL. See /usr/share/common-licenses/* for more.
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
+
+
Added: freeswitch/trunk/debian/default/freeswitch
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/default/freeswitch Tue Nov 27 17:51:17 2007
@@ -0,0 +1,6 @@
+# Startup settings fffor freeswitch
+# In this package install if monit is instaled it will automatically control
+# start and stop of freeswitch
+
+# Enable initd (let init handle start and stop of freeswitch)
+USE_INIT="false"
Added: freeswitch/trunk/debian/dirs
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/dirs Tue Nov 27 17:51:17 2007
@@ -0,0 +1,4 @@
+opt/freeswitch
+etc/opt
+etc/monit
+etc/default
Added: freeswitch/trunk/debian/freeswitch.1
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/freeswitch.1 Tue Nov 27 17:51:17 2007
@@ -0,0 +1,22 @@
+.TH "FREESWITCH" "1" "October 10, 2007" "" ""
+.nh
+.ad l
+.SH "NAME"
+freeswitch \- Open Source telephony platform
+.SH "SYNOPSIS"
+.HP 7
+\fBfreeswitch\fR [\fIoption\fR...]
+.SH "DESCRIPTION"
+.PP
+This manual page documents briefly the
+\fBfreeswitch\fR
+command.
+.PP
+This manual page was written for the
+Debian
+distribution because we're too lame to write a real manual page. But we have a superb website over here:
+.UR http://www.freeswitch.org/
+.BR http://www.freeswitch.org/
+.SH "SEE ALSO"
+.PP
+\fBundocumented\fR(7).
Added: freeswitch/trunk/debian/freeswitch.init
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/freeswitch.init Tue Nov 27 17:51:17 2007
@@ -0,0 +1,169 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: freeswitch
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: The FreeSwitch Voice Switching System
+# Description: An advanced platform for voice services
+### END INIT INFO
+
+# Author: Anthony Minesalle III <anthmct(a)yahoo.com>
+#
+
+# Do NOT "set -e"
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin:/opt/freeswitch/bin
+DESC="FreeSwitch Voice Switching System"
+NAME=freeswitch
+DAEMON=/opt/freeswitch/bin/$NAME
+DAEMON_ARGS="--options -nc"
+USER=freeswitch
+PIDFILE=/opt/freeswitch/log/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+
+# Check if we are being executed by init
+
+. /etc/default/$NAME
+CALLEDSCRIPT=`basename $0`
+echo $CALLEDSCRIPT
+case "$CALLEDSCRIPT" in
+ freeswitch)
+ ;;
+ *)
+ if [ "USE_INIT" != "TRUE" ]; then
+ echo "FreeSwitch disabled" ;
+ exit 0 ;
+ fi
+ ;;
+esac
+
+# Exit if the package is not installed
+# [ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+ start-stop-daemon -c $USER --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+ || return 1
+ start-stop-daemon -c $USER --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+ $DAEMON_ARGS \
+ || return 2
+ # Add code here, if necessary, that waits for the process to be ready
+ # to handle requests from services started subsequently which depend
+ # on this one. As a last resort, sleep for some time.
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # Return
+ # 0 if daemon has been stopped
+ # 1 if daemon was already stopped
+ # 2 if daemon could not be stopped
+ # other if a failure occurred
+ start-stop-daemon -c $USER --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ # Wait for children to finish too if this is a daemon that forks
+ # and if the daemon is only ever run from this initscript.
+ # If the above conditions are not satisfied then add some other code
+ # that waits for the process to drop all resources that could be
+ # needed by services started subsequently. A last resort is to
+ # sleep for some time.
+ start-stop-daemon -c $USER --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+ [ "$?" = 2 ] && return 2
+ # Many daemons don't delete their pidfiles when they exit.
+ rm -f $PIDFILE
+ return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+ #
+ # If the daemon can reload its configuration without
+ # restarting (for example, when it is sent a SIGHUP),
+ # then implement that here.
+ #
+ start-stop-daemon -C $USER --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
+ return 0
+}
+
+case "$1" in
+ start)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+ do_start
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ #reload|force-reload)
+ #
+ # If do_reload() is not implemented then leave this commented out
+ # and leave 'force-reload' as an alias for 'restart'.
+ #
+ #log_daemon_msg "Reloading $DESC" "$NAME"
+ #do_reload
+ #log_end_msg $?
+ #;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented then remove the
+ # 'force-reload' alias
+ #
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ *)
+ #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
+:
Added: freeswitch/trunk/debian/freeswitch.monitrc
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/freeswitch.monitrc Tue Nov 27 17:51:17 2007
@@ -0,0 +1,22 @@
+ check process freeswitch with pidfile /var/run/freeswitch.pid
+ group voice
+ start program = "/etc/init.d/freeswitch start"
+ stop program = "/etc/init.d/freeswitch stop"
+ if failed port 5060 type UDP than restart
+ if 5 restarts within 5 cycles then timeout
+ depends on freeswitch_bin
+ depends on freeswitch_rc
+
+ check file freeswitch_bin with path /opt/freeswitch/bin/freeswitch
+ group voice
+ if failed checksum then unmonitor
+ if failed permission 755 then unmonitor
+ if failed uid freeswitch then unmonitor
+ if failed gid daemon then unmonitor
+
+ check file sendmail_rc with path /etc/init.d/freeswitch
+ group voice
+ if failed checksum then unmonitor
+ if failed permission 755 then unmonitor
+ if failed uid root then unmonitor
+ if failed gid root then unmonitor
Added: freeswitch/trunk/debian/postinst
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/postinst Tue Nov 27 17:51:17 2007
@@ -0,0 +1,2 @@
+#!/bin/bash
+chown -R freeswitch:daemon /opt/freeswitch
Added: freeswitch/trunk/debian/postrm
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/postrm Tue Nov 27 17:51:17 2007
@@ -0,0 +1,2 @@
+#!/bin/bash
+userdel -r freeswitch
Added: freeswitch/trunk/debian/preinst
==============================================================================
--- (empty file)
+++ freeswitch/trunk/debian/preinst Tue Nov 27 17:51:17 2007
@@ -0,0 +1,2 @@
+#!/bin/bash
+adduser --home /opt/freeswitch --ingroup daemon --disabled-password --disabled-login --gecos "The FreeSwitch Voice Switching System" --no-create-home freeswitch
Modified: freeswitch/trunk/debian/rules
==============================================================================
--- freeswitch/trunk/debian/rules (original)
+++ freeswitch/trunk/debian/rules Tue Nov 27 17:51:17 2007
@@ -5,35 +5,69 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
+export MODULES ?= mod_console mod_syslog mod_commands mod_conference mod_dptools mod_enum mod_fifo mod_openmrcp mod_amr mod_g711 mod_g722 mod_g723_1 mod_g726 mod_g729 mod_gsm mod_ilbc mod_l16 mod_speex mod_dialplan_xml mod_dialplan_asterisk mod_dingaling mod_iax mod_portaudio mod_sofia mod_woomera mod_openzap mod_event_multicast mod_event_socket mod_native_file mod_sndfile mod_local_stream mod_spidermonkey mod_spidermonkey_teletone mod_spidermonkey_core_db mod_spidermonkey_odbc mod_xml_rpc mod_xml_curl mod_xml_cdr mod_say_en mod_say_fr mod_say_de
+ifndef AUTOCONF
+ AUTOCONFS := $(wildcard /usr/bin/autoconf*)
+ AUTOCONF = $(shell which autoconf)
+ifneq (,$(findstring 2.50,${AUTOCONFS}))
+ AUTOCONF = /usr/bin/autoconf2.50
+endif
+endif
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+
+FEATURES = --enable-core-libedit-support --enable-core-odbc-support --with-libcurl --with-openssl
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ FEATURES += --disable-optimization
+endif
+
+config.status: configure
+ dh_testdir
+ ./configure --prefix=/opt/freeswitch \
+ --host=$(DEB_HOST_GNU_TYPE) \
+ --build=$(DEB_BUILD_GNU_TYPE) \
+ CFLAGS="-D__VIA_HACK__" ${FEATURES}
+
+configure: bootstrap.sh
+ AUTOCONF=${AUTOCONF} ./bootstrap.sh
+
build: build-stamp
-build-stamp:
+build-stamp: config.status
dh_testdir
- # Add here commands to compile the package.
- ./bootstrap.sh
- ./configure
$(MAKE)
- touch build-stamp
+ touch $@
clean:
dh_testdir
dh_testroot
- rm -f build-stamp
+ rm -f build-stamp
- # Add here commands to clean up after the build process.
-$(MAKE) clean megaclean
+ifneq "$(wildcard /usr/share/misc/config.sub)" ""
+ cp -f /usr/share/misc/config.sub build/config/config.sub
+endif
+ifneq "$(wildcard /usr/share/misc/config.guess)" ""
+ cp -f /usr/share/misc/config.guess build/config/config.guess
+endif
+
- dh_clean
+ dh_clean
install: build
dh_testdir
dh_testroot
- dh_clean -k
+ dh_clean -k
dh_installdirs
- # Add here commands to install the package into debian/<packagename>
- $(MAKE) install DESTDIR=`pwd`/debian/tmp
+ $(MAKE) DESTDIR=$(CURDIR)/debian/freeswitch install
+
# Build architecture-independent files here.
binary-indep: build install
@@ -43,9 +77,9 @@
binary-arch: build install
dh_testdir
dh_testroot
- dh_installchangelogs
- dh_installdocs
- dh_installexamples
+# dh_installchangelogs
+# dh_installdocs
+# dh_installexamples
# dh_install
# dh_installmenu
# dh_installdebconf
@@ -54,23 +88,27 @@
# dh_installcatalogs
# dh_installpam
# dh_installmime
-# dh_installinit
+ dh_installinit
# dh_installcron
# dh_installinfo
# dh_undocumented
- dh_installman
- dh_link
+# dh_installman
+ dh_install debian/freeswitch.monitrc etc/monit
+ dh_install debian/default/freeswitch etc/default
+ dh_install debian/freeswitch.1 opt/man
+ dh_link opt/freeswitch/conf etc/opt/freeswitch
dh_strip
dh_compress
- dh_fixperms
+ dh_fixperms --exclude /opt/freeswitch/conf
# dh_perl
# dh_python
# dh_makeshlibs
dh_installdeb
- dh_shlibdeps
+ dh_shlibdeps --exclude=/opt/freeswitch
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install
+.PHONY: build clean binary-indep binary-arch binary install
+# vim:set ai et sts=2 sw=2 tw=0:
1
0
[commit] r6415 - in freeswitch/trunk: . conf conf/autoload_configs src/mod/applications/mod_voicemail
by Freeswitch SVN 27 Nov '07
by Freeswitch SVN 27 Nov '07
27 Nov '07
Author: anthm
Date: Tue Nov 27 14:50:32 2007
New Revision: 6415
Added:
freeswitch/trunk/conf/voicemail.tpl
Modified:
freeswitch/trunk/Makefile.am
freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml
freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c
Log:
add external voicemail template file
Modified: freeswitch/trunk/Makefile.am
==============================================================================
--- freeswitch/trunk/Makefile.am (original)
+++ freeswitch/trunk/Makefile.am Tue Nov 27 14:50:32 2007
@@ -160,7 +160,7 @@
@for x in conf conf/dialplan conf/directory conf/sip_profiles mod db log log/xml_cdr bin scripts htdocs grammar ; do \
$(mkinstalldirs) $(DESTDIR)$(prefix)/$$x ; \
done
- for conffile in `find conf -name \*.xml && find conf -name \*.conf && find conf -name mime.types` ; do \
+ for conffile in `find conf -name \*.xml && find conf -name \*.conf && find conf -name \*.tpl && find conf -name mime.types` ; do \
dir=`echo $$conffile | sed -e 's|/[^/]*$$||'`; \
filename=`echo $$conffile | sed -e 's|^.*/||'`; \
test -d $(DESTDIR)$(PREFIX)/$$dir || $(mkinstalldirs) $(DESTDIR)$(prefix)/$$dir ; \
Modified: freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml
==============================================================================
--- freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml (original)
+++ freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml Tue Nov 27 14:50:32 2007
@@ -39,16 +39,8 @@
<param name="operator-extension" value="operator XML default"/>
<param name="operator-key" value="9"/>
<email>
- <body><![CDATA[At ${voicemail_time} you were left a ${voicemail_message_len} second message from ${voicemail_caller_id_name} ${voicemail_caller_id_number}
-to your account ${voicemail_account}@${voicemail_domain}
-]]></body>
- <headers><![CDATA[From: FreeSWITCH mod_voicemail <${voicemail_account}@${voicemail_domain}>
-To: <${voicemail_email}>
-Subject: ${voicemail_message_len} sec Voicemail from ${voicemail_caller_id_name} ${voicemail_caller_id_number}
-X-Priority: ${voicemail_priority}
-X-Mailer: FreeSWITCH
-]]></headers>
- <!-- this is the format voicemail_time will have -->
+ <param name="template-file" value="voicemail.tpl"/>
+ <!-- this is the format voicemail_time will have -->
<param name="date-fmt" value="%A, %B %d %Y, %I %M %p"/>
<param name="email-from" value="${voicemail_account}@${voicemail_domain}"/>
</email>
Added: freeswitch/trunk/conf/voicemail.tpl
==============================================================================
--- (empty file)
+++ freeswitch/trunk/conf/voicemail.tpl Tue Nov 27 14:50:32 2007
@@ -0,0 +1,11 @@
+From: FreeSWITCH mod_voicemail <${voicemail_account}@${voicemail_domain}>
+To: <${voicemail_email}>
+Subject: ${voicemail_message_len} sec Voicemail from ${voicemail_caller_id_name} ${voicemail_caller_id_number}
+X-Priority: ${voicemail_priority}
+X-Mailer: FreeSWITCH
+
+At ${voicemail_time} you were left a ${voicemail_message_len} second message from ${voicemail_caller_id_name} ${voicemail_caller_id_number}
+to your account ${voicemail_account}@${voicemail_domain}
+
+
+
Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original)
+++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Tue Nov 27 14:50:32 2007
@@ -330,6 +330,39 @@
date_fmt = val;
} else if (!strcasecmp(var, "email-from") && !switch_strlen_zero(val)) {
email_from = val;
+ } else if (!strcasecmp(var, "template-file") && !switch_strlen_zero(val)) {
+ switch_stream_handle_t stream = { 0 };
+ int fd;
+ char *dpath = NULL;
+ char *path;
+
+ if (switch_is_file_path(val)) {
+ path = val;
+ } else {
+ dpath = switch_mprintf("%s%s%s",
+ SWITCH_GLOBAL_dirs.conf_dir,
+ SWITCH_PATH_SEPARATOR,
+ val);
+ path = dpath;
+ }
+
+ if ((fd = open(path, O_RDONLY)) > -1) {
+ char buf[2048];
+ SWITCH_STANDARD_STREAM(stream);
+ while(switch_fd_read_line(fd, buf, sizeof(buf))) {
+ stream.write_function(&stream, "%s", buf);
+ }
+ close(fd);
+ email_headers = stream.data;
+ if ((email_body = strstr(email_headers, "\n\n"))) {
+ *email_body = '\0';
+ email_body += 2;
+ } else if ((email_body = strstr(email_headers, "\r\n\r\n"))) {
+ *email_body = '\0';
+ email_body += 4;
+ }
+ }
+ switch_safe_free(dpath);
}
}
}
1
0
[commit] r6414 - in freeswitch/trunk: . conf/autoload_configs src/include src/mod/loggers/mod_logfile
by Freeswitch SVN 27 Nov '07
by Freeswitch SVN 27 Nov '07
27 Nov '07
Author: mikej
Date: Tue Nov 27 14:32:55 2007
New Revision: 6414
Added:
freeswitch/trunk/conf/autoload_configs/logfile.conf.xml
freeswitch/trunk/src/mod/loggers/mod_logfile/ (props changed)
freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c
freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.vcproj
Modified:
freeswitch/trunk/Freeswitch.sln
freeswitch/trunk/src/include/switch_apr.h
Log:
initial check-in of file logger module from anthonyl branch, reworked for current module interface and cleaned up debugging code. More to come on this module.
Modified: freeswitch/trunk/Freeswitch.sln
==============================================================================
--- freeswitch/trunk/Freeswitch.sln (original)
+++ freeswitch/trunk/Freeswitch.sln Tue Nov 27 14:32:55 2007
@@ -3,20 +3,20 @@
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchConsole", "w32\Console\FreeSwitchConsole.vcproj", "{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchCoreLib", "w32\Library\FreeSwitchCore.vcproj", "{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}"
ProjectSection(ProjectDependencies) = postProject
- {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}
- {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9}
- {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
- {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
- {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
+ {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+ {EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+ {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
+ {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9}
+ {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g729", "src\mod\codecs\mod_g729\mod_g729.vcproj", "{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}"
@@ -26,15 +26,15 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_gsm", "src\mod\codecs\mod_gsm\mod_gsm.vcproj", "{4926323F-4EA8-4B7D-A3D3-65488725988F}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{8FD2E297-4096-47E5-9258-C48FF1841523} = {8FD2E297-4096-47E5-9258-C48FF1841523}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sndfile", "src\mod\formats\mod_sndfile\mod_sndfile.vcproj", "{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{3D0370CA-BED2-4657-A475-32375CBCB6E4} = {3D0370CA-BED2-4657-A475-32375CBCB6E4}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g711", "src\mod\codecs\mod_g711\mod_g711.vcproj", "{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}"
@@ -44,16 +44,16 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_iax", "src\mod\endpoints\mod_iax\mod_iax.vcproj", "{3A5B9131-F20C-4A85-9447-6C1610941CEE}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_PortAudio", "src\mod\endpoints\mod_portaudio\mod_PortAudio.vcproj", "{5FD31A25-5D83-4794-8BEE-904DAD84CE71}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {0A18A071-125E-442F-AFF7-A3F68ABECF99}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {0A18A071-125E-442F-AFF7-A3F68ABECF99}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_l16", "src\mod\codecs\mod_l16\mod_l16.vcproj", "{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}"
@@ -63,14 +63,14 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_speex", "src\mod\codecs\mod_speex\mod_speex.vcproj", "{5580D60E-0F77-4716-9CD4-B8E5986FA375}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_woomera", "src\mod\endpoints\mod_woomera\mod_woomera.vcproj", "{FE3540C5-3303-46E0-A69E-D92F775687F1}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Codecs", "Codecs", "{F881ADA2-2F1A-4046-9FEB-191D9422D781}"
@@ -91,8 +91,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_xml", "src\mod\dialplans\mod_dialplan_xml\mod_dialplan_xml.vcproj", "{07113B25-D3AF-4E04-BA77-4CD1171F022C}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "FreeSwitchSetup", "w32\Setup\Setup.vdproj", "{B17FFBE6-A942-4056-8346-B624FB5D995B}"
@@ -106,22 +106,22 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_directory", "src\mod\dialplans\mod_dialplan_directory\mod_dialplan_directory.vcproj", "{A27CCA23-1541-4337-81A4-F0A6413078A0}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_zeroconf", "src\mod\event_handlers\mod_zeroconf\mod_zeroconf.vcproj", "{C7705DC4-2088-493E-AF8D-65BC6D65C125}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {49C34584-B6DA-448F-83CF-27584DC9FC90} = {49C34584-B6DA-448F-83CF-27584DC9FC90}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {49C34584-B6DA-448F-83CF-27584DC9FC90} = {49C34584-B6DA-448F-83CF-27584DC9FC90}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_event_multicast", "src\mod\event_handlers\mod_event_multicast\mod_event_multicast.vcproj", "{784113EF-44D9-4949-835D-7065D3C7AD08}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libteletone", "libs\libteletone\libteletone.vcproj", "{89385C74-5860-4174-9CAF-A39E7C48909C}"
@@ -130,10 +130,10 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey", "src\mod\languages\mod_spidermonkey\mod_spidermonkey.vcproj", "{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ASR-TTS", "ASR-TTS", "{4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}"
@@ -145,22 +145,22 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_ilbc", "src\mod\codecs\mod_ilbc\mod_ilbc.vcproj", "{D3EC0AFF-76FC-4210-A825-9A17410660A3}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "src\mod\endpoints\mod_dingaling\mod_dingaling.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}"
ProjectSection(ProjectDependencies) = postProject
- {1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_commands", "src\mod\applications\mod_commands\mod_commands.vcproj", "{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Loggers", "Loggers", "{A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}"
@@ -174,35 +174,35 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_rpc", "src\mod\xml_int\mod_xml_rpc\mod_xml_rpc.vcproj", "{CBEC7225-0C21-4DA8-978E-1F158F8AD950}"
ProjectSection(ProjectDependencies) = postProject
- {356EC96D-4C9F-47B5-9083-FC328B87BA94} = {356EC96D-4C9F-47B5-9083-FC328B87BA94}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {A3FE0076-B366-429D-A238-D7304DA7D3C1} = {A3FE0076-B366-429D-A238-D7304DA7D3C1}
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
{155844C3-EC5F-407F-97A4-A2DDADED9B2F} = {155844C3-EC5F-407F-97A4-A2DDADED9B2F}
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
+ {A3FE0076-B366-429D-A238-D7304DA7D3C1} = {A3FE0076-B366-429D-A238-D7304DA7D3C1}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {356EC96D-4C9F-47B5-9083-FC328B87BA94} = {356EC96D-4C9F-47B5-9083-FC328B87BA94}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_rss", "src\mod\applications\mod_rss\mod_rss.vcproj", "{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_conference", "src\mod\applications\mod_conference\mod_conference.vcproj", "{C24FB505-05D7-4319-8485-7540B44C8603}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dptools", "src\mod\applications\mod_dptools\mod_dptools.vcproj", "{B5881A85-FE70-4F64-8607-2CAAE52669C6}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_event_socket", "src\mod\event_handlers\mod_event_socket\mod_event_socket.vcproj", "{05515420-16DE-4E63-BE73-85BE85BA5142}"
ProjectSection(ProjectDependencies) = postProject
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Libraries", "_Libraries", "{EB910B0D-F27D-4B62-B67B-DE834C99AC5B}"
@@ -215,8 +215,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "libs\libdingaling\libdingaling.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}"
ProjectSection(ProjectDependencies) = postProject
- {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3}
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsrtp", "libs\srtp\libsrtp.vcproj", "{EEF031CB-FED8-451E-A471-91EC8D4F6750}"
@@ -241,8 +241,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\apr-util\libaprutil.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}"
ProjectSection(ProjectDependencies) = postProject
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Downloads", "_Downloads", "{C120A020-773F-4EA3-923F-B67AF28B750D}"
@@ -260,8 +260,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mDNSResponder static library", "libs\win32\howl\libmDNSResponder.vcproj", "{49C34584-B6DA-448F-83CF-27584DC9FC90}"
ProjectSection(ProjectDependencies) = postProject
- {5927104D-C14C-4AC8-925C-4AB681762E75} = {5927104D-C14C-4AC8-925C-4AB681762E75}
{0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE}
+ {5927104D-C14C-4AC8-925C-4AB681762E75} = {5927104D-C14C-4AC8-925C-4AB681762E75}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsndfile", "libs\win32\libsndfile\libsndfile.vcproj", "{3D0370CA-BED2-4657-A475-32375CBCB6E4}"
@@ -281,34 +281,34 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sofia", "src\mod\endpoints\mod_sofia\mod_sofia.vcproj", "{0DF3ABD0-DDC0-4265-B778-07C66780979B}"
ProjectSection(ProjectDependencies) = postProject
- {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libg726", "libs\codec\g726\libg726.vcproj", "{5A6A281A-AA50-470A-8305-202BDA1CD1BF}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g726", "src\mod\codecs\mod_g726\mod_g726.vcproj", "{486369EB-F150-4B56-BCC8-77B9E18FF5F5}"
ProjectSection(ProjectDependencies) = postProject
- {5A6A281A-AA50-470A-8305-202BDA1CD1BF} = {5A6A281A-AA50-470A-8305-202BDA1CD1BF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {5A6A281A-AA50-470A-8305-202BDA1CD1BF} = {5A6A281A-AA50-470A-8305-202BDA1CD1BF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libg7xx", "libs\codec\g7xx\libg7xx.vcproj", "{D71E7338-8D9C-4FE4-A15F-D5CC60202C7C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g722", "src\mod\codecs\mod_g722\mod_g722.vcproj", "{D42518CC-7475-454D-B392-0E132C07D761}"
ProjectSection(ProjectDependencies) = postProject
- {D71E7338-8D9C-4FE4-A15F-D5CC60202C7C} = {D71E7338-8D9C-4FE4-A15F-D5CC60202C7C}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {D71E7338-8D9C-4FE4-A15F-D5CC60202C7C} = {D71E7338-8D9C-4FE4-A15F-D5CC60202C7C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsofia_sip_ua_static", "libs\win32\sofia\libsofia_sip_ua_static.vcproj", "{70A49BC2-7500-41D0-B75D-EDCC5BE987A0}"
ProjectSection(ProjectDependencies) = postProject
- {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}
{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}
+ {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download PTHREAD", "libs\win32\Download PTHREAD.vcproj", "{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A}"
@@ -320,70 +320,70 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g723_1", "src\mod\codecs\mod_g723_1\mod_g723_1.vcproj", "{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_native_file", "src\mod\formats\mod_native_file\mod_native_file.vcproj", "{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey_core_db\mod_spidermonkey_core_db.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
ProjectSection(ProjectDependencies) = postProject
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey_teletone\mod_spidermonkey_teletone.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
ProjectSection(ProjectDependencies) = postProject
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libudns", "libs\win32\udns\libudns.vcproj", "{4043FC6A-9A30-4577-8AD5-9B233C9575D8}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_enum", "src\mod\applications\mod_enum\mod_enum.vcproj", "{71A967D5-0E99-4CEF-A587-98836EE6F2EF}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{4043FC6A-9A30-4577-8AD5-9B233C9575D8} = {4043FC6A-9A30-4577-8AD5-9B233C9575D8}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey_odbc\mod_spidermonkey_odbc.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
ProjectSection(ProjectDependencies) = postProject
- {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_curl", "src\mod\xml_int\mod_xml_curl\mod_xml_curl.vcproj", "{AB91A099-7690-4ECF-8994-E458F4EA1ED4}"
ProjectSection(ProjectDependencies) = postProject
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "say", "say", "{6CD61A1D-797C-470A-BE08-8C31B68BB336}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_say_en", "src\mod\say\mod_say_en\mod_say_en.vcproj", "{988CACF7-3FCB-4992-BE69-77872AE67DC8}"
ProjectSection(ProjectDependencies) = postProject
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "libs\portaudio\build\msvc\portaudio.vcproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_cdr", "src\mod\xml_int\mod_xml_cdr\mod_xml_cdr.vcproj", "{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836}"
ProjectSection(ProjectDependencies) = postProject
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_amr", "src\mod\codecs\mod_amr\mod_amr.vcproj", "{8DEB383C-4091-4F42-A56F-C9E46D552D79}"
@@ -456,16 +456,16 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcpcore", "libs\openmrcp\mrcpcore\mrcpcore.vcproj", "{829A9309-3B94-43C0-846B-7EC9D6D35F8B}"
ProjectSection(ProjectDependencies) = postProject
- {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{AA91F0AC-6562-435E-814C-5C94689FEFA2} = {AA91F0AC-6562-435E-814C-5C94689FEFA2}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rtspcore", "libs\openmrcp\rtspcore\rtspcore.vcproj", "{EB751DC4-87BD-4766-B78D-DFB64BA9F988}"
ProjectSection(ProjectDependencies) = postProject
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
{829A9309-3B94-43C0-846B-7EC9D6D35F8B} = {829A9309-3B94-43C0-846B-7EC9D6D35F8B}
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcpmediaframe", "libs\openmrcp\module\mrcpmediaframe\mrcpmediaframe.vcproj", "{9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}"
@@ -482,8 +482,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcpsofiasip", "libs\openmrcp\module\mrcpsofiasip\mrcpsofiasip.vcproj", "{819C7242-6184-46FE-BC7B-C7E25C0581EE}"
ProjectSection(ProjectDependencies) = postProject
- {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}
{829A9309-3B94-43C0-846B-7EC9D6D35F8B} = {829A9309-3B94-43C0-846B-7EC9D6D35F8B}
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrcpv2agent", "libs\openmrcp\module\mrcpv2agent\mrcpv2agent.vcproj", "{FB64EA08-3BC0-48AE-BE4B-74F1024B756E}"
@@ -493,27 +493,27 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libopenmrcpclient", "libs\openmrcp\platform\openmrcpclient\libopenmrcpclient.vcproj", "{A407B661-D7DC-4E30-B268-FFF3296C35E6}"
ProjectSection(ProjectDependencies) = postProject
- {CF78E84D-8456-44F2-8197-0E0E88D30A3C} = {CF78E84D-8456-44F2-8197-0E0E88D30A3C}
- {819C7242-6184-46FE-BC7B-C7E25C0581EE} = {819C7242-6184-46FE-BC7B-C7E25C0581EE}
- {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6} = {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}
{FB64EA08-3BC0-48AE-BE4B-74F1024B756E} = {FB64EA08-3BC0-48AE-BE4B-74F1024B756E}
+ {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6} = {9EA22C31-BB7E-4C40-A698-2C6792D1E0C6}
+ {819C7242-6184-46FE-BC7B-C7E25C0581EE} = {819C7242-6184-46FE-BC7B-C7E25C0581EE}
+ {CF78E84D-8456-44F2-8197-0E0E88D30A3C} = {CF78E84D-8456-44F2-8197-0E0E88D30A3C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_openmrcp", "src\mod\asr_tts\mod_openmrcp\mod_openmrcp.vcproj", "{E7116F50-2B10-472F-92BD-C8667AA9C1AE}"
ProjectSection(ProjectDependencies) = postProject
- {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
- {A407B661-D7DC-4E30-B268-FFF3296C35E6} = {A407B661-D7DC-4E30-B268-FFF3296C35E6}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {A407B661-D7DC-4E30-B268-FFF3296C35E6} = {A407B661-D7DC-4E30-B268-FFF3296C35E6}
+ {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {70A49BC2-7500-41D0-B75D-EDCC5BE987A0} = {70A49BC2-7500-41D0-B75D-EDCC5BE987A0}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey_socket\mod_spidermonkey_socket.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}"
ProjectSection(ProjectDependencies) = postProject
- {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
- {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
- {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
+ {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_voicemail", "src\mod\applications\mod_voicemail\mod_voicemail.vcproj", "{D7F1E3F2-A3F4-474C-8555-15122571AF52}"
@@ -582,6 +582,7 @@
conf\autoload_configs\java.conf.xml = conf\autoload_configs\java.conf.xml
conf\autoload_configs\limit.conf.xml = conf\autoload_configs\limit.conf.xml
conf\autoload_configs\local_stream.conf.xml = conf\autoload_configs\local_stream.conf.xml
+ conf\autoload_configs\logfile.conf.xml = conf\autoload_configs\logfile.conf.xml
conf\autoload_configs\modules.conf.xml = conf\autoload_configs\modules.conf.xml
conf\autoload_configs\openmrcp.conf.xml = conf\autoload_configs\openmrcp.conf.xml
conf\autoload_configs\portaudio.conf.xml = conf\autoload_configs\portaudio.conf.xml
@@ -683,6 +684,7 @@
debug\conf\autoload_configs\java.conf.xml = debug\conf\autoload_configs\java.conf.xml
debug\conf\autoload_configs\limit.conf.xml = debug\conf\autoload_configs\limit.conf.xml
debug\conf\autoload_configs\local_stream.conf.xml = debug\conf\autoload_configs\local_stream.conf.xml
+ debug\conf\autoload_configs\logfile.conf.xml = debug\conf\autoload_configs\logfile.conf.xml
debug\conf\autoload_configs\modules.conf.xml = debug\conf\autoload_configs\modules.conf.xml
debug\conf\autoload_configs\openmrcp.conf.xml = debug\conf\autoload_configs\openmrcp.conf.xml
debug\conf\autoload_configs\portaudio.conf.xml = debug\conf\autoload_configs\portaudio.conf.xml
@@ -781,6 +783,7 @@
release\conf\autoload_configs\java.conf.xml = release\conf\autoload_configs\java.conf.xml
release\conf\autoload_configs\limit.conf.xml = release\conf\autoload_configs\limit.conf.xml
release\conf\autoload_configs\local_stream.conf.xml = release\conf\autoload_configs\local_stream.conf.xml
+ release\conf\autoload_configs\logfile.conf.xml = release\conf\autoload_configs\logfile.conf.xml
release\conf\autoload_configs\modules.conf.xml = release\conf\autoload_configs\modules.conf.xml
release\conf\autoload_configs\openmrcp.conf.xml = release\conf\autoload_configs\openmrcp.conf.xml
release\conf\autoload_configs\portaudio.conf.xml = release\conf\autoload_configs\portaudio.conf.xml
@@ -863,6 +866,11 @@
release\conf\lang\fr\vm\sounds.xml = release\conf\lang\fr\vm\sounds.xml
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_logfile", "src\mod\loggers\mod_logfile\mod_logfile.vcproj", "{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}"
+ ProjectSection(ProjectDependencies) = postProject
+ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -1443,6 +1451,12 @@
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.ActiveCfg = Release|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|Win32.Build.0 = Release|Win32
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24}.Release|x64.ActiveCfg = Release|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|Win32.Build.0 = Debug|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Debug|x64.ActiveCfg = Debug|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.ActiveCfg = Release|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|Win32.Build.0 = Release|Win32
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}.Release|x64.ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1523,6 +1537,7 @@
{692F6330-4D87-4C82-81DF-40DB5892636E} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}
{E7116F50-2B10-472F-92BD-C8667AA9C1AE} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}
{1C453396-D912-4213-89FD-9B489162B7B5} = {A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}
+ {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909} = {A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}
{CBEC7225-0C21-4DA8-978E-1F158F8AD950} = {F69A4A6B-9360-4EBB-A280-22AA3C455AC5}
{AB91A099-7690-4ECF-8994-E458F4EA1ED4} = {F69A4A6B-9360-4EBB-A280-22AA3C455AC5}
{08DAD348-9E0A-4A2E-97F1-F1E7E24A7836} = {F69A4A6B-9360-4EBB-A280-22AA3C455AC5}
Added: freeswitch/trunk/conf/autoload_configs/logfile.conf.xml
==============================================================================
--- (empty file)
+++ freeswitch/trunk/conf/autoload_configs/logfile.conf.xml Tue Nov 27 14:32:55 2007
@@ -0,0 +1,15 @@
+<configuration name="logfile.conf" description="File Logging">
+ <settings>
+ <!-- File to log to -->
+ <param name="logfile" value="/var/log/freeswitch.log"/>
+ <!-- At this length in bytes rotate the log file -->
+ <param name="rollover" value="12000"/>
+ <!-- The level of the message to log -->
+ <!--<param name="level" value="debug,info,warning,notice,error,crit,alert"/>-->
+ <param name="level" value="all"/>
+ <!-- Format of the log messages -->
+ <!-- ${time} ${file} ${func} ${message} -->
+ <param name="format" value="${time} ${file} ${func} ${message}"/>
+</settings>
+</configuration>
+
Modified: freeswitch/trunk/src/include/switch_apr.h
==============================================================================
--- freeswitch/trunk/src/include/switch_apr.h (original)
+++ freeswitch/trunk/src/include/switch_apr.h Tue Nov 27 14:32:55 2007
@@ -602,6 +602,21 @@
typedef int32_t switch_fileperms_t;
typedef int switch_seek_where_t;
+ /**
+ * @defgroup apr_file_seek_flags File Seek Flags
+ * @{
+ */
+
+/* flags for apr_file_seek */
+/** Set the file position */
+#define SWITCH_SEEK_SET SEEK_SET
+/** Current */
+#define SWITCH_SEEK_CUR SEEK_CUR
+/** Go to end of file */
+#define SWITCH_SEEK_END SEEK_END
+/** @} */
+
+
/**
* @defgroup switch_file_permissions File Permissions flags
* @ingroup switch_file_io
Added: freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c
==============================================================================
--- (empty file)
+++ freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.c Tue Nov 27 14:32:55 2007
@@ -0,0 +1,344 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthmct(a)yahoo.com>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Anthony LaMantia <anthony(a)petabit.net>
+ * Michael Jerris <mike(a)jerris.com>
+ *
+ *
+ * mod_logfile.c -- Filesystem Logging
+ *
+ */
+
+#include <switch.h>
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_logfile_load);
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_logfile_shutdown);
+SWITCH_MODULE_DEFINITION(mod_logfile, mod_logfile_load, mod_logfile_shutdown, NULL);
+
+#define DEFAULT_FORMAT "${data}"
+#define DEFAULT_LIMIT 0x7FFFFFFF
+#define WARM_FUZZY_OFFSET 64
+#define MAX_ROT 4096 /* why not */
+static const uint8_t STATIC_LEVELS[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
+
+static switch_status_t load_config(void);
+static switch_status_t mod_logfile_check(void);
+static switch_memory_pool_t *module_pool = NULL;
+
+static struct {
+ unsigned int log_fd;
+ switch_size_t log_size; /* keep the log size in check for rotation */
+ switch_size_t roll_size; /* the size that we want to rotate the file at */
+ char *logfile;
+ char *format;
+ switch_file_t *log_afd;
+} globals;
+
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_logfile, globals.logfile);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_format, globals.format);
+
+/* i know this is strange but it's the fastest way i could think of managing log levels. */
+/* i'd rather not try to search something each time we get a message to log */
+struct level_set {
+ int level;
+ int on;
+} static levels[] = {
+ {SWITCH_LOG_CONSOLE, 0}, /* 0 */
+ {SWITCH_LOG_ALERT, 0}, /* 1 */
+ {SWITCH_LOG_CRIT, 0}, /* 2 */
+ {SWITCH_LOG_ERROR, 0}, /* 3 */
+ {SWITCH_LOG_WARNING, 0}, /* 4 */
+ {SWITCH_LOG_NOTICE, 0}, /* 5 */
+ {SWITCH_LOG_INFO, 0}, /* 6 */
+ {SWITCH_LOG_DEBUG, 0}, /* 7 */
+};
+
+void process_levels(char *p)
+{
+ int x, argc = 0;
+ char *argv[10] = { 0 };
+
+ if ((argc = switch_separate_string(p, ',', argv, (sizeof(argv) / sizeof(argv[0]))))) {
+ for (x = 0; x < argc; x++) {
+ if (!strncasecmp(argv[x], "alert", strlen(argv[x]))) {
+ levels[SWITCH_LOG_ALERT].on = 1;
+ } else if (!strncasecmp(argv[x], "crit", strlen(argv[x]))) {
+ levels[SWITCH_LOG_CRIT].on = 1;
+ } else if (!strncasecmp(argv[x], "error", strlen(argv[x]))) {
+ levels[SWITCH_LOG_ERROR].on = 1;
+ } else if (!strncasecmp(argv[x], "warn", strlen(argv[x]))) {
+ levels[SWITCH_LOG_WARNING].on = 1;
+ } else if (!strncasecmp(argv[x], "notice", strlen(argv[x]))) {
+ levels[SWITCH_LOG_NOTICE].on = 1;
+ } else if (!strncasecmp(argv[x], "info", strlen(argv[x]))) {
+ levels[SWITCH_LOG_INFO].on = 1;
+ } else if (!strncasecmp(argv[x], "debug", strlen(argv[x]))) {
+ levels[SWITCH_LOG_DEBUG].on = 1;
+ } else if (!strncasecmp(argv[x], "console", strlen(argv[x]))) {
+ levels[SWITCH_LOG_CONSOLE].on = 1;
+ } else if (!strncasecmp(argv[x], "all", strlen(argv[x]))) {
+ int i;
+ for (i=0; i < (sizeof(levels) / sizeof(struct level_set)); i++) {
+ levels[i].on = 1;
+ }
+ }
+ }
+ }
+ return;
+}
+
+/* rotate the log file */
+static switch_status_t mod_logfile_rotate(void)
+{
+ unsigned int i = 0;
+ unsigned int flags = 0;
+ char *p = NULL;
+ char *q = NULL;
+ switch_status_t stat = 0;
+ switch_size_t nbytes = 1024;
+ switch_file_t *l_afd = NULL;
+ switch_memory_pool_t *pool = NULL;
+ int64_t offset = 0;
+
+ globals.log_size = 0;
+ switch_core_new_memory_pool(&pool);
+
+ stat = switch_file_seek(globals.log_afd, SWITCH_SEEK_SET, &offset);
+
+ if (stat != SWITCH_STATUS_SUCCESS)
+ return SWITCH_STATUS_FALSE;
+
+ p = malloc(strlen(globals.logfile)+WARM_FUZZY_OFFSET);
+ if (!p) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ q = malloc(1024);
+ if (!q) {
+ free(p);
+ return SWITCH_STATUS_FALSE;
+ }
+
+ memset(p, '\0', strlen(globals.logfile)+WARM_FUZZY_OFFSET);
+
+ for (i=1; i < MAX_ROT; i++) {
+ sprintf((char *)p, "%s.%i", globals.logfile, i);
+
+ stat = switch_file_open(&l_afd, p, SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD, pool);
+
+ if (stat == SWITCH_STATUS_SUCCESS) {
+ switch_file_close(l_afd);
+ continue;
+ }
+ flags |= SWITCH_FOPEN_READ;
+ flags |= SWITCH_FOPEN_WRITE;
+ flags |= SWITCH_FOPEN_CREATE;
+
+ stat = switch_file_open(&l_afd, p, flags , SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE ,pool);
+ if (stat == SWITCH_STATUS_SUCCESS)
+ break;
+ }
+
+ while ((stat = switch_file_read(globals.log_afd, q, &nbytes)) == SWITCH_STATUS_SUCCESS) {
+ switch_file_write(l_afd, q, &nbytes);
+ memset(q, '\0', 1024);
+ nbytes = 1024;
+ }
+
+ offset = 0;
+ stat = switch_file_seek(globals.log_afd, SWITCH_SEEK_SET, &offset);
+ free(p);
+ free(q);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+static switch_status_t mod_logfile_openlogfile(void)
+{
+ unsigned int flags = 0;
+ switch_file_t *afd;
+ switch_status_t stat;
+ switch_memory_pool_t *pool;
+
+ flags |= SWITCH_FOPEN_CREATE;
+ flags |= SWITCH_FOPEN_READ;
+ flags |= SWITCH_FOPEN_WRITE;
+ flags |= SWITCH_FOPEN_APPEND;
+
+ switch_core_new_memory_pool(&pool);
+ stat = switch_file_open(&afd, globals.logfile,flags,SWITCH_FPROT_UREAD|SWITCH_FPROT_UWRITE, pool);
+ if (stat != SWITCH_STATUS_SUCCESS) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ globals.log_afd = afd;
+
+ globals.log_size = switch_file_get_size(globals.log_afd);
+
+ if (globals.log_size >= globals.roll_size) {
+ mod_logfile_rotate();
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* write to the actual logfile */
+static switch_status_t mod_logfile_write(char *fmt, ...)
+{
+ char *log_data;
+ switch_status_t stat;
+ switch_size_t len;
+ va_list args;
+ va_start(args, fmt);
+
+ len = switch_vasprintf(&log_data, fmt, args);
+
+ if (len <= 0)
+ return SWITCH_STATUS_FALSE;
+
+ stat = switch_file_write(globals.log_afd, log_data, &len);
+
+ globals.log_size += len;
+
+ /* we may want to hold back on this for preformance reasons */
+ if (globals.log_size >= globals.roll_size) {
+ mod_logfile_rotate();
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+static switch_status_t mod_logfile_logger(const switch_log_node_t *node, switch_log_level_t level)
+{
+ char line_no[sizeof(int)*8+1];
+ char date[80] = "";
+ switch_time_exp_t time;
+ switch_size_t retsize;
+ char *message = NULL;
+
+ if (!levels[node->level].on) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ message = (char *)malloc(strlen(globals.format)+2);
+ switch_copy_string(message, globals.format, strlen(globals.format)+1);
+
+ message = switch_string_replace(message, "${message}", node->content);
+
+ if (switch_time_exp_lt(&time, node->timestamp) != SWITCH_STATUS_SUCCESS) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ switch_strftime(date, &retsize, sizeof(date), "%Y-%m-%d %T", &time);
+
+ message = switch_string_replace(message, "${time}", date);
+ message = switch_string_replace(message, "${file}", node->file);
+ message = switch_string_replace(message, "${func}", node->func);
+
+ snprintf(line_no, sizeof(line_no), "%d", node->line);
+ message = switch_string_replace(message, "${line}", line_no);
+
+ if (!switch_strlen_zero(message)) {
+ mod_logfile_write("%s", message);
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+static switch_status_t load_config(void)
+{
+ char *cf = "logfile.conf";
+ switch_xml_t cfg, xml, settings, param;
+
+ if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
+ } else {
+ if ((settings = switch_xml_child(cfg, "settings"))) {
+ for (param = switch_xml_child(settings, "param"); param; param = param->next) {
+ char *var = (char *) switch_xml_attr_soft(param, "name");
+ char *val = (char *) switch_xml_attr_soft(param, "value");
+ if (!strcmp(var, "logfile")) {
+ set_global_logfile(val);
+ } else if (!strcmp(var, "format")) {
+ set_global_format(val);
+ } else if (!strcmp(var, "level")) {
+ process_levels(val);
+ } else if (!strcmp(var, "rollover")) {
+ globals.roll_size = atoi(val);
+ }
+ }
+ }
+ switch_xml_free(xml);
+ }
+ if (globals.roll_size == 0) {
+ globals.roll_size = DEFAULT_LIMIT;
+ }
+ if (switch_strlen_zero(globals.logfile)) {
+ char logfile[512];
+ snprintf(logfile, sizeof(logfile), "%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, "freeswitch.log");
+ set_global_logfile(logfile);
+ }
+ if (switch_strlen_zero(globals.format)) {
+ set_global_format(DEFAULT_FORMAT);
+ }
+ return 0;
+}
+
+SWITCH_MODULE_LOAD_FUNCTION(mod_logfile_load)
+{
+ switch_status_t status;
+
+ module_pool = pool;
+
+ /* connect my internal structure to the blank pointer passed to me */
+ *module_interface = switch_loadable_module_create_module_interface(pool, modname);
+
+ if ((status=load_config()) != SWITCH_STATUS_SUCCESS) {
+ return status;
+ }
+
+ mod_logfile_openlogfile();
+
+ switch_log_bind_logger(mod_logfile_logger, SWITCH_LOG_DEBUG);
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_logfile_shutdown)
+{
+ /* TODO: Need to finish processing pending log messages before we close the file handle */
+
+ //switch_file_close(globals.log_afd);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* For Emacs:
+* Local Variables:
+* mode:c
+* indent-tabs-mode:nil
+* tab-width:4
+* c-basic-offset:4
+* End:
+* For VIM:
+* vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab:
+*/
Added: freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.vcproj
==============================================================================
--- (empty file)
+++ freeswitch/trunk/src/mod/loggers/mod_logfile/mod_logfile.vcproj Tue Nov 27 14:32:55 2007
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mod_logfile"
+ ProjectGUID="{D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909}"
+ RootNamespace="mod_logfile"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\module_debug.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\module_release.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_logfile.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
1
0
[commit] r6413 - in freeswitch/trunk/src: . include mod/endpoints/mod_alsa mod/endpoints/mod_portaudio mod/xml_int/mod_xml_rpc
by Freeswitch SVN 27 Nov '07
by Freeswitch SVN 27 Nov '07
27 Nov '07
Author: anthm
Date: Tue Nov 27 14:25:16 2007
New Revision: 6413
Modified:
freeswitch/trunk/src/include/switch_utils.h
freeswitch/trunk/src/mod/endpoints/mod_alsa/mod_alsa.c
freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c
freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c
freeswitch/trunk/src/switch_utils.c
freeswitch/trunk/src/switch_xml.cpp
Log:
improve http support
Modified: freeswitch/trunk/src/include/switch_utils.h
==============================================================================
--- freeswitch/trunk/src/include/switch_utils.h (original)
+++ freeswitch/trunk/src/include/switch_utils.h Tue Nov 27 14:25:16 2007
@@ -56,6 +56,7 @@
#endif
SWITCH_DECLARE(switch_status_t) switch_b64_encode(unsigned char *in, switch_size_t ilen, unsigned char *out, switch_size_t olen);
+SWITCH_DECLARE(switch_status_t) switch_b64_decode(char *in, char *out, switch_size_t olen);
static inline switch_bool_t switch_is_digit_string(const char *s) {
Modified: freeswitch/trunk/src/mod/endpoints/mod_alsa/mod_alsa.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_alsa/mod_alsa.c (original)
+++ freeswitch/trunk/src/mod/endpoints/mod_alsa/mod_alsa.c Tue Nov 27 14:25:16 2007
@@ -1566,6 +1566,8 @@
stream->write_function(stream, "</pre>");
#endif
+ stream->write_function(stream, "Content-type: text/html\n\n");
+
wcmd = switch_str_nil(switch_event_get_header(stream->event, "wcmd"));
action = switch_event_get_header(stream->event, "action");
Modified: freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c (original)
+++ freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c Tue Nov 27 14:25:16 2007
@@ -1673,6 +1673,8 @@
if (http) {
+ stream->write_function(stream, "Content-type: text/html\n\n");
+
#if 0
switch_event_header_t *hp;
stream->write_function(stream, "<pre>");
Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c
==============================================================================
--- freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c (original)
+++ freeswitch/trunk/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c Tue Nov 27 14:25:16 2007
@@ -41,6 +41,7 @@
#include <xmlrpc-c/abyss.h>
#include <xmlrpc-c/server.h>
#include <xmlrpc-c/server_abyss.h>
+#include "../../libs/xmlrpc-c/lib/abyss/src/token.h"
SWITCH_MODULE_LOAD_FUNCTION(mod_xml_rpc_load);
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_rpc_shutdown);
@@ -137,27 +138,187 @@
}
-abyss_bool HandleHook(TSession * r)
+static abyss_bool http_directory_auth(TSession *r, char *domain_name)
{
- char *m = "text/html";
+ char *p, *x;
+ char z[80], t[80];
+ char user[512];
+ char *pass;
+ const char *mypass1 = NULL, *mypass2 = NULL;
+ switch_xml_t x_domain, x_domain_root = NULL, x_user, x_params, x_param;
+
+ p = RequestHeaderValue(r, "authorization");
+
+ if (p) {
+ NextToken(&p);
+ x = GetToken(&p);
+ if (x) {
+ if (!strcasecmp(x,"basic")) {
+
+
+ NextToken(&p);
+ switch_b64_decode(p, user, sizeof(user));
+ if ((pass = strchr(user, ':'))) {
+ *pass++ = '\0';
+ }
+
+ if (switch_xml_locate_user(user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", user, domain_name);
+ goto fail;
+ }
+
+ if (!(x_params = switch_xml_child(x_user, "params"))) {
+ goto authed;
+ }
+
+
+ for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) {
+ const char *var = switch_xml_attr_soft(x_param, "name");
+ const char *val = switch_xml_attr_soft(x_param, "value");
+
+ if (!strcasecmp(var, "password")) {
+ mypass1 = val;
+ } else if (!strcasecmp(var, "vm-password")) {
+ mypass2 = val;
+ } else if (!strncasecmp(var, "http-", 5)) {
+ ResponseAddField(r, (char *)var, (char *)val);
+ }
+ }
+
+ sprintf(z, "%s:%s", user, mypass1);
+ Base64Encode(z, t);
+
+ if (!strcmp(p, t)) {
+ r->user=strdup(user);
+ goto authed;
+ }
+
+ sprintf(z, "%s:%s", user, mypass2);
+ Base64Encode(z, t);
+
+ if (!strcmp(p, t)) {
+ r->user=strdup(user);
+ goto authed;
+ }
+
+ goto fail;
+
+
+ authed:
+
+ if (x_domain_root) {
+ switch_xml_free(x_domain_root);
+ }
+
+ return TRUE;
+ }
+ }
+ }
+
+ fail:
+
+ if (x_domain_root) {
+ switch_xml_free(x_domain_root);
+ }
+
+ sprintf(z, "Basic realm=\"%s\"", domain_name);
+ ResponseAddField(r, "WWW-Authenticate", z);
+ ResponseStatus(r, 401);
+ return FALSE;
+}
+
+abyss_bool auth_hook(TSession * r)
+{
+ char *domain_name, *e;
+ abyss_bool ret = FALSE;
+
+
+
+ if (!strncmp(r->uri, "/domains/", 9)) {
+ domain_name = strdup(r->uri + 9);
+ assert(domain_name);
+
+ if ((e = strchr(domain_name, '/'))) {
+ *e++ = '\0';
+ }
+
+ ret = !http_directory_auth(r, domain_name);
+
+ free(domain_name);
+ } else {
+ if (globals.realm) {
+ if (!RequestAuth(r, globals.realm, globals.user, globals.pass)) {
+ ret = TRUE;
+ }
+ }
+ }
+
+ return ret;
+}
+
+abyss_bool handler_hook(TSession * r)
+{
+ //char *mime = "text/html";
+ char buf[512] = "HTTP/1.1 200 OK\n";
switch_stream_handle_t stream = { 0 };
char *command;
+ int i, j = 0;
+ TTableItem *ti;
+ char *dup = NULL;
stream.data = r;
stream.write_function = http_stream_write;
- if (globals.realm) {
- if (!RequestAuth(r, globals.realm, globals.user, globals.pass)) {
- return TRUE;
- }
+ if ((command = strstr(r->uri, "/api/"))) {
+ command += 5;
+ } else {
+ return FALSE;
}
+ for (i=0;i<r->response_headers.size;i++) {
+ ti=&r->response_headers.item[i];
+ if (!strcasecmp(ti->name, "http-allowed-api")) {
+ int argc, x;
+ char *argv[256] = { 0 };
+ j++;
+
+ if (!strcasecmp(ti->value, "any")) {
+ goto auth;
+ }
+ if (!strcasecmp(ti->value, "none")) {
+ goto unauth;
+ }
- if (strncmp(r->uri, "/api/", 5)) {
- return FALSE;
+ dup = strdup(ti->value);
+ argc = switch_separate_string(dup, ',', argv, (sizeof(argv) / sizeof(argv[0])));
+
+ for (x = 0; x < argc; x++) {
+ if (!strcasecmp(command, argv[x])) {
+ goto auth;
+ }
+ }
+
+ goto unauth;
+ }
+ }
+
+ if (r->user && !j) {
+ goto unauth;
}
+ goto auth;
+
+ unauth:
+ ResponseStatus(r, 403);
+ ResponseError(r);
+ switch_safe_free(dup);
+
+ return TRUE;
+
+ auth:
+
+
if (switch_event_create(&stream.event, SWITCH_EVENT_API) == SWITCH_STATUS_SUCCESS) {
const char * const content_length = RequestHeaderValue(r, "content-length");
@@ -258,14 +419,40 @@
}
}
- command = r->uri + 5;
- ResponseChunked(r);
- ResponseStatus(r, 200);
- ResponseContentType(r, m);
- ResponseWrite(r);
- switch_api_execute(command, r->query, NULL, &stream);
- HTTPWriteEnd(r);
+
+ //ResponseChunked(r);
+
+ //ResponseContentType(r, mime);
+ //ResponseWrite(r);
+
+ HTTPWrite(r, buf, (uint32_t) strlen(buf));
+
+ /* generation of the date field */
+ if (DateToString(&r->date, buf)) {
+ ResponseAddField(r,"Date", buf);
+ }
+
+ /* Generation of the server field */
+ ResponseAddField(r,"Server", SERVER_HVERSION);
+
+ for (i=0;i<r->response_headers.size;i++) {
+ ti=&r->response_headers.item[i];
+ ConnWrite(r->conn,ti->name,strlen(ti->name));
+ ConnWrite(r->conn,": ",2);
+ ConnWrite(r->conn,ti->value,strlen(ti->value));
+ ConnWrite(r->conn,CRLF,2);
+ }
+
+
+ if (switch_api_execute(command, r->query, NULL, &stream) == SWITCH_STATUS_SUCCESS) {
+ r->done = TRUE;
+ } else {
+ ResponseStatus(r, 404);
+ ResponseError(r);
+ }
+
+ //HTTPWriteEnd(r);
return TRUE;
}
@@ -387,8 +574,9 @@
return SWITCH_STATUS_TERM;
}
- ServerAddHandler(&abyssServer, HandleHook);
+ ServerAddHandler(&abyssServer, handler_hook);
+ ServerAddHandler(&abyssServer, auth_hook);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Starting HTTP Port %d, DocRoot [%s]\n", globals.port, SWITCH_GLOBAL_dirs.htdocs_dir);
while (globals.running) {
ServerRunOnce2(&abyssServer, ABYSS_FOREGROUND);
Modified: freeswitch/trunk/src/switch_utils.c
==============================================================================
--- freeswitch/trunk/src/switch_utils.c (original)
+++ freeswitch/trunk/src/switch_utils.c Tue Nov 27 14:25:16 2007
@@ -91,6 +91,46 @@
}
+SWITCH_DECLARE(switch_status_t) switch_b64_decode(char *in, char *out, switch_size_t olen)
+{
+
+ char l64[256];
+ int b = 0, c, l = 0, i;
+ char *ip, *op = out;
+ size_t ol = 0;
+
+ for (i=0; i<256; i++) {
+ l64[i] = -1;
+ }
+
+ for (i=0; i<64; i++) {
+ l64[(int)switch_b64_table[i]] = i;
+ }
+
+ for (ip = in; ip && *ip; ip++) {
+ c = l64[(int)*ip];
+ if (c == -1) {
+ continue;
+ }
+
+ b = (b << 6) + c;
+ l += 6;
+
+ while (l >= 8) {
+ op[ol++] = (b >> (l -= 8)) % 256;
+ if (ol >= olen -2) {
+ goto end;
+ }
+ }
+ }
+
+ end:
+
+ op[ol++] = '\0';
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
static int write_buf(int fd, const char *buf)
{
Modified: freeswitch/trunk/src/switch_xml.cpp
==============================================================================
--- freeswitch/trunk/src/switch_xml.cpp (original)
+++ freeswitch/trunk/src/switch_xml.cpp Tue Nov 27 14:25:16 2007
@@ -1316,6 +1316,7 @@
} else {
snprintf(params, sizeof(params), "user=%s&domain=%s&ip=%s",
switch_str_nil(user_name), switch_str_nil(domain_name), switch_str_nil(ip));
+ xtra_params = "";
}
if ((status = switch_xml_locate_domain(domain_name, params, root, domain)) != SWITCH_STATUS_SUCCESS) {
return status;
@@ -1328,11 +1329,17 @@
}
if (user_name) {
- if (!(*user = switch_xml_find_child(*domain, "user", "id", user_name)) && strstr(xtra_params, "mailbox") &&
- !(*user = switch_xml_find_child(*domain, "user", "mailbox", user_name))) {
- return SWITCH_STATUS_FALSE;
+
+ if (strstr(xtra_params, "mailbox")) {
+ if ((*user = switch_xml_find_child(*domain, "user", "mailbox", user_name))) {
+ return SWITCH_STATUS_SUCCESS;
+ }
}
- return SWITCH_STATUS_SUCCESS;
+
+ if ((*user = switch_xml_find_child(*domain, "user", "id", user_name))) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
}
return SWITCH_STATUS_FALSE;
1
0
Author: mikej
Date: Tue Nov 27 11:45:47 2007
New Revision: 6412
Modified:
freeswitch/trunk/Freeswitch.sln
Log:
add missing conf files
Modified: freeswitch/trunk/Freeswitch.sln
==============================================================================
--- freeswitch/trunk/Freeswitch.sln (original)
+++ freeswitch/trunk/Freeswitch.sln Tue Nov 27 11:45:47 2007
@@ -712,6 +712,10 @@
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sip_profiles", "sip_profiles", "{4DF5199E-F7F5-4347-97DD-22078FCDB371}"
+ ProjectSection(SolutionItems) = preProject
+ debug\conf\sip_profiles\default.xml = debug\conf\sip_profiles\default.xml
+ debug\conf\sip_profiles\nat.xml = debug\conf\sip_profiles\nat.xml
+ EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lang", "lang", "{B487BEBE-4A5C-434F-8D30-39465412F84F}"
EndProject
1
0
27 Nov '07
Author: mikej
Date: Tue Nov 27 11:45:09 2007
New Revision: 6411
Modified:
freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c
Log:
don't printf null
Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Tue Nov 27 11:45:09 2007
@@ -1112,7 +1112,7 @@
}
}
} else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "RTP REPORTS ERROR: [%s]\n", err);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "RTP REPORTS ERROR: [%s]\n", switch_str_nil(err));
switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
switch_clear_flag_locked(tech_pvt, TFLAG_IO);
return SWITCH_STATUS_FALSE;
1
0
Author: brian
Date: Tue Nov 27 06:43:49 2007
New Revision: 6410
Added:
freeswitch/trunk/conf/autoload_configs/post_load_modules.conf.xml
Log:
add this because we should
Added: freeswitch/trunk/conf/autoload_configs/post_load_modules.conf.xml
==============================================================================
--- (empty file)
+++ freeswitch/trunk/conf/autoload_configs/post_load_modules.conf.xml Tue Nov 27 06:43:49 2007
@@ -0,0 +1,4 @@
+<configuration name="post_load_modules.conf" description="Modules">
+ <modules>
+ </modules>
+</configuration>
1
0
[commit] r6409 - in freeswitch/trunk: conf/autoload_configs src/mod/loggers/mod_syslog
by Freeswitch SVN 27 Nov '07
by Freeswitch SVN 27 Nov '07
27 Nov '07
Author: mikej
Date: Mon Nov 26 22:37:05 2007
New Revision: 6409
Modified:
freeswitch/trunk/conf/autoload_configs/syslog.conf.xml
freeswitch/trunk/src/mod/loggers/mod_syslog/mod_syslog.c
Log:
pass loglevel and remove unused params (FSCORE-33)
Modified: freeswitch/trunk/conf/autoload_configs/syslog.conf.xml
==============================================================================
--- freeswitch/trunk/conf/autoload_configs/syslog.conf.xml (original)
+++ freeswitch/trunk/conf/autoload_configs/syslog.conf.xml Mon Nov 26 22:37:05 2007
@@ -10,8 +10,6 @@
<!-- debug - debug-level message -->
<settings>
<param name="ident" value="freeswitch"/>
- <param name="facility" value="user"/>
<param name="format" value="${time} - ${message}"/>
- <param name="level" value="debug,info,warning-alert"/>
</settings>
</configuration>
Modified: freeswitch/trunk/src/mod/loggers/mod_syslog/mod_syslog.c
==============================================================================
--- freeswitch/trunk/src/mod/loggers/mod_syslog/mod_syslog.c (original)
+++ freeswitch/trunk/src/mod/loggers/mod_syslog/mod_syslog.c Mon Nov 26 22:37:05 2007
@@ -94,26 +94,26 @@
snprintf(line_no, sizeof(line_no), "%d", node->line);
message = switch_string_replace(message, "${line}", line_no);
- case (level) {
- SWITCH_LOG_DEBUG:
+ switch (level) {
+ case SWITCH_LOG_DEBUG:
syslog_level = LOG_DEBUG;
break;
- SWITCH_LOG_INFO:
+ case SWITCH_LOG_INFO:
syslog_level = LOG_INFO;
break;
- SWITCH_LOG_NOTICE:
+ case SWITCH_LOG_NOTICE:
syslog_level = LOG_NOTICE;
break;
- SWITCH_LOG_WARNING:
+ case SWITCH_LOG_WARNING:
syslog_level = LOG_WARNING;
break;
- SWITCH_LOG_ERROR:
+ case SWITCH_LOG_ERROR:
syslog_level = LOG_ERR;
break;
- SWITCH_LOG_CRIT:
+ case SWITCH_LOG_CRIT:
syslog_level = LOG_CRIT;
break;
- SWITCH_LOG_ALERT:
+ case SWITCH_LOG_ALERT:
syslog_level = LOG_ALERT;
break;
default:
1
0
27 Nov '07
Author: mikej
Date: Mon Nov 26 22:14:09 2007
New Revision: 6408
Modified:
freeswitch/trunk/src/mod/loggers/mod_syslog/mod_syslog.c
Log:
use logger interface level and remove unused facility and level config args. (FSCORE-33)
Modified: freeswitch/trunk/src/mod/loggers/mod_syslog/mod_syslog.c
==============================================================================
--- freeswitch/trunk/src/mod/loggers/mod_syslog/mod_syslog.c (original)
+++ freeswitch/trunk/src/mod/loggers/mod_syslog/mod_syslog.c Mon Nov 26 22:14:09 2007
@@ -47,15 +47,11 @@
static struct {
char *ident;
- char *facility;
- char *level;
char *format;
} globals;
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_ident, globals.ident);
-SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_level, globals.level);
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_format, globals.format);
-SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_facility, globals.facility);
static switch_loadable_module_interface_t console_module_interface = {
/*.module_name */ modname,
@@ -77,6 +73,7 @@
char date[80] = "";
switch_time_exp_t time;
switch_size_t retsize;
+ int syslog_level;
message = (char *) malloc(strlen(globals.format) + 2);
@@ -97,8 +94,35 @@
snprintf(line_no, sizeof(line_no), "%d", node->line);
message = switch_string_replace(message, "${line}", line_no);
+ case (level) {
+ SWITCH_LOG_DEBUG:
+ syslog_level = LOG_DEBUG;
+ break;
+ SWITCH_LOG_INFO:
+ syslog_level = LOG_INFO;
+ break;
+ SWITCH_LOG_NOTICE:
+ syslog_level = LOG_NOTICE;
+ break;
+ SWITCH_LOG_WARNING:
+ syslog_level = LOG_WARNING;
+ break;
+ SWITCH_LOG_ERROR:
+ syslog_level = LOG_ERR;
+ break;
+ SWITCH_LOG_CRIT:
+ syslog_level = LOG_CRIT;
+ break;
+ SWITCH_LOG_ALERT:
+ syslog_level = LOG_ALERT;
+ break;
+ default:
+ syslog_level = LOG_NOTICE;
+ break;
+ }
+
if (!switch_strlen_zero(message)) {
- syslog(LOG_ERR, "%s", message);
+ syslog(syslog_level, "%s", message);
}
free(message);
@@ -121,12 +145,8 @@
if (!strcmp(var, "ident")) {
set_global_ident(val);
- } else if (!strcmp(var, "facility")) {
- set_global_facility(val);
} else if (!strcmp(var, "format")) {
set_global_format(val);
- } else if (!strcmp(var, "level")) {
- set_global_level(val);;
}
}
@@ -137,16 +157,9 @@
if (switch_strlen_zero(globals.ident)) {
set_global_ident(DEFAULT_IDENT);
}
- if (switch_strlen_zero(globals.facility)) {
- set_global_facility(DEFAULT_FACILITY);
- }
if (switch_strlen_zero(globals.format)) {
set_global_format(DEFAULT_FORMAT);
}
- if (switch_strlen_zero(globals.level)) {
- set_global_level(DEFAULT_LEVEL);
- }
-
return 0;
}
1
0