[Freeswitch-svn] [commit] r5685 - in freeswitch/branches/greenlizard: . conf scripts scripts/contrib/trixter scripts/py_modules src src/include src/mod/applications/mod_conference src/mod/applications/mod_dptools src/mod/applications/mod_ivrtest src/mod/applications/mod_rss src/mod/asr_tts/mod_openmrcp src/mod/endpoints/mod_dingaling src/mod/endpoints/mod_iax src/mod/endpoints/mod_portaudio src/mod/endpoints/mod_sofia src/mod/endpoints/mod_woomera src/mod/languages/mod_spidermonkey src/mod/say/mod_say_en src/mod/xml_int/mod_xml_cdr src/mod/xml_int/mod_xml_curl
Freeswitch SVN
greenlizard at freeswitch.org
Thu Sep 6 12:57:44 EDT 2007
Author: greenlizard
Date: Thu Sep 6 12:57:43 2007
New Revision: 5685
Added:
freeswitch/branches/greenlizard/scripts/contrib/trixter/softphone.pl
- copied unchanged from r5684, /freeswitch/trunk/scripts/contrib/trixter/softphone.pl
freeswitch/branches/greenlizard/scripts/py_modules/
- copied from r5684, /freeswitch/trunk/scripts/py_modules/
freeswitch/branches/greenlizard/scripts/py_modules/__init__.py
- copied unchanged from r5684, /freeswitch/trunk/scripts/py_modules/__init__.py
freeswitch/branches/greenlizard/scripts/py_modules/speechtools.py
- copied unchanged from r5684, /freeswitch/trunk/scripts/py_modules/speechtools.py
freeswitch/branches/greenlizard/scripts/recipewizard.py
- copied unchanged from r5684, /freeswitch/trunk/scripts/recipewizard.py
Modified:
freeswitch/branches/greenlizard/Makefile.am
freeswitch/branches/greenlizard/conf/conference.conf.xml
freeswitch/branches/greenlizard/src/include/switch_caller.h
freeswitch/branches/greenlizard/src/include/switch_core.h
freeswitch/branches/greenlizard/src/include/switch_ivr.h
freeswitch/branches/greenlizard/src/mod/applications/mod_conference/mod_conference.c
freeswitch/branches/greenlizard/src/mod/applications/mod_dptools/mod_dptools.c
freeswitch/branches/greenlizard/src/mod/applications/mod_ivrtest/mod_ivrtest.c
freeswitch/branches/greenlizard/src/mod/applications/mod_rss/mod_rss.c
freeswitch/branches/greenlizard/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c
freeswitch/branches/greenlizard/src/mod/endpoints/mod_dingaling/mod_dingaling.c
freeswitch/branches/greenlizard/src/mod/endpoints/mod_iax/mod_iax.c
freeswitch/branches/greenlizard/src/mod/endpoints/mod_portaudio/mod_portaudio.c
freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia.c
freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_glue.c
freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_reg.c
freeswitch/branches/greenlizard/src/mod/endpoints/mod_woomera/mod_woomera.c
freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h
freeswitch/branches/greenlizard/src/mod/say/mod_say_en/mod_say_en.c
freeswitch/branches/greenlizard/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c
freeswitch/branches/greenlizard/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c
freeswitch/branches/greenlizard/src/switch_caller.c
freeswitch/branches/greenlizard/src/switch_console.c
freeswitch/branches/greenlizard/src/switch_core_directory.c
freeswitch/branches/greenlizard/src/switch_core_session.c
freeswitch/branches/greenlizard/src/switch_core_speech.c
freeswitch/branches/greenlizard/src/switch_cpp.cpp
freeswitch/branches/greenlizard/src/switch_ivr_bridge.c
freeswitch/branches/greenlizard/src/switch_ivr_menu.c
freeswitch/branches/greenlizard/src/switch_ivr_originate.c
freeswitch/branches/greenlizard/src/switch_ivr_play_say.c
freeswitch/branches/greenlizard/src/switch_odbc.c
freeswitch/branches/greenlizard/src/switch_swig.c
freeswitch/branches/greenlizard/src/switch_xml.c
Log:
merge trunk 5651:5684
Modified: freeswitch/branches/greenlizard/Makefile.am
==============================================================================
--- freeswitch/branches/greenlizard/Makefile.am (original)
+++ freeswitch/branches/greenlizard/Makefile.am Thu Sep 6 12:57:43 2007
@@ -90,7 +90,8 @@
src/include/switch_cpp.h\
libs/libteletone/src/libteletone_detect.h\
libs/libteletone/src/libteletone_generate.h\
-libs/libteletone/src/libteletone.h
+libs/libteletone/src/libteletone.h\
+src/include/switch_odbc.h
CORE_CFLAGS = `$(switch_srcdir)/libs/apr/apr-1-config --cflags --cppflags --includes`
CORE_CFLAGS += `$(switch_srcdir)/libs/apr-util/apu-1-config --includes`
@@ -104,11 +105,6 @@
CORE_LIBS = libs/apr/libapr-1.la libs/apr-util/libaprutil-1.la
CORE_LIBS += libs/sqlite/libsqlite3.la libs/pcre/libpcre.la
CORE_LIBS += libs/srtp/libsrtp.la $(RESAMPLE_LIB)
-if ADD_ODBC
-libfreeswitch_la_SOURCES += src/switch_odbc.c
-library_include_HEADERS += src/include/switch_odbc.h
-CORE_LIBS += -lodbc
-endif
lib_LTLIBRARIES = libfreeswitch.la
libfreeswitch_la_CFLAGS = $(CORE_CFLAGS) $(AM_CFLAGS)
@@ -136,6 +132,10 @@
freeswitch_LDADD += -lcurses
endif
+if ADD_ODBC
+libfreeswitch_la_SOURCES += src/switch_odbc.c
+CORE_LIBS += -lodbc
+endif
libs/libedit/Makefile:
Modified: freeswitch/branches/greenlizard/conf/conference.conf.xml
==============================================================================
--- freeswitch/branches/greenlizard/conf/conference.conf.xml (original)
+++ freeswitch/branches/greenlizard/conf/conference.conf.xml Thu Sep 6 12:57:43 2007
@@ -44,9 +44,9 @@
<!-- Name of the caller control group to use for this profile -->
<!-- <param name="caller-controls" value="some name"/> -->
<!-- TTS Engine to use -->
- <!--<param name="tts-engine" value="cepstral"/>-->
+ <param name="tts-engine" value="cepstral"/>
<!-- TTS Voice to use -->
- <!--<param name="tts-voice" value="david"/>-->
+ <param name="tts-voice" value="david"/>
<!-- If TTS is enabled all audio-file params beginning with -->
<!-- 'say:' will be considered text to say with TTS -->
Modified: freeswitch/branches/greenlizard/src/include/switch_caller.h
==============================================================================
--- freeswitch/branches/greenlizard/src/include/switch_caller.h (original)
+++ freeswitch/branches/greenlizard/src/include/switch_caller.h Thu Sep 6 12:57:43 2007
@@ -99,6 +99,7 @@
struct switch_caller_profile *originatee_caller_profile;
struct switch_channel_timetable *times;
struct switch_caller_extension *caller_extension;
+ switch_memory_pool_t *pool;
struct switch_caller_profile *next;
};
@@ -189,10 +190,16 @@
\param session session associated with the profile (bound by scope)
\param tocopy the existing profile
*/
-
SWITCH_DECLARE(switch_caller_profile_t *) switch_caller_profile_clone(switch_core_session_t *session, switch_caller_profile_t *tocopy);
/*!
+ \brief Duplicate an existing caller profile object
+ \param pool pool to duplicate with
+ \param tocopy the existing profile
+*/
+SWITCH_DECLARE(switch_caller_profile_t *) switch_caller_profile_dup(switch_memory_pool_t *pool, switch_caller_profile_t *tocopy);
+
+/*!
\brief Add headers to an existing event in regards to a specific profile
\param caller_profile the desired profile
\param prefix a prefix string to all of the field names (for uniqueness)
Modified: freeswitch/branches/greenlizard/src/include/switch_core.h
==============================================================================
--- freeswitch/branches/greenlizard/src/include/switch_core.h (original)
+++ freeswitch/branches/greenlizard/src/include/switch_core.h Thu Sep 6 12:57:43 2007
@@ -1173,13 +1173,17 @@
\param module_name the speech module to use
\param voice_name the desired voice name
\param rate the sampling rate
+ \param interval the sampling interval
\param flags tts flags
\param pool the pool to use (NULL for new pool)
\return SWITCH_STATUS_SUCCESS if the handle is opened
*/
SWITCH_DECLARE(switch_status_t) switch_core_speech_open(switch_speech_handle_t *sh,
char *module_name,
- char *voice_name, unsigned int rate, switch_speech_flag_t *flags, switch_memory_pool_t *pool);
+ char *voice_name,
+ unsigned int rate,
+ unsigned int interval,
+ switch_speech_flag_t *flags, switch_memory_pool_t *pool);
/*!
\brief Feed text to the TTS module
\param sh the speech handle to feed
Modified: freeswitch/branches/greenlizard/src/include/switch_ivr.h
==============================================================================
--- freeswitch/branches/greenlizard/src/include/switch_ivr.h (original)
+++ freeswitch/branches/greenlizard/src/include/switch_ivr.h Thu Sep 6 12:57:43 2007
@@ -317,13 +317,12 @@
\param session the session to speak on
\param tts_name the desired tts module
\param voice_name the desired voice
- \param rate the sample rate
\param text the text to speak
\param args arguements to pass for callbacks etc
\return SWITCH_STATUS_SUCCESS if all is well
*/
SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text(switch_core_session_t *session,
- char *tts_name, char *voice_name, uint32_t rate, char *text, switch_input_args_t *args);
+ char *tts_name, char *voice_name, char *text, switch_input_args_t *args);
/*!
\brief Make an outgoing call
Modified: freeswitch/branches/greenlizard/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/applications/mod_conference/mod_conference.c (original)
+++ freeswitch/branches/greenlizard/src/mod/applications/mod_conference/mod_conference.c Thu Sep 6 12:57:43 2007
@@ -155,7 +155,7 @@
typedef struct conference_file_node {
switch_file_handle_t fh;
- switch_speech_handle_t sh;
+ switch_speech_handle_t *sh;
node_type_t type;
uint8_t done;
uint8_t async;
@@ -218,6 +218,8 @@
uint32_t count;
int32_t energy_level;
uint8_t min;
+ switch_speech_handle_t lsh;
+ switch_speech_handle_t *sh;
} conference_obj_t;
/* Relationship with another member */
@@ -257,6 +259,8 @@
conference_file_node_t *fnode;
conference_relationship_t *relationships;
switch_ivr_digit_stream_t *digit_stream;
+ switch_speech_handle_t lsh;
+ switch_speech_handle_t *sh;
struct conference_member *next;
};
@@ -606,10 +610,7 @@
cur = fnode;
fnode = fnode->next;
- if (cur->type == NODE_TYPE_SPEECH) {
- switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
- switch_core_speech_close(&cur->sh, &flags);
- } else {
+ if (cur->type != NODE_TYPE_SPEECH) {
switch_core_file_close(&cur->fh);
}
@@ -618,6 +619,12 @@
}
}
+ if (member->sh) {
+ switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
+ switch_core_speech_close(&member->lsh, &flags);
+ member->sh = NULL;
+ }
+
member->conference = NULL;
if (!switch_test_flag(member, MFLAG_NOCHANNEL)) {
@@ -763,7 +770,7 @@
switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_BLOCKING;
uint32_t rate = conference->rate;
- if (switch_core_speech_read_tts(&conference->fnode->sh, file_frame, &file_data_len, &rate, &flags) == SWITCH_STATUS_SUCCESS) {
+ if (switch_core_speech_read_tts(conference->fnode->sh, file_frame, &file_data_len, &rate, &flags) == SWITCH_STATUS_SUCCESS) {
file_sample_len = file_data_len / 2;
} else {
file_sample_len = file_data_len = 0;
@@ -896,10 +903,7 @@
conference_file_node_t *fnode;
switch_memory_pool_t *pool;
- if (conference->fnode->type == NODE_TYPE_SPEECH) {
- switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
- switch_core_speech_close(&conference->fnode->sh, &flags);
- } else {
+ if (conference->fnode->type != NODE_TYPE_SPEECH) {
switch_core_file_close(&conference->fnode->fh);
}
@@ -942,10 +946,7 @@
cur = fnode;
fnode = fnode->next;
- if (cur->type == NODE_TYPE_SPEECH) {
- switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
- switch_core_speech_close(&cur->sh, &flags);
- } else {
+ if (cur->type != NODE_TYPE_SPEECH) {
switch_core_file_close(&cur->fh);
}
@@ -991,6 +992,12 @@
switch_ivr_digit_stream_parser_destroy(conference->dtmf_parser);
+ if (conference->sh) {
+ switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
+ switch_core_speech_close(&conference->lsh, &flags);
+ conference->sh = NULL;
+ }
+
if (conference->pool) {
switch_memory_pool_t *pool = conference->pool;
switch_core_destroy_memory_pool(&pool);
@@ -1657,10 +1664,7 @@
conference_file_node_t *fnode;
switch_memory_pool_t *pool;
- if (member->fnode->type == NODE_TYPE_SPEECH) {
- switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
- switch_core_speech_close(&member->fnode->sh, &flags);
- } else {
+ if (member->fnode->type != NODE_TYPE_SPEECH) {
switch_core_file_close(&member->fnode->fh);
}
@@ -1680,7 +1684,7 @@
switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_BLOCKING;
uint32_t rate = member->conference->rate;
- if (switch_core_speech_read_tts(&member->fnode->sh, file_frame, &file_data_len, &rate, &flags) == SWITCH_STATUS_SUCCESS) {
+ if (switch_core_speech_read_tts(member->fnode->sh, file_frame, &file_data_len, &rate, &flags) == SWITCH_STATUS_SUCCESS) {
file_sample_len = file_data_len / 2;
} else {
file_sample_len = file_data_len = 0;
@@ -2238,11 +2242,15 @@
fnode->leadin = leadin;
fnode->pool = pool;
- memset(&fnode->sh, 0, sizeof(fnode->sh));
- if (switch_core_speech_open(&fnode->sh, conference->tts_engine, conference->tts_voice, conference->rate, &flags, fnode->pool) !=
- SWITCH_STATUS_SUCCESS) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module [%s]!\n", conference->tts_engine);
- return SWITCH_STATUS_FALSE;
+ if (!member->sh) {
+ memset(&member->lsh, 0, sizeof(member->lsh));
+ if (switch_core_speech_open(&member->lsh, conference->tts_engine, conference->tts_voice,
+ conference->rate, conference->interval, &flags, fnode->pool) !=
+ SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module [%s]!\n", conference->tts_engine);
+ return SWITCH_STATUS_FALSE;
+ }
+ member->sh = &member->lsh;
}
/* Queue the node */
@@ -2254,10 +2262,24 @@
} else {
member->fnode = fnode;
}
-
+
+ fnode->sh = member->sh;
/* Begin Generation */
switch_sleep(200000);
- switch_core_speech_feed_tts(&fnode->sh, text, &flags);
+
+ if (*text == '#') {
+ char *tmp = (char *)text + 1;
+ char *vp = tmp, voice[128] = "";
+ if ((tmp = strchr(tmp, '#'))) {
+ text = tmp + 1;
+ switch_copy_string(voice, vp, (tmp - vp) + 1);
+ switch_core_speech_text_param_tts(fnode->sh, "voice", voice);
+ }
+ } else {
+ switch_core_speech_text_param_tts(fnode->sh, "voice", conference->tts_voice);
+ }
+
+ switch_core_speech_feed_tts(fnode->sh, text, &flags);
switch_mutex_unlock(member->flag_mutex);
status = SWITCH_STATUS_SUCCESS;
@@ -2309,12 +2331,16 @@
fnode->type = NODE_TYPE_SPEECH;
fnode->leadin = leadin;
-
- memset(&fnode->sh, 0, sizeof(fnode->sh));
- if (switch_core_speech_open(&fnode->sh, conference->tts_engine, conference->tts_voice, conference->rate, &flags, conference->pool) !=
- SWITCH_STATUS_SUCCESS) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module [%s]!\n", conference->tts_engine);
- return SWITCH_STATUS_FALSE;
+
+ if (!conference->sh) {
+ memset(&conference->lsh, 0, sizeof(conference->lsh));
+ if (switch_core_speech_open(&conference->lsh, conference->tts_engine, conference->tts_voice,
+ conference->rate, conference->interval, &flags, conference->pool) !=
+ SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module [%s]!\n", conference->tts_engine);
+ return SWITCH_STATUS_FALSE;
+ }
+ conference->sh = &conference->lsh;
}
fnode->pool = pool;
@@ -2329,9 +2355,22 @@
conference->fnode = fnode;
}
+ fnode->sh = conference->sh;
+ if (*text == '#') {
+ char *tmp = (char *)text + 1;
+ char *vp = tmp, voice[128] = "";
+ if ((tmp = strchr(tmp, '#'))) {
+ text = tmp + 1;
+ switch_copy_string(voice, vp, (tmp - vp) + 1);
+ switch_core_speech_text_param_tts(fnode->sh, "voice", voice);
+ }
+ } else {
+ switch_core_speech_text_param_tts(fnode->sh, "voice", conference->tts_voice);
+ }
+
/* Begin Generation */
switch_sleep(200000);
- switch_core_speech_feed_tts(&fnode->sh, (char *) text, &flags);
+ switch_core_speech_feed_tts(fnode->sh, (char *) text, &flags);
switch_mutex_unlock(conference->mutex);
status = SWITCH_STATUS_SUCCESS;
@@ -3826,7 +3865,7 @@
if (!(conference->tts_engine && conference->tts_voice)) {
status = SWITCH_STATUS_FALSE;
} else {
- status = switch_ivr_speak_text(session, conference->tts_engine, conference->tts_voice, 0, path + 4, NULL);
+ status = switch_ivr_speak_text(session, conference->tts_engine, conference->tts_voice, path + 4, NULL);
}
goto done;
}
Modified: freeswitch/branches/greenlizard/src/mod/applications/mod_dptools/mod_dptools.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/applications/mod_dptools/mod_dptools.c (original)
+++ freeswitch/branches/greenlizard/src/mod/applications/mod_dptools/mod_dptools.c Thu Sep 6 12:57:43 2007
@@ -346,6 +346,88 @@
}
}
+
+SWITCH_STANDARD_APP(set_profile_var_function)
+{
+ switch_channel_t *channel;
+ switch_caller_profile_t *caller_profile;
+ char *name, *val = NULL;
+
+ channel = switch_core_session_get_channel(session);
+ assert(channel != NULL);
+
+ caller_profile = switch_channel_get_caller_profile(channel);
+
+ if (switch_strlen_zero(data)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No variable name specified.\n");
+ } else {
+ name = switch_core_session_strdup(session, data);
+ val = strchr(name, '=');
+
+ if (val) {
+ *val++ = '\0';
+ if (switch_strlen_zero(val)) {
+ val = NULL;
+ }
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SET_PROFILE_VAR [%s]=[%s]\n", name, val ? val : "UNDEF");
+
+ if (!strcasecmp(name, "dialplan")) {
+ caller_profile->dialplan = val;
+ }
+ if (!strcasecmp(name, "username")) {
+ caller_profile->username = val;
+ }
+ if (!strcasecmp(name, "caller_id_name")) {
+ caller_profile->caller_id_name = val;
+ }
+ if (!strcasecmp(name, "caller_id_number")) {
+ caller_profile->caller_id_number = val;
+ }
+ if (!strcasecmp(name, "caller_ton")) {
+ caller_profile->caller_ton = (uint8_t)atoi(val);
+ }
+ if (!strcasecmp(name, "caller_numplan")) {
+ caller_profile->caller_numplan = (uint8_t)atoi(val);
+ }
+ if (!strcasecmp(name, "destination_number_ton")) {
+ caller_profile->destination_number_ton = (uint8_t)atoi(val);
+ }
+ if (!strcasecmp(name, "destination_number_numplan")) {
+ caller_profile->destination_number_numplan = (uint8_t)atoi(val);
+ }
+ if (!strcasecmp(name, "ani")) {
+ caller_profile->ani = val;
+ }
+ if (!strcasecmp(name, "aniii")) {
+ caller_profile->aniii = val;
+ }
+ if (!strcasecmp(name, "network_addr")) {
+ caller_profile->network_addr = val;
+ }
+ if (!strcasecmp(name, "rdnis")) {
+ caller_profile->rdnis = val;
+ }
+ if (!strcasecmp(name, "destination_number")) {
+ caller_profile->destination_number = val;
+ }
+ if (!strcasecmp(name, "uuid")) {
+ caller_profile->uuid = val;
+ }
+ if (!strcasecmp(name, "source")) {
+ caller_profile->source = val;
+ }
+ if (!strcasecmp(name, "context")) {
+ caller_profile->context = val;
+ }
+ if (!strcasecmp(name, "chan_name")) {
+ caller_profile->chan_name = val;
+ }
+ }
+}
+
+
SWITCH_STANDARD_APP(export_function)
{
switch_channel_t *channel;
@@ -860,7 +942,7 @@
args.input_callback = on_dtmf;
args.buf = buf;
args.buflen = sizeof(buf);
- switch_ivr_speak_text(session, engine, voice, codec->implementation->samples_per_second, text, &args);
+ switch_ivr_speak_text(session, engine, voice, text, &args);
}
@@ -1141,6 +1223,7 @@
#define SCHED_HANGUP_DESCR "Schedule a hangup in the future"
#define UNSET_LONG_DESC "Unset a channel varaible for the channel calling the application."
#define SET_LONG_DESC "Set a channel varaible for the channel calling the application."
+#define SET_PROFILE_VAR_LONG_DESC "Set a caller profile varaible for the channel calling the application."
#define EXPORT_LONG_DESC "Set and export a channel varaible for the channel calling the application."
#define LOG_LONG_DESC "Logs a channel varaible for the channel calling the application."
#define TRANSFER_LONG_DESC "Immediatly transfer the calling channel to a new extension"
@@ -1171,6 +1254,7 @@
SWITCH_ADD_APP(app_interface, "event", "Fire an event", "Fire an event", event_function, "", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "export", "Export a channel varaible across a bridge", EXPORT_LONG_DESC, export_function, "<varname>=<value>", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "set", "Set a channel varaible", SET_LONG_DESC, set_function, "<varname>=<value>", SAF_SUPPORT_NOMEDIA);
+ SWITCH_ADD_APP(app_interface, "set_profile_var", "Set a caller profile varaible", SET_PROFILE_VAR_LONG_DESC, set_profile_var_function, "<varname>=<value>", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "unset", "Unset a channel varaible", UNSET_LONG_DESC, unset_function, "<varname>", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "ring_ready", "Indicate Ring_Ready", "Indicate Ring_Ready on a channel.", ring_ready_function, "", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "break", "Break", "Set the break flag.", break_function, "", SAF_SUPPORT_NOMEDIA);
Modified: freeswitch/branches/greenlizard/src/mod/applications/mod_ivrtest/mod_ivrtest.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/applications/mod_ivrtest/mod_ivrtest.c (original)
+++ freeswitch/branches/greenlizard/src/mod/applications/mod_ivrtest/mod_ivrtest.c Thu Sep 6 12:57:43 2007
@@ -207,7 +207,7 @@
args.input_callback = show_dtmf;
args.buf = buf;
args.buflen = sizeof(buf);
- switch_ivr_speak_text(session, tts_name, voice_name, codec->implementation->samples_per_second, text, &args);
+ switch_ivr_speak_text(session, tts_name, voice_name, text, &args);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Done\n");
}
@@ -405,7 +405,7 @@
}
snprintf(say, sizeof(say), "You Dialed [%s]\n", buf);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, say);
- switch_ivr_speak_text(session, "cepstral", "david", codec->implementation->samples_per_second, say, NULL);
+ switch_ivr_speak_text(session, "cepstral", "david", say, NULL);
}
}
Modified: freeswitch/branches/greenlizard/src/mod/applications/mod_rss/mod_rss.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/applications/mod_rss/mod_rss.c (original)
+++ freeswitch/branches/greenlizard/src/mod/applications/mod_rss/mod_rss.c Thu Sep 6 12:57:43 2007
@@ -243,7 +243,7 @@
}
memset(&sh, 0, sizeof(sh));
- if (switch_core_speech_open(&sh, engine, voice, rate, &flags, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+ if (switch_core_speech_open(&sh, engine, voice, rate, interval, &flags, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module!\n");
return;
}
Modified: freeswitch/branches/greenlizard/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c (original)
+++ freeswitch/branches/greenlizard/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c Thu Sep 6 12:57:43 2007
@@ -62,14 +62,9 @@
#include "mrcp_recognizer.h"
#include "mrcp_synthesizer.h"
#include "mrcp_generic_header.h"
-#include "mrcp_resource_set.h"
#include <switch.h>
-#define OPENMRCP_WAIT_TIMEOUT 5000
-#define MY_BUF_LEN 1024 * 128
-#define MY_BLOCK_SIZE MY_BUF_LEN
-
SWITCH_MODULE_LOAD_FUNCTION(mod_openmrcp_load);
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_openmrcp_shutdown);
SWITCH_MODULE_DEFINITION(mod_openmrcp, mod_openmrcp_load,
@@ -95,12 +90,9 @@
} openmrcp_session_t;
typedef enum {
- FLAG_HAS_TEXT = (1 << 0),
- FLAG_BARGE = (1 << 1),
- FLAG_READY = (1 << 2),
- FLAG_SPEAK_COMPLETE = (1 << 3),
- FLAG_FEED_STARTED = (1 << 4),
- FLAG_TERMINATING = (1 << 5)
+ FLAG_HAS_MESSAGE = (1 << 0),
+ FLAG_FEED_STARTED = (1 << 1),
+ FLAG_TERMINATING = (1 << 2)
} mrcp_flag_t;
typedef struct {
@@ -220,38 +212,19 @@
return MRCP_STATUS_FAILURE;
}
- if (mrcp_message->start_line.message_type != MRCP_MESSAGE_TYPE_EVENT) {
+ if (mrcp_message->start_line.message_type == MRCP_MESSAGE_TYPE_RESPONSE && mrcp_message->start_line.request_state == MRCP_REQUEST_STATE_INPROGRESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "ignoring mrcp response\n");
return MRCP_STATUS_SUCCESS;
}
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "mrcp msg body: %s\n", mrcp_message->body);
-
- if (mrcp_message->channel_id.resource_id == MRCP_RESOURCE_RECOGNIZER) {
- if (mrcp_message->start_line.method_id == RECOGNIZER_RECOGNITION_COMPLETE) {
- openmrcp_session->mrcp_message_last_rcvd = mrcp_message;
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "setting FLAG_HAS_TEXT\n");
- switch_set_flag_locked(openmrcp_session, FLAG_HAS_TEXT);
- }
- else if (mrcp_message->start_line.method_id == RECOGNIZER_START_OF_INPUT) {
- openmrcp_session->mrcp_message_last_rcvd = mrcp_message;
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "setting FLAG_BARGE\n");
- switch_set_flag_locked(openmrcp_session, FLAG_BARGE);
- }
- else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "ignoring event: %s\n", mrcp_message->start_line.method_name);
- }
- }
- else if(mrcp_message->channel_id.resource_id == MRCP_RESOURCE_SYNTHESIZER) {
- if (mrcp_message->start_line.method_id == SYNTHESIZER_SPEAK_COMPLETE) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setting FLAG_SPEAK_COMPLETE\n");
- switch_set_flag_locked(openmrcp_session, FLAG_SPEAK_COMPLETE);
- }
- else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "ignoring event: %s\n", mrcp_message->start_line.method_name);
- }
+ if (switch_test_flag(openmrcp_session, FLAG_HAS_MESSAGE)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "already has message\n");
+ return MRCP_STATUS_SUCCESS;
}
-
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "setting FLAG_HAS_MESSAGE\n");
+ openmrcp_session->mrcp_message_last_rcvd = mrcp_message;
+ switch_set_flag_locked(openmrcp_session, FLAG_HAS_MESSAGE);
return MRCP_STATUS_SUCCESS;
}
@@ -473,8 +446,8 @@
{
openmrcp_session_t *asr_session = (openmrcp_session_t *) ah->private_info;
- switch_status_t rv = (switch_test_flag(asr_session, FLAG_HAS_TEXT) || switch_test_flag(asr_session, FLAG_BARGE)) ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
-
+ switch_status_t rv = (switch_test_flag(asr_session, FLAG_HAS_MESSAGE)) ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
+
return rv;
}
@@ -483,50 +456,61 @@
{
openmrcp_session_t *asr_session = (openmrcp_session_t *) ah->private_info;
switch_status_t ret = SWITCH_STATUS_SUCCESS;
+ mrcp_message_t *message;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "openmrcp_asr_get_results called\n");
- if (switch_test_flag(asr_session, FLAG_BARGE)) {
- switch_clear_flag_locked(asr_session, FLAG_BARGE);
- ret = SWITCH_STATUS_BREAK;
- }
-
- if (switch_test_flag(asr_session, FLAG_HAS_TEXT)) {
- /*!
- we have to extract the XML but stripping off the <?xml version="1.0"?>
- header. the body looks like:
-
- Completion-Cause:001 no-match
- Content-Type: application/nlsml+xml
- Content-Length: 260
-
- <?xml version="1.0"?>
- <result xmlns="http://www.ietf.org/xml/ns/mrcpv2" xmlns:ex="http://www.example.com/example" score="100" grammar="session:request1 at form-level.store">
- <interpretation> <input mode="speech">open a</input>
- </interpretation>
- </result>
- */
-
- if(asr_session->mrcp_message_last_rcvd && asr_session->mrcp_message_last_rcvd->body) {
- char *marker = "?>"; // FIXME -- lame and brittle way of doing this. use regex or better.
- char *position = strstr(asr_session->mrcp_message_last_rcvd->body, marker);
- if (!position) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bad result received from mrcp server: %s", asr_session->mrcp_message_last_rcvd->body);
- ret = SWITCH_STATUS_FALSE;
+ message = asr_session->mrcp_message_last_rcvd;
+ asr_session->mrcp_message_last_rcvd = NULL;
+ // since we are returning our result here, future calls to check_results
+ // should return False
+ switch_clear_flag_locked(asr_session, FLAG_HAS_MESSAGE);
+
+ if (message->start_line.message_type == MRCP_MESSAGE_TYPE_RESPONSE) {
+ if (message->start_line.status_code != MRCP_STATUS_CODE_SUCCESS &&
+ message->start_line.status_code != MRCP_STATUS_CODE_SUCCESS_WITH_IGNORE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "error code received [%d]\n", message->start_line.status_code);
+ ret = SWITCH_STATUS_FALSE;
+ }
+ }
+ else if (message->start_line.message_type == MRCP_MESSAGE_TYPE_EVENT) {
+ if (message->start_line.method_id == RECOGNIZER_RECOGNITION_COMPLETE) {
+ /*!
+ we have to extract the XML but stripping off the <?xml version="1.0"?>
+ header. the body looks like:
+
+ Completion-Cause:001 no-match
+ Content-Type: application/nlsml+xml
+ Content-Length: 260
+
+ <?xml version="1.0"?>
+ <result xmlns="http://www.ietf.org/xml/ns/mrcpv2" xmlns:ex="http://www.example.com/example" score="100" grammar="session:request1 at form-level.store">
+ <interpretation> <input mode="speech">open a</input>
+ </interpretation>
+ </result>
+ */
+
+ if(message->body) {
+ char *marker = "?>"; // FIXME -- lame and brittle way of doing this. use regex or better.
+ char *position = strstr(message->body, marker);
+ if (!position) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bad result received from mrcp server: %s", message->body);
+ ret = SWITCH_STATUS_FALSE;
+ }
+ else {
+ position += strlen(marker);
+ *xmlstr = strdup(position);
+ }
}
else {
- position += strlen(marker);
- *xmlstr = strdup(position);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No result received from mrcp server\n");
+ ret = SWITCH_STATUS_FALSE;
}
- }
- else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No result received from mrcp server\n");
- ret = SWITCH_STATUS_FALSE;
- }
- // since we are returning our result here, future calls to check_results
- // should return False
- switch_clear_flag_locked(asr_session, FLAG_HAS_TEXT);
- ret = SWITCH_STATUS_SUCCESS;
+ ret = SWITCH_STATUS_SUCCESS;
+ }
+ else if (message->start_line.method_id == RECOGNIZER_START_OF_INPUT) {
+ ret = SWITCH_STATUS_BREAK;
+ }
}
return ret;
}
@@ -658,10 +642,25 @@
media_frame_t media_frame;
audio_source_t *audio_source;
- if (switch_test_flag(tts_session, FLAG_SPEAK_COMPLETE)) {
- /* tell fs we are done */
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "FLAG_SPEAK_COMPLETE\n");
- return SWITCH_STATUS_BREAK;
+ if (switch_test_flag(tts_session, FLAG_HAS_MESSAGE)) {
+ mrcp_message_t *message = tts_session->mrcp_message_last_rcvd;
+ tts_session->mrcp_message_last_rcvd = NULL;
+ switch_clear_flag_locked(tts_session, FLAG_HAS_MESSAGE);
+
+ if (message->start_line.message_type == MRCP_MESSAGE_TYPE_RESPONSE) {
+ if (message->start_line.status_code != MRCP_STATUS_CODE_SUCCESS &&
+ message->start_line.status_code != MRCP_STATUS_CODE_SUCCESS_WITH_IGNORE) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "error code received [%d]\n", message->start_line.status_code);
+ return SWITCH_STATUS_BREAK;
+ }
+ }
+ else if (message->start_line.message_type == MRCP_MESSAGE_TYPE_EVENT) {
+ if (message->start_line.method_id == SYNTHESIZER_SPEAK_COMPLETE) {
+ /* tell fs we are done */
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "FLAG_SPEAK_COMPLETE\n");
+ return SWITCH_STATUS_BREAK;
+ }
+ }
}
audio_source = mrcp_client_audio_source_get(tts_session->audio_channel);
@@ -962,5 +961,5 @@
{
/* destroy openmrcp */
openmrcp_destroy();
- return SWITCH_STATUS_UNLOAD;
+ return SWITCH_STATUS_SUCCESS;
}
Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_dingaling/mod_dingaling.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_dingaling/mod_dingaling.c (original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_dingaling/mod_dingaling.c Thu Sep 6 12:57:43 2007
@@ -2650,12 +2650,11 @@
cid_name,
cid_num,
ldl_session_get_ip(dlsession),
- ldl_session_get_value(dlsession,
- "ani"),
- ldl_session_get_value(dlsession,
- "aniii"),
- ldl_session_get_value(dlsession,
- "rdnis"), (char *) modname, context,
+ ldl_session_get_value(dlsession, "ani"),
+ ldl_session_get_value(dlsession, "aniii"),
+ ldl_session_get_value(dlsession, "rdnis"),
+ modname,
+ context,
exten)) != 0) {
char name[128];
snprintf(name, sizeof(name), "DingaLing/%s", tech_pvt->caller_profile->destination_number);
Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_iax/mod_iax.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_iax/mod_iax.c (original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_iax/mod_iax.c Thu Sep 6 12:57:43 2007
@@ -1107,8 +1107,9 @@
iaxevent->ies.calling_ani,
NULL,
NULL,
- (char *) modname,
- iaxevent->ies.called_context, iaxevent->ies.called_number)) != 0) {
+ modname,
+ iaxevent->ies.called_context,
+ iaxevent->ies.called_number)) != 0) {
char name[128];
snprintf(name, sizeof(name), "IAX/%s-%04x", tech_pvt->caller_profile->destination_number, rand() & 0xffff);
switch_channel_set_name(channel, name);
Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_portaudio/mod_portaudio.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_portaudio/mod_portaudio.c (original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_portaudio/mod_portaudio.c Thu Sep 6 12:57:43 2007
@@ -1600,8 +1600,8 @@
}
if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session),
- NULL,
- dialplan, cid_name, cid_num, NULL, NULL, NULL, NULL, (char *) modname, NULL,
+ NULL, dialplan, cid_name, cid_num,
+ NULL, NULL, NULL, NULL, modname, NULL,
dest)) != 0) {
char name[128];
snprintf(name, sizeof(name), "PortAudio/%s",
Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia.c (original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia.c Thu Sep 6 12:57:43 2007
@@ -1935,7 +1935,10 @@
tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session),
from_user,
profile->dialplan,
- displayname, from_user, network_ip, NULL, NULL, NULL, MODNAME, context, destination_number);
+ displayname,
+ from_user,
+ network_ip,
+ NULL, NULL, NULL, MODNAME, context, destination_number);
if (tech_pvt->caller_profile) {
Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_glue.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_glue.c (original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_glue.c Thu Sep 6 12:57:43 2007
@@ -505,10 +505,10 @@
if (switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NAME)) {
priv = "name";
if (switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NUMBER)) {
- priv = "yes";
+ priv = "full";
}
} else if (switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NUMBER)) {
- priv = "yes";
+ priv = "full";
}
if (switch_test_flag(caller_profile, SWITCH_CPF_SCREEN)) {
screen = "yes";
@@ -1369,6 +1369,7 @@
case 603:
return SWITCH_CAUSE_CALL_REJECTED;
case 404:
+ return SWITCH_CAUSE_UNALLOCATED;
case 485:
case 604:
return SWITCH_CAUSE_NO_ROUTE_DESTINATION;
Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_reg.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_reg.c (original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_reg.c Thu Sep 6 12:57:43 2007
@@ -729,8 +729,9 @@
const char *passwd = NULL;
const char *a1_hash = NULL;
char *sql;
- switch_xml_t domain, xml, user, param, xparams;
-
+ switch_xml_t domain, xml = NULL, user, param, xparams;
+ char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = "";
+
username = realm = nonce = uri = qop = cnonce = nc = response = NULL;
if (authorization->au_params) {
@@ -805,7 +806,6 @@
if (!(xparams = switch_xml_child(user, "params"))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find params for user [%s@%s]\n", username, realm);
- switch_xml_free(xml);
ret = AUTH_FORBIDDEN;
goto end;
}
@@ -838,8 +838,6 @@
}
}
- switch_xml_free(xml);
-
if (switch_strlen_zero(passwd) && switch_strlen_zero(a1_hash)) {
ret = AUTH_OK;
goto end;
@@ -847,7 +845,6 @@
if (!a1_hash) {
su_md5_t ctx;
- char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1];
char *input;
input = switch_mprintf("%s:%s:%s", username, realm, passwd);
@@ -894,6 +891,9 @@
}
end:
+ if (xml) {
+ switch_xml_free(xml);
+ }
switch_safe_free(input);
switch_safe_free(input2);
switch_safe_free(username);
Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_woomera/mod_woomera.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_woomera/mod_woomera.c (original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_woomera/mod_woomera.c Thu Sep 6 12:57:43 2007
@@ -1059,7 +1059,15 @@
if ((tech_pvt->caller_profile = switch_caller_profile_new(switch_core_session_get_pool(session),
NULL,
tech_pvt->profile->dialplan,
- cid_name, cid_num, ip, NULL, NULL, NULL, (char *) modname, NULL, exten)) != 0) {
+ cid_name,
+ cid_num,
+ ip,
+ NULL,
+ NULL,
+ NULL,
+ modname,
+ NULL,
+ exten)) != 0) {
char name[128];
snprintf(name, sizeof(name), "Woomera/%s-%04x", tech_pvt->caller_profile->destination_number, rand() & 0xffff);
switch_channel_set_name(channel, name);
Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original)
+++ freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Thu Sep 6 12:57:43 2007
@@ -1242,6 +1242,7 @@
char *phrase_name = NULL;
char *phrase_data = NULL;
char *phrase_lang = NULL;
+ char *tmp = NULL;
//char *input_callback = NULL;
void *bp = NULL;
int len = 0;
@@ -1272,7 +1273,10 @@
}
if (argc > 2) {
- phrase_lang = JS_GetStringBytes(JS_ValueToString(cx, argv[2]));
+ tmp = JS_GetStringBytes(JS_ValueToString(cx, argv[2]));
+ if (!switch_strlen_zero(tmp)) {
+ phrase_lang = tmp;
+ }
}
if (argc > 3) {
@@ -1502,6 +1506,53 @@
return JS_TRUE;
}
+static void destroy_speech_engine(struct js_session *jss)
+{
+ if (jss->speech) {
+ switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
+ switch_core_codec_destroy(&jss->speech->codec);
+ switch_core_speech_close(&jss->speech->sh, &flags);
+ jss->speech = NULL;
+ }
+}
+
+
+static switch_status_t init_speech_engine(struct js_session *jss, char *engine, char *voice)
+{
+ switch_codec_t *read_codec;
+ switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
+ uint32_t rate = 0;
+ int interval = 0;
+
+ read_codec = switch_core_session_get_read_codec(jss->session);
+ rate = read_codec->implementation->samples_per_second;
+ interval = read_codec->implementation->microseconds_per_frame / 1000;
+
+ if (switch_core_codec_init(&jss->speech->codec,
+ "L16",
+ NULL,
+ rate,
+ interval,
+ 1, SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL,
+ switch_core_session_get_pool(jss->session)) == SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Success L16@%uhz 1 channel %dms\n", rate, interval);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Failed L16@%uhz 1 channel %dms\n", rate, interval);
+ return SWITCH_STATUS_FALSE;
+ }
+
+
+ if (switch_core_speech_open(&jss->speech->sh, engine, voice, rate, interval,
+ &flags, switch_core_session_get_pool(jss->session)) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module!\n");
+ switch_core_codec_destroy(&jss->speech->codec);
+ return SWITCH_STATUS_FALSE;
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+
+}
+
static JSBool session_speak(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
{
@@ -1520,13 +1571,13 @@
METHOD_SANITY_CHECK();
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
channel = switch_core_session_get_channel(jss->session);
assert(channel != NULL);
CHANNEL_SANITY_CHECK();
if (argc < 3) {
- *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
return JS_FALSE;
}
@@ -1534,6 +1585,34 @@
voice_name = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
text = JS_GetStringBytes(JS_ValueToString(cx, argv[2]));
+
+ if (switch_strlen_zero(tts_name)) {
+ eval_some_js("~throw new Error(\"Invalid TTS Name\");", cx, obj, rval);
+ return JS_TRUE;
+ }
+
+ if (switch_strlen_zero(text)) {
+ eval_some_js("~throw new Error(\"Invalid Text\");", cx, obj, rval);
+ return JS_TRUE;
+ }
+
+
+ if (jss->speech && strcasecmp(jss->speech->sh.name, tts_name)) {
+ destroy_speech_engine(jss);
+ }
+
+ if (jss->speech) {
+ switch_core_speech_text_param_tts(&jss->speech->sh, "voice", voice_name);
+ } else {
+ jss->speech = switch_core_session_alloc(jss->session, sizeof(*jss->speech));
+ assert(jss->speech != NULL);
+ if (init_speech_engine(jss, tts_name, voice_name) != SWITCH_STATUS_SUCCESS) {
+ eval_some_js("~throw new Error(\"Cannot allocate speech engine!\");", cx, obj, rval);
+ jss->speech = NULL;
+ return JS_TRUE;
+ }
+ }
+
if (argc > 3) {
if ((function = JS_ValueToFunction(cx, argv[3]))) {
memset(&cb_state, 0, sizeof(cb_state));
@@ -1551,9 +1630,6 @@
}
}
- if (!tts_name && text) {
- return JS_FALSE;
- }
codec = switch_core_session_get_read_codec(jss->session);
cb_state.ret = BOOLEAN_TO_JSVAL(JS_FALSE);
@@ -1561,8 +1637,9 @@
args.input_callback = dtmf_func;
args.buf = bp;
args.buflen = len;
- switch_ivr_speak_text(jss->session, tts_name, voice_name
- && strlen(voice_name) ? voice_name : NULL, codec->implementation->samples_per_second, text, &args);
+
+ switch_core_speech_flush_tts(&jss->speech->sh);
+ switch_ivr_speak_text_handle(jss->session, &jss->speech->sh, &jss->speech->codec, NULL, text, &args);
JS_ResumeRequest(cx, cb_state.saveDepth);
*rval = cb_state.ret;
@@ -2353,9 +2430,8 @@
return JS_FALSE;
}
- caller_profile = switch_caller_profile_new(pool,
- username, dialplan, cid_name, cid_num, network_addr, ani, aniii, rdnis, (char *) modname, context,
- dest);
+ caller_profile = switch_caller_profile_new(pool,username, dialplan, cid_name, cid_num, network_addr,
+ ani, aniii, rdnis, modname, context, dest);
if (switch_ivr_originate(session, &peer_session, &jss->cause, dest, to ? atoi(to) : 60, NULL, NULL, NULL, caller_profile) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot Create Outgoing Channel! [%s]\n", dest);
@@ -2385,6 +2461,8 @@
if (cx && obj) {
if ((jss = JS_GetPrivate(cx, obj))) {
+ destroy_speech_engine(jss);
+
if (jss->session) {
channel = switch_core_session_get_channel(jss->session);
switch_channel_set_private(channel, "jss", NULL);
Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h (original)
+++ freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h Thu Sep 6 12:57:43 2007
@@ -122,6 +122,11 @@
typedef struct sm_module_interface sm_module_interface_t;
typedef switch_status_t (*spidermonkey_init_t) (const sm_module_interface_t ** module_interface);
+struct js_session_speech {
+ switch_speech_handle_t sh;
+ switch_codec_t codec;
+};
+
struct js_session {
switch_core_session_t *session;
JSContext *cx;
@@ -141,6 +146,7 @@
char *rdnis;
char *context;
char *username;
+ struct js_session_speech *speech;
};
JSBool DEFAULT_SET_PROPERTY(JSContext * cx, JSObject *obj, jsval id, jsval *vp)
Modified: freeswitch/branches/greenlizard/src/mod/say/mod_say_en/mod_say_en.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/say/mod_say_en/mod_say_en.c (original)
+++ freeswitch/branches/greenlizard/src/mod/say/mod_say_en/mod_say_en.c Thu Sep 6 12:57:43 2007
@@ -156,7 +156,8 @@
{
switch_channel_t *channel;
int in;
- int x = 0, places[9] = { 0 };
+ uint32_t x = 0;
+ int places[9] = { 0 };
char sbuf[13] = "";
switch_status_t status;
Modified: freeswitch/branches/greenlizard/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c (original)
+++ freeswitch/branches/greenlizard/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c Thu Sep 6 12:57:43 2007
@@ -88,7 +88,8 @@
if(!switch_strlen_zero(logdir)) {
if ((path = switch_mprintf("%s/xml_cdr/%s.cdr.xml", logdir, switch_core_session_get_uuid(session)))) {
if ((fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)) > -1) {
- write(fd, xml_text, (unsigned) strlen(xml_text));
+ int wrote;
+ wrote = write(fd, xml_text, (unsigned) strlen(xml_text));
close(fd);
fd = -1;
} else {
@@ -160,7 +161,8 @@
if ((path = switch_mprintf("%s/%s.cdr.xml", globals.errLogDir, switch_core_session_get_uuid(session)))) {
if ((fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)) > -1) {
- write(fd, xml_text, (unsigned) strlen(xml_text));
+ int wrote;
+ wrote = write(fd, xml_text, (unsigned) strlen(xml_text));
close(fd);
fd = -1;
} else {
Modified: freeswitch/branches/greenlizard/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c (original)
+++ freeswitch/branches/greenlizard/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c Thu Sep 6 12:57:43 2007
@@ -53,8 +53,8 @@
{
register unsigned int realsize = (unsigned int) (size * nmemb);
struct config_data *config_data = data;
-
- write(config_data->fd, ptr, realsize);
+ int x;
+ x = write(config_data->fd, ptr, realsize);
return realsize;
}
@@ -72,7 +72,7 @@
xml_binding_t *binding = (xml_binding_t *) user_data;
char *file_url;
struct curl_slist *slist = NULL;
- long httpRes;
+ long httpRes = 0;
if (!binding) {
return NULL;
Modified: freeswitch/branches/greenlizard/src/switch_caller.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_caller.c (original)
+++ freeswitch/branches/greenlizard/src/switch_caller.c Thu Sep 6 12:57:43 2007
@@ -63,29 +63,31 @@
profile->context = switch_clean_string(switch_core_strdup(pool, switch_str_nil(context)));
profile->destination_number = switch_clean_string(switch_core_strdup(pool, switch_str_nil(destination_number)));
switch_set_flag(profile, SWITCH_CPF_SCREEN);
+ profile->pool = pool;
}
return profile;
}
-SWITCH_DECLARE(switch_caller_profile_t *) switch_caller_profile_clone(switch_core_session_t *session, switch_caller_profile_t *tocopy)
+SWITCH_DECLARE(switch_caller_profile_t *) switch_caller_profile_dup(switch_memory_pool_t *pool, switch_caller_profile_t *tocopy)
{
switch_caller_profile_t *profile = NULL;
- if ((profile = switch_core_session_alloc(session, sizeof(switch_caller_profile_t))) != 0) {
- profile->username = switch_core_session_strdup(session, tocopy->username);
- profile->dialplan = switch_core_session_strdup(session, tocopy->dialplan);
- profile->caller_id_name = switch_core_session_strdup(session, tocopy->caller_id_name);
- profile->ani = switch_core_session_strdup(session, tocopy->ani);
- profile->aniii = switch_core_session_strdup(session, tocopy->aniii);
- profile->caller_id_number = switch_core_session_strdup(session, tocopy->caller_id_number);
- profile->network_addr = switch_core_session_strdup(session, tocopy->network_addr);
- profile->rdnis = switch_core_session_strdup(session, tocopy->rdnis);
- profile->destination_number = switch_core_session_strdup(session, tocopy->destination_number);
- profile->uuid = switch_core_session_strdup(session, tocopy->uuid);
- profile->source = switch_core_session_strdup(session, tocopy->source);
- profile->context = switch_core_session_strdup(session, tocopy->context);
- profile->chan_name = switch_core_session_strdup(session, tocopy->chan_name);
+
+ if ((profile = switch_core_alloc(pool, sizeof(switch_caller_profile_t))) != 0) {
+ profile->username = switch_core_strdup(pool, tocopy->username);
+ profile->dialplan = switch_core_strdup(pool, tocopy->dialplan);
+ profile->caller_id_name = switch_core_strdup(pool, tocopy->caller_id_name);
+ profile->ani = switch_core_strdup(pool, tocopy->ani);
+ profile->aniii = switch_core_strdup(pool, tocopy->aniii);
+ profile->caller_id_number = switch_core_strdup(pool, tocopy->caller_id_number);
+ profile->network_addr = switch_core_strdup(pool, tocopy->network_addr);
+ profile->rdnis = switch_core_strdup(pool, tocopy->rdnis);
+ profile->destination_number = switch_core_strdup(pool, tocopy->destination_number);
+ profile->uuid = switch_core_strdup(pool, tocopy->uuid);
+ profile->source = switch_core_strdup(pool, tocopy->source);
+ profile->context = switch_core_strdup(pool, tocopy->context);
+ profile->chan_name = switch_core_strdup(pool, tocopy->chan_name);
profile->caller_ton = tocopy->caller_ton;
profile->caller_numplan = tocopy->caller_numplan;
profile->ani_ton = tocopy->ani_ton;
@@ -95,11 +97,23 @@
profile->destination_number_ton = tocopy->destination_number_ton;
profile->destination_number_numplan = tocopy->destination_number_numplan;
profile->flags = tocopy->flags;
+ profile->pool = pool;
}
return profile;
}
+
+SWITCH_DECLARE(switch_caller_profile_t *) switch_caller_profile_clone(switch_core_session_t *session, switch_caller_profile_t *tocopy)
+{
+ switch_memory_pool_t *pool;
+
+ pool = switch_core_session_get_pool(session);
+
+ return switch_caller_profile_dup(pool, tocopy);
+}
+
+
SWITCH_DECLARE(char *) switch_caller_get_field_by_name(switch_caller_profile_t *caller_profile, const char *name)
{
if (!strcasecmp(name, "dialplan")) {
@@ -141,6 +155,30 @@
if (!strcasecmp(name, "chan_name")) {
return caller_profile->chan_name;
}
+ if (!strcasecmp(name, "caller_ton")) {
+ return switch_core_sprintf(caller_profile->pool, "%u", caller_profile->caller_ton);
+ }
+ if (!strcasecmp(name, "caller_numplan")) {
+ return switch_core_sprintf(caller_profile->pool, "%u", caller_profile->caller_numplan);
+ }
+ if (!strcasecmp(name, "destination_number_ton")) {
+ return switch_core_sprintf(caller_profile->pool, "%u", caller_profile->destination_number_ton);
+ }
+ if (!strcasecmp(name, "destination_number_numplan")) {
+ return switch_core_sprintf(caller_profile->pool, "%u", caller_profile->destination_number_numplan);
+ }
+ if (!strcasecmp(name, "ani_ton")) {
+ return switch_core_sprintf(caller_profile->pool, "%u", caller_profile->ani_ton);
+ }
+ if (!strcasecmp(name, "ani_numplan")) {
+ return switch_core_sprintf(caller_profile->pool, "%u", caller_profile->ani_numplan);
+ }
+ if (!strcasecmp(name, "rdnis_ton")) {
+ return switch_core_sprintf(caller_profile->pool, "%u", caller_profile->rdnis_ton);
+ }
+ if (!strcasecmp(name, "rdnis_numplan")) {
+ return switch_core_sprintf(caller_profile->pool, "%u", caller_profile->rdnis_numplan);
+ }
return NULL;
}
Modified: freeswitch/branches/greenlizard/src/switch_console.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_console.c (original)
+++ freeswitch/branches/greenlizard/src/switch_console.c Thu Sep 6 12:57:43 2007
@@ -183,7 +183,7 @@
static char prompt_str[512] = "";
char * prompt(EditLine *e) {
- if (switch_strlen_zero(prompt_str)) {
+ if (*prompt_str == '\0') {
gethostname(hostname, sizeof(hostname));
snprintf(prompt_str, sizeof(prompt_str), "freeswitch@%s> ", hostname);
}
Modified: freeswitch/branches/greenlizard/src/switch_core_directory.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_core_directory.c (original)
+++ freeswitch/branches/greenlizard/src/switch_core_directory.c Thu Sep 6 12:57:43 2007
@@ -76,28 +76,3 @@
return dh->directory_interface->directory_close(dh);
}
-SWITCH_DECLARE(switch_status_t) switch_core_speech_open(switch_speech_handle_t *sh,
- char *module_name,
- char *voice_name, unsigned int rate, switch_speech_flag_t *flags, switch_memory_pool_t *pool)
-{
- switch_status_t status;
-
- if ((sh->speech_interface = switch_loadable_module_get_speech_interface(module_name)) == 0) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "invalid speech module [%s]!\n", module_name);
- return SWITCH_STATUS_GENERR;
- }
-
- switch_copy_string(sh->engine, module_name, sizeof(sh->engine));
- sh->flags = *flags;
- if (pool) {
- sh->memory_pool = pool;
- } else {
- if ((status = switch_core_new_memory_pool(&sh->memory_pool)) != SWITCH_STATUS_SUCCESS) {
- return status;
- }
- switch_set_flag(sh, SWITCH_SPEECH_FLAG_FREE_POOL);
- }
- sh->rate = rate;
- sh->name = switch_core_strdup(pool, module_name);
- return sh->speech_interface->speech_open(sh, voice_name, rate, flags);
-}
Modified: freeswitch/branches/greenlizard/src/switch_core_session.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_core_session.c (original)
+++ freeswitch/branches/greenlizard/src/switch_core_session.c Thu Sep 6 12:57:43 2007
@@ -201,23 +201,14 @@
ecaller_id_number = switch_channel_get_variable(channel, "effective_caller_id_number");
if (ecaller_id_name || ecaller_id_number) {
- if (!ecaller_id_name) {
- ecaller_id_name = caller_profile->caller_id_name;
+ outgoing_profile = switch_caller_profile_clone(session, caller_profile);
+
+ if (ecaller_id_name) {
+ outgoing_profile->caller_id_name = ecaller_id_name;
}
- if (!ecaller_id_number) {
- ecaller_id_number = caller_profile->caller_id_number;
+ if (ecaller_id_number) {
+ outgoing_profile->caller_id_number = ecaller_id_number;
}
- outgoing_profile = switch_caller_profile_new(switch_core_session_get_pool(session),
- caller_profile->username,
- caller_profile->dialplan,
- ecaller_id_name,
- ecaller_id_number,
- caller_profile->network_addr,
- caller_profile->ani,
- caller_profile->aniii,
- caller_profile->rdnis,
- caller_profile->source, caller_profile->context, caller_profile->destination_number);
- outgoing_profile->flags = caller_profile->flags;
}
}
if (!outgoing_profile) {
Modified: freeswitch/branches/greenlizard/src/switch_core_speech.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_core_speech.c (original)
+++ freeswitch/branches/greenlizard/src/switch_core_speech.c Thu Sep 6 12:57:43 2007
@@ -34,6 +34,40 @@
#include <switch.h>
#include "private/switch_core_pvt.h"
+
+SWITCH_DECLARE(switch_status_t) switch_core_speech_open(switch_speech_handle_t *sh,
+ char *module_name,
+ char *voice_name,
+ unsigned int rate,
+ unsigned int interval,
+ switch_speech_flag_t *flags,
+ switch_memory_pool_t *pool)
+{
+ switch_status_t status;
+
+ if ((sh->speech_interface = switch_loadable_module_get_speech_interface(module_name)) == 0) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "invalid speech module [%s]!\n", module_name);
+ return SWITCH_STATUS_GENERR;
+ }
+
+ switch_copy_string(sh->engine, module_name, sizeof(sh->engine));
+ sh->flags = *flags;
+ if (pool) {
+ sh->memory_pool = pool;
+ } else {
+ if ((status = switch_core_new_memory_pool(&sh->memory_pool)) != SWITCH_STATUS_SUCCESS) {
+ return status;
+ }
+ switch_set_flag(sh, SWITCH_SPEECH_FLAG_FREE_POOL);
+ }
+ sh->rate = rate;
+ sh->name = switch_core_strdup(pool, module_name);
+ sh->samples = switch_bytes_per_frame(rate, interval);
+
+ return sh->speech_interface->speech_open(sh, voice_name, rate, flags);
+}
+
+
SWITCH_DECLARE(switch_status_t) switch_core_speech_feed_tts(switch_speech_handle_t *sh, char *text, switch_speech_flag_t *flags)
{
assert(sh != NULL);
Modified: freeswitch/branches/greenlizard/src/switch_cpp.cpp
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_cpp.cpp (original)
+++ freeswitch/branches/greenlizard/src/switch_cpp.cpp Thu Sep 6 12:57:43 2007
@@ -123,7 +123,6 @@
int CoreSession::speak(char *text)
{
switch_status_t status;
- switch_codec_t *codec;
sanity_check(-1);
@@ -142,9 +141,9 @@
return SWITCH_STATUS_FALSE;
}
- codec = switch_core_session_get_read_codec(session);
+
begin_allow_threads();
- status = switch_ivr_speak_text(session, tts_name, voice_name, codec->implementation->samples_per_second, text, ap);
+ status = switch_ivr_speak_text(session, tts_name, voice_name, text, ap);
end_allow_threads();
return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
}
Modified: freeswitch/branches/greenlizard/src/switch_ivr_bridge.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_ivr_bridge.c (original)
+++ freeswitch/branches/greenlizard/src/switch_ivr_bridge.c Thu Sep 6 12:57:43 2007
@@ -84,12 +84,14 @@
switch_event_t *event;
loop_count++;
- /* if you really want to make sure it's not ready, test it twice because it might be just a break */
- if (!switch_channel_ready(chan_a) && !switch_channel_ready(chan_a)) {
+ if (!switch_channel_ready(chan_a)) {
break;
}
if ((b_state = switch_channel_get_state(chan_b)) >= CS_HANGUP) {
+ if (originator && !ans_a && !ans_b) {
+ switch_channel_hangup(chan_a, switch_channel_get_cause(chan_b));
+ }
break;
}
@@ -163,8 +165,7 @@
continue;
}
}
-
-
+
/* read audio from 1 channel and write it to the other */
status = switch_core_session_read_frame(session_a, &read_frame, -1, stream_id);
Modified: freeswitch/branches/greenlizard/src/switch_ivr_menu.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_ivr_menu.c (original)
+++ freeswitch/branches/greenlizard/src/switch_ivr_menu.c Thu Sep 6 12:57:43 2007
@@ -263,7 +263,7 @@
} else {
if (strlen(sound) > 4 && strncmp(sound, "say:", 4) == 0) {
if (menu->tts_engine && menu->tts_voice) {
- status = switch_ivr_speak_text(session, menu->tts_engine, menu->tts_voice, 0, sound + 4, &args);
+ status = switch_ivr_speak_text(session, menu->tts_engine, menu->tts_voice, sound + 4, &args);
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No TTS engine to play sound\n");
}
@@ -369,7 +369,7 @@
status = switch_ivr_play_file(session, NULL, aptr, NULL);
break;
case SWITCH_IVR_ACTION_SAYTEXT:
- status = switch_ivr_speak_text(session, menu->tts_engine, menu->tts_voice, 0, aptr, NULL);
+ status = switch_ivr_speak_text(session, menu->tts_engine, menu->tts_voice, aptr, NULL);
break;
case SWITCH_IVR_ACTION_SAYPHRASE:
status = switch_ivr_phrase_macro(session, aptr, "", menu->phrase_lang, NULL);
Modified: freeswitch/branches/greenlizard/src/switch_ivr_originate.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_ivr_originate.c (original)
+++ freeswitch/branches/greenlizard/src/switch_ivr_originate.c Thu Sep 6 12:57:43 2007
@@ -470,34 +470,18 @@
}
caller_caller_profile = caller_profile_override ? caller_profile_override : switch_channel_get_caller_profile(caller_channel);
+ new_profile = switch_caller_profile_clone(session, caller_caller_profile);
+ new_profile->destination_number = chan_data;
- if (!cid_name_override) {
- cid_name_override = caller_caller_profile->caller_id_name;
+ if (cid_name_override) {
+ new_profile->caller_id_name = cid_name_override;
}
- if (!cid_num_override) {
- cid_num_override = caller_caller_profile->caller_id_number;
+ if (cid_num_override) {
+ new_profile->caller_id_number = cid_num_override;
}
- new_profile = switch_caller_profile_new(switch_core_session_get_pool(session),
- caller_caller_profile->username,
- caller_caller_profile->dialplan,
- cid_name_override,
- cid_num_override,
- caller_caller_profile->network_addr,
- NULL,
- NULL,
- caller_caller_profile->rdnis,
- caller_caller_profile->source, caller_caller_profile->context, chan_data);
- new_profile->flags = caller_caller_profile->flags;
pool = NULL;
} else {
- if (!cid_name_override) {
- cid_name_override = "FreeSWITCH";
- }
- if (!cid_num_override) {
- cid_num_override = "0000000000";
- }
-
if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "OH OH no pool\n");
status = SWITCH_STATUS_TERM;
@@ -505,22 +489,23 @@
}
if (caller_profile_override) {
- new_profile = switch_caller_profile_new(pool,
- caller_profile_override->username,
- caller_profile_override->dialplan,
- caller_profile_override->caller_id_name,
- caller_profile_override->caller_id_number,
- caller_profile_override->network_addr,
- caller_profile_override->ani,
- caller_profile_override->aniii,
- caller_profile_override->rdnis,
- caller_profile_override->source, caller_profile_override->context, chan_data);
+ new_profile = switch_caller_profile_dup(pool, caller_profile_override);
+ new_profile->destination_number = chan_data;
} else {
+ if (!cid_name_override) {
+ cid_name_override = "FreeSWITCH";
+ }
+ if (!cid_num_override) {
+ cid_num_override = "0000000000";
+ }
+
new_profile = switch_caller_profile_new(pool,
- NULL,
- NULL,
- cid_name_override, cid_num_override, NULL, NULL, NULL, NULL, __FILE__, NULL,
- chan_data);
+ NULL,
+ NULL,
+ cid_name_override,
+ cid_num_override,
+ NULL, NULL, NULL, NULL, __FILE__, NULL,
+ chan_data);
}
}
Modified: freeswitch/branches/greenlizard/src/switch_ivr_play_say.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_ivr_play_say.c (original)
+++ freeswitch/branches/greenlizard/src/switch_ivr_play_say.c Thu Sep 6 12:57:43 2007
@@ -250,11 +250,7 @@
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid SAY Interface [%s]!\n", chan_lang);
}
} else if (!strcasecmp(func, "speak-text")) {
- switch_codec_t *read_codec;
- if ((read_codec = switch_core_session_get_read_codec(session))) {
-
- status = switch_ivr_speak_text(session, tts_engine, tts_voice, read_codec->implementation->samples_per_second, odata, args);
- }
+ status = switch_ivr_speak_text(session, tts_engine, tts_voice, odata, args);
}
}
}
@@ -1340,11 +1336,11 @@
SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text(switch_core_session_t *session,
- char *tts_name, char *voice_name, uint32_t rate, char *text, switch_input_args_t *args)
+ char *tts_name, char *voice_name, char *text, switch_input_args_t *args)
{
switch_channel_t *channel;
+ uint32_t rate = 0;
int interval = 0;
- uint32_t len = 0;
switch_frame_t write_frame = { 0 };
switch_timer_t timer;
switch_core_thread_session_t thread_session;
@@ -1366,12 +1362,12 @@
switch_core_session_reset(session);
read_codec = switch_core_session_get_read_codec(session);
- if (rate == 0) {
- rate = read_codec->implementation->samples_per_second;
- }
+ rate = read_codec->implementation->samples_per_second;
+ interval = read_codec->implementation->microseconds_per_frame / 1000;
memset(&sh, 0, sizeof(sh));
- if (switch_core_speech_open(&sh, tts_name, voice_name, (uint32_t) rate, &flags, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+ if (switch_core_speech_open(&sh, tts_name, voice_name, (uint32_t) rate, interval,
+ &flags, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid TTS module!\n");
switch_core_session_reset(session);
return SWITCH_STATUS_FALSE;
@@ -1380,9 +1376,6 @@
switch_channel_answer(channel);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OPEN TTS %s\n", tts_name);
- interval = read_codec->implementation->microseconds_per_frame / 1000;
- sh.samples = switch_bytes_per_frame(rate, interval);
- len = sh.samples * 2;
codec_name = "L16";
@@ -1409,7 +1402,7 @@
switch_core_session_reset(session);
return SWITCH_STATUS_GENERR;
}
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer success %u bytes per %d ms!\n", len, interval);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer success %u bytes per %d ms!\n", sh.samples * 2, interval);
/* start a thread to absorb incoming audio */
for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) {
Modified: freeswitch/branches/greenlizard/src/switch_odbc.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_odbc.c (original)
+++ freeswitch/branches/greenlizard/src/switch_odbc.c Thu Sep 6 12:57:43 2007
@@ -415,14 +415,14 @@
SWITCH_DECLARE(char *) switch_odbc_handle_get_error(switch_odbc_handle_t *handle, SQLHSTMT stmt)
{
- char buffer[SQL_MAX_MESSAGE_LENGTH + 1];
- char sqlstate[SQL_SQLSTATE_SIZE + 1];
+ char buffer[SQL_MAX_MESSAGE_LENGTH + 1] = "";
+ char sqlstate[SQL_SQLSTATE_SIZE + 1] = "";
SQLINTEGER sqlcode;
SQLSMALLINT length;
char *ret = NULL;
if (SQLError(handle->env, handle->con, stmt, (SQLCHAR *)sqlstate, &sqlcode, (SQLCHAR *)buffer, sizeof(buffer), &length) == SQL_SUCCESS) {
- ret = switch_mprintf("STATE: %s CODE %ld ERROR: %s\n", switch_str_nil(sqlstate), sqlcode, switch_str_nil(buffer));
+ ret = switch_mprintf("STATE: %s CODE %ld ERROR: %s\n", sqlstate, sqlcode, buffer);
};
return ret;
Modified: freeswitch/branches/greenlizard/src/switch_swig.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_swig.c (original)
+++ freeswitch/branches/greenlizard/src/switch_swig.c Thu Sep 6 12:57:43 2007
@@ -260,11 +260,11 @@
return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
}
-int fs_switch_ivr_speak_text(switch_core_session_t *session, char *tts_name, char *voice_name, uint32_t rate, char *text)
+int fs_switch_ivr_speak_text(switch_core_session_t *session, char *tts_name, char *voice_name, char *text)
{
switch_status_t status;
- status = switch_ivr_speak_text(session, tts_name, voice_name, rate, text, NULL);
+ status = switch_ivr_speak_text(session, tts_name, voice_name, text, NULL);
return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
}
Modified: freeswitch/branches/greenlizard/src/switch_xml.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_xml.c (original)
+++ freeswitch/branches/greenlizard/src/switch_xml.c Thu Sep 6 12:57:43 2007
@@ -966,16 +966,16 @@
}
}
- if ((cmd = strstr(bp, "<!--#"))) {
- if(write(write_fd, bp, (unsigned) (cmd - bp)) != (cmd - bp)) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Short write!\n");
- }
+ if ((cmd = strstr(bp, "<!--#"))) {
+ if(write(write_fd, bp, (unsigned) (cmd - bp)) != (cmd - bp)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Short write!\n");
+ }
if ((e = strstr(cmd, "-->"))) {
*e = '\0';
- e += 3;
- if(write(write_fd, e, (unsigned) strlen(e)) != (int) strlen(e)) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Short write!\n");
- }
+ e += 3;
+ if(write(write_fd, e, (unsigned) strlen(e)) != (int) strlen(e)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Short write!\n");
+ }
} else {
ml++;
}
@@ -1031,11 +1031,11 @@
continue;
}
-
- if(write(write_fd, bp, (unsigned) cur) != (int) cur) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Short write!\n");
- }
-
+
+ if(write(write_fd, bp, (unsigned) cur) != (int) cur) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Short write!\n");
+ }
+
}
close(read_fd);
More information about the Freeswitch-svn
mailing list