[Freeswitch-branches] [commit] r5266 - in freeswitch/branches/greenlizard: . scripts scripts/socket/socket2me src src/include src/mod/applications/mod_dptools src/mod/applications/mod_esf src/mod/endpoints/mod_alsa src/mod/endpoints/mod_dingaling src/mod/endpoints/mod_sofia
Author: greenlizard Date: Tue Jun 5 12:36:58 2007 New Revision: 5266 Modified: freeswitch/branches/greenlizard/ (props changed) freeswitch/branches/greenlizard/scripts/mytest.py freeswitch/branches/greenlizard/scripts/socket/socket2me/socket2me.c freeswitch/branches/greenlizard/src/include/switch_ivr.h freeswitch/branches/greenlizard/src/include/switch_types.h freeswitch/branches/greenlizard/src/include/switch_utils.h freeswitch/branches/greenlizard/src/mod/applications/mod_dptools/mod_dptools.c freeswitch/branches/greenlizard/src/mod/applications/mod_esf/ (props changed) freeswitch/branches/greenlizard/src/mod/endpoints/mod_alsa/mod_alsa.c freeswitch/branches/greenlizard/src/mod/endpoints/mod_dingaling/mod_dingaling.c freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia.c freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_reg.c freeswitch/branches/greenlizard/src/switch_apr.c freeswitch/branches/greenlizard/src/switch_ivr_async.c Log: merge in changes from trunk 5240 to 5265 plus one trivial change: add comments to mytest.py Modified: freeswitch/branches/greenlizard/scripts/mytest.py ============================================================================== --- freeswitch/branches/greenlizard/scripts/mytest.py (original) +++ freeswitch/branches/greenlizard/scripts/mytest.py Tue Jun 5 12:36:58 2007 @@ -1,18 +1,32 @@ -import sys -from _freeswitch import * -print "Hello World" -print sys.path -print dir() -print sys.argv +# WARNING: May be out of date, please see +# http://wiki.freeswitch.org/wiki/Mod_python +# before reporting errors -uuid = sys.argv[0] -fs_consol_log("1","test from my python program\n") -fs_consol_clean("This is fs_consol_clean\n") -fs_consol_clean("My uuid is " + uuid + "\n") +import sys, time +def onDTMF(input, itype, buf, buflen): + print "input=",input + print "itype=",itype + print "buf=",buf + print "buflen",buflen + if input == "#": + return 1 + else: + return 0 +console_log("1","test from my python program\n") +session.answer() +session.setDTMFCallback(onDTMF) +session.set_tts_parms("cepstral", "david") +session.playFile("/root/test.gsm", "") +session.speakText("Please enter telephone number with area code and press pound sign. ") +input = session.getDigits("", 11, "*#", 10000) +console_log("1","result from get digits is "+ input +"\n") +phone_number = session.playAndGetDigits(5, 11, 3, 10000, "*#", + "/sounds/test.gsm", + "/sounds/invalid.gsm", + "", + "^17771112222$"); +console_log("1","result from play_and_get_digits is "+ phone_number +"\n") +session.transfer("1000", "XML", "default") +session.hangup("1") -session = fs_core_session_locate(uuid) - -fs_channel_answer(session) - -fs_switch_ivr_session_transfer(session, "1234", "XML", "default") Modified: freeswitch/branches/greenlizard/scripts/socket/socket2me/socket2me.c ============================================================================== --- freeswitch/branches/greenlizard/scripts/socket/socket2me/socket2me.c (original) +++ freeswitch/branches/greenlizard/scripts/socket/socket2me/socket2me.c Tue Jun 5 12:36:58 2007 @@ -248,7 +248,7 @@ addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); - sendaddr.sin_addr.s_addr = inet_addr(remote_ip); + /*addr.sin_addr.s_addr = inet_addr(remote_ip);*/ addr.sin_port = htons(remote_port); sendaddr.sin_family = AF_INET; @@ -316,7 +316,7 @@ continue; } - if ((read_bytes = recvfrom(usock, audiobuf, sizeof(audiobuf), 0, (struct sockaddr *) &local_addr, &cliAddrLen)) < 0) { + if ((read_bytes = recvfrom(usock, audiobuf, sizeof(audiobuf), 0, (struct sockaddr *) &local_addr, cliAddrLen)) < 0) { die("recvfrom() failed"); } 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 Tue Jun 5 12:36:58 2007 @@ -25,7 +25,7 @@ * * Anthony Minessale II <anthmct@yahoo.com> * Neal Horman <neal at wanlink dot com> - * + * Bret McDanel <trixter AT 0xdecafbad dot com> * * switch_ivr.h -- IVR Library * @@ -208,11 +208,44 @@ */ SWITCH_DECLARE(switch_status_t) switch_ivr_stop_record_session(switch_core_session_t *session, char *file); +/*! + \brief Start looking for DTMF inband + \param session the session to start looking + \return SWITCH_STATUS_SUCCESS if all is well +*/ SWITCH_DECLARE(switch_status_t) switch_ivr_inband_dtmf_session(switch_core_session_t *session); + +/*! + \brief Stop looking for DTMF inband + \param session the session to stop looking + \return SWITCH_STATUS_SUCCESS if all is well +*/ SWITCH_DECLARE(switch_status_t) switch_ivr_stop_inband_dtmf_session(switch_core_session_t *session); + +/*! + \brief XXX DESCRIBE ME + \param session the session to act on + \return SWITCH_STATUS_SUCCESS if all is well - maybe more XXX FIXME +*/ SWITCH_DECLARE(void) switch_ivr_session_echo(switch_core_session_t *session); /*! + \brief Stop looking for FAX CNG + \param session the session to stop looking + \return SWITCH_STATUS_SUCCESS if all is well +*/ +SWITCH_DECLARE(switch_status_t) switch_ivr_stop_fax_detect_session(switch_core_session_t *session); + +/*! + \brief Start looking for FAX CNG + \param session the session to start looking + \return SWITCH_STATUS_SUCCESS if all is well +*/ +SWITCH_DECLARE(switch_status_t) switch_ivr_fax_detect_session(switch_core_session_t *session); + + + +/*! \brief play a file from the disk to the session \param session the session to play the file too \param fh file handle to use (NULL for builtin one) Modified: freeswitch/branches/greenlizard/src/include/switch_types.h ============================================================================== --- freeswitch/branches/greenlizard/src/include/switch_types.h (original) +++ freeswitch/branches/greenlizard/src/include/switch_types.h Tue Jun 5 12:36:58 2007 @@ -24,6 +24,7 @@ * Contributor(s): * * Anthony Minessale II <anthmct@yahoo.com> + * Bret McDanel <trixter AT 0xdecafbad dot com> * * switch_types.h -- Data Types * @@ -832,6 +833,7 @@ SWITCH_EVENT_CODEC - Codec Change SWITCH_EVENT_BACKGROUND_JOB - Background Job SWITCH_EVENT_DETECTED_SPEECH - Detected Speech + SWITCH_EVENT_DETECTED_FAX - Detected Fax CNG Tone SWITCH_EVENT_PRIVATE_COMMAND - A private command event SWITCH_EVENT_HEARTBEAT - Machine is alive SWITCH_EVENT_TRAP - Error Trap @@ -881,6 +883,7 @@ SWITCH_EVENT_CODEC, SWITCH_EVENT_BACKGROUND_JOB, SWITCH_EVENT_DETECTED_SPEECH, + SWITCH_EVENT_DETECTED_FAX, SWITCH_EVENT_PRIVATE_COMMAND, SWITCH_EVENT_HEARTBEAT, SWITCH_EVENT_TRAP, Modified: freeswitch/branches/greenlizard/src/include/switch_utils.h ============================================================================== --- freeswitch/branches/greenlizard/src/include/switch_utils.h (original) +++ freeswitch/branches/greenlizard/src/include/switch_utils.h Tue Jun 5 12:36:58 2007 @@ -175,6 +175,16 @@ */ #define switch_copy_flags(dest, src, flags) (dest)->flags &= ~(flags); (dest)->flags |= ((src)->flags & (flags)) +#define switch_set_string(_dst, _src) switch_copy_string(_dst, _src, sizeof(_dst)) + +static __inline__ void switch_clean_string(char *s) +{ char *p; + + for (p = s; p && *p; p++) { uint8_t x = (uint8_t) *p; if (x < 32 || x > 127) { *p = ' '; } + } +} + + /*! \brief Free a pointer and set it to NULL unless it already is NULL 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 Tue Jun 5 12:36:58 2007 @@ -27,6 +27,7 @@ * Ken Rice, Asteria Solutions Group, Inc <ken@asteriasgi.com> * Michael Murdock <mike at mmurdock dot org> * Neal Horman <neal at wanlink dot com> + * Bret McDanel <trixter AT 0xdecafbad dot com> * * mod_dptools.c -- Raw Audio File Streaming Application Module * @@ -649,6 +650,30 @@ } +static void dtm_session_function(switch_core_session_t *session, char *data) +{ + switch_ivr_inband_dtmf_session(session); +} + + +static void stop_dtmf_session_function(switch_core_session_t *session, char *data) +{ + switch_ivr_stop_inband_dtmf_session(session); +} + +static void fax_detect_session_function(switch_core_session_t *session, char *data) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Enabling fax detection\n"); + switch_ivr_fax_detect_session(session); +} + +static void stop_fax_detect_session_function(switch_core_session_t *session, char *data) +{ + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Disabling fax detection\n"); + switch_ivr_stop_fax_detect_session(session); +} + + static const switch_api_interface_t strepoch_api_interface = { /*.interface_name */ "strepoch", /*.desc */ "Convert a date string into epoch time", @@ -682,6 +707,46 @@ }; +static const switch_application_interface_t fax_detect_application_interface = { + /*.interface_name */ "fax_detect", + /*.application_function */ fax_detect_session_function, + /* long_desc */ "Detect fax send tone", + /* short_desc */ "Detect faxes", + /* syntax */ "", + /* flags */ SAF_NONE, + /*.next */ NULL +}; + +static const switch_application_interface_t stop_fax_detect_application_interface = { + /*.interface_name */ "stop_fax_detect", + /*.application_function */ stop_fax_detect_session_function, + /* long_desc */ "Stop detecting fax send tones", + /* short_desc */ "stop detecting faxes", + /* syntax */ "", + /* flags */ SAF_NONE, + /* next */ &fax_detect_application_interface +}; + +static const switch_application_interface_t dtmf_application_interface = { + /*.interface_name */ "start_dtmf", + /*.application_function */ dtm_session_function, + /* long_desc */ "Detect inband dtmf on the session", + /* short_desc */ "Detect dtmf", + /* syntax */ "", + /* flags */ SAF_NONE, + /* next */ &stop_fax_detect_application_interface +}; + +static const switch_application_interface_t stop_dtmf_application_interface = { + /*.interface_name */ "stop_dtmf", + /*.application_function */ stop_dtmf_session_function, + /* long_desc */ "Stop detecting inband dtmf.", + /* short_desc */ "stop inband dtmf.", + /* syntax */ "", + /* flags */ SAF_NONE, + &dtmf_application_interface +}; + static const switch_application_interface_t exe_application_interface = { /*.interface_name */ "execute_extension", /*.application_function */ exe_function, @@ -689,7 +754,7 @@ /*.short_desc */ "Execute an extension", /*.syntax */ "<extension> <dialplan> <context>", /* flags */ SAF_SUPPORT_NOMEDIA, - /*.next */ + /*.next */ &stop_dtmf_application_interface }; static const switch_application_interface_t sched_transfer_application_interface = { Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_alsa/mod_alsa.c ============================================================================== --- freeswitch/branches/greenlizard/src/mod/endpoints/mod_alsa/mod_alsa.c (original) +++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_alsa/mod_alsa.c Tue Jun 5 12:36:58 2007 @@ -152,7 +152,8 @@ static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig); static switch_status_t engage_device(unsigned int samplerate, int codec_ms); static switch_status_t load_config(void); -static switch_status_t pa_cmd(char *dest, switch_core_session_t *session, switch_stream_handle_t *stream); +SWITCH_STANDARD_API(pa_cmd); + /* @@ -1529,7 +1530,7 @@ char *mycmd = NULL; switch_status_t status = SWITCH_STATUS_SUCCESS; pa_command_t func = NULL; - int lead = 1, devval = 0; + int lead = 1; char *wcmd = NULL, *action = NULL; char cmd_buf[1024] = ""; char *http = NULL; 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 Tue Jun 5 12:36:58 2007 @@ -439,7 +439,7 @@ } if (f_host && (profile = switch_core_hash_find(globals.profile_hash, f_host))) { - if (to && (sql = switch_mprintf("select * from jabber_subscriptions where sub_to='%q'", to))) { + if (to && (sql = switch_mprintf("select * from jabber_subscriptions where sub_to='%q' and sub_from='%q'", to, from))) { mdl_execute_sql_callback(profile, profile->mutex, sql, sin_callback, profile); switch_safe_free(sql); } @@ -1599,7 +1599,7 @@ static switch_api_interface_t debug_api_interface = { /*.interface_name */ "dl_debug", - /*.desc */ "DingaLing Presence", + /*.desc */ "DingaLing Debug", /*.function */ dl_debug, /*.syntax */ "dl_debug [true|false]", /*.next */ NULL 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 Tue Jun 5 12:36:58 2007 @@ -581,8 +581,9 @@ switch_set_flag(gateway, REG_FLAG_CALLERID); } gateway->register_from = switch_core_sprintf(gateway->pool, "sip:%s@%s", username, from_domain); - gateway->register_contact = switch_core_sprintf(gateway->pool, "sip:%s@%s:%d", extension, profile->sipip, profile->sip_port); - + gateway->register_contact = switch_core_sprintf(gateway->pool, "sip:%s@%s:%d", extension, + profile->extsipip ? profile->extsipip : profile->sipip, profile->sip_port); + if (!strncasecmp(proxy, "sip:", 4)) { gateway->register_proxy = switch_core_strdup(gateway->pool, proxy); gateway->register_to = switch_core_sprintf(gateway->pool, "sip:%s@%s", username, proxy + 4); @@ -600,7 +601,6 @@ } gateway->freq -= 2; - if ((gp = sofia_reg_find_gateway(gateway->name))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Ignoring duplicate gateway '%s'\n", gateway->name); sofia_reg_release_gateway(gp); @@ -608,7 +608,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Ignoring duplicate uri '%s'\n", gateway->register_from); sofia_reg_release_gateway(gp); } else if ((gp=sofia_reg_find_gateway(gateway->register_contact))) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Ignoring duplicate contact '%s'\n", gateway->register_from); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Ignoring duplicate contact '%s'\n", gateway->register_contact); sofia_reg_release_gateway(gp); } else { gateway->next = profile->gateways; 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 Tue Jun 5 12:36:58 2007 @@ -66,7 +66,7 @@ case REG_STATE_NOREG: break; case REG_STATE_REGISTER: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "registered %s\n", gateway_ptr->name); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "registered %s\n", gateway_ptr->name); gateway_ptr->expires = now + gateway_ptr->freq; gateway_ptr->state = REG_STATE_REGED; break; Modified: freeswitch/branches/greenlizard/src/switch_apr.c ============================================================================== --- freeswitch/branches/greenlizard/src/switch_apr.c (original) +++ freeswitch/branches/greenlizard/src/switch_apr.c Tue Jun 5 12:36:58 2007 @@ -339,6 +339,7 @@ { va_list ap; int ret; + va_start(ap, format); ret = apr_file_printf(thefile, format, ap); va_end(ap); return ret; Modified: freeswitch/branches/greenlizard/src/switch_ivr_async.c ============================================================================== --- freeswitch/branches/greenlizard/src/switch_ivr_async.c (original) +++ freeswitch/branches/greenlizard/src/switch_ivr_async.c Tue Jun 5 12:36:58 2007 @@ -25,6 +25,7 @@ * * Anthony Minessale II <anthmct@yahoo.com> * Michael Jerris <mike@jerris.com> + * Bret McDanel <bret AT 0xdecafbad dot com> * * switch_ivr_async.c -- IVR Library (async operations) * @@ -324,6 +325,122 @@ return SWITCH_STATUS_SUCCESS; } + +typedef struct { + switch_core_session_t *session; + teletone_multi_tone_t mt; +} switch_fax_detect_t; + +static switch_bool_t fax_detect_callback(switch_media_bug_t *bug, void *user_data, switch_abc_type_t type) +{ + switch_fax_detect_t *pvt = (switch_fax_detect_t *) user_data; + uint8_t data[SWITCH_RECOMMENDED_BUFFER_SIZE]; + switch_frame_t frame = { 0 }; + // switch_channel_t *channel = switch_core_session_get_channel(pvt->session); + + // assert(channel != NULL); + frame.data = data; + frame.buflen = SWITCH_RECOMMENDED_BUFFER_SIZE; + + switch (type) { + case SWITCH_ABC_TYPE_INIT: + break; + case SWITCH_ABC_TYPE_CLOSE: + break; + case SWITCH_ABC_TYPE_READ: + if (switch_core_media_bug_read(bug, &frame) == SWITCH_STATUS_SUCCESS) { + if(teletone_multi_tone_detect(&pvt->mt, frame.data, frame.samples)) { + switch_event_t *event; + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "FAX CNG DETECTED\n"); + + if (switch_event_create(&event, SWITCH_EVENT_DETECTED_FAX) == SWITCH_STATUS_SUCCESS) { + switch_event_t *dup; + + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "fax", "detected"); + + if (switch_event_dup(&dup, event) == SWITCH_STATUS_SUCCESS) { + switch_event_fire(&dup); + } + + + if (switch_core_session_queue_event(pvt->session, &event) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Event queue failed!\n"); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "delivery-failure", "true"); + switch_event_fire(&event); + } + } + } + } + break; + case SWITCH_ABC_TYPE_WRITE: + default: + break; + } + return SWITCH_TRUE; +} + +SWITCH_DECLARE(switch_status_t) switch_ivr_stop_fax_detect_session(switch_core_session_t *session) +{ + switch_media_bug_t *bug; + switch_channel_t *channel = switch_core_session_get_channel(session); + + assert(channel != NULL); + if ((bug = switch_channel_get_private(channel, "fax"))) { + switch_channel_set_private(channel, "fax", NULL); + switch_core_media_bug_remove(session, &bug); + return SWITCH_STATUS_SUCCESS; + } + + return SWITCH_STATUS_FALSE; + +} + +SWITCH_DECLARE(switch_status_t) switch_ivr_fax_detect_session(switch_core_session_t *session) +{ + switch_channel_t *channel; + switch_codec_t *read_codec; + switch_media_bug_t *bug; + switch_status_t status; + switch_fax_detect_t *pvt; + teletone_tone_map_t *map; + int i; + + channel = switch_core_session_get_channel(session); + assert(channel != NULL); + + + read_codec = switch_core_session_get_read_codec(session); + assert(read_codec != NULL); + + if (!(pvt = switch_core_session_alloc(session, sizeof(*pvt)))) { + return SWITCH_STATUS_MEMERR; + } + + if (!(map = switch_core_session_alloc(session, sizeof(*map)))) { + return SWITCH_STATUS_MEMERR; + } + + for(i=0;i<TELETONE_MAX_TONES;i++) { + map->freqs[i] = 1100.0; + } + pvt->mt.sample_rate = read_codec->implementation->samples_per_second; + pvt->session = session; + + teletone_multi_tone_init(&pvt->mt, map); + + switch_channel_answer(channel); + + if ((status = switch_core_media_bug_add(session, fax_detect_callback, pvt, 0, SMBF_READ_STREAM, &bug)) != SWITCH_STATUS_SUCCESS) { + return status; + } + + switch_channel_set_private(channel, "fax", bug); + + return SWITCH_STATUS_SUCCESS; +} + + struct speech_thread_handle { switch_core_session_t *session; switch_asr_handle_t *ah;
participants (1)
-
Freeswitch SVN