FS-9924: Removed extra space in source files

This commit is contained in:
Sergey Safarov 2017-01-06 02:10:15 -05:00
parent 60d4e87487
commit df1ab07ca4
455 changed files with 9699 additions and 9698 deletions

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Mathieu Rene <mrene@avgs.ca> * Mathieu Rene <mrene@avgs.ca>
* *
* fs_encode.c -- Encode a native file * fs_encode.c -- Encode a native file
@ -53,7 +53,7 @@ static void fs_encode_cleanup()
switch_safe_free(SWITCH_GLOBAL_dirs.log_dir); switch_safe_free(SWITCH_GLOBAL_dirs.log_dir);
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int r = 1; int r = 1;
switch_bool_t verbose = SWITCH_FALSE; switch_bool_t verbose = SWITCH_FALSE;
@ -107,7 +107,7 @@ int main(int argc, char *argv[])
i++; i++;
/* Load extra modules */ /* Load extra modules */
if (strchr(argv[i], ',')) { if (strchr(argv[i], ',')) {
extra_modules_count = switch_split(argv[i], ',', extra_modules); extra_modules_count = switch_split(argv[i], ',', extra_modules);
} else { } else {
extra_modules_count = 1; extra_modules_count = 1;
extra_modules[0] = argv[i]; extra_modules[0] = argv[i];
@ -136,24 +136,24 @@ int main(int argc, char *argv[])
break; break;
} }
} }
if (argc - i < 2 || cmd_fail) { if (argc - i < 2 || cmd_fail) {
goto usage; goto usage;
} }
input = argv[i++]; input = argv[i++];
output = argv[i++]; output = argv[i++];
if (zstr(input) || zstr(output) || !(format = strchr(output, '.'))) { if (zstr(input) || zstr(output) || !(format = strchr(output, '.'))) {
goto usage; goto usage;
} }
format++; format++;
if (switch_core_init(SCF_MINIMAL, verbose, &err) != SWITCH_STATUS_SUCCESS) { if (switch_core_init(SCF_MINIMAL, verbose, &err) != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "Cannot init core [%s]\n", err); fprintf(stderr, "Cannot init core [%s]\n", err);
goto end; goto end;
} }
switch_loadable_module_init(SWITCH_FALSE); switch_loadable_module_init(SWITCH_FALSE);
switch_loadable_module_load_module("", "CORE_PCM_MODULE", SWITCH_TRUE, &err); switch_loadable_module_load_module("", "CORE_PCM_MODULE", SWITCH_TRUE, &err);
switch_loadable_module_load_module("", "CORE_SPEEX_MODULE", SWITCH_TRUE, &err); switch_loadable_module_load_module("", "CORE_SPEEX_MODULE", SWITCH_TRUE, &err);
@ -165,17 +165,17 @@ int main(int argc, char *argv[])
goto end; goto end;
} }
} }
if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_spandsp", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_spandsp", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "Cannot init mod_spandsp [%s]\n", err); fprintf(stderr, "Cannot init mod_spandsp [%s]\n", err);
goto end; goto end;
} }
if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_sndfile", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_sndfile", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "Cannot init mod_sndfile [%s]\n", err); fprintf(stderr, "Cannot init mod_sndfile [%s]\n", err);
goto end; goto end;
} }
if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_native_file", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) { if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) "mod_native_file", SWITCH_TRUE, &err) != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "Cannot init mod_native_file [%s]\n", err); fprintf(stderr, "Cannot init mod_native_file [%s]\n", err);
goto end; goto end;
@ -189,7 +189,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "Couldn't open %s\n", input); fprintf(stderr, "Couldn't open %s\n", input);
goto end; goto end;
} }
if (verbose) { if (verbose) {
fprintf(stderr, "Opening file %s\n", output); fprintf(stderr, "Opening file %s\n", output);
@ -219,7 +219,7 @@ int main(int argc, char *argv[])
fprintf(stderr, "Couldn't initialize codec for %s@%dh@%di\n", p, rate, ptime); fprintf(stderr, "Couldn't initialize codec for %s@%dh@%di\n", p, rate, ptime);
goto end; goto end;
} }
if (switch_core_codec_init_with_bitrate(&raw_codec, "L16", NULL, fmtp, rate, ptime, channels, bitrate, SWITCH_CODEC_FLAG_ENCODE|SWITCH_CODEC_FLAG_DECODE, NULL, pool) != SWITCH_STATUS_SUCCESS) { if (switch_core_codec_init_with_bitrate(&raw_codec, "L16", NULL, fmtp, rate, ptime, channels, bitrate, SWITCH_CODEC_FLAG_ENCODE|SWITCH_CODEC_FLAG_DECODE, NULL, pool) != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "Couldn't initialize codec for %s@%dh@%di\n", "L16", rate, ptime); fprintf(stderr, "Couldn't initialize codec for %s@%dh@%di\n", "L16", rate, ptime);
goto end; goto end;
@ -231,9 +231,9 @@ int main(int argc, char *argv[])
if (switch_core_file_open(&fh_output, output, channels, codec.implementation->actual_samples_per_second, out_flags, NULL) != SWITCH_STATUS_SUCCESS) { if (switch_core_file_open(&fh_output, output, channels, codec.implementation->actual_samples_per_second, out_flags, NULL) != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "Couldn't open %s\n", output); fprintf(stderr, "Couldn't open %s\n", output);
goto end; goto end;
} }
if (switch_test_flag(&fh_input, SWITCH_FILE_NATIVE)) { if (switch_test_flag(&fh_input, SWITCH_FILE_NATIVE)) {
in_asis = 1; in_asis = 1;
} }
@ -249,9 +249,9 @@ int main(int argc, char *argv[])
switch_assert(sizeof(buf) >= len * 2); switch_assert(sizeof(buf) >= len * 2);
if (verbose) { if (verbose) {
fprintf(stderr, "Frame size is %d\n", blocksize); fprintf(stderr, "Frame size is %d\n", blocksize);
} }
while (switch_core_file_read(&fh_input, buf, &len) == SWITCH_STATUS_SUCCESS) { while (switch_core_file_read(&fh_input, buf, &len) == SWITCH_STATUS_SUCCESS) {
char encode_buf[2048]; char encode_buf[2048];
uint32_t encoded_len = sizeof(buf); uint32_t encoded_len = sizeof(buf);
@ -263,13 +263,13 @@ int main(int argc, char *argv[])
fprintf(stderr, "Codec encoder error\n"); fprintf(stderr, "Codec encoder error\n");
goto end; goto end;
} }
len = encoded_len; len = encoded_len;
} else { } else {
if (!in_asis) { if (!in_asis) {
encoded_len = len; encoded_len = len;
} else if (in_asis) { } else if (in_asis) {
switch_core_codec_decode(&codec, switch_core_codec_decode(&codec,
&raw_codec, &raw_codec,
buf, buf,
@ -289,14 +289,14 @@ int main(int argc, char *argv[])
fprintf(stderr, "Write error\n"); fprintf(stderr, "Write error\n");
goto end; goto end;
} }
if (len != encoded_len) { if (len != encoded_len) {
printf("Short write: wrote %"SWITCH_SIZE_T_FMT"/%d bytes\n", len, encoded_len); printf("Short write: wrote %"SWITCH_SIZE_T_FMT"/%d bytes\n", len, encoded_len);
} }
len = blocksize; len = blocksize;
} }
r = 0; r = 0;
end: end:
@ -307,17 +307,17 @@ end:
if (fh_input.file_interface) { if (fh_input.file_interface) {
switch_core_file_close(&fh_input); switch_core_file_close(&fh_input);
} }
if (fh_output.file_interface) { if (fh_output.file_interface) {
switch_core_file_close(&fh_output); switch_core_file_close(&fh_output);
} }
if (pool) { if (pool) {
switch_core_destroy_memory_pool(&pool); switch_core_destroy_memory_pool(&pool);
} }
fs_encode_cleanup(); fs_encode_cleanup();
//switch_core_destroy(); //switch_core_destroy();

View File

@ -25,7 +25,7 @@ these routines are slow in C, is the lack of direct access to the CPU's "find
the first 1" instruction. A little in-line assembler fixes that, and the the first 1" instruction. A little in-line assembler fixes that, and the
conversion routines can be faster than lookup tables, in most real world usage. conversion routines can be faster than lookup tables, in most real world usage.
A "find the first 1" instruction is available on most modern CPUs, and is a A "find the first 1" instruction is available on most modern CPUs, and is a
much underused feature. much underused feature.
If an assembly language method of bit searching is not available, these routines If an assembly language method of bit searching is not available, these routines
revert to a method that can be a little slow, so the cache thrashing might not revert to a method that can be a little slow, so the cache thrashing might not

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -235,11 +235,11 @@ struct switch_media_bug {
switch_image_t *spy_img[2]; switch_image_t *spy_img[2];
switch_vid_spy_fmt_t spy_fmt; switch_vid_spy_fmt_t spy_fmt;
switch_thread_t *video_bug_thread; switch_thread_t *video_bug_thread;
switch_buffer_t *text_buffer; switch_buffer_t *text_buffer;
char *text_framedata; char *text_framedata;
uint32_t text_framesize; uint32_t text_framesize;
struct switch_media_bug *next; struct switch_media_bug *next;
}; };

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* *
* switch_hashtable_private.h -- Hashtable * switch_hashtable_private.h -- Hashtable
@ -89,23 +89,23 @@ indexFor(unsigned int tablelength, unsigned int hashvalue) {
/* /*
* Copyright (c) 2002, Christopher Clark * Copyright (c) 2002, Christopher Clark
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
* are met: * are met:
* *
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* *
* * Neither the name of the original author; nor the names of any contributors * * Neither the name of the original author; nor the names of any contributors
* may be used to endorse or promote products derived from this software * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* switch.h -- Main Library Header * switch.h -- Main Library Header
@ -164,7 +164,7 @@
* - OpenBSD 5.x * - OpenBSD 5.x
* *
* \section depends Dependencies * \section depends Dependencies
* Freeswitch makes heavy use of external libraries. * Freeswitch makes heavy use of external libraries.
* *
* libFreeSWITCH: * libFreeSWITCH:
* - APR (http://apr.apache.org) * - APR (http://apr.apache.org)
@ -199,7 +199,7 @@
* *
* mod_b64 * mod_b64
* - Base64 codec tranfers data base64 encoded (http://www.b64codec.org) * - Base64 codec tranfers data base64 encoded (http://www.b64codec.org)
* *
* mod_bv * mod_bv
* - BroadVoice16 (8kHz) and BroadVoice32 (16kHz) (https://www.broadcom.com/support/broadvoice) * - BroadVoice16 (8kHz) and BroadVoice32 (16kHz) (https://www.broadcom.com/support/broadvoice)
* *
@ -219,7 +219,7 @@
* Directories * Directories
* mod_ldap * mod_ldap
* - openldap (*nix only http://www.openldap.org/) * - openldap (*nix only http://www.openldap.org/)
* *
* Endpoints * Endpoints
* mod_portaudio * mod_portaudio
* - portaudio (http://www.portaudio.com/) * - portaudio (http://www.portaudio.com/)

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Eliot Gable <egable@gmail.com> * Eliot Gable <egable@gmail.com>
* *
@ -31,7 +31,7 @@
*/ */
/*! \file switch_apr.h /*! \file switch_apr.h
\brief APR includes header \brief APR includes header
The things powered by APR are renamed into the switch_ namespace to provide a cleaner The things powered by APR are renamed into the switch_ namespace to provide a cleaner
look to things and helps me to document what parts of APR I am using I'd like to take this look to things and helps me to document what parts of APR I am using I'd like to take this
opportunity to thank APR for all the awesome stuff it does and for making my life much easier. opportunity to thank APR for all the awesome stuff it does and for making my life much easier.
@ -53,7 +53,7 @@ typedef pthread_t switch_thread_id_t;
SWITCH_DECLARE(switch_thread_id_t) switch_thread_self(void); SWITCH_DECLARE(switch_thread_id_t) switch_thread_self(void);
/*! \brief Compare two thread ids /*! \brief Compare two thread ids
* \param tid1 1st Thread ID to compare * \param tid1 1st Thread ID to compare
* \param tid2 2nd Thread ID to compare * \param tid2 2nd Thread ID to compare
*/ */
@ -71,7 +71,7 @@ SWITCH_DECLARE(int) switch_thread_equal(switch_thread_id_t tid1, switch_thread_i
*/ */
/** /**
* @defgroup switch_memory_pool Memory Pool Functions * @defgroup switch_memory_pool Memory Pool Functions
* @ingroup switch_apr * @ingroup switch_apr
* @{ * @{
*/ */
/** The fundamental pool type */ /** The fundamental pool type */
@ -142,7 +142,7 @@ SWITCH_DECLARE(switch_hash_index_t *) switch_core_hash_first(switch_memory_pool_
/** /**
* Continue iterating over the entries in a hash table. * Continue iterating over the entries in a hash table.
* @param ht The iteration state * @param ht The iteration state
* @return a pointer to the updated iteration state. NULL if there are no more * @return a pointer to the updated iteration state. NULL if there are no more
* entries. * entries.
*/ */
SWITCH_DECLARE(switch_hash_index_t *) switch_core_hash_next(switch_hash_index_t *ht); SWITCH_DECLARE(switch_hash_index_t *) switch_core_hash_next(switch_hash_index_t *ht);
@ -171,7 +171,7 @@ SWITCH_DECLARE(switch_memory_pool_t *) switch_hash_pool_get(switch_hash_t *ht);
* The default hash function. * The default hash function.
* @param key pointer to the key. * @param key pointer to the key.
* @param klen the key length. * @param klen the key length.
* *
*/ */
SWITCH_DECLARE(unsigned int) switch_hashfunc_default(const char *key, switch_ssize_t *klen); SWITCH_DECLARE(unsigned int) switch_hashfunc_default(const char *key, switch_ssize_t *klen);
@ -180,7 +180,7 @@ SWITCH_DECLARE(unsigned int) switch_ci_hashfunc_default(const char *char_key, sw
/** /**
* @defgroup switch_time Time Routines * @defgroup switch_time Time Routines
* @ingroup switch_apr * @ingroup switch_apr
* @{ * @{
*/ */
@ -261,7 +261,7 @@ SWITCH_DECLARE(switch_status_t) switch_strftime_nocheck(char *s, switch_size_t *
* format which requires the indicated amount of storage, * format which requires the indicated amount of storage,
* including the trailing NUL terminator. * including the trailing NUL terminator.
* @param date_str String to write to. * @param date_str String to write to.
* @param t the time to convert * @param t the time to convert
*/ */
SWITCH_DECLARE(switch_status_t) switch_rfc822_date(char *date_str, switch_time_t t); SWITCH_DECLARE(switch_status_t) switch_rfc822_date(char *date_str, switch_time_t t);
@ -273,7 +273,7 @@ SWITCH_DECLARE(switch_status_t) switch_rfc822_date(char *date_str, switch_time_t
SWITCH_DECLARE(switch_status_t) switch_time_exp_gmt(switch_time_exp_t *result, switch_time_t input); SWITCH_DECLARE(switch_status_t) switch_time_exp_gmt(switch_time_exp_t *result, switch_time_t input);
/** /**
* Convert time value from human readable format to a numeric apr_time_t * Convert time value from human readable format to a numeric apr_time_t
* e.g. elapsed usec since epoch * e.g. elapsed usec since epoch
* @param result the resulting imploded time * @param result the resulting imploded time
* @param input the input exploded time * @param input the input exploded time
@ -297,7 +297,7 @@ SWITCH_DECLARE(switch_status_t) switch_time_exp_tz(switch_time_exp_t *result, sw
/** /**
* Sleep for the specified number of micro-seconds. * Sleep for the specified number of micro-seconds.
* @param t desired amount of time to sleep. * @param t desired amount of time to sleep.
* @warning May sleep for longer than the specified time. * @warning May sleep for longer than the specified time.
*/ */
SWITCH_DECLARE(void) switch_sleep(switch_interval_time_t t); SWITCH_DECLARE(void) switch_sleep(switch_interval_time_t t);
SWITCH_DECLARE(void) switch_micro_sleep(switch_interval_time_t t); SWITCH_DECLARE(void) switch_micro_sleep(switch_interval_time_t t);
@ -449,7 +449,7 @@ SWITCH_DECLARE(switch_status_t) switch_thread_rwlock_unlock(switch_thread_rwlock
/** /**
* @defgroup switch_thread_cond Condition Variable Routines * @defgroup switch_thread_cond Condition Variable Routines
* @ingroup switch_apr * @ingroup switch_apr
* @{ * @{
*/ */
@ -496,8 +496,8 @@ SWITCH_DECLARE(switch_status_t) switch_thread_cond_wait(switch_thread_cond_t *co
* @param mutex the mutex that must be locked upon entering this function, * @param mutex the mutex that must be locked upon entering this function,
* is released while the thread is asleep, and is again acquired before * is released while the thread is asleep, and is again acquired before
* returning from this function. * returning from this function.
* @param timeout The amount of time in microseconds to wait. This is * @param timeout The amount of time in microseconds to wait. This is
* a maximum, not a minimum. If the condition is signaled, we * a maximum, not a minimum. If the condition is signaled, we
* will wake up before this time, otherwise the error APR_TIMEUP * will wake up before this time, otherwise the error APR_TIMEUP
* is returned. * is returned.
*/ */
@ -589,7 +589,7 @@ SWITCH_DECLARE(switch_status_t) switch_md5_string(char digest_str[SWITCH_MD5_DIG
/** Opaque structure used for queue API */ /** Opaque structure used for queue API */
typedef struct apr_queue_t switch_queue_t; typedef struct apr_queue_t switch_queue_t;
/** /**
* create a FIFO queue * create a FIFO queue
* @param queue The new queue * @param queue The new queue
* @param queue_capacity maximum size of the queue * @param queue_capacity maximum size of the queue
@ -677,7 +677,7 @@ SWITCH_DECLARE(switch_status_t) switch_queue_trypush(switch_queue_t *queue, void
/** /**
* @defgroup switch_file_io File I/O Handling Functions * @defgroup switch_file_io File I/O Handling Functions
* @ingroup switch_apr * @ingroup switch_apr
* @{ * @{
*/ */
@ -703,7 +703,7 @@ SWITCH_DECLARE(switch_status_t) switch_queue_trypush(switch_queue_t *queue, void
/** /**
* @defgroup switch_file_permissions File Permissions flags * @defgroup switch_file_permissions File Permissions flags
* @ingroup switch_file_io * @ingroup switch_file_io
* @{ * @{
*/ */
@ -784,7 +784,7 @@ SWITCH_DECLARE(switch_status_t) switch_queue_trypush(switch_queue_t *queue, void
* SWITCH_FOPEN_CREATE create the file if not there * SWITCH_FOPEN_CREATE create the file if not there
* SWITCH_FOPEN_APPEND file ptr is set to end prior to all writes * SWITCH_FOPEN_APPEND file ptr is set to end prior to all writes
* SWITCH_FOPEN_TRUNCATE set length to zero if file exists * SWITCH_FOPEN_TRUNCATE set length to zero if file exists
* SWITCH_FOPEN_BINARY not a text file (This flag is ignored on * SWITCH_FOPEN_BINARY not a text file (This flag is ignored on
* UNIX because it has no meaning) * UNIX because it has no meaning)
* SWITCH_FOPEN_BUFFERED buffer the data. Default is non-buffered * SWITCH_FOPEN_BUFFERED buffer the data. Default is non-buffered
* SWITCH_FOPEN_EXCL return error if APR_CREATE and file exists * SWITCH_FOPEN_EXCL return error if APR_CREATE and file exists
@ -794,7 +794,7 @@ SWITCH_DECLARE(switch_status_t) switch_queue_trypush(switch_queue_t *queue, void
* SWITCH_FOPEN_SHARELOCK Platform dependent support for higher * SWITCH_FOPEN_SHARELOCK Platform dependent support for higher
* level locked read/write access to support * level locked read/write access to support
* writes across process/machines * writes across process/machines
* SWITCH_FOPEN_NOCLEANUP Do not register a cleanup with the pool * SWITCH_FOPEN_NOCLEANUP Do not register a cleanup with the pool
* passed in on the <EM>pool</EM> argument (see below). * passed in on the <EM>pool</EM> argument (see below).
* The apr_os_file_t handle in apr_file_t will not * The apr_os_file_t handle in apr_file_t will not
* be closed when the pool is destroyed. * be closed when the pool is destroyed.
@ -860,7 +860,7 @@ SWITCH_DECLARE(switch_status_t) switch_file_read(switch_file_t *thefile, void *b
* Write data to the specified file. * Write data to the specified file.
* @param thefile The file descriptor to write to. * @param thefile The file descriptor to write to.
* @param buf The buffer which contains the data. * @param buf The buffer which contains the data.
* @param nbytes On entry, the number of bytes to write; on exit, the number * @param nbytes On entry, the number of bytes to write; on exit, the number
* of bytes written. * of bytes written.
* *
* @remark apr_file_write will write up to the specified number of * @remark apr_file_write will write up to the specified number of
@ -924,7 +924,7 @@ SWITCH_DECLARE(uint32_t) switch_dir_count(switch_dir_t *thedir);
/** /**
* @defgroup switch_thread_proc Threads and Process Functions * @defgroup switch_thread_proc Threads and Process Functions
* @ingroup switch_apr * @ingroup switch_apr
* @{ * @{
*/ */
@ -955,7 +955,7 @@ SWITCH_DECLARE(switch_status_t) switch_threadattr_create(switch_threadattr_t **
/** /**
* Set if newly created threads should be created in detached state. * Set if newly created threads should be created in detached state.
* @param attr The threadattr to affect * @param attr The threadattr to affect
* @param on Non-zero if detached threads should be created. * @param on Non-zero if detached threads should be created.
*/ */
SWITCH_DECLARE(switch_status_t) switch_threadattr_detach_set(switch_threadattr_t *attr, int32_t on); SWITCH_DECLARE(switch_status_t) switch_threadattr_detach_set(switch_threadattr_t *attr, int32_t on);
@ -975,7 +975,7 @@ SWITCH_DECLARE(switch_status_t) switch_thread_create(switch_thread_t ** new_thre
/** /**
* @defgroup switch_network_io Network Routines * @defgroup switch_network_io Network Routines
* @ingroup switch_apr * @ingroup switch_apr
* @{ * @{
*/ */
@ -1048,12 +1048,12 @@ SWITCH_DECLARE(switch_status_t) switch_socket_create(switch_socket_t ** new_sock
/** /**
* Shutdown either reading, writing, or both sides of a socket. * Shutdown either reading, writing, or both sides of a socket.
* @param sock The socket to close * @param sock The socket to close
* @param how How to shutdown the socket. One of: * @param how How to shutdown the socket. One of:
* <PRE> * <PRE>
* SWITCH_SHUTDOWN_READ no longer allow read requests * SWITCH_SHUTDOWN_READ no longer allow read requests
* SWITCH_SHUTDOWN_WRITE no longer allow write requests * SWITCH_SHUTDOWN_WRITE no longer allow write requests
* SWITCH_SHUTDOWN_READWRITE no longer allow read or write requests * SWITCH_SHUTDOWN_READWRITE no longer allow read or write requests
* </PRE> * </PRE>
* @see switch_shutdown_how_e * @see switch_shutdown_how_e
* @remark This does not actually close the socket descriptor, it just * @remark This does not actually close the socket descriptor, it just
@ -1063,13 +1063,13 @@ SWITCH_DECLARE(switch_status_t) switch_socket_shutdown(switch_socket_t *sock, sw
/** /**
* Close a socket. * Close a socket.
* @param sock The socket to close * @param sock The socket to close
*/ */
SWITCH_DECLARE(switch_status_t) switch_socket_close(switch_socket_t *sock); SWITCH_DECLARE(switch_status_t) switch_socket_close(switch_socket_t *sock);
/** /**
* Bind the socket to its associated port * Bind the socket to its associated port
* @param sock The socket to bind * @param sock The socket to bind
* @param sa The socket address to bind to * @param sa The socket address to bind to
* @remark This may be where we will find out if there is any other process * @remark This may be where we will find out if there is any other process
* using the selected port. * using the selected port.
@ -1078,10 +1078,10 @@ SWITCH_DECLARE(switch_status_t) switch_socket_bind(switch_socket_t *sock, switch
/** /**
* Listen to a bound socket for connections. * Listen to a bound socket for connections.
* @param sock The socket to listen on * @param sock The socket to listen on
* @param backlog The number of outstanding connections allowed in the sockets * @param backlog The number of outstanding connections allowed in the sockets
* listen queue. If this value is less than zero, the listen * listen queue. If this value is less than zero, the listen
* queue size is set to zero. * queue size is set to zero.
*/ */
SWITCH_DECLARE(switch_status_t) switch_socket_listen(switch_socket_t *sock, int32_t backlog); SWITCH_DECLARE(switch_status_t) switch_socket_listen(switch_socket_t *sock, int32_t backlog);
@ -1096,9 +1096,9 @@ SWITCH_DECLARE(switch_status_t) switch_socket_listen(switch_socket_t *sock, int3
SWITCH_DECLARE(switch_status_t) switch_socket_accept(switch_socket_t ** new_sock, switch_socket_t *sock, switch_memory_pool_t *pool); SWITCH_DECLARE(switch_status_t) switch_socket_accept(switch_socket_t ** new_sock, switch_socket_t *sock, switch_memory_pool_t *pool);
/** /**
* Issue a connection request to a socket either on the same machine * Issue a connection request to a socket either on the same machine
* or a different one. * or a different one.
* @param sock The socket we wish to use for our side of the connection * @param sock The socket we wish to use for our side of the connection
* @param sa The address of the machine we wish to connect to. * @param sa The address of the machine we wish to connect to.
*/ */
SWITCH_DECLARE(switch_status_t) switch_socket_connect(switch_socket_t *sock, switch_sockaddr_t *sa); SWITCH_DECLARE(switch_status_t) switch_socket_connect(switch_socket_t *sock, switch_sockaddr_t *sa);
@ -1122,7 +1122,7 @@ SWITCH_DECLARE(int) switch_sockaddr_equal(const switch_sockaddr_t *sa1, const sw
* @param sa The new apr_sockaddr_t. * @param sa The new apr_sockaddr_t.
* @param hostname The hostname or numeric address string to resolve/parse, or * @param hostname The hostname or numeric address string to resolve/parse, or
* NULL to build an address that corresponds to 0.0.0.0 or :: * NULL to build an address that corresponds to 0.0.0.0 or ::
* @param family The address family to use, or SWITCH_UNSPEC if the system should * @param family The address family to use, or SWITCH_UNSPEC if the system should
* decide. * decide.
* @param port The port number. * @param port The port number.
* @param flags Special processing flags: * @param flags Special processing flags:
@ -1148,12 +1148,12 @@ SWITCH_DECLARE(switch_status_t) switch_sockaddr_create(switch_sockaddr_t **sa, s
/** /**
* Send data over a network. * Send data over a network.
* @param sock The socket to send the data over. * @param sock The socket to send the data over.
* @param buf The buffer which contains the data to be sent. * @param buf The buffer which contains the data to be sent.
* @param len On entry, the number of bytes to send; on exit, the number * @param len On entry, the number of bytes to send; on exit, the number
* of bytes sent. * of bytes sent.
* @remark * @remark
* <PRE> * <PRE>
* This functions acts like a blocking write by default. To change * This functions acts like a blocking write by default. To change
* this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
* socket option. * socket option.
* *
@ -1173,7 +1173,7 @@ SWITCH_DECLARE(switch_status_t) switch_socket_send(switch_socket_t *sock, const
*/ */
SWITCH_DECLARE(switch_status_t) switch_socket_sendto(switch_socket_t *sock, switch_sockaddr_t *where, int32_t flags, const char *buf, SWITCH_DECLARE(switch_status_t) switch_socket_sendto(switch_socket_t *sock, switch_sockaddr_t *where, int32_t flags, const char *buf,
switch_size_t *len); switch_size_t *len);
SWITCH_DECLARE(switch_status_t) switch_socket_send_nonblock(switch_socket_t *sock, const char *buf, switch_size_t *len); SWITCH_DECLARE(switch_status_t) switch_socket_send_nonblock(switch_socket_t *sock, const char *buf, switch_size_t *len);
/** /**
@ -1191,12 +1191,12 @@ SWITCH_DECLARE(switch_status_t) switch_socket_atmark(switch_socket_t *sock, int
/** /**
* Read data from a network. * Read data from a network.
* @param sock The socket to read the data from. * @param sock The socket to read the data from.
* @param buf The buffer to store the data in. * @param buf The buffer to store the data in.
* @param len On entry, the number of bytes to receive; on exit, the number * @param len On entry, the number of bytes to receive; on exit, the number
* of bytes received. * of bytes received.
* @remark * @remark
* <PRE> * <PRE>
* This functions acts like a blocking read by default. To change * This functions acts like a blocking read by default. To change
* this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
* socket option. * socket option.
* The number of bytes actually received is stored in argument 3. * The number of bytes actually received is stored in argument 3.
@ -1214,7 +1214,7 @@ SWITCH_DECLARE(switch_status_t) switch_socket_recv(switch_socket_t *sock, char *
* @param sock The socket to set up. * @param sock The socket to set up.
* @param opt The option we would like to configure. One of: * @param opt The option we would like to configure. One of:
* <PRE> * <PRE>
* APR_SO_DEBUG -- turn on debugging information * APR_SO_DEBUG -- turn on debugging information
* APR_SO_KEEPALIVE -- keep connections active * APR_SO_KEEPALIVE -- keep connections active
* APR_SO_LINGER -- lingers on close if data is present * APR_SO_LINGER -- lingers on close if data is present
* APR_SO_NONBLOCK -- Turns blocking on/off for socket * APR_SO_NONBLOCK -- Turns blocking on/off for socket
@ -1263,9 +1263,9 @@ SWITCH_DECLARE(switch_status_t) switch_socket_timeout_set(switch_socket_t *sock,
* Join a Multicast Group * Join a Multicast Group
* @param sock The socket to join a multicast group * @param sock The socket to join a multicast group
* @param join The address of the multicast group to join * @param join The address of the multicast group to join
* @param iface Address of the interface to use. If NULL is passed, the * @param iface Address of the interface to use. If NULL is passed, the
* default multicast interface will be used. (OS Dependent) * default multicast interface will be used. (OS Dependent)
* @param source Source Address to accept transmissions from (non-NULL * @param source Source Address to accept transmissions from (non-NULL
* implies Source-Specific Multicast) * implies Source-Specific Multicast)
*/ */
SWITCH_DECLARE(switch_status_t) switch_mcast_join(switch_socket_t *sock, switch_sockaddr_t *join, switch_sockaddr_t *iface, switch_sockaddr_t *source); SWITCH_DECLARE(switch_status_t) switch_mcast_join(switch_socket_t *sock, switch_sockaddr_t *join, switch_sockaddr_t *iface, switch_sockaddr_t *source);
@ -1331,7 +1331,7 @@ SWITCH_DECLARE(switch_status_t) switch_mcast_interface(switch_socket_t *sock, sw
/** /**
* Setup a pollset object * Setup a pollset object
* @param pollset The pointer in which to return the newly created object * @param pollset The pointer in which to return the newly created object
* @param size The maximum number of descriptors that this pollset can hold * @param size The maximum number of descriptors that this pollset can hold
* @param pool The pool from which to allocate the pollset * @param pool The pool from which to allocate the pollset
* @param flags Optional flags to modify the operation of the pollset. * @param flags Optional flags to modify the operation of the pollset.
@ -1382,16 +1382,16 @@ SWITCH_DECLARE(switch_status_t) switch_pollset_remove(switch_pollset_t *pollset,
/** /**
* Poll the sockets in the poll structure * Poll the sockets in the poll structure
* @param aprset The poll structure we will be using. * @param aprset The poll structure we will be using.
* @param numsock The number of sockets we are polling * @param numsock The number of sockets we are polling
* @param nsds The number of sockets signalled. * @param nsds The number of sockets signalled.
* @param timeout The amount of time in microseconds to wait. This is * @param timeout The amount of time in microseconds to wait. This is
* a maximum, not a minimum. If a socket is signalled, we * a maximum, not a minimum. If a socket is signalled, we
* will wake up before this time. A negative number means * will wake up before this time. A negative number means
* wait until a socket is signalled. * wait until a socket is signalled.
* @remark The number of sockets signalled is returned in the third argument. * @remark The number of sockets signalled is returned in the third argument.
* This is a blocking call, and it will not return until either a * This is a blocking call, and it will not return until either a
* socket has been signalled, or the timeout has expired. * socket has been signalled, or the timeout has expired.
*/ */
SWITCH_DECLARE(switch_status_t) switch_poll(switch_pollfd_t *aprset, int32_t numsock, int32_t *nsds, switch_interval_time_t timeout); SWITCH_DECLARE(switch_status_t) switch_poll(switch_pollfd_t *aprset, int32_t numsock, int32_t *nsds, switch_interval_time_t timeout);
@ -1415,7 +1415,7 @@ SWITCH_DECLARE(switch_status_t) switch_pollset_poll(switch_pollset_t *pollset, s
SWITCH_DECLARE(switch_status_t) switch_socket_create_pollset(switch_pollfd_t ** poll, switch_socket_t *sock, int16_t flags, switch_memory_pool_t *pool); SWITCH_DECLARE(switch_status_t) switch_socket_create_pollset(switch_pollfd_t ** poll, switch_socket_t *sock, int16_t flags, switch_memory_pool_t *pool);
SWITCH_DECLARE(switch_interval_time_t) switch_interval_time_from_timeval(struct timeval *tvp); SWITCH_DECLARE(switch_interval_time_t) switch_interval_time_from_timeval(struct timeval *tvp);
/*! /*!
\brief Create a pollfd out of a socket \brief Create a pollfd out of a socket
@ -1442,14 +1442,14 @@ SWITCH_DECLARE(switch_status_t) switch_file_pipe_create(switch_file_t ** in, swi
/** /**
* Get the timeout value for a pipe or manipulate the blocking state. * Get the timeout value for a pipe or manipulate the blocking state.
* @param thepipe The pipe we are getting a timeout for. * @param thepipe The pipe we are getting a timeout for.
* @param timeout The current timeout value in microseconds. * @param timeout The current timeout value in microseconds.
*/ */
SWITCH_DECLARE(switch_status_t) switch_file_pipe_timeout_get(switch_file_t *thepipe, switch_interval_time_t *timeout); SWITCH_DECLARE(switch_status_t) switch_file_pipe_timeout_get(switch_file_t *thepipe, switch_interval_time_t *timeout);
/** /**
* Set the timeout value for a pipe or manipulate the blocking state. * Set the timeout value for a pipe or manipulate the blocking state.
* @param thepipe The pipe we are setting a timeout on. * @param thepipe The pipe we are setting a timeout on.
* @param timeout The timeout value in microseconds. Values < 0 mean wait * @param timeout The timeout value in microseconds. Values < 0 mean wait
* forever, 0 means do not wait at all. * forever, 0 means do not wait at all.
*/ */
SWITCH_DECLARE(switch_status_t) switch_file_pipe_timeout_set(switch_file_t *thepipe, switch_interval_time_t timeout); SWITCH_DECLARE(switch_status_t) switch_file_pipe_timeout_set(switch_file_t *thepipe, switch_interval_time_t timeout);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -56,9 +56,9 @@ static inline char *print_bits(switch_byte_t byte, char *x)
/*! /*!
\defgroup bp1 Bitpacking \defgroup bp1 Bitpacking
\ingroup core1 \ingroup core1
\{ \{
*/ */
static const uint8_t SWITCH_BITPACKED_MASKS[] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 }; static const uint8_t SWITCH_BITPACKED_MASKS[] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 };
@ -70,7 +70,7 @@ static const uint8_t SWITCH_REVERSE_BITPACKED_MASKS[] = { 255, 254, 252, 248, 24
\param bitlen the number of bits per packet \param bitlen the number of bits per packet
\param buf the buffer to use for storage \param buf the buffer to use for storage
\param buflen the length of the storage buffer \param buflen the length of the storage buffer
\param mode RFC3551 or AAL2 mode (curse you backwards folks) \param mode RFC3551 or AAL2 mode (curse you backwards folks)
*/ */
DoxyDefine(void switch_bitpack_init(switch_bitpack_t *pack, int32_t bitlen, switch_byte_t *buf, uint32_t buflen, switch_bitpack_mode_t mode)) DoxyDefine(void switch_bitpack_init(switch_bitpack_t *pack, int32_t bitlen, switch_byte_t *buf, uint32_t buflen, switch_bitpack_mode_t mode))
static inline int8_t switch_bitpack_init(switch_bitpack_t *pack, switch_byte_t bitlen, switch_byte_t *buf, uint32_t buflen, static inline int8_t switch_bitpack_init(switch_bitpack_t *pack, switch_byte_t bitlen, switch_byte_t *buf, uint32_t buflen,

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,14 +22,14 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
* switch_buffer.h -- Data Buffering Code * switch_buffer.h -- Data Buffering Code
* *
*/ */
/** /**
* @file switch_buffer.h * @file switch_buffer.h
* @brief Data Buffering Code * @brief Data Buffering Code
* @see switch_buffer * @see switch_buffer
@ -56,7 +56,7 @@ SWITCH_DECLARE(switch_status_t) switch_buffer_create_partition(switch_memory_poo
SWITCH_DECLARE(switch_status_t) switch_buffer_set_partition_data(switch_buffer_t *buffer, void *data, switch_size_t datalen); SWITCH_DECLARE(switch_status_t) switch_buffer_set_partition_data(switch_buffer_t *buffer, void *data, switch_size_t datalen);
SWITCH_DECLARE(switch_status_t) switch_buffer_reset_partition_data(switch_buffer_t *buffer); SWITCH_DECLARE(switch_status_t) switch_buffer_reset_partition_data(switch_buffer_t *buffer);
/*! \brief Allocate a new switch_buffer /*! \brief Allocate a new switch_buffer
* \param pool Pool to allocate the buffer from * \param pool Pool to allocate the buffer from
* \param buffer returned pointer to the new buffer * \param buffer returned pointer to the new buffer
* \param max_len length required by the buffer * \param max_len length required by the buffer
@ -64,7 +64,7 @@ SWITCH_DECLARE(switch_status_t) switch_buffer_reset_partition_data(switch_buffer
*/ */
SWITCH_DECLARE(switch_status_t) switch_buffer_create(_In_ switch_memory_pool_t *pool, _Out_ switch_buffer_t **buffer, _In_ switch_size_t max_len); SWITCH_DECLARE(switch_status_t) switch_buffer_create(_In_ switch_memory_pool_t *pool, _Out_ switch_buffer_t **buffer, _In_ switch_size_t max_len);
/*! \brief Allocate a new dynamic switch_buffer /*! \brief Allocate a new dynamic switch_buffer
* \param buffer returned pointer to the new buffer * \param buffer returned pointer to the new buffer
* \param blocksize length to realloc by as data is added * \param blocksize length to realloc by as data is added
* \param start_len ammount of memory to reserve initially * \param start_len ammount of memory to reserve initially
@ -79,25 +79,25 @@ SWITCH_DECLARE(void) switch_buffer_lock(_In_ switch_buffer_t *buffer);
SWITCH_DECLARE(switch_status_t) switch_buffer_trylock(_In_ switch_buffer_t *buffer); SWITCH_DECLARE(switch_status_t) switch_buffer_trylock(_In_ switch_buffer_t *buffer);
SWITCH_DECLARE(void) switch_buffer_unlock(_In_ switch_buffer_t *buffer); SWITCH_DECLARE(void) switch_buffer_unlock(_In_ switch_buffer_t *buffer);
/*! \brief Get the length of a switch_buffer_t /*! \brief Get the length of a switch_buffer_t
* \param buffer any buffer of type switch_buffer_t * \param buffer any buffer of type switch_buffer_t
* \return int size of the buffer. * \return int size of the buffer.
*/ */
SWITCH_DECLARE(switch_size_t) switch_buffer_len(_In_ switch_buffer_t *buffer); SWITCH_DECLARE(switch_size_t) switch_buffer_len(_In_ switch_buffer_t *buffer);
/*! \brief Get the freespace of a switch_buffer_t /*! \brief Get the freespace of a switch_buffer_t
* \param buffer any buffer of type switch_buffer_t * \param buffer any buffer of type switch_buffer_t
* \return int freespace in the buffer. * \return int freespace in the buffer.
*/ */
SWITCH_DECLARE(switch_size_t) switch_buffer_freespace(_In_ switch_buffer_t *buffer); SWITCH_DECLARE(switch_size_t) switch_buffer_freespace(_In_ switch_buffer_t *buffer);
/*! \brief Get the in use amount of a switch_buffer_t /*! \brief Get the in use amount of a switch_buffer_t
* \param buffer any buffer of type switch_buffer_t * \param buffer any buffer of type switch_buffer_t
* \return int ammount of buffer curently in use * \return int ammount of buffer curently in use
*/ */
SWITCH_DECLARE(switch_size_t) switch_buffer_inuse(_In_ switch_buffer_t *buffer); SWITCH_DECLARE(switch_size_t) switch_buffer_inuse(_In_ switch_buffer_t *buffer);
/*! \brief Read data from a switch_buffer_t up to the ammount of datalen if it is available. Remove read data from buffer. /*! \brief Read data from a switch_buffer_t up to the ammount of datalen if it is available. Remove read data from buffer.
* \param buffer any buffer of type switch_buffer_t * \param buffer any buffer of type switch_buffer_t
* \param data pointer to the read data to be returned * \param data pointer to the read data to be returned
* \param datalen amount of data to be returned * \param datalen amount of data to be returned
@ -105,7 +105,7 @@ SWITCH_DECLARE(switch_size_t) switch_buffer_inuse(_In_ switch_buffer_t *buffer);
*/ */
SWITCH_DECLARE(switch_size_t) switch_buffer_read(_In_ switch_buffer_t *buffer, _In_ void *data, _In_ switch_size_t datalen); SWITCH_DECLARE(switch_size_t) switch_buffer_read(_In_ switch_buffer_t *buffer, _In_ void *data, _In_ switch_size_t datalen);
/*! \brief Read data from a switch_buffer_t up to the ammount of datalen if it is available, without removing read data from buffer. /*! \brief Read data from a switch_buffer_t up to the ammount of datalen if it is available, without removing read data from buffer.
* \param buffer any buffer of type switch_buffer_t * \param buffer any buffer of type switch_buffer_t
* \param data pointer to the read data to be returned * \param data pointer to the read data to be returned
* \param datalen amount of data to be returned * \param datalen amount of data to be returned
@ -115,7 +115,7 @@ SWITCH_DECLARE(switch_size_t) switch_buffer_peek(_In_ switch_buffer_t *buffer, _
SWITCH_DECLARE(switch_size_t) switch_buffer_peek_zerocopy(_In_ switch_buffer_t *buffer, _Out_ const void **ptr); SWITCH_DECLARE(switch_size_t) switch_buffer_peek_zerocopy(_In_ switch_buffer_t *buffer, _Out_ const void **ptr);
/*! \brief Read data endlessly from a switch_buffer_t /*! \brief Read data endlessly from a switch_buffer_t
* \param buffer any buffer of type switch_buffer_t * \param buffer any buffer of type switch_buffer_t
* \param data pointer to the read data to be returned * \param data pointer to the read data to be returned
* \param datalen amount of data to be returned * \param datalen amount of data to be returned

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -45,7 +45,7 @@
* *
* In addition, this module implements an abstract interface for extensions and applications. * In addition, this module implements an abstract interface for extensions and applications.
* A connected session's channel has one extension object which may have one or more applications * A connected session's channel has one extension object which may have one or more applications
* linked into a stack which will be executed in order by the session's state machine when the * linked into a stack which will be executed in order by the session's state machine when the
* current state is CS_EXECUTE. * current state is CS_EXECUTE.
* @{ * @{
*/ */
@ -217,7 +217,7 @@ SWITCH_DECLARE(void) switch_caller_extension_add_application_printf(_In_ switch_
\param ani ANI information \param ani ANI information
\param aniii ANI II information \param aniii ANI II information
\param rdnis RDNIS \param rdnis RDNIS
\param source the source \param source the source
\param context a logical context \param context a logical context
\param destination_number destination number \param destination_number destination number
\return a new profile object allocated from the session's memory pool \return a new profile object allocated from the session's memory pool

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,14 +22,14 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
* switch_channel.h -- Media Channel Interface * switch_channel.h -- Media Channel Interface
* *
*/ */
/** /**
* @file switch_channel.h * @file switch_channel.h
* @brief Media Channel Interface * @brief Media Channel Interface
* @see switch_channel * @see switch_channel
@ -292,16 +292,16 @@ SWITCH_DECLARE(switch_status_t) switch_channel_transfer_variable_prefix(switch_c
#define switch_channel_set_variable_partner(_channel, _var, _val) switch_channel_set_variable_partner_var_check(_channel, _var, _val, SWITCH_TRUE) #define switch_channel_set_variable_partner(_channel, _var, _val) switch_channel_set_variable_partner_var_check(_channel, _var, _val, SWITCH_TRUE)
SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_var_check(switch_channel_t *channel, SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_var_check(switch_channel_t *channel,
const char *varname, const char *val, const char *varname, const char *val,
const char *export_varname, const char *export_varname,
switch_bool_t var_check); switch_bool_t var_check);
SWITCH_DECLARE(void) switch_channel_process_export(switch_channel_t *channel, switch_channel_t *peer_channel, SWITCH_DECLARE(void) switch_channel_process_export(switch_channel_t *channel, switch_channel_t *peer_channel,
switch_event_t *var_event, const char *export_varname); switch_event_t *var_event, const char *export_varname);
#define switch_channel_export_variable(_channel, _varname, _value, _ev) switch_channel_export_variable_var_check(_channel, _varname, _value, _ev, SWITCH_TRUE) #define switch_channel_export_variable(_channel, _varname, _value, _ev) switch_channel_export_variable_var_check(_channel, _varname, _value, _ev, SWITCH_TRUE)
SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_printf(switch_channel_t *channel, const char *varname, SWITCH_DECLARE(switch_status_t) switch_channel_export_variable_printf(switch_channel_t *channel, const char *varname,
const char *export_varname, const char *fmt, ...); const char *export_varname, const char *fmt, ...);
SWITCH_DECLARE(void) switch_channel_set_scope_variables(switch_channel_t *channel, switch_event_t **event); SWITCH_DECLARE(void) switch_channel_set_scope_variables(switch_channel_t *channel, switch_event_t **event);
@ -333,7 +333,7 @@ static inline int switch_channel_var_true(switch_channel_t *channel, const char
SWITCH_DECLARE(switch_event_header_t *) switch_channel_variable_first(switch_channel_t *channel); SWITCH_DECLARE(switch_event_header_t *) switch_channel_variable_first(switch_channel_t *channel);
/*! /*!
* \brief Stop iterating over channel variables. * \brief Stop iterating over channel variables.
* \remark Unlocks the profile mutex initially locked in switch_channel_variable_first * \remark Unlocks the profile mutex initially locked in switch_channel_variable_first
*/ */
SWITCH_DECLARE(void) switch_channel_variable_last(switch_channel_t *channel); SWITCH_DECLARE(void) switch_channel_variable_last(switch_channel_t *channel);
@ -363,7 +363,7 @@ SWITCH_DECLARE(switch_caller_extension_t *) switch_channel_get_caller_extension(
/*! /*!
\brief Test for presence of given flag on a given channel \brief Test for presence of given flag on a given channel
\param channel channel to test \param channel channel to test
\param flag to test \param flag to test
\return TRUE if flags were present \return TRUE if flags were present
*/ */
@ -447,7 +447,7 @@ SWITCH_DECLARE(void) switch_channel_check_zrtp(switch_channel_t *channel);
*/ */
#define switch_channel_mark_pre_answered(channel) switch_channel_perform_mark_pre_answered(channel, __FILE__, __SWITCH_FUNC__, __LINE__) #define switch_channel_mark_pre_answered(channel) switch_channel_perform_mark_pre_answered(channel, __FILE__, __SWITCH_FUNC__, __LINE__)
SWITCH_DECLARE(switch_status_t) switch_channel_perform_ring_ready_value(switch_channel_t *channel, SWITCH_DECLARE(switch_status_t) switch_channel_perform_ring_ready_value(switch_channel_t *channel,
switch_ring_ready_t rv, switch_ring_ready_t rv,
const char *file, const char *func, int line); const char *file, const char *func, int line);
/*! /*!
@ -464,7 +464,7 @@ SWITCH_DECLARE(switch_status_t) switch_channel_perform_pre_answer(switch_channel
SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_channel_t *channel, const char *file, const char *func, int line); SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_pre_answered(switch_channel_t *channel, const char *file, const char *func, int line);
SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_ring_ready_value(switch_channel_t *channel, SWITCH_DECLARE(switch_status_t) switch_channel_perform_mark_ring_ready_value(switch_channel_t *channel,
switch_ring_ready_t rv, switch_ring_ready_t rv,
const char *file, const char *func, int line); const char *file, const char *func, int line);
@ -561,9 +561,9 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_hangup(switch_chan
\return number of digits in the queue \return number of digits in the queue
*/ */
SWITCH_DECLARE(switch_size_t) switch_channel_has_dtmf(_In_ switch_channel_t *channel); SWITCH_DECLARE(switch_size_t) switch_channel_has_dtmf(_In_ switch_channel_t *channel);
SWITCH_DECLARE(switch_status_t) switch_channel_dtmf_lock(switch_channel_t *channel); SWITCH_DECLARE(switch_status_t) switch_channel_dtmf_lock(switch_channel_t *channel);
SWITCH_DECLARE(switch_status_t) switch_channel_try_dtmf_lock(switch_channel_t *channel); SWITCH_DECLARE(switch_status_t) switch_channel_try_dtmf_lock(switch_channel_t *channel);
SWITCH_DECLARE(switch_status_t) switch_channel_dtmf_unlock(switch_channel_t *channel); SWITCH_DECLARE(switch_status_t) switch_channel_dtmf_unlock(switch_channel_t *channel);
/*! /*!
@ -658,7 +658,7 @@ SWITCH_DECLARE(char *) switch_channel_get_flag_string(switch_channel_t *channel)
SWITCH_DECLARE(char *) switch_channel_get_cap_string(switch_channel_t *channel); SWITCH_DECLARE(char *) switch_channel_get_cap_string(switch_channel_t *channel);
SWITCH_DECLARE(int) switch_channel_state_change_pending(switch_channel_t *channel); SWITCH_DECLARE(int) switch_channel_state_change_pending(switch_channel_t *channel);
SWITCH_DECLARE(void) switch_channel_perform_set_callstate(switch_channel_t *channel, switch_channel_callstate_t callstate, SWITCH_DECLARE(void) switch_channel_perform_set_callstate(switch_channel_t *channel, switch_channel_callstate_t callstate,
const char *file, const char *func, int line); const char *file, const char *func, int line);
#define switch_channel_set_callstate(channel, state) switch_channel_perform_set_callstate(channel, state, __FILE__, __SWITCH_FUNC__, __LINE__) #define switch_channel_set_callstate(channel, state) switch_channel_perform_set_callstate(channel, state, __FILE__, __SWITCH_FUNC__, __LINE__)
SWITCH_DECLARE(switch_channel_callstate_t) switch_channel_get_callstate(switch_channel_t *channel); SWITCH_DECLARE(switch_channel_callstate_t) switch_channel_get_callstate(switch_channel_t *channel);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,14 +22,14 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
* switch_config.h -- Configuration File Parser * switch_config.h -- Configuration File Parser
* *
*/ */
/** /**
* @file switch_config.h * @file switch_config.h
* @brief Basic Configuration File Parser * @brief Basic Configuration File Parser
* @see config * @see config
@ -42,8 +42,8 @@
* or expanded to tie to external handlers in the future as necessary. * or expanded to tie to external handlers in the future as necessary.
* <pre> * <pre>
* *
* EXAMPLE * EXAMPLE
* *
* [category1] * [category1]
* var1 => val1 * var1 => val1
* var2 => val2 * var2 => val2

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Michael Jerris <mike@jerris.com> * Michael Jerris <mike@jerris.com>
* *
@ -43,7 +43,7 @@ SWITCH_BEGIN_EXTERN_C
*/ */
/** /**
* @defgroup switch_core_db Database Routines * @defgroup switch_core_db Database Routines
* @ingroup switch_sqlite_top * @ingroup switch_sqlite_top
* @{ * @{
*/ */
/** /**
@ -60,7 +60,7 @@ typedef int (*switch_core_db_err_callback_func_t) (void *pArg, const char *errms
** These are special value for the destructor that is passed in as the ** These are special value for the destructor that is passed in as the
** final argument to routines like switch_core_db_result_blob(). If the destructor ** final argument to routines like switch_core_db_result_blob(). If the destructor
** argument is SWITCH_CORE_DB_STATIC, it means that the content pointer is constant ** argument is SWITCH_CORE_DB_STATIC, it means that the content pointer is constant
** and will never change. It does not need to be destroyed. The ** and will never change. It does not need to be destroyed. The
** SWITCH_CORE_DB_TRANSIENT value means that the content will likely change in ** SWITCH_CORE_DB_TRANSIENT value means that the content will likely change in
** the near future and that the db should make its own private copy of ** the near future and that the db should make its own private copy of
** the content before returning. ** the content before returning.
@ -107,7 +107,7 @@ SWITCH_DECLARE(int) switch_core_db_open(const char *filename, switch_core_db_t *
* in a single column of the current result row of a query. In every * in a single column of the current result row of a query. In every
* case the first parameter is a pointer to the SQL statement that is being * case the first parameter is a pointer to the SQL statement that is being
* executed (the switch_core_db_stmt_t* that was returned from switch_core_db_prepare()) and * executed (the switch_core_db_stmt_t* that was returned from switch_core_db_prepare()) and
* the second argument is the index of the column for which information * the second argument is the index of the column for which information
* should be returned. iCol is zero-indexed. The left-most column as an * should be returned. iCol is zero-indexed. The left-most column as an
* index of 0. * index of 0.
* *
@ -200,7 +200,7 @@ SWITCH_DECLARE(const char *) switch_core_db_errmsg(switch_core_db_t *db);
* *
* The return value is is SWITCH_CORE_DB_OK if there are no errors and * The return value is is SWITCH_CORE_DB_OK if there are no errors and
* some other return code if there is an error. The particular * some other return code if there is an error. The particular
* return value depends on the type of error. * return value depends on the type of error.
* *
* If the query could not be executed because a database file is * If the query could not be executed because a database file is
* locked or busy, then this function returns SWITCH_CORE_DB_BUSY. (This * locked or busy, then this function returns SWITCH_CORE_DB_BUSY. (This
@ -214,7 +214,7 @@ SWITCH_DECLARE(int) switch_core_db_exec(switch_core_db_t *db, const char *sql, s
* SQL statement obtained by a previous call to switch_core_db_prepare(). * SQL statement obtained by a previous call to switch_core_db_prepare().
* If the statement was executed successfully, or * If the statement was executed successfully, or
* not executed at all, then SWITCH_CORE_DB_OK is returned. If execution of the * not executed at all, then SWITCH_CORE_DB_OK is returned. If execution of the
* statement failed then an error code is returned. * statement failed then an error code is returned.
* *
* This routine can be called at any point during the execution of the * This routine can be called at any point during the execution of the
* virtual machine. If the virtual machine has not completed execution * virtual machine. If the virtual machine has not completed execution
@ -249,12 +249,12 @@ SWITCH_DECLARE(int) switch_core_db_finalize(switch_core_db_stmt_t *pStmt);
*/ */
SWITCH_DECLARE(int) switch_core_db_prepare(switch_core_db_t *db, const char *zSql, int nBytes, switch_core_db_stmt_t **ppStmt, const char **pzTail); SWITCH_DECLARE(int) switch_core_db_prepare(switch_core_db_t *db, const char *zSql, int nBytes, switch_core_db_stmt_t **ppStmt, const char **pzTail);
/** /**
* After an SQL query has been compiled with a call to either * After an SQL query has been compiled with a call to either
* switch_core_db_prepare(), then this function must be * switch_core_db_prepare(), then this function must be
* called one or more times to execute the statement. * called one or more times to execute the statement.
* *
* The return value will be either SWITCH_CORE_DB_BUSY, SWITCH_CORE_DB_DONE, * The return value will be either SWITCH_CORE_DB_BUSY, SWITCH_CORE_DB_DONE,
* SWITCH_CORE_DB_ROW, SWITCH_CORE_DB_ERROR, or SWITCH_CORE_DB_MISUSE. * SWITCH_CORE_DB_ROW, SWITCH_CORE_DB_ERROR, or SWITCH_CORE_DB_MISUSE.
* *
* SWITCH_CORE_DB_BUSY means that the database engine attempted to open * SWITCH_CORE_DB_BUSY means that the database engine attempted to open
@ -265,12 +265,12 @@ SWITCH_DECLARE(int) switch_core_db_prepare(switch_core_db_t *db, const char *zSq
* successfully. switch_core_db_step() should not be called again on this virtual * successfully. switch_core_db_step() should not be called again on this virtual
* machine. * machine.
* *
* If the SQL statement being executed returns any data, then * If the SQL statement being executed returns any data, then
* SWITCH_CORE_DB_ROW is returned each time a new row of data is ready * SWITCH_CORE_DB_ROW is returned each time a new row of data is ready
* for processing by the caller. The values may be accessed using * for processing by the caller. The values may be accessed using
* the switch_core_db_column_*() functions described below. switch_core_db_step() * the switch_core_db_column_*() functions described below. switch_core_db_step()
* is called again to retrieve the next row of data. * is called again to retrieve the next row of data.
* *
* SWITCH_CORE_DB_ERROR means that a run-time error (such as a constraint * SWITCH_CORE_DB_ERROR means that a run-time error (such as a constraint
* violation) has occurred. switch_core_db_step() should not be called again on * violation) has occurred. switch_core_db_step() should not be called again on
* the VM. More information may be found by calling switch_core_db_errmsg(). * the VM. More information may be found by calling switch_core_db_errmsg().
@ -303,7 +303,7 @@ SWITCH_DECLARE(int) switch_core_db_reset(switch_core_db_stmt_t *pStmt);
* In every case, the first parameter is a pointer to the sqlite3_stmt * In every case, the first parameter is a pointer to the sqlite3_stmt
* structure returned from switch_core_db_prepare(). The second parameter is the * structure returned from switch_core_db_prepare(). The second parameter is the
* index of the parameter. The first parameter as an index of 1. For * index of the parameter. The first parameter as an index of 1. For
* named parameters (":AAA" or "$VVV") you can use * named parameters (":AAA" or "$VVV") you can use
* switch_core_db_bind_parameter_index() to get the correct index value given * switch_core_db_bind_parameter_index() to get the correct index value given
* the parameters name. If the same named parameter occurs more than * the parameters name. If the same named parameter occurs more than
* once, it is assigned the same index each time. * once, it is assigned the same index each time.
@ -325,7 +325,7 @@ SWITCH_DECLARE(int) switch_core_db_bind_int(switch_core_db_stmt_t *pStmt, int i,
* In every case, the first parameter is a pointer to the sqlite3_stmt * In every case, the first parameter is a pointer to the sqlite3_stmt
* structure returned from switch_core_db_prepare(). The second parameter is the * structure returned from switch_core_db_prepare(). The second parameter is the
* index of the parameter. The first parameter as an index of 1. For * index of the parameter. The first parameter as an index of 1. For
* named parameters (":AAA" or "$VVV") you can use * named parameters (":AAA" or "$VVV") you can use
* switch_core_db_bind_parameter_index() to get the correct index value given * switch_core_db_bind_parameter_index() to get the correct index value given
* the parameters name. If the same named parameter occurs more than * the parameters name. If the same named parameter occurs more than
* once, it is assigned the same index each time. * once, it is assigned the same index each time.
@ -347,7 +347,7 @@ SWITCH_DECLARE(int) switch_core_db_bind_int64(switch_core_db_stmt_t *pStmt, int
* In every case, the first parameter is a pointer to the sqlite3_stmt * In every case, the first parameter is a pointer to the sqlite3_stmt
* structure returned from switch_core_db_prepare(). The second parameter is the * structure returned from switch_core_db_prepare(). The second parameter is the
* index of the parameter. The first parameter as an index of 1. For * index of the parameter. The first parameter as an index of 1. For
* named parameters (":AAA" or "$VVV") you can use * named parameters (":AAA" or "$VVV") you can use
* switch_core_db_bind_parameter_index() to get the correct index value given * switch_core_db_bind_parameter_index() to get the correct index value given
* the parameters name. If the same named parameter occurs more than * the parameters name. If the same named parameter occurs more than
* once, it is assigned the same index each time. * once, it is assigned the same index each time.
@ -377,7 +377,7 @@ SWITCH_DECLARE(int) switch_core_db_bind_text(switch_core_db_stmt_t *pStmt, int i
* In every case, the first parameter is a pointer to the sqlite3_stmt * In every case, the first parameter is a pointer to the sqlite3_stmt
* structure returned from switch_core_db_prepare(). The second parameter is the * structure returned from switch_core_db_prepare(). The second parameter is the
* index of the parameter. The first parameter as an index of 1. For * index of the parameter. The first parameter as an index of 1. For
* named parameters (":AAA" or "$VVV") you can use * named parameters (":AAA" or "$VVV") you can use
* sqlite3_bind_parameter_index() to get the correct index value given * sqlite3_bind_parameter_index() to get the correct index value given
* the parameters name. If the same named parameter occurs more than * the parameters name. If the same named parameter occurs more than
* once, it is assigned the same index each time. * once, it is assigned the same index each time.
@ -404,7 +404,7 @@ SWITCH_DECLARE(int64_t) switch_core_db_last_insert_rowid(switch_core_db_t *db);
* Instead of invoking a user-supplied callback for each row of the * Instead of invoking a user-supplied callback for each row of the
* result, this routine remembers each row of the result in memory * result, this routine remembers each row of the result in memory
* obtained from malloc(), then returns all of the result after the * obtained from malloc(), then returns all of the result after the
* query has finished. * query has finished.
* *
* As an example, suppose the query result where this table: * As an example, suppose the query result where this table:
* *
@ -431,11 +431,11 @@ SWITCH_DECLARE(int64_t) switch_core_db_last_insert_rowid(switch_core_db_t *db);
* set to 2. In general, the number of values inserted into azResult * set to 2. In general, the number of values inserted into azResult
* will be ((*nrow) + 1)*(*ncolumn). * will be ((*nrow) + 1)*(*ncolumn).
* *
* After the calling function has finished using the result, it should * After the calling function has finished using the result, it should
* pass the result data pointer to switch_core_db_free_table() in order to * pass the result data pointer to switch_core_db_free_table() in order to
* release the memory that was malloc-ed. Because of the way the * release the memory that was malloc-ed. Because of the way the
* malloc() happens, the calling function must not try to call * malloc() happens, the calling function must not try to call
* free() directly. Only switch_core_db_free_table() is able to release * free() directly. Only switch_core_db_free_table() is able to release
* the memory properly and safely. * the memory properly and safely.
* *
* The return value of this routine is the same as from switch_core_db_exec(). * The return value of this routine is the same as from switch_core_db_exec().
@ -542,7 +542,7 @@ SWITCH_DECLARE(int) switch_core_db_load_extension(switch_core_db_t *db, const ch
* INSERT INTO table1 VALUES('It's a happy day!'); * INSERT INTO table1 VALUES('It's a happy day!');
* *
* This second example is an SQL syntax error. As a general rule you * This second example is an SQL syntax error. As a general rule you
* should always use %q instead of %s when inserting text into a string * should always use %q instead of %s when inserting text into a string
* literal. * literal.
*/ */

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* switch_core_event_hook.h Core Event Hooks * switch_core_event_hook.h Core Event Hooks

View File

@ -1,5 +1,5 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -23,7 +23,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* switch_core_media.c -- Core Media * switch_core_media.c -- Core Media
@ -134,7 +134,7 @@ typedef struct switch_core_media_params_s {
char *rtpip; char *rtpip;
char *rtpip4; char *rtpip4;
char *rtpip6; char *rtpip6;
char *remote_ip; char *remote_ip;
int remote_port; int remote_port;
@ -185,7 +185,7 @@ static inline const char *switch_media_type2str(switch_media_type_t type)
return "video"; return "video";
default: default:
return "!ERR"; return "!ERR";
} }
} }
@ -201,7 +201,7 @@ SWITCH_DECLARE(int32_t) switch_media_handle_test_media_flag(switch_media_handle_
SWITCH_DECLARE(void) switch_media_handle_set_media_flags(switch_media_handle_t *smh, switch_core_media_flag_t flags[]); SWITCH_DECLARE(void) switch_media_handle_set_media_flags(switch_media_handle_t *smh, switch_core_media_flag_t flags[]);
SWITCH_DECLARE(void) switch_core_session_check_outgoing_crypto(switch_core_session_t *session); SWITCH_DECLARE(void) switch_core_session_check_outgoing_crypto(switch_core_session_t *session);
SWITCH_DECLARE(const char *) switch_core_session_local_crypto_key(switch_core_session_t *session, switch_media_type_t type); SWITCH_DECLARE(const char *) switch_core_session_local_crypto_key(switch_core_session_t *session, switch_media_type_t type);
SWITCH_DECLARE(int) switch_core_session_check_incoming_crypto(switch_core_session_t *session, SWITCH_DECLARE(int) switch_core_session_check_incoming_crypto(switch_core_session_t *session,
const char *varname, const char *varname,
switch_media_type_t type, const char *crypto, int crypto_tag, switch_sdp_type_t sdp_type); switch_media_type_t type, const char *crypto, int crypto_tag, switch_sdp_type_t sdp_type);
@ -224,7 +224,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_set_codec(switch_core_session_
SWITCH_DECLARE(void) switch_core_media_check_video_codecs(switch_core_session_t *session); SWITCH_DECLARE(void) switch_core_media_check_video_codecs(switch_core_session_t *session);
SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session_t *session, switch_frame_t **frame, SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session_t *session, switch_frame_t **frame,
switch_io_flag_t flags, int stream_id, switch_media_type_t type); switch_io_flag_t flags, int stream_id, switch_media_type_t type);
SWITCH_DECLARE(switch_status_t) switch_core_media_write_frame(switch_core_session_t *session, SWITCH_DECLARE(switch_status_t) switch_core_media_write_frame(switch_core_session_t *session,
switch_frame_t *frame, switch_io_flag_t flags, int stream_id, switch_media_type_t type); switch_frame_t *frame, switch_io_flag_t flags, int stream_id, switch_media_type_t type);
SWITCH_DECLARE(int) switch_core_media_check_nat(switch_media_handle_t *smh, const char *network_ip); SWITCH_DECLARE(int) switch_core_media_check_nat(switch_media_handle_t *smh, const char *network_ip);
@ -237,9 +237,9 @@ SWITCH_DECLARE(void) switch_core_media_parse_media_flags(switch_core_session_t *
SWITCH_DECLARE(void) switch_core_media_deactivate_rtp(switch_core_session_t *session); SWITCH_DECLARE(void) switch_core_media_deactivate_rtp(switch_core_session_t *session);
SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_session_t *session); SWITCH_DECLARE(switch_status_t) switch_core_media_activate_rtp(switch_core_session_t *session);
SWITCH_DECLARE(switch_status_t) switch_core_media_ext_address_lookup(switch_core_session_t *session, char **ip, switch_port_t *port, const char *sourceip); SWITCH_DECLARE(switch_status_t) switch_core_media_ext_address_lookup(switch_core_session_t *session, char **ip, switch_port_t *port, const char *sourceip);
SWITCH_DECLARE(switch_status_t) switch_core_media_process_t38_passthru(switch_core_session_t *session, SWITCH_DECLARE(switch_status_t) switch_core_media_process_t38_passthru(switch_core_session_t *session,
switch_core_session_t *other_session, switch_t38_options_t *t38_options); switch_core_session_t *other_session, switch_t38_options_t *t38_options);
SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *session, switch_sdp_type_t sdp_type, SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *session, switch_sdp_type_t sdp_type,
const char *ip, switch_port_t port, const char *sr, int force); const char *ip, switch_port_t port, const char *sr, int force);
SWITCH_DECLARE(void)switch_core_media_set_local_sdp(switch_core_session_t *session, const char *sdp_str, switch_bool_t dup); SWITCH_DECLARE(void)switch_core_media_set_local_sdp(switch_core_session_t *session, const char *sdp_str, switch_bool_t dup);
SWITCH_DECLARE(void) switch_core_media_patch_sdp(switch_core_session_t *session); SWITCH_DECLARE(void) switch_core_media_patch_sdp(switch_core_session_t *session);
@ -295,14 +295,14 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_get_payload_code(switch_core
switch_payload_t *recv_ptP, switch_payload_t *recv_ptP,
char **fmtpP); char **fmtpP);
SWITCH_DECLARE(payload_map_t *) switch_core_media_add_payload_map(switch_core_session_t *session, SWITCH_DECLARE(payload_map_t *) switch_core_media_add_payload_map(switch_core_session_t *session,
switch_media_type_t type, switch_media_type_t type,
const char *name, const char *name,
const char *modname, const char *modname,
const char *fmtp, const char *fmtp,
switch_sdp_type_t sdp_type, switch_sdp_type_t sdp_type,
uint32_t pt, uint32_t pt,
uint32_t rate, uint32_t rate,
uint32_t ptime, uint32_t ptime,
uint32_t channels, uint32_t channels,
uint8_t negotiated); uint8_t negotiated);
@ -315,10 +315,10 @@ SWITCH_DECLARE(char *) switch_core_media_filter_sdp(const char *sdp, const char
SWITCH_DECLARE(char *) switch_core_media_process_sdp_filter(const char *sdp, const char *cmd_buf, switch_core_session_t *session); SWITCH_DECLARE(char *) switch_core_media_process_sdp_filter(const char *sdp, const char *cmd_buf, switch_core_session_t *session);
SWITCH_DECLARE(switch_status_t) switch_core_media_codec_control(switch_core_session_t *session, SWITCH_DECLARE(switch_status_t) switch_core_media_codec_control(switch_core_session_t *session,
switch_media_type_t mtype, switch_media_type_t mtype,
switch_io_type_t iotype, switch_io_type_t iotype,
switch_codec_control_command_t cmd, switch_codec_control_command_t cmd,
switch_codec_control_type_t ctype, switch_codec_control_type_t ctype,
void *cmd_data, void *cmd_data,
switch_codec_control_type_t atype, switch_codec_control_type_t atype,
@ -326,7 +326,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_codec_control(switch_core_sess
switch_codec_control_type_t *rtype, switch_codec_control_type_t *rtype,
void **ret_data); void **ret_data);
SWITCH_DECLARE(switch_bool_t) switch_core_media_codec_get_cap(switch_core_session_t *session, SWITCH_DECLARE(switch_bool_t) switch_core_media_codec_get_cap(switch_core_session_t *session,
switch_media_type_t mtype, switch_media_type_t mtype,
switch_codec_flag_t flag); switch_codec_flag_t flag);
@ -346,7 +346,7 @@ SWITCH_DECLARE(int) switch_core_media_check_engine_function(switch_core_session_
SWITCH_DECLARE(void) switch_core_session_video_reinit(switch_core_session_t *session); SWITCH_DECLARE(void) switch_core_session_video_reinit(switch_core_session_t *session);
SWITCH_DECLARE(switch_status_t) switch_core_media_read_lock_unlock(switch_core_session_t *session, switch_media_type_t type, switch_bool_t lock); SWITCH_DECLARE(switch_status_t) switch_core_media_read_lock_unlock(switch_core_session_t *session, switch_media_type_t type, switch_bool_t lock);
#define switch_core_media_read_lock(_s, _t) switch_core_media_read_lock_unlock(_s, _t, SWITCH_TRUE) #define switch_core_media_read_lock(_s, _t) switch_core_media_read_lock_unlock(_s, _t, SWITCH_TRUE)
#define switch_core_media_read_unlock(_s, _t) switch_core_media_read_lock_unlock(_s, _t, SWITCH_FALSE) #define switch_core_media_read_unlock(_s, _t) switch_core_media_read_lock_unlock(_s, _t, SWITCH_FALSE)
SWITCH_DECLARE(void) switch_core_session_stop_media(switch_core_session_t *session); SWITCH_DECLARE(void) switch_core_session_stop_media(switch_core_session_t *session);
@ -363,7 +363,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_reset_jb(switch_core_session_t
SWITCH_DECLARE(switch_status_t) switch_core_session_wait_for_video_input_params(switch_core_session_t *session, uint32_t timeout_ms); SWITCH_DECLARE(switch_status_t) switch_core_session_wait_for_video_input_params(switch_core_session_t *session, uint32_t timeout_ms);
SWITCH_DECLARE(switch_status_t) switch_core_session_set_text_read_callback(switch_core_session_t *session, SWITCH_DECLARE(switch_status_t) switch_core_session_set_text_read_callback(switch_core_session_t *session,
switch_core_text_thread_callback_func_t func, void *user_data); switch_core_text_thread_callback_func_t func, void *user_data);
SWITCH_DECLARE(switch_status_t) switch_core_session_text_read_callback(switch_core_session_t *session, switch_frame_t *frame); SWITCH_DECLARE(switch_status_t) switch_core_session_text_read_callback(switch_core_session_t *session, switch_frame_t *frame);
SWITCH_DECLARE(switch_status_t) switch_core_session_read_text_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, SWITCH_DECLARE(switch_status_t) switch_core_session_read_text_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags,
@ -373,7 +373,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_text_frame(switch_core
int stream_id); int stream_id);
SWITCH_DECLARE(switch_status_t) switch_rtp_text_factory_create(switch_rtp_text_factory_t **tfP, switch_memory_pool_t *pool); SWITCH_DECLARE(switch_status_t) switch_rtp_text_factory_create(switch_rtp_text_factory_t **tfP, switch_memory_pool_t *pool);
SWITCH_DECLARE(switch_status_t) switch_rtp_text_factory_destroy(switch_rtp_text_factory_t **tfP); SWITCH_DECLARE(switch_status_t) switch_rtp_text_factory_destroy(switch_rtp_text_factory_t **tfP);
SWITCH_DECLARE(switch_status_t) switch_core_session_print(switch_core_session_t *session, const char *data); SWITCH_DECLARE(switch_status_t) switch_core_session_print(switch_core_session_t *session, const char *data);
SWITCH_DECLARE(switch_status_t) switch_core_session_printf(switch_core_session_t *session, const char *fmt, ...); SWITCH_DECLARE(switch_status_t) switch_core_session_printf(switch_core_session_t *session, const char *fmt, ...);

View File

@ -103,7 +103,7 @@ typedef enum {
SRM_180 = 180, // Rotate 180 degrees. SRM_180 = 180, // Rotate 180 degrees.
SRM_270 = 270, // Rotate 270 degrees clockwise. SRM_270 = 270, // Rotate 270 degrees clockwise.
} switch_image_rotation_mode_t; } switch_image_rotation_mode_t;
/*!\brief Open a descriptor, allocating storage for the underlying image /*!\brief Open a descriptor, allocating storage for the underlying image
* *
@ -318,7 +318,7 @@ SWITCH_DECLARE(void) switch_img_txt_handle_destroy(switch_img_txt_handle_t **han
SWITCH_DECLARE(uint32_t) switch_img_txt_handle_render(switch_img_txt_handle_t *handle, switch_image_t *img, SWITCH_DECLARE(uint32_t) switch_img_txt_handle_render(switch_img_txt_handle_t *handle, switch_image_t *img,
int x, int y, const char *text, int x, int y, const char *text,
const char *font_family, const char *font_color, const char *bgcolor, uint16_t font_size, double angle); const char *font_family, const char *font_color, const char *bgcolor, uint16_t font_size, double angle);
SWITCH_DECLARE(void) switch_img_patch_hole(switch_image_t *IMG, switch_image_t *img, int x, int y, switch_image_rect_t *rect); SWITCH_DECLARE(void) switch_img_patch_hole(switch_image_t *IMG, switch_image_t *img, int x, int y, switch_image_rect_t *rect);

View File

@ -96,7 +96,7 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
const char *confirm_key, const char *confirm_key,
const char *tts_engine, const char *tts_engine,
const char *tts_voice, const char *tts_voice,
int confirm_attempts, int inter_timeout, int digit_len, int confirm_attempts, int inter_timeout, int digit_len,
int timeout, int max_failures, int max_timeouts); int timeout, int max_failures, int max_timeouts);
virtual SWITCH_DECLARE_CONSTRUCTOR ~ IVRMenu(); virtual SWITCH_DECLARE_CONSTRUCTOR ~ IVRMenu();
SWITCH_DECLARE(void) bindAction(char *action, const char *arg, const char *bind); SWITCH_DECLARE(void) bindAction(char *action, const char *arg, const char *bind);
@ -123,7 +123,7 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
void *threadState; // pointer to the language specific thread state void *threadState; // pointer to the language specific thread state
// eg, PyThreadState *threadState // eg, PyThreadState *threadState
void *extra; // currently used to store a switch_file_handle_t void *extra; // currently used to store a switch_file_handle_t
char *funcargs; // extra string that will be passed to callback function char *funcargs; // extra string that will be passed to callback function
} input_callback_state_t; } input_callback_state_t;
typedef enum { typedef enum {
@ -211,7 +211,7 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
// instead set them here first // instead set them here first
char *xml_cdr_text; char *xml_cdr_text;
void store_file_handle(switch_file_handle_t *fh); void store_file_handle(switch_file_handle_t *fh);
void *on_hangup; // language specific callback function, cast as void * void *on_hangup; // language specific callback function, cast as void *
switch_file_handle_t *fhp; switch_file_handle_t *fhp;
char dtmf_buf[512]; char dtmf_buf[512];
@ -251,9 +251,9 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
SWITCH_DECLARE(const char *) getState(); SWITCH_DECLARE(const char *) getState();
/** \brief Record to a file /** \brief Record to a file
* \param file_name * \param file_name
* \param <[max_len]> maximum length of the recording in seconds * \param <[max_len]> maximum length of the recording in seconds
* \param <[silence_threshold]> energy level audio must fall below * \param <[silence_threshold]> energy level audio must fall below
* to be considered silence (500 is a good starting point). * to be considered silence (500 is a good starting point).
* \param <[silence_secs]> seconds of silence to interrupt the record. * \param <[silence_secs]> seconds of silence to interrupt the record.
*/ */
@ -266,8 +266,8 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
/** \brief Originate a call to a destination /** \brief Originate a call to a destination
* *
* \param a_leg_session - the session where the call is originating from * \param a_leg_session - the session where the call is originating from
* and also the session in which _this_ session was * and also the session in which _this_ session was
* created * created
* \param dest - a string representing destination, eg, sofia/mydomain.com/foo\@bar.com * \param dest - a string representing destination, eg, sofia/mydomain.com/foo\@bar.com
* \param timeout - time to wait for call to be answered * \param timeout - time to wait for call to be answered
@ -280,10 +280,10 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
SWITCH_DECLARE(virtual void) destroy(void); SWITCH_DECLARE(virtual void) destroy(void);
/** \brief set a DTMF callback function /** \brief set a DTMF callback function
* *
* The DTMF callback function will be set and persist * The DTMF callback function will be set and persist
* for the life of the session, and be called when a dtmf * for the life of the session, and be called when a dtmf
* is pressed by user during streamfile(), collectDigits(), and * is pressed by user during streamfile(), collectDigits(), and
* certain other methods are executing. * certain other methods are executing.
* *
*/ */
@ -300,9 +300,9 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
SWITCH_DECLARE(int) collectDigits(int abs_timeout); SWITCH_DECLARE(int) collectDigits(int abs_timeout);
SWITCH_DECLARE(int) collectDigits(int digit_timeout, int abs_timeout); SWITCH_DECLARE(int) collectDigits(int digit_timeout, int abs_timeout);
/** /**
* Collect up to maxdigits digits worth of digits * Collect up to maxdigits digits worth of digits
* and store them in dtmf_buf. In the case of mod_python, the * and store them in dtmf_buf. In the case of mod_python, the
* dtmf_buf parameter is configured to act as a _return_ value, * dtmf_buf parameter is configured to act as a _return_ value,
* (see mod_python.i). This does NOT call any callbacks upon * (see mod_python.i). This does NOT call any callbacks upon
* receiving dtmf digits. For that, use collectDigits. * receiving dtmf digits. For that, use collectDigits.
@ -313,14 +313,14 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
SWITCH_DECLARE(int) transfer(char *extension, char *dialplan = NULL, char *context = NULL); SWITCH_DECLARE(int) transfer(char *extension, char *dialplan = NULL, char *context = NULL);
SWITCH_DECLARE(char *) read(int min_digits, int max_digits, SWITCH_DECLARE(char *) read(int min_digits, int max_digits,
const char *prompt_audio_file, int timeout, const char *valid_terminators, int digit_timeout = 0); const char *prompt_audio_file, int timeout, const char *valid_terminators, int digit_timeout = 0);
/** \brief Play a file into channel and collect dtmfs /** \brief Play a file into channel and collect dtmfs
* *
* See API docs in switch_ivr.h: switch_play_and_get_digits(..) * See API docs in switch_ivr.h: switch_play_and_get_digits(..)
* *
* NOTE: this does not call any dtmf callbacks set by * NOTE: this does not call any dtmf callbacks set by
* setDTMFCallback(..) as it uses its own internal callback * setDTMFCallback(..) as it uses its own internal callback
* handler. * handler.
*/ */
@ -334,7 +334,7 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
/** \brief Play a file that resides on disk into the channel /** \brief Play a file that resides on disk into the channel
* *
* \param file - the path to the .wav/.mp3 to be played * \param file - the path to the .wav/.mp3 to be played
* \param starting_sample_count - the index of the sample to * \param starting_sample_count - the index of the sample to
* start playing from * start playing from
* \return an int status code indicating success or failure * \return an int status code indicating success or failure
* *
@ -374,7 +374,7 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
virtual bool begin_allow_threads() = 0; virtual bool begin_allow_threads() = 0;
virtual bool end_allow_threads() = 0; virtual bool end_allow_threads() = 0;
/** \brief Get the uuid of this session /** \brief Get the uuid of this session
* \return the uuid of this session * \return the uuid of this session
*/ */
const char *get_uuid() const { const char *get_uuid() const {
@ -407,7 +407,7 @@ SWITCH_DECLARE(void) console_clean_log(char *msg);
SWITCH_DECLARE(void) switch_msleep(unsigned ms); SWITCH_DECLARE(void) switch_msleep(unsigned ms);
/** \brief bridge the audio of session_b into session_a /** \brief bridge the audio of session_b into session_a
* *
* NOTE: the stuff regarding the dtmf callback might be completely * NOTE: the stuff regarding the dtmf callback might be completely
* wrong and has not been reviewed or tested * wrong and has not been reviewed or tested
*/ */

View File

@ -54,7 +54,7 @@ SWITCH_DECLARE(switch_status_t) switch_curl_process_form_post_params(switch_even
#define switch_curl_easy_setopt curl_easy_setopt #define switch_curl_easy_setopt curl_easy_setopt
SWITCH_END_EXTERN_C SWITCH_END_EXTERN_C
#endif #endif

View File

@ -1,4 +1,4 @@
/* /*
* Cross Platform dso/dll load abstraction * Cross Platform dso/dll load abstraction
* Copyright(C) 2008 Michael Jerris * Copyright(C) 2008 Michael Jerris
* *
@ -13,7 +13,7 @@
* code prove defective in any respect, you (not the initial developer or any other contributor) * 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 * 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 * constitutes an essential part of this license. No use of any covered code is authorized hereunder
* except under this disclaimer. * except under this disclaimer.
* *
*/ */

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Dragos Oancea <droancea@yahoo.com> * Dragos Oancea <droancea@yahoo.com>
* *
* switch_estimators.h -- Estimators for Packet Loss, Jitter, RTT , etc * switch_estimators.h -- Estimators for Packet Loss, Jitter, RTT , etc
@ -32,8 +32,8 @@
#ifndef SWITCH_ESTIMATORS_H #ifndef SWITCH_ESTIMATORS_H
#define SWITCH_ESTIMATORS_H #define SWITCH_ESTIMATORS_H
#include <switch.h> #include <switch.h>
@ -41,27 +41,27 @@ SWITCH_BEGIN_EXTERN_C
struct kalman_estimator_s { struct kalman_estimator_s {
/* initial values for the Kalman filter */ /* initial values for the Kalman filter */
float val_estimate_last ; float val_estimate_last ;
float P_last ; float P_last ;
/* the noise in the system: /* the noise in the system:
The amount of noise in your measurements and the state-transitions The amount of noise in your measurements and the state-transitions
(e.g. the standard deviation of the signal noise, and how 'wrong' your simplified model (e.g. the standard deviation of the signal noise, and how 'wrong' your simplified model
of the state-transitions are) => These are Q and R matrices */ of the state-transitions are) => These are Q and R matrices */
float Q ; /* the process noise covariance matrix */ float Q ; /* the process noise covariance matrix */
float R ; /* the measurement noise covariance matrix */ float R ; /* the measurement noise covariance matrix */
float K; /* P_temp * H^T * (H* P_temp * H^T + R)^-1 */ float K; /* P_temp * H^T * (H* P_temp * H^T + R)^-1 */
float P; /* the Kalman gain (calculated) */ float P; /* the Kalman gain (calculated) */
float val_estimate; /* x_temp_est + K * (z_measured - H * x_temp_est) */ float val_estimate; /* x_temp_est + K * (z_measured - H * x_temp_est) */
float val_measured; /* the 'noisy' value we measured */ float val_measured; /* the 'noisy' value we measured */
}; };
struct cusum_kalman_detector_s { struct cusum_kalman_detector_s {
/* initial values for the CUSUM Kalman filter */ /* initial values for the CUSUM Kalman filter */
float val_estimate_last; float val_estimate_last;
float val_desired_last; float val_desired_last;
float P_last; float P_last;
float K_last; float K_last;
float delta; float delta;
float measurement_noise_e; float measurement_noise_e;
float variance_Re; float variance_Re;
float measurement_noise_v; float measurement_noise_v;
@ -73,14 +73,14 @@ struct cusum_kalman_detector_s {
/* for calculating variance */ /* for calculating variance */
float last_average; float last_average;
float last_q; float last_q;
float N; /*how many samples we have so far (eg: how many RTCP we received, granted that we can calculate RTT for each one of them)*/ float N; /*how many samples we have so far (eg: how many RTCP we received, granted that we can calculate RTT for each one of them)*/
}; };
typedef struct kalman_estimator_s kalman_estimator_t; typedef struct kalman_estimator_s kalman_estimator_t;
typedef struct cusum_kalman_detector_s cusum_kalman_detector_t; typedef struct cusum_kalman_detector_s cusum_kalman_detector_t;
SWITCH_DECLARE(void) switch_kalman_init(kalman_estimator_t *est, float Q, float R); SWITCH_DECLARE(void) switch_kalman_init(kalman_estimator_t *est, float Q, float R);
SWITCH_DECLARE(switch_bool_t) switch_kalman_cusum_init(cusum_kalman_detector_t *detect_change, float epsilon,float h); SWITCH_DECLARE(switch_bool_t) switch_kalman_cusum_init(cusum_kalman_detector_t *detect_change, float epsilon,float h);
SWITCH_DECLARE(switch_bool_t) switch_kalman_estimate(kalman_estimator_t * est, float measurement, int system_model); SWITCH_DECLARE(switch_bool_t) switch_kalman_estimate(kalman_estimator_t * est, float measurement, int system_model);
SWITCH_DECLARE (switch_bool_t) switch_kalman_cusum_detect_change(cusum_kalman_detector_t * detector, float measurement, float rtt_avg); SWITCH_DECLARE (switch_bool_t) switch_kalman_cusum_detect_change(cusum_kalman_detector_t * detector, float measurement, float rtt_avg);
SWITCH_DECLARE(switch_bool_t) switch_kalman_is_slow_link(kalman_estimator_t * est_loss, kalman_estimator_t * est_rtt); SWITCH_DECLARE(switch_bool_t) switch_kalman_is_slow_link(kalman_estimator_t * est_loss, kalman_estimator_t * est_rtt);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -31,20 +31,20 @@
*/ */
/*! \file switch_event.h /*! \file switch_event.h
\brief Event System \brief Event System
The event system uses a backend thread and an APR threadsafe FIFO queue to accept event objects from various threads The event system uses a backend thread and an APR threadsafe FIFO queue to accept event objects from various threads
and allow the backend to take control and deliver the events to registered callbacks. and allow the backend to take control and deliver the events to registered callbacks.
The typical usage would be to bind to one or all of the events and use a callback function to react in various ways The typical usage would be to bind to one or all of the events and use a callback function to react in various ways
(see the more_xmpp_event_handler or mod_event_test modules for examples). (see the more_xmpp_event_handler or mod_event_test modules for examples).
Builtin events are fired by the core at various points in the execution of the application and custom events can be Builtin events are fired by the core at various points in the execution of the application and custom events can be
reserved and registered so events from an external module can be rendered and handled by an another even handler module. reserved and registered so events from an external module can be rendered and handled by an another even handler module.
If the work time to process an event in a callback is anticipated to grow beyond a very small amount of time it is recommended If the work time to process an event in a callback is anticipated to grow beyond a very small amount of time it is recommended
that you implement your own handler thread and FIFO queue so you can accept the events in the callback and queue them that you implement your own handler thread and FIFO queue so you can accept the events in the callback and queue them
into your own thread rather than tie up the delivery agent. It is in the opinion of the author that such a necessity into your own thread rather than tie up the delivery agent. It is in the opinion of the author that such a necessity
should be judged on a per-use basis and therefore it does not fall within the scope of this system to provide that should be judged on a per-use basis and therefore it does not fall within the scope of this system to provide that
functionality at a core level. functionality at a core level.
*/ */
@ -52,7 +52,7 @@
/*! /*!
\defgroup events Eventing Engine \defgroup events Eventing Engine
\ingroup core1 \ingroup core1
\{ \{
*/ */
#ifndef SWITCH_EVENT_H #ifndef SWITCH_EVENT_H
@ -304,7 +304,7 @@ SWITCH_DECLARE(switch_status_t) switch_event_reserve_subclass_detailed(const cha
SWITCH_DECLARE(switch_status_t) switch_event_free_subclass_detailed(const char *owner, const char *subclass_name); SWITCH_DECLARE(switch_status_t) switch_event_free_subclass_detailed(const char *owner, const char *subclass_name);
/*! /*!
\brief Render a string representation of an event suitable for printing or network transport \brief Render a string representation of an event suitable for printing or network transport
\param event the event to render \param event the event to render
\param str a string pointer to point at the allocated data \param str a string pointer to point at the allocated data
\param encode url encode the headers \param encode url encode the headers
@ -430,7 +430,7 @@ SWITCH_DECLARE(void) switch_event_launch_dispatch_threads(uint32_t max);
SWITCH_DECLARE(switch_status_t) switch_event_channel_broadcast(const char *event_channel, cJSON **json, const char *key, switch_event_channel_id_t id); SWITCH_DECLARE(switch_status_t) switch_event_channel_broadcast(const char *event_channel, cJSON **json, const char *key, switch_event_channel_id_t id);
SWITCH_DECLARE(uint32_t) switch_event_channel_unbind(const char *event_channel, switch_event_channel_func_t func); SWITCH_DECLARE(uint32_t) switch_event_channel_unbind(const char *event_channel, switch_event_channel_func_t func);
SWITCH_DECLARE(switch_status_t) switch_event_channel_bind(const char *event_channel, switch_event_channel_func_t func, switch_event_channel_id_t *id); SWITCH_DECLARE(switch_status_t) switch_event_channel_bind(const char *event_channel, switch_event_channel_func_t func, switch_event_channel_id_t *id);
typedef void (*switch_live_array_command_handler_t)(switch_live_array_t *la, const char *cmd, const char *sessid, cJSON *jla, void *user_data); typedef void (*switch_live_array_command_handler_t)(switch_live_array_t *la, const char *cmd, const char *sessid, cJSON *jla, void *user_data);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* *
* switch_hashtable.h -- Hashtable * switch_hashtable.h -- Hashtable
@ -39,7 +39,7 @@ typedef struct switch_hashtable_iterator switch_hashtable_iterator_t;
* v = (struct some_value *) malloc(sizeof(struct some_value)); * v = (struct some_value *) malloc(sizeof(struct some_value));
* *
* (initialise k and v to suitable values) * (initialise k and v to suitable values)
* *
* if (! hashtable_insert(h,k,v) ) * if (! hashtable_insert(h,k,v) )
* { exit(-1); } * { exit(-1); }
* *
@ -53,7 +53,7 @@ typedef struct switch_hashtable_iterator switch_hashtable_iterator_t;
/* Macros may be used to define type-safe(r) hashtable access functions, with /* Macros may be used to define type-safe(r) hashtable access functions, with
* methods specialized to take known key and value types as parameters. * methods specialized to take known key and value types as parameters.
* *
* Example: * Example:
* *
* Insert this at the start of your file: * Insert this at the start of your file:
@ -83,7 +83,7 @@ typedef struct switch_hashtable_iterator switch_hashtable_iterator_t;
/***************************************************************************** /*****************************************************************************
* create_hashtable * create_hashtable
* @name create_hashtable * @name create_hashtable
* @param minsize minimum initial size of hashtable * @param minsize minimum initial size of hashtable
* @param hashfunction function for hashing keys * @param hashfunction function for hashing keys
@ -98,7 +98,7 @@ switch_create_hashtable(switch_hashtable_t **hp, unsigned int minsize,
/***************************************************************************** /*****************************************************************************
* hashtable_insert * hashtable_insert
* @name hashtable_insert * @name hashtable_insert
* @param h the hashtable to insert into * @param h the hashtable to insert into
* @param k the key - hashtable claims ownership and will free on removal * @param k the key - hashtable claims ownership and will free on removal
@ -135,7 +135,7 @@ switch_hashtable_insert_destructor(switch_hashtable_t *h, void *k, void *v, hash
/***************************************************************************** /*****************************************************************************
* hashtable_search * hashtable_search
* @name hashtable_search * @name hashtable_search
* @param h the hashtable to search * @param h the hashtable to search
* @param k the key to search for - does not claim ownership * @param k the key to search for - does not claim ownership
@ -153,7 +153,7 @@ switch_hashtable_search(switch_hashtable_t *h, void *k);
/***************************************************************************** /*****************************************************************************
* hashtable_remove * hashtable_remove
* @name hashtable_remove * @name hashtable_remove
* @param h the hashtable to remove the item from * @param h the hashtable to remove the item from
* @param k the key to search for - does not claim ownership * @param k the key to search for - does not claim ownership
@ -172,7 +172,7 @@ switch_hashtable_remove(switch_hashtable_t *h, void *k);
/***************************************************************************** /*****************************************************************************
* hashtable_count * hashtable_count
* @name hashtable_count * @name hashtable_count
* @param h the hashtable * @param h the hashtable
* @return the number of items stored in the hashtable * @return the number of items stored in the hashtable
@ -183,7 +183,7 @@ switch_hashtable_count(switch_hashtable_t *h);
/***************************************************************************** /*****************************************************************************
* hashtable_destroy * hashtable_destroy
* @name hashtable_destroy * @name hashtable_destroy
* @param h the hashtable * @param h the hashtable
* @param free_values whether to call 'free' on the remaining values * @param free_values whether to call 'free' on the remaining values
@ -226,7 +226,7 @@ static inline uint32_t switch_hash_default(void *ky)
unsigned char *str = (unsigned char *) ky; unsigned char *str = (unsigned char *) ky;
uint32_t hash = 0; uint32_t hash = 0;
int c; int c;
while ((c = *str)) { while ((c = *str)) {
str++; str++;
hash = c + (hash << 6) + (hash << 16) - hash; hash = c + (hash << 6) + (hash << 16) - hash;
@ -240,7 +240,7 @@ static inline uint32_t switch_hash_default_ci(void *ky)
unsigned char *str = (unsigned char *) ky; unsigned char *str = (unsigned char *) ky;
uint32_t hash = 0; uint32_t hash = 0;
int c; int c;
while ((c = switch_tolower(*str))) { while ((c = switch_tolower(*str))) {
str++; str++;
hash = c + (hash << 6) + (hash << 16) - hash; hash = c + (hash << 6) + (hash << 16) - hash;
@ -261,23 +261,23 @@ static inline uint32_t switch_hash_default_ci(void *ky)
/* /*
* Copyright (c) 2002, Christopher Clark * Copyright (c) 2002, Christopher Clark
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
* are met: * are met:
* *
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* *
* * Neither the name of the original author; nor the names of any contributors * * Neither the name of the original author; nor the names of any contributors
* may be used to endorse or promote products derived from this software * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Neal Horman <neal at wanlink dot com> * Neal Horman <neal at wanlink dot com>
* Bret McDanel <trixter AT 0xdecafbad dot com> * Bret McDanel <trixter AT 0xdecafbad dot com>
@ -31,7 +31,7 @@
* switch_ivr.h -- IVR Library * switch_ivr.h -- IVR Library
* *
*/ */
/** /**
* @file switch_ivr.h * @file switch_ivr.h
* @brief IVR Library * @brief IVR Library
* @see switch_ivr * @see switch_ivr
@ -75,7 +75,7 @@ typedef struct switch_unicast_conninfo switch_unicast_conninfo_t;
/** /**
* @defgroup switch_ivr IVR Library * @defgroup switch_ivr IVR Library
* @ingroup core1 * @ingroup core1
* A group of core functions to do IVR related functions designed to be * A group of core functions to do IVR related functions designed to be
* building blocks for a higher level IVR interface. * building blocks for a higher level IVR interface.
* @{ * @{
*/ */
@ -179,8 +179,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_collect_digits_count(switch_core_sess
\param args arguements to pass for callbacks etc \param args arguements to pass for callbacks etc
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_play_and_detect_speech(switch_core_session_t *session, SWITCH_DECLARE(switch_status_t) switch_ivr_play_and_detect_speech(switch_core_session_t *session,
const char *file, const char *file,
const char *mod_name, const char *mod_name,
const char *grammar, const char *grammar,
char **result, char **result,
@ -585,7 +585,7 @@ SWITCH_DECLARE(uint32_t) switch_ivr_schedule_hangup(time_t runtime, const char *
\param originator_uuid the uuid of the originator \param originator_uuid the uuid of the originator
\param originatee_uuid the uuid of the originator \param originatee_uuid the uuid of the originator
\remark Any custom state handlers on both channels will be deleted \remark Any custom state handlers on both channels will be deleted
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uuid, const char *originatee_uuid); SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uuid, const char *originatee_uuid);
@ -670,11 +670,11 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_broadcast(const char *uuid, const cha
SWITCH_DECLARE(void) switch_ivr_broadcast_in_thread(switch_core_session_t *session, const char *app, int flags); SWITCH_DECLARE(void) switch_ivr_broadcast_in_thread(switch_core_session_t *session, const char *app, int flags);
/*! /*!
\brief Transfer variables from one session to another \brief Transfer variables from one session to another
\param sessa the original session \param sessa the original session
\param sessb the new session \param sessb the new session
\param var the name of the variable to transfer (NULL for all) \param var the name of the variable to transfer (NULL for all)
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_transfer_variable(switch_core_session_t *sessa, switch_core_session_t *sessb, char *var); SWITCH_DECLARE(switch_status_t) switch_ivr_transfer_variable(switch_core_session_t *sessa, switch_core_session_t *sessb, char *var);
@ -689,14 +689,14 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_transfer_variable(switch_core_session
\brief Create a digit stream parser object \brief Create a digit stream parser object
\param pool the pool to use for the new hash \param pool the pool to use for the new hash
\param parser a pointer to the object pointer \param parser a pointer to the object pointer
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_new(switch_memory_pool_t *pool, switch_ivr_digit_stream_parser_t ** parser); SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_new(switch_memory_pool_t *pool, switch_ivr_digit_stream_parser_t ** parser);
/*! /*!
\brief Destroy a digit stream parser object \brief Destroy a digit stream parser object
\param parser a pointer to the parser object \param parser a pointer to the parser object
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_destroy(switch_ivr_digit_stream_parser_t *parser); SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_destroy(switch_ivr_digit_stream_parser_t *parser);
@ -720,7 +720,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_destroy(switch_ivr_digit
\param parser a pointer to the parser object created by switch_ivr_digit_stream_parser_new \param parser a pointer to the parser object created by switch_ivr_digit_stream_parser_new
\param digits a string of digits to associate with an action \param digits a string of digits to associate with an action
\param data consumer data attached to this digit string \param data consumer data attached to this digit string
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_set_event(switch_ivr_digit_stream_parser_t *parser, char *digits, void *data); SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_set_event(switch_ivr_digit_stream_parser_t *parser, char *digits, void *data);
@ -728,7 +728,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_set_event(switch_
\brief Delete a string to action mapping \brief Delete a string to action mapping
\param parser a pointer to the parser object created by switch_ivr_digit_stream_parser_new \param parser a pointer to the parser object created by switch_ivr_digit_stream_parser_new
\param digits the digit string to be removed from the map \param digits the digit string to be removed from the map
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_del_event(switch_ivr_digit_stream_parser_t *parser, char *digits); SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_del_event(switch_ivr_digit_stream_parser_t *parser, char *digits);
@ -744,7 +744,7 @@ SWITCH_DECLARE(void *) switch_ivr_digit_stream_parser_feed(switch_ivr_digit_stre
/*! /*!
\brief Reset the collected digit stream to nothing \brief Reset the collected digit stream to nothing
\param stream a pointer to the parser stream object created by switch_ivr_digit_stream_new \param stream a pointer to the parser stream object created by switch_ivr_digit_stream_new
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_reset(switch_ivr_digit_stream_t *stream); SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_reset(switch_ivr_digit_stream_t *stream);
@ -752,7 +752,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_reset(switch_ivr_digit_s
\brief Set a digit string terminator \brief Set a digit string terminator
\param parser a pointer to the parser object created by switch_ivr_digit_stream_parser_new \param parser a pointer to the parser object created by switch_ivr_digit_stream_parser_new
\param digit the terminator digit \param digit the terminator digit
\return SWITCH_STATUS_SUCCESS if all is well \return SWITCH_STATUS_SUCCESS if all is well
*/ */
SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_set_terminator(switch_ivr_digit_stream_parser_t *parser, char digit); SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_set_terminator(switch_ivr_digit_stream_parser_t *parser, char digit);
@ -766,7 +766,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_digit_stream_parser_set_terminator(sw
* @defgroup switch_ivr_menu IVR Menu Library * @defgroup switch_ivr_menu IVR Menu Library
* @ingroup switch_ivr * @ingroup switch_ivr
* IVR menu functions * IVR menu functions
* *
* @{ * @{
*/ */
@ -918,9 +918,9 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_read(switch_core_session_t *session,
uint32_t max_digits, uint32_t max_digits,
const char *prompt_audio_file, const char *prompt_audio_file,
const char *var_name, const char *var_name,
char *digit_buffer, char *digit_buffer,
switch_size_t digit_buffer_length, switch_size_t digit_buffer_length,
uint32_t timeout, uint32_t timeout,
const char *valid_terminators, const char *valid_terminators,
uint32_t digit_timeout); uint32_t digit_timeout);
@ -977,7 +977,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_last_ping(switch_ivr_dmachin
SWITCH_DECLARE(const char *) switch_ivr_dmachine_get_name(switch_ivr_dmachine_t *dmachine); SWITCH_DECLARE(const char *) switch_ivr_dmachine_get_name(switch_ivr_dmachine_t *dmachine);
SWITCH_DECLARE(void) switch_ivr_dmachine_set_match_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t match_callback); SWITCH_DECLARE(void) switch_ivr_dmachine_set_match_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t match_callback);
SWITCH_DECLARE(void) switch_ivr_dmachine_set_nonmatch_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t nonmatch_callback); SWITCH_DECLARE(void) switch_ivr_dmachine_set_nonmatch_callback(switch_ivr_dmachine_t *dmachine, switch_ivr_dmachine_callback_t nonmatch_callback);
SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t **dmachine_p, SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t **dmachine_p,
const char *name, const char *name,
switch_memory_pool_t *pool, switch_memory_pool_t *pool,
uint32_t digit_timeout, uint32_t input_timeout, uint32_t digit_timeout, uint32_t input_timeout,
@ -987,10 +987,10 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_create(switch_ivr_dmachine_t
SWITCH_DECLARE(void) switch_ivr_dmachine_destroy(switch_ivr_dmachine_t **dmachine); SWITCH_DECLARE(void) switch_ivr_dmachine_destroy(switch_ivr_dmachine_t **dmachine);
SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_bind(switch_ivr_dmachine_t *dmachine, SWITCH_DECLARE(switch_status_t) switch_ivr_dmachine_bind(switch_ivr_dmachine_t *dmachine,
const char *realm, const char *realm,
const char *digits, const char *digits,
switch_byte_t is_priority, switch_byte_t is_priority,
int32_t key, int32_t key,
switch_ivr_dmachine_callback_t callback, switch_ivr_dmachine_callback_t callback,
void *user_data); void *user_data);
@ -1019,7 +1019,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_session_mask(switch_core_sessi
SWITCH_DECLARE(switch_status_t) switch_ivr_stop_video_write_overlay_session(switch_core_session_t *session); SWITCH_DECLARE(switch_status_t) switch_ivr_stop_video_write_overlay_session(switch_core_session_t *session);
SWITCH_DECLARE(switch_status_t) switch_ivr_video_write_overlay_session(switch_core_session_t *session, const char *img_path, SWITCH_DECLARE(switch_status_t) switch_ivr_video_write_overlay_session(switch_core_session_t *session, const char *img_path,
switch_img_position_t pos, uint8_t alpha); switch_img_position_t pos, uint8_t alpha);
SWITCH_DECLARE(switch_status_t) switch_ivr_capture_text(switch_core_session_t *session, switch_bool_t on); SWITCH_DECLARE(switch_status_t) switch_ivr_capture_text(switch_core_session_t *session, switch_bool_t on);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* switch_jitterbuffer.h -- Audio/Video Jitter Buffer * switch_jitterbuffer.h -- Audio/Video Jitter Buffer

View File

@ -1,16 +1,16 @@
/* /*
Copyright (c) 2009 Dave Gamble Copyright (c) 2009 Dave Gamble
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions: furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software. all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@ -36,7 +36,7 @@ extern "C"
#define cJSON_String 4 #define cJSON_String 4
#define cJSON_Array 5 #define cJSON_Array 5
#define cJSON_Object 6 #define cJSON_Object 6
#define cJSON_IsReference 256 #define cJSON_IsReference 256
/* The cJSON structure: */ /* The cJSON structure: */
@ -81,7 +81,7 @@ SWITCH_DECLARE(const char *)cJSON_GetObjectCstr(const cJSON *object, const char
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ /* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
SWITCH_DECLARE(const char *)cJSON_GetErrorPtr(void); SWITCH_DECLARE(const char *)cJSON_GetErrorPtr(void);
/* These calls create a cJSON item of the appropriate type. */ /* These calls create a cJSON item of the appropriate type. */
SWITCH_DECLARE(cJSON *)cJSON_CreateNull(void); SWITCH_DECLARE(cJSON *)cJSON_CreateNull(void);
SWITCH_DECLARE(cJSON *)cJSON_CreateTrue(void); SWITCH_DECLARE(cJSON *)cJSON_CreateTrue(void);
@ -110,7 +110,7 @@ SWITCH_DECLARE(cJSON *)cJSON_DetachItemFromArray(cJSON *array,int which);
SWITCH_DECLARE(void) cJSON_DeleteItemFromArray(cJSON *array,int which); SWITCH_DECLARE(void) cJSON_DeleteItemFromArray(cJSON *array,int which);
SWITCH_DECLARE(cJSON *)cJSON_DetachItemFromObject(cJSON *object,const char *string); SWITCH_DECLARE(cJSON *)cJSON_DetachItemFromObject(cJSON *object,const char *string);
SWITCH_DECLARE(void) cJSON_DeleteItemFromObject(cJSON *object,const char *string); SWITCH_DECLARE(void) cJSON_DeleteItemFromObject(cJSON *object,const char *string);
/* Update array items. */ /* Update array items. */
SWITCH_DECLARE(void) cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem); SWITCH_DECLARE(void) cJSON_ReplaceItemInArray(cJSON *array,int which,cJSON *newitem);
SWITCH_DECLARE(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem); SWITCH_DECLARE(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,14 +22,14 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Rupa Schomaker <rupa@rupa.com> * Rupa Schomaker <rupa@rupa.com>
* *
* switch_limit.h - Limit generic implementations * switch_limit.h - Limit generic implementations
* *
*/ */
/*! /*!
\defgroup limit1 LIMIT code \defgroup limit1 LIMIT code
\ingroup core1 \ingroup core1
@ -40,7 +40,7 @@
SWITCH_BEGIN_EXTERN_C SWITCH_BEGIN_EXTERN_C
/*! /*!
\brief Initilize the LIMIT Core System \brief Initilize the LIMIT Core System
\param pool the memory pool to use for long term allocations \param pool the memory pool to use for long term allocations
\note Generally called by the core_init \note Generally called by the core_init
@ -48,7 +48,7 @@ SWITCH_BEGIN_EXTERN_C
SWITCH_DECLARE(void) switch_limit_init(switch_memory_pool_t *pool); SWITCH_DECLARE(void) switch_limit_init(switch_memory_pool_t *pool);
/*! /*!
\brief Increment resource. \brief Increment resource.
\param backend to use \param backend to use
\param realm \param realm
\param resource \param resource
@ -59,7 +59,7 @@ SWITCH_DECLARE(void) switch_limit_init(switch_memory_pool_t *pool);
SWITCH_DECLARE(switch_status_t) switch_limit_incr(const char *backend, switch_core_session_t *session, const char *realm, const char *resource, const int max, const int interval); SWITCH_DECLARE(switch_status_t) switch_limit_incr(const char *backend, switch_core_session_t *session, const char *realm, const char *resource, const int max, const int interval);
/*! /*!
\brief Release resource. \brief Release resource.
\param backend to use \param backend to use
\param realm \param realm
\param resource \param resource

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -33,7 +33,7 @@
\brief Loadable Module Routines \brief Loadable Module Routines
This module is the gateway between external modules and the core of the application. This module is the gateway between external modules and the core of the application.
it contains all the access points to the various pluggable interfaces including the codecs it contains all the access points to the various pluggable interfaces including the codecs
and API modules. and API modules.
*/ */
@ -49,7 +49,7 @@ SWITCH_BEGIN_EXTERN_C
/*! /*!
\defgroup mods Loadable Module Functions \defgroup mods Loadable Module Functions
\ingroup core1 \ingroup core1
\{ \{
*/ */
/*! \brief The abstraction of a loadable module */ /*! \brief The abstraction of a loadable module */
struct switch_loadable_module_interface { struct switch_loadable_module_interface {

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -70,21 +70,21 @@ SWITCH_BEGIN_EXTERN_C
typedef switch_status_t (*switch_log_function_t) (const switch_log_node_t *node, switch_log_level_t level); typedef switch_status_t (*switch_log_function_t) (const switch_log_node_t *node, switch_log_level_t level);
/*! /*!
\brief Initilize the logging engine \brief Initilize the logging engine
\param pool the memory pool to use \param pool the memory pool to use
\note to be called at application startup by the core \note to be called at application startup by the core
*/ */
SWITCH_DECLARE(switch_status_t) switch_log_init(_In_ switch_memory_pool_t *pool, _In_ switch_bool_t colorize); SWITCH_DECLARE(switch_status_t) switch_log_init(_In_ switch_memory_pool_t *pool, _In_ switch_bool_t colorize);
/*! /*!
\brief Shut down the logging engine \brief Shut down the logging engine
\note to be called at application termination by the core \note to be called at application termination by the core
*/ */
SWITCH_DECLARE(switch_status_t) switch_log_shutdown(void); SWITCH_DECLARE(switch_status_t) switch_log_shutdown(void);
#ifndef SWIG #ifndef SWIG
/*! /*!
\brief Write log data to the logging engine \brief Write log data to the logging engine
\param channel the log channel to write to \param channel the log channel to write to
\param file the current file \param file the current file
@ -101,7 +101,7 @@ SWITCH_DECLARE(void) switch_log_printf(_In_ switch_text_channel_t channel, _In_z
_In_z_ const char *func, _In_ int line, _In_z_ const char *func, _In_ int line,
_In_opt_z_ const char *userdata, _In_ switch_log_level_t level, _In_opt_z_ const char *userdata, _In_ switch_log_level_t level,
_In_z_ _Printf_format_string_ const char *fmt, ...) PRINTF_FUNCTION(7, 8); _In_z_ _Printf_format_string_ const char *fmt, ...) PRINTF_FUNCTION(7, 8);
/*! /*!
\brief Write log data to the logging engine \brief Write log data to the logging engine
\param channel the log channel to write to \param channel the log channel to write to
\param file the current file \param file the current file
@ -119,21 +119,21 @@ SWITCH_DECLARE(void) switch_log_vprintf(_In_ switch_text_channel_t channel, _In_
_In_opt_z_ const char *userdata, _In_ switch_log_level_t level, const char *fmt, va_list ap); _In_opt_z_ const char *userdata, _In_ switch_log_level_t level, const char *fmt, va_list ap);
#endif #endif
/*! /*!
\brief Shut down the logging engine \brief Shut down the logging engine
\note to be called at application termination by the core \note to be called at application termination by the core
*/ */
SWITCH_DECLARE(switch_status_t) switch_log_bind_logger(_In_ switch_log_function_t function, _In_ switch_log_level_t level, _In_ switch_bool_t is_console); SWITCH_DECLARE(switch_status_t) switch_log_bind_logger(_In_ switch_log_function_t function, _In_ switch_log_level_t level, _In_ switch_bool_t is_console);
SWITCH_DECLARE(switch_status_t) switch_log_unbind_logger(_In_ switch_log_function_t function); SWITCH_DECLARE(switch_status_t) switch_log_unbind_logger(_In_ switch_log_function_t function);
/*! /*!
\brief Return the name of the specified log level \brief Return the name of the specified log level
\param level the level \param level the level
\return the name of the log level \return the name of the log level
*/ */
_Ret_z_ SWITCH_DECLARE(const char *) switch_log_level2str(_In_ switch_log_level_t level); _Ret_z_ SWITCH_DECLARE(const char *) switch_log_level2str(_In_ switch_log_level_t level);
/*! /*!
\brief Return the level number of the specified log level name \brief Return the level number of the specified log level name
\param str the name of the level \param str the name of the level
\return the log level \return the log level

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC) * Luke Dashjr <luke@openmethods.com> (OpenMethods, LLC)
* *
@ -33,7 +33,7 @@
/*! \file switch_module_interfaces.h /*! \file switch_module_interfaces.h
\brief Module Interface Definitions \brief Module Interface Definitions
This module holds the definition of data abstractions used to implement various pluggable This module holds the definition of data abstractions used to implement various pluggable
interfaces and pluggable event handlers. interfaces and pluggable event handlers.
*/ */
@ -44,7 +44,7 @@
#include "switch_resample.h" #include "switch_resample.h"
SWITCH_BEGIN_EXTERN_C SWITCH_BEGIN_EXTERN_C
/*! \brief A table of functions to execute at various states /*! \brief A table of functions to execute at various states
*/ */
typedef enum { typedef enum {
SWITCH_SHN_ON_INIT, SWITCH_SHN_ON_INIT,
@ -106,7 +106,7 @@ struct switch_stream_handle {
struct switch_io_event_hooks; struct switch_io_event_hooks;
struct switch_say_file_handle; struct switch_say_file_handle;
typedef switch_call_cause_t (*switch_io_outgoing_channel_t) typedef switch_call_cause_t (*switch_io_outgoing_channel_t)
(switch_core_session_t *, switch_event_t *, switch_caller_profile_t *, switch_core_session_t **, switch_memory_pool_t **, switch_originate_flag_t, (switch_core_session_t *, switch_event_t *, switch_caller_profile_t *, switch_core_session_t **, switch_memory_pool_t **, switch_originate_flag_t,
switch_call_cause_t *); switch_call_cause_t *);
typedef switch_status_t (*switch_io_read_frame_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int); typedef switch_status_t (*switch_io_read_frame_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
@ -560,7 +560,7 @@ struct switch_chat_interface {
const char *interface_name; const char *interface_name;
/*! function to open the directory interface */ /*! function to open the directory interface */
switch_status_t (*chat_send) (switch_event_t *message_event); switch_status_t (*chat_send) (switch_event_t *message_event);
switch_thread_rwlock_t *rwlock; switch_thread_rwlock_t *rwlock;
int refs; int refs;
switch_mutex_t *reflock; switch_mutex_t *reflock;

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Brian K. West <brian@freeswitch.org> * Brian K. West <brian@freeswitch.org>
* *
@ -51,16 +51,16 @@ typedef enum {
SWITCH_DECLARE(const char *) switch_nat_get_type(void); SWITCH_DECLARE(const char *) switch_nat_get_type(void);
/*! /*!
\brief Initilize the NAT Traversal System \brief Initilize the NAT Traversal System
\param pool the memory pool to use for long term allocations \param pool the memory pool to use for long term allocations
\note Generally called by the core_init \note Generally called by the core_init
*/ */
SWITCH_DECLARE(void) switch_nat_init(switch_memory_pool_t *pool, switch_bool_t mapping); SWITCH_DECLARE(void) switch_nat_init(switch_memory_pool_t *pool, switch_bool_t mapping);
/*! /*!
\brief Initilize the rest of the NAT Traversal System \brief Initilize the rest of the NAT Traversal System
\note nat_init is called prior to some other modules being loaded. \note nat_init is called prior to some other modules being loaded.
This method allows us to init the rest of the NAT system. This method allows us to init the rest of the NAT system.
*/ */
SWITCH_DECLARE(void) switch_nat_late_init(void); SWITCH_DECLARE(void) switch_nat_late_init(void);
@ -95,7 +95,7 @@ SWITCH_DECLARE(void) switch_nat_set_mapping(switch_bool_t mapping);
\brief Maps a port through the NAT Traversal System \brief Maps a port through the NAT Traversal System
\param port Internal port to map \param port Internal port to map
\param proto Protocol \param proto Protocol
\param external_port [out] Mapped external port \param external_port [out] Mapped external port
\param sticky make the mapping permanent \param sticky make the mapping permanent
*/ */
SWITCH_DECLARE(switch_status_t) switch_nat_add_mapping(switch_port_t port, switch_nat_ip_proto_t proto, switch_port_t *external_port, SWITCH_DECLARE(switch_status_t) switch_nat_add_mapping(switch_port_t port, switch_nat_ip_proto_t proto, switch_port_t *external_port,

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* switch_odbc.h -- ODBC * switch_odbc.h -- ODBC

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Eliot Gable <egable@gmail.com> * Eliot Gable <egable@gmail.com>
* *
@ -37,7 +37,7 @@
#define DEFAULT_PGSQL_RETRIES 120 #define DEFAULT_PGSQL_RETRIES 120
SWITCH_BEGIN_EXTERN_C SWITCH_BEGIN_EXTERN_C
struct switch_pgsql_handle; struct switch_pgsql_handle;
struct switch_pgsql_result; struct switch_pgsql_result;
@ -57,7 +57,7 @@ typedef enum {
/*! /*!
\brief Create a new handle for the PGSQL connection. \brief Create a new handle for the PGSQL connection.
\param dsn The DSN of the database to connect to. See documentation for PQconnectdb() at \param dsn The DSN of the database to connect to. See documentation for PQconnectdb() at
http://www.postgresql.org/docs/9.0/static/libpq-connect.html. The DSN *MUST* be http://www.postgresql.org/docs/9.0/static/libpq-connect.html. The DSN *MUST* be
prefixed with 'pgsql;' to use the switch_cache_db* functionality. However, the DSN prefixed with 'pgsql;' to use the switch_cache_db* functionality. However, the DSN
passed to this function directly *MUST NOT* be prefixed with 'pgsql;'. passed to this function directly *MUST NOT* be prefixed with 'pgsql;'.
@ -82,7 +82,7 @@ SWITCH_DECLARE(switch_pgsql_status_t ) switch_pgsql_handle_disconnect(switch_pgs
) /* Emacs formatting issue */ ) /* Emacs formatting issue */
#endif #endif
/*! /*!
\brief Connect to the database specified by the DSN passed to the switch_pgsql_handle_new() call which \brief Connect to the database specified by the DSN passed to the switch_pgsql_handle_new() call which
initialized this handle. initialized this handle.
\param The database handle to connect to the database. \param The database handle to connect to the database.
\return Returns SWITCH_PGSQL_SUCCESS or SWITCH_PGSQL_FAIL. \return Returns SWITCH_PGSQL_SUCCESS or SWITCH_PGSQL_FAIL.

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* switch_platform.h -- Platform Specific Header * switch_platform.h -- Platform Specific Header
@ -51,10 +51,10 @@ SWITCH_BEGIN_EXTERN_C
#define __SWITCH_FUNC__ (const char *)__func__ #define __SWITCH_FUNC__ (const char *)__func__
#endif #endif
#ifdef _MSC_VER #ifdef _MSC_VER
/* disable the following warnings /* disable the following warnings
* C4100: The formal parameter is not referenced in the body of the function. The unreferenced parameter is ignored. * C4100: The formal parameter is not referenced in the body of the function. The unreferenced parameter is ignored.
* C4200: Non standard extension C zero sized array * C4200: Non standard extension C zero sized array
* C4204: nonstandard extension used : non-constant aggregate initializer * C4204: nonstandard extension used : non-constant aggregate initializer
* C4706: assignment within conditional expression * C4706: assignment within conditional expression
* C4819: The file contains a character that cannot be represented in the current code page * C4819: The file contains a character that cannot be represented in the current code page
* C4132: 'object' : const object should be initialized (fires innapropriately for prototyped forward declaration of cost var) * C4132: 'object' : const object should be initialized (fires innapropriately for prototyped forward declaration of cost var)
@ -317,7 +317,7 @@ SWITCH_END_EXTERN_C
#define NOIME #define NOIME
#endif #endif
#include <windows.h> #include <windows.h>
/* /*
* Add a _very_few_ declarations missing from the restricted set of headers * Add a _very_few_ declarations missing from the restricted set of headers
* (If this list becomes extensive, re-enable the required headers above!) * (If this list becomes extensive, re-enable the required headers above!)
* winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now

View File

@ -2,23 +2,23 @@
* Copyright (c) 2009, Sangoma Technologies * Copyright (c) 2009, Sangoma Technologies
* Moises Silva <moy@sangoma.com> * Moises Silva <moy@sangoma.com>
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
* are met: * are met:
* *
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* *
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* *
* * Neither the name of the original author; nor the names of any contributors * * Neither the name of the original author; nor the names of any contributors
* may be used to endorse or promote products derived from this software * may be used to endorse or promote products derived from this software
* without specific prior written permission. * without specific prior written permission.
* *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@ -36,13 +36,13 @@
struct profile_timer; struct profile_timer;
typedef struct profile_timer switch_profile_timer_t; typedef struct profile_timer switch_profile_timer_t;
/*! /*!
* \brief create a new profile timer * \brief create a new profile timer
* \return profile timer structure previously created with new_profile_timer, NULL on error * \return profile timer structure previously created with new_profile_timer, NULL on error
*/ */
SWITCH_DECLARE(switch_profile_timer_t *) switch_new_profile_timer(void); SWITCH_DECLARE(switch_profile_timer_t *) switch_new_profile_timer(void);
/*! /*!
* \brief provides the percentage of idle system time * \brief provides the percentage of idle system time
* \param p profile timer structure previously created with new_profile_timer * \param p profile timer structure previously created with new_profile_timer
* \param pointer to store the percentage of idle time * \param pointer to store the percentage of idle time
@ -52,7 +52,7 @@ SWITCH_DECLARE(switch_profile_timer_t *) switch_new_profile_timer(void);
SWITCH_DECLARE(switch_bool_t) switch_get_system_idle_time(switch_profile_timer_t *p, double *idle_percentage); SWITCH_DECLARE(switch_bool_t) switch_get_system_idle_time(switch_profile_timer_t *p, double *idle_percentage);
/*! /*!
* \brief Deletes profile timer * \brief Deletes profile timer
*/ */
SWITCH_DECLARE(void) switch_delete_profile_timer(switch_profile_timer_t **p); SWITCH_DECLARE(void) switch_delete_profile_timer(switch_profile_timer_t **p);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Michael Jerris <mike@jerris.com> * Michael Jerris <mike@jerris.com>
* *
* switch_regex.h -- pcre wrapper and extensions Header * switch_regex.h -- pcre wrapper and extensions Header
@ -70,7 +70,7 @@ SWITCH_DECLARE(switch_status_t) switch_regex_match(const char *target, const cha
*/ */
SWITCH_DECLARE(switch_status_t) switch_regex_match_partial(const char *target, const char *expression, int *partial_match); SWITCH_DECLARE(switch_status_t) switch_regex_match_partial(const char *target, const char *expression, int *partial_match);
SWITCH_DECLARE(void) switch_capture_regex(switch_regex_t *re, int match_count, const char *field_data, SWITCH_DECLARE(void) switch_capture_regex(switch_regex_t *re, int match_count, const char *field_data,
int *ovector, const char *var, switch_cap_callback_t callback, void *user_data); int *ovector, const char *var, switch_cap_callback_t callback, void *user_data);
SWITCH_DECLARE_NONSTD(void) switch_regex_set_var_callback(const char *var, const char *val, void *user_data); SWITCH_DECLARE_NONSTD(void) switch_regex_set_var_callback(const char *var, const char *val, void *user_data);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -34,9 +34,9 @@
This module implements a generic interface for doing audio resampling it currently uses libresample but can be ported to This module implements a generic interface for doing audio resampling it currently uses libresample but can be ported to
any resample library with a little effort. I decided against making this interface pluggable because there are not many any resample library with a little effort. I decided against making this interface pluggable because there are not many
options in terms of resample libraries so it seemed like a waste but I did opt to frontend the interface in case a better options in terms of resample libraries so it seemed like a waste but I did opt to frontend the interface in case a better
way comes along some day. =D way comes along some day. =D
*/ */
#define switch_normalize_volume(x) if (x > 4) x = 4; if (x < -4) x = -4; #define switch_normalize_volume(x) if (x > 4) x = 4; if (x < -4) x = -4;
#define switch_normalize_volume_granular(x) if (x > 13) x = 13; if (x < -13) x = -13; #define switch_normalize_volume_granular(x) if (x > 13) x = 13; if (x < -13) x = -13;
@ -49,7 +49,7 @@ SWITCH_BEGIN_EXTERN_C
/*! /*!
\defgroup resamp Audio Resample Functions \defgroup resamp Audio Resample Functions
\ingroup core1 \ingroup core1
\{ \{
*/ */
/*! \brief An audio resampling handle */ /*! \brief An audio resampling handle */
typedef struct { typedef struct {

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -30,10 +30,10 @@
* Marcel Barbulescu <marcelbarbulescu@gmail.com> * Marcel Barbulescu <marcelbarbulescu@gmail.com>
* *
*/ */
/** /**
* @file switch_rtp.h * @file switch_rtp.h
* @brief RTP * @brief RTP
* *
*/ */
#ifndef SWITCH_RTP_H #ifndef SWITCH_RTP_H
@ -162,7 +162,7 @@ typedef enum { /* FMT Values for PSFB Payload Types http://www.iana.org/assignme
_RTCP_PSFB_TSTR = 5, /* TSTR: Temporal-Spatial Trade-off Request RFC5104 */ _RTCP_PSFB_TSTR = 5, /* TSTR: Temporal-Spatial Trade-off Request RFC5104 */
_RTCP_PSFB_TSTN = 6, /* TSTN: Temporal-Spatial Trade-off Notification RFC5104 */ _RTCP_PSFB_TSTN = 6, /* TSTN: Temporal-Spatial Trade-off Notification RFC5104 */
_RTCP_PSFB_VBCM = 7, /* VBCM: Video Back Channel Message RFC5104 */ _RTCP_PSFB_VBCM = 7, /* VBCM: Video Back Channel Message RFC5104 */
_RTCP_PSFB_PSLEI = 8, /* PSLEI: Payload-Specific Third-Party Loss Early Indication RFC6642*/ _RTCP_PSFB_PSLEI = 8, /* PSLEI: Payload-Specific Third-Party Loss Early Indication RFC6642*/
_RTCP_PSFB_AFB = 15 /* AFB Application layer FB */ _RTCP_PSFB_AFB = 15 /* AFB Application layer FB */
} rtcp_psfb_t; } rtcp_psfb_t;
@ -180,7 +180,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_add_crypto_key(switch_rtp_t *rtp_sess
SWITCH_DECLARE(void) switch_rtp_get_random(void *buf, uint32_t len); SWITCH_DECLARE(void) switch_rtp_get_random(void *buf, uint32_t len);
/*! /*!
\brief Initilize the RTP System \brief Initilize the RTP System
\param pool the memory pool to use for long term allocations \param pool the memory pool to use for long term allocations
\note Generally called by the core_init \note Generally called by the core_init
@ -205,7 +205,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_set_remote_ssrc(switch_rtp_t *rtp_ses
*/ */
SWITCH_DECLARE(switch_port_t) switch_rtp_set_end_port(switch_port_t port); SWITCH_DECLARE(switch_port_t) switch_rtp_set_end_port(switch_port_t port);
/*! /*!
\brief Request a new port to be used for media \brief Request a new port to be used for media
\param ip the ip to request a port from \param ip the ip to request a port from
\return the new port to use \return the new port to use
@ -216,7 +216,7 @@ SWITCH_DECLARE(void) switch_rtp_release_port(const char *ip, switch_port_t port)
SWITCH_DECLARE(switch_status_t) switch_rtp_set_interval(switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval); SWITCH_DECLARE(switch_status_t) switch_rtp_set_interval(switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval);
SWITCH_DECLARE(switch_status_t) switch_rtp_change_interval(switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval); SWITCH_DECLARE(switch_status_t) switch_rtp_change_interval(switch_rtp_t *rtp_session, uint32_t ms_per_packet, uint32_t samples_per_interval);
/*! /*!
\brief create a new RTP session handle \brief create a new RTP session handle
\param new_rtp_session a poiter to aim at the new session \param new_rtp_session a poiter to aim at the new session
\param payload the IANA payload number \param payload the IANA payload number
@ -260,7 +260,7 @@ SWITCH_DECLARE(switch_rtp_t *) switch_rtp_new(const char *rx_host,
switch_rtp_flag_t flags[], char *timer_name, const char **err, switch_memory_pool_t *pool); switch_rtp_flag_t flags[], char *timer_name, const char **err, switch_memory_pool_t *pool);
/*! /*!
\brief Assign a remote address to the RTP session \brief Assign a remote address to the RTP session
\param rtp_session an RTP session to assign the remote address to \param rtp_session an RTP session to assign the remote address to
\param host the ip or fqhn of the remote address \param host the ip or fqhn of the remote address
@ -279,7 +279,7 @@ SWITCH_DECLARE(void) switch_rtp_set_max_missed_packets(switch_rtp_t *rtp_session
SWITCH_DECLARE(switch_status_t) switch_rtp_udptl_mode(switch_rtp_t *rtp_session); SWITCH_DECLARE(switch_status_t) switch_rtp_udptl_mode(switch_rtp_t *rtp_session);
SWITCH_DECLARE(void) switch_rtp_reset(switch_rtp_t *rtp_session); SWITCH_DECLARE(void) switch_rtp_reset(switch_rtp_t *rtp_session);
/*! /*!
\brief Assign a local address to the RTP session \brief Assign a local address to the RTP session
\param rtp_session an RTP session to assign the local address to \param rtp_session an RTP session to assign the local address to
\param host the ip or fqhn of the local address \param host the ip or fqhn of the local address
@ -290,7 +290,7 @@ SWITCH_DECLARE(void) switch_rtp_reset(switch_rtp_t *rtp_session);
*/ */
SWITCH_DECLARE(switch_status_t) switch_rtp_set_local_address(switch_rtp_t *rtp_session, const char *host, switch_port_t port, const char **err); SWITCH_DECLARE(switch_status_t) switch_rtp_set_local_address(switch_rtp_t *rtp_session, const char *host, switch_port_t port, const char **err);
/*! /*!
\brief Kill the socket on an existing RTP session \brief Kill the socket on an existing RTP session
\param rtp_session an RTP session to kill the socket of \param rtp_session an RTP session to kill the socket of
*/ */
@ -299,14 +299,14 @@ SWITCH_DECLARE(void) switch_rtp_kill_socket(switch_rtp_t *rtp_session);
SWITCH_DECLARE(void) switch_rtp_break(switch_rtp_t *rtp_session); SWITCH_DECLARE(void) switch_rtp_break(switch_rtp_t *rtp_session);
SWITCH_DECLARE(void) switch_rtp_flush(switch_rtp_t *rtp_session); SWITCH_DECLARE(void) switch_rtp_flush(switch_rtp_t *rtp_session);
/*! /*!
\brief Test if an RTP session is ready \brief Test if an RTP session is ready
\param rtp_session an RTP session to test \param rtp_session an RTP session to test
\return a true value if it's ready \return a true value if it's ready
*/ */
SWITCH_DECLARE(uint8_t) switch_rtp_ready(switch_rtp_t *rtp_session); SWITCH_DECLARE(uint8_t) switch_rtp_ready(switch_rtp_t *rtp_session);
/*! /*!
\brief Destroy an RTP session \brief Destroy an RTP session
\param rtp_session an RTP session to destroy \param rtp_session an RTP session to destroy
*/ */
@ -314,15 +314,15 @@ SWITCH_DECLARE(void) switch_rtp_destroy(switch_rtp_t **rtp_session);
SWITCH_DECLARE(switch_status_t) switch_rtp_sync_stats(switch_rtp_t *rtp_session); SWITCH_DECLARE(switch_status_t) switch_rtp_sync_stats(switch_rtp_t *rtp_session);
/*! /*!
\brief Acvite ICE on an RTP session \brief Acvite ICE on an RTP session
\return SWITCH_STATUS_SUCCESS \return SWITCH_STATUS_SUCCESS
*/ */
SWITCH_DECLARE(switch_status_t) switch_rtp_activate_ice(switch_rtp_t *rtp_session, char *login, char *rlogin, SWITCH_DECLARE(switch_status_t) switch_rtp_activate_ice(switch_rtp_t *rtp_session, char *login, char *rlogin,
const char *password, const char *rpassword, ice_proto_t proto, const char *password, const char *rpassword, ice_proto_t proto,
switch_core_media_ice_type_t type, ice_t *ice_params); switch_core_media_ice_type_t type, ice_t *ice_params);
/*! /*!
\brief Activate sending RTCP Sender Reports (SR's) \brief Activate sending RTCP Sender Reports (SR's)
\param send_rate interval in milliseconds to send at \param send_rate interval in milliseconds to send at
\return SWITCH_STATUS_SUCCESS \return SWITCH_STATUS_SUCCESS
@ -335,13 +335,13 @@ SWITCH_DECLARE(switch_timer_t *) switch_rtp_get_media_timer(switch_rtp_t *rtp_se
SWITCH_DECLARE(switch_status_t) switch_rtp_set_video_buffer_size(switch_rtp_t *rtp_session, uint32_t frames, uint32_t max_frames); SWITCH_DECLARE(switch_status_t) switch_rtp_set_video_buffer_size(switch_rtp_t *rtp_session, uint32_t frames, uint32_t max_frames);
SWITCH_DECLARE(switch_status_t) switch_rtp_get_video_buffer_size(switch_rtp_t *rtp_session, uint32_t *min_frame_len, uint32_t *max_frame_len, uint32_t *cur_frame_len, uint32_t *highest_frame_len); SWITCH_DECLARE(switch_status_t) switch_rtp_get_video_buffer_size(switch_rtp_t *rtp_session, uint32_t *min_frame_len, uint32_t *max_frame_len, uint32_t *cur_frame_len, uint32_t *highest_frame_len);
/*! /*!
\brief Acvite a jitter buffer on an RTP session \brief Acvite a jitter buffer on an RTP session
\param rtp_session the rtp session \param rtp_session the rtp session
\param queue_frames the number of frames to delay \param queue_frames the number of frames to delay
\return SWITCH_STATUS_SUCCESS \return SWITCH_STATUS_SUCCESS
*/ */
SWITCH_DECLARE(switch_status_t) switch_rtp_activate_jitter_buffer(switch_rtp_t *rtp_session, SWITCH_DECLARE(switch_status_t) switch_rtp_activate_jitter_buffer(switch_rtp_t *rtp_session,
uint32_t queue_frames, uint32_t queue_frames,
uint32_t max_queue_frames, uint32_t max_queue_frames,
uint32_t samples_per_packet, uint32_t samples_per_second); uint32_t samples_per_packet, uint32_t samples_per_second);
@ -379,28 +379,28 @@ SWITCH_DECLARE(uint32_t) switch_rtp_test_flag(switch_rtp_t *rtp_session, switch_
*/ */
SWITCH_DECLARE(void) switch_rtp_clear_flag(switch_rtp_t *rtp_session, switch_rtp_flag_t flag); SWITCH_DECLARE(void) switch_rtp_clear_flag(switch_rtp_t *rtp_session, switch_rtp_flag_t flag);
/*! /*!
\brief Retrieve the socket from an existing RTP session \brief Retrieve the socket from an existing RTP session
\param rtp_session the RTP session to retrieve the socket from \param rtp_session the RTP session to retrieve the socket from
\return the socket from the RTP session \return the socket from the RTP session
*/ */
SWITCH_DECLARE(switch_socket_t *) switch_rtp_get_rtp_socket(switch_rtp_t *rtp_session); SWITCH_DECLARE(switch_socket_t *) switch_rtp_get_rtp_socket(switch_rtp_t *rtp_session);
SWITCH_DECLARE(void) switch_rtp_ping(switch_rtp_t *rtp_session); SWITCH_DECLARE(void) switch_rtp_ping(switch_rtp_t *rtp_session);
/*! /*!
\brief Get the default samples per interval for a given RTP session \brief Get the default samples per interval for a given RTP session
\param rtp_session the RTP session to get the samples per interval from \param rtp_session the RTP session to get the samples per interval from
\return the default samples per interval of the RTP session \return the default samples per interval of the RTP session
*/ */
SWITCH_DECLARE(uint32_t) switch_rtp_get_default_samples_per_interval(switch_rtp_t *rtp_session); SWITCH_DECLARE(uint32_t) switch_rtp_get_default_samples_per_interval(switch_rtp_t *rtp_session);
/*! /*!
\brief Set the default payload number for a given RTP session \brief Set the default payload number for a given RTP session
\param rtp_session the RTP session to set the payload number on \param rtp_session the RTP session to set the payload number on
\param payload the new default payload number \param payload the new default payload number
*/ */
SWITCH_DECLARE(void) switch_rtp_set_default_payload(switch_rtp_t *rtp_session, switch_payload_t payload); SWITCH_DECLARE(void) switch_rtp_set_default_payload(switch_rtp_t *rtp_session, switch_payload_t payload);
/*! /*!
\brief Get the default payload number for a given RTP session \brief Get the default payload number for a given RTP session
\param rtp_session the RTP session to get the payload number from \param rtp_session the RTP session to get the payload number from
\return the default payload of the RTP session \return the default payload of the RTP session
@ -408,15 +408,15 @@ SWITCH_DECLARE(void) switch_rtp_set_default_payload(switch_rtp_t *rtp_session, s
SWITCH_DECLARE(uint32_t) switch_rtp_get_default_payload(switch_rtp_t *rtp_session); SWITCH_DECLARE(uint32_t) switch_rtp_get_default_payload(switch_rtp_t *rtp_session);
/*! /*!
\brief Set a callback function to execute when an invalid RTP packet is encountered \brief Set a callback function to execute when an invalid RTP packet is encountered
\param rtp_session the RTP session \param rtp_session the RTP session
\param on_invalid the function to set \param on_invalid the function to set
\return \return
*/ */
SWITCH_DECLARE(void) switch_rtp_set_invalid_handler(switch_rtp_t *rtp_session, switch_rtp_invalid_handler_t on_invalid); SWITCH_DECLARE(void) switch_rtp_set_invalid_handler(switch_rtp_t *rtp_session, switch_rtp_invalid_handler_t on_invalid);
/*! /*!
\brief Read data from a given RTP session \brief Read data from a given RTP session
\param rtp_session the RTP session to read from \param rtp_session the RTP session to read from
\param data the data to read \param data the data to read
@ -429,7 +429,7 @@ SWITCH_DECLARE(void) switch_rtp_set_invalid_handler(switch_rtp_t *rtp_session, s
SWITCH_DECLARE(switch_status_t) switch_rtp_read(switch_rtp_t *rtp_session, void *data, uint32_t *datalen, SWITCH_DECLARE(switch_status_t) switch_rtp_read(switch_rtp_t *rtp_session, void *data, uint32_t *datalen,
switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags); switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags);
/*! /*!
\brief Queue RFC2833 DTMF data into an RTP Session \brief Queue RFC2833 DTMF data into an RTP Session
\param rtp_session the rtp session to use \param rtp_session the rtp session to use
\param dtmf the dtmf digits to queue \param dtmf the dtmf digits to queue
@ -437,7 +437,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_read(switch_rtp_t *rtp_session, void
*/ */
SWITCH_DECLARE(switch_status_t) switch_rtp_queue_rfc2833(switch_rtp_t *rtp_session, const switch_dtmf_t *dtmf); SWITCH_DECLARE(switch_status_t) switch_rtp_queue_rfc2833(switch_rtp_t *rtp_session, const switch_dtmf_t *dtmf);
/*! /*!
\brief Queue RFC2833 DTMF data into an RTP Session \brief Queue RFC2833 DTMF data into an RTP Session
\param rtp_session the rtp session to use \param rtp_session the rtp session to use
\param dtmf the dtmf digits to queue \param dtmf the dtmf digits to queue
@ -460,7 +460,7 @@ SWITCH_DECLARE(switch_size_t) switch_rtp_has_dtmf(switch_rtp_t *rtp_session);
*/ */
SWITCH_DECLARE(switch_size_t) switch_rtp_dequeue_dtmf(switch_rtp_t *rtp_session, switch_dtmf_t *dtmf); SWITCH_DECLARE(switch_size_t) switch_rtp_dequeue_dtmf(switch_rtp_t *rtp_session, switch_dtmf_t *dtmf);
/*! /*!
\brief Read data from a given RTP session without copying \brief Read data from a given RTP session without copying
\param rtp_session the RTP session to read from \param rtp_session the RTP session to read from
\param data a pointer to point directly to the RTP read buffer \param data a pointer to point directly to the RTP read buffer
@ -474,7 +474,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read(switch_rtp_t *rtp_sessi
void **data, uint32_t *datalen, switch_payload_t *payload_type, switch_frame_flag_t *flags, void **data, uint32_t *datalen, switch_payload_t *payload_type, switch_frame_flag_t *flags,
switch_io_flag_t io_flags); switch_io_flag_t io_flags);
/*! /*!
\brief Read data from a given RTP session without copying \brief Read data from a given RTP session without copying
\param rtp_session the RTP session to read from \param rtp_session the RTP session to read from
\param frame a frame to populate with information \param frame a frame to populate with information
@ -484,7 +484,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read(switch_rtp_t *rtp_sessi
SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp_session, switch_frame_t *frame, switch_io_flag_t io_flags); SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp_session, switch_frame_t *frame, switch_io_flag_t io_flags);
/*! /*!
\brief Read RTCP data from a given RTP session without copying \brief Read RTCP data from a given RTP session without copying
\param rtp_session the RTP session to read from \param rtp_session the RTP session to read from
\param frame an RTCP frame to populate with information \param frame an RTCP frame to populate with information
@ -512,7 +512,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_enable_vad(switch_rtp_t *rtp_session,
*/ */
SWITCH_DECLARE(switch_status_t) switch_rtp_disable_vad(switch_rtp_t *rtp_session); SWITCH_DECLARE(switch_status_t) switch_rtp_disable_vad(switch_rtp_t *rtp_session);
/*! /*!
\brief Write data to a given RTP session \brief Write data to a given RTP session
\param rtp_session the RTP session to write to \param rtp_session the RTP session to write to
\param frame the frame to write \param frame the frame to write
@ -520,7 +520,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_disable_vad(switch_rtp_t *rtp_session
*/ */
SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_frame_t *frame); SWITCH_DECLARE(int) switch_rtp_write_frame(switch_rtp_t *rtp_session, switch_frame_t *frame);
/*! /*!
\brief Write data with a specified payload and sequence number to a given RTP session \brief Write data with a specified payload and sequence number to a given RTP session
\param rtp_session the RTP session to write to \param rtp_session the RTP session to write to
\param data data to write \param data data to write
@ -536,21 +536,21 @@ SWITCH_DECLARE(int) switch_rtp_write_manual(switch_rtp_t *rtp_session,
SWITCH_DECLARE(switch_status_t) switch_rtp_write_raw(switch_rtp_t *rtp_session, void *data, switch_size_t *bytes, switch_bool_t process_encryption); SWITCH_DECLARE(switch_status_t) switch_rtp_write_raw(switch_rtp_t *rtp_session, void *data, switch_size_t *bytes, switch_bool_t process_encryption);
/*! /*!
\brief Retrieve the SSRC from a given RTP session \brief Retrieve the SSRC from a given RTP session
\param rtp_session the RTP session to retrieve from \param rtp_session the RTP session to retrieve from
\return the SSRC \return the SSRC
*/ */
SWITCH_DECLARE(uint32_t) switch_rtp_get_ssrc(switch_rtp_t *rtp_session); SWITCH_DECLARE(uint32_t) switch_rtp_get_ssrc(switch_rtp_t *rtp_session);
/*! /*!
\brief Associate an arbitrary data pointer with and RTP session \brief Associate an arbitrary data pointer with and RTP session
\param rtp_session the RTP session to assign the pointer to \param rtp_session the RTP session to assign the pointer to
\param private_data the private data to assign \param private_data the private data to assign
*/ */
SWITCH_DECLARE(void) switch_rtp_set_private(switch_rtp_t *rtp_session, void *private_data); SWITCH_DECLARE(void) switch_rtp_set_private(switch_rtp_t *rtp_session, void *private_data);
/*! /*!
\brief Set the payload type to consider RFC2833 DTMF \brief Set the payload type to consider RFC2833 DTMF
\param rtp_session the RTP session to modify \param rtp_session the RTP session to modify
\param te the payload type \param te the payload type
@ -558,14 +558,14 @@ SWITCH_DECLARE(void) switch_rtp_set_private(switch_rtp_t *rtp_session, void *pri
SWITCH_DECLARE(void) switch_rtp_set_telephony_event(switch_rtp_t *rtp_session, switch_payload_t te); SWITCH_DECLARE(void) switch_rtp_set_telephony_event(switch_rtp_t *rtp_session, switch_payload_t te);
SWITCH_DECLARE(void) switch_rtp_set_telephony_recv_event(switch_rtp_t *rtp_session, switch_payload_t te); SWITCH_DECLARE(void) switch_rtp_set_telephony_recv_event(switch_rtp_t *rtp_session, switch_payload_t te);
/*! /*!
\brief Set the payload type for comfort noise \brief Set the payload type for comfort noise
\param rtp_session the RTP session to modify \param rtp_session the RTP session to modify
\param pt the payload type \param pt the payload type
*/ */
SWITCH_DECLARE(void) switch_rtp_set_cng_pt(switch_rtp_t *rtp_session, switch_payload_t pt); SWITCH_DECLARE(void) switch_rtp_set_cng_pt(switch_rtp_t *rtp_session, switch_payload_t pt);
/*! /*!
\brief Retrieve the private data from a given RTP session \brief Retrieve the private data from a given RTP session
\param rtp_session the RTP session to retrieve the data from \param rtp_session the RTP session to retrieve the data from
\return the pointer to the private data \return the pointer to the private data

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -59,7 +59,7 @@ SWITCH_BEGIN_EXTERN_C
\param group a group id tag to link multiple tasks to a single entity. \param group a group id tag to link multiple tasks to a single entity.
\param cmd_id an arbitrary index number be used in the callback. \param cmd_id an arbitrary index number be used in the callback.
\param cmd_arg user data to be passed to the callback. \param cmd_arg user data to be passed to the callback.
\param flags flags to alter behaviour \param flags flags to alter behaviour
\return the id of the task \return the id of the task
*/ */
SWITCH_DECLARE(uint32_t) switch_scheduler_add_task(time_t task_runtime, SWITCH_DECLARE(uint32_t) switch_scheduler_add_task(time_t task_runtime,

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -80,7 +80,7 @@ typedef enum {
SWITCH_STUN_ATTR_SOURCE_ADDRESS2 = 0x0012, /* Address */ SWITCH_STUN_ATTR_SOURCE_ADDRESS2 = 0x0012, /* Address */
SWITCH_STUN_ATTR_DATA = 0x0013, /* ByteString */ SWITCH_STUN_ATTR_DATA = 0x0013, /* ByteString */
SWITCH_STUN_ATTR_OPTIONS = 0x8001, /* UInt32 */ SWITCH_STUN_ATTR_OPTIONS = 0x8001, /* UInt32 */
SWITCH_STUN_ATTR_XOR_MAPPED_ADDRESS = 0x0020, /* Address */ SWITCH_STUN_ATTR_XOR_MAPPED_ADDRESS = 0x0020, /* Address */
/* ice crap */ /* ice crap */

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Bret McDanel <trixter AT 0xdecafbad dot com> * Bret McDanel <trixter AT 0xdecafbad dot com>
* Joseph Sullivan <jossulli@amazon.com> * Joseph Sullivan <jossulli@amazon.com>
@ -644,7 +644,7 @@ typedef struct {
switch_size_t flush_packet_count; switch_size_t flush_packet_count;
switch_size_t largest_jb_size; switch_size_t largest_jb_size;
/* Jitter */ /* Jitter */
int64_t last_proc_time; int64_t last_proc_time;
int64_t jitter_n; int64_t jitter_n;
int64_t jitter_add; int64_t jitter_add;
int64_t jitter_addsq; int64_t jitter_addsq;
@ -660,7 +660,7 @@ typedef struct {
double mean_interval; double mean_interval;
int loss[LOST_BURST_CAPTURE]; int loss[LOST_BURST_CAPTURE];
int last_loss; int last_loss;
int recved; int recved;
int last_processed_seq; int last_processed_seq;
switch_size_t flaws; switch_size_t flaws;
switch_size_t last_flaw; switch_size_t last_flaw;
@ -688,7 +688,7 @@ typedef struct {
uint16_t cycle; /* Packet loss calculation, sequence number cycle of the current RTCP report interval */ uint16_t cycle; /* Packet loss calculation, sequence number cycle of the current RTCP report interval */
uint32_t bad_seq; /* Bad SEQ found, used to detect reset on the other side */ uint32_t bad_seq; /* Bad SEQ found, used to detect reset on the other side */
uint16_t base_seq; /* Packet loss calculation, first sequence number received */ uint16_t base_seq; /* Packet loss calculation, first sequence number received */
uint32_t cum_lost; /* Packet loss calculation, cumulative number of packet lost */ uint32_t cum_lost; /* Packet loss calculation, cumulative number of packet lost */
uint32_t last_recv_lsr_local; /* RTT calculation, When receiving an SR we save our local timestamp in fraction of 65536 seconds */ uint32_t last_recv_lsr_local; /* RTT calculation, When receiving an SR we save our local timestamp in fraction of 65536 seconds */
uint32_t last_recv_lsr_peer; /* RTT calculation, When receiving an SR we extract the middle 32bits of the remote NTP timestamp to include it in the next SR LSR */ uint32_t last_recv_lsr_peer; /* RTT calculation, When receiving an SR we extract the middle 32bits of the remote NTP timestamp to include it in the next SR LSR */
uint32_t init; uint32_t init;
@ -725,7 +725,7 @@ typedef enum {
SWITCH_RTP_FLAG_DATAWAIT - Do not return from reads unless there is data even when non blocking SWITCH_RTP_FLAG_DATAWAIT - Do not return from reads unless there is data even when non blocking
SWITCH_RTP_FLAG_BUGGY_2833 - Emulate the bug in cisco equipment to allow interop SWITCH_RTP_FLAG_BUGGY_2833 - Emulate the bug in cisco equipment to allow interop
SWITCH_RTP_FLAG_PASS_RFC2833 - Pass 2833 (ignore it) SWITCH_RTP_FLAG_PASS_RFC2833 - Pass 2833 (ignore it)
SWITCH_RTP_FLAG_AUTO_CNG - Generate outbound CNG frames when idle SWITCH_RTP_FLAG_AUTO_CNG - Generate outbound CNG frames when idle
</pre> </pre>
*/ */
typedef enum { typedef enum {
@ -804,10 +804,10 @@ typedef enum {
final_duration - initial_timestamp = total_samples final_duration - initial_timestamp = total_samples
However, if the duration value exceeds the space allocated (16 bits), The sender should increment However, if the duration value exceeds the space allocated (16 bits), The sender should increment
the timestamp one unit and reset the duration to 0. the timestamp one unit and reset the duration to 0.
Always sending a duration of 0 with a new timestamp should be tolerated but is rarely intentional Always sending a duration of 0 with a new timestamp should be tolerated but is rarely intentional
and is mistakenly done by many devices. and is mistakenly done by many devices.
The issue is that the Sonus expects everyone to do it this way instead of tolerating either way. The issue is that the Sonus expects everyone to do it this way instead of tolerating either way.
Sonus will actually ignore every packet with the same timestamp before concluding if it's DTMF. Sonus will actually ignore every packet with the same timestamp before concluding if it's DTMF.
@ -825,19 +825,19 @@ typedef enum {
*/ */
RTP_BUG_SEND_LINEAR_TIMESTAMPS = (1 << 3), RTP_BUG_SEND_LINEAR_TIMESTAMPS = (1 << 3),
/* /*
Our friends at Sonus get real mad when the timestamps are not in perfect sequence even during periods of silence. Our friends at Sonus get real mad when the timestamps are not in perfect sequence even during periods of silence.
With this flag, we will only increment the timestamp when write packets even if they are eons apart. With this flag, we will only increment the timestamp when write packets even if they are eons apart.
*/ */
RTP_BUG_START_SEQ_AT_ZERO = (1 << 4), RTP_BUG_START_SEQ_AT_ZERO = (1 << 4),
/* /*
Our friends at Sonus also get real mad if the sequence number does not start at 0. Our friends at Sonus also get real mad if the sequence number does not start at 0.
Typically, we set this to a random starting value for your saftey. Typically, we set this to a random starting value for your saftey.
This is a security risk you take upon yourself when you enable this flag. This is a security risk you take upon yourself when you enable this flag.
*/ */
@ -849,9 +849,9 @@ typedef enum {
Our friends at Sonus are on a roll, They also get easily dumbfounded by marker bits. Our friends at Sonus are on a roll, They also get easily dumbfounded by marker bits.
This flag will never send any. Sheesh.... This flag will never send any. Sheesh....
*/ */
RTP_BUG_IGNORE_DTMF_DURATION = (1 << 6), RTP_BUG_IGNORE_DTMF_DURATION = (1 << 6),
/* /*
Guess Who? ... Yep, Sonus (and who know's who else) likes to interweave DTMF with the audio stream making it take Guess Who? ... Yep, Sonus (and who know's who else) likes to interweave DTMF with the audio stream making it take
2X as long as it should and sending an incorrect duration making the DTMF very delayed. 2X as long as it should and sending an incorrect duration making the DTMF very delayed.
@ -890,12 +890,12 @@ typedef enum {
*/ */
RTP_BUG_FLUSH_JB_ON_DTMF = (1 << 10), RTP_BUG_FLUSH_JB_ON_DTMF = (1 << 10),
/* FLUSH JITTERBUFFER When getting RFC2833 to reduce bleed through */ /* FLUSH JITTERBUFFER When getting RFC2833 to reduce bleed through */
RTP_BUG_ACCEPT_ANY_PAYLOAD = (1 << 11), RTP_BUG_ACCEPT_ANY_PAYLOAD = (1 << 11),
/* /*
Make FS accept any payload type instead of dropping and returning CNG frame. Workaround while FS only supports a single payload per rtp session. Make FS accept any payload type instead of dropping and returning CNG frame. Workaround while FS only supports a single payload per rtp session.
This can be used by endpoint modules to detect payload changes and act appropriately (ex: sofia could send a reINVITE with single codec). This can be used by endpoint modules to detect payload changes and act appropriately (ex: sofia could send a reINVITE with single codec).
This should probably be a flag, but flag enum is already full! This should probably be a flag, but flag enum is already full!
@ -1032,7 +1032,7 @@ typedef uint32_t switch_ivr_option_t;
SWITCH_MESSAGE_REDIRECT_AUDIO - Indication to redirect audio to another location if possible SWITCH_MESSAGE_REDIRECT_AUDIO - Indication to redirect audio to another location if possible
SWITCH_MESSAGE_TRANSMIT_TEXT - A text message SWITCH_MESSAGE_TRANSMIT_TEXT - A text message
SWITCH_MESSAGE_INDICATE_ANSWER - indicate answer SWITCH_MESSAGE_INDICATE_ANSWER - indicate answer
SWITCH_MESSAGE_INDICATE_PROGRESS - indicate progress SWITCH_MESSAGE_INDICATE_PROGRESS - indicate progress
SWITCH_MESSAGE_INDICATE_BRIDGE - indicate a bridge starting SWITCH_MESSAGE_INDICATE_BRIDGE - indicate a bridge starting
SWITCH_MESSAGE_INDICATE_UNBRIDGE - indicate a bridge ending SWITCH_MESSAGE_INDICATE_UNBRIDGE - indicate a bridge ending
SWITCH_MESSAGE_INDICATE_TRANSFER - indicate a transfer is taking place SWITCH_MESSAGE_INDICATE_TRANSFER - indicate a transfer is taking place
@ -1339,7 +1339,7 @@ typedef enum {
<pre> <pre>
CF_ANSWERED - Channel is answered CF_ANSWERED - Channel is answered
CF_OUTBOUND - Channel is an outbound channel CF_OUTBOUND - Channel is an outbound channel
CF_EARLY_MEDIA - Channel is ready for audio before answer CF_EARLY_MEDIA - Channel is ready for audio before answer
CF_ORIGINATOR - Channel is an originator CF_ORIGINATOR - Channel is an originator
CF_TRANSFER - Channel is being transfered CF_TRANSFER - Channel is being transfered
CF_ACCEPT_CNG - Channel will accept CNG frames CF_ACCEPT_CNG - Channel will accept CNG frames
@ -1679,7 +1679,7 @@ typedef uint32_t switch_codec_flag_t;
SWITCH_SPEECH_FLAG_HASTEXT = (1 << 0) - Interface is has text to read. SWITCH_SPEECH_FLAG_HASTEXT = (1 << 0) - Interface is has text to read.
SWITCH_SPEECH_FLAG_PEEK = (1 << 1) - Read data but do not erase it. SWITCH_SPEECH_FLAG_PEEK = (1 << 1) - Read data but do not erase it.
SWITCH_SPEECH_FLAG_FREE_POOL = (1 << 2) - Free interface's pool on destruction. SWITCH_SPEECH_FLAG_FREE_POOL = (1 << 2) - Free interface's pool on destruction.
SWITCH_SPEECH_FLAG_BLOCKING = (1 << 3) - Indicate that a blocking call is desired SWITCH_SPEECH_FLAG_BLOCKING = (1 << 3) - Indicate that a blocking call is desired
SWITCH_SPEECH_FLAG_PAUSE = (1 << 4) - Pause toggle for playback SWITCH_SPEECH_FLAG_PAUSE = (1 << 4) - Pause toggle for playback
</pre> </pre>
*/ */
@ -1780,8 +1780,8 @@ SMBF_STEREO - Record in stereo
SMBF_ANSWER_REQ - Don't record until the channel is answered SMBF_ANSWER_REQ - Don't record until the channel is answered
SMBF_BRIDGE_REQ - Don't record until the channel is bridged SMBF_BRIDGE_REQ - Don't record until the channel is bridged
SMBF_THREAD_LOCK - Only let the same thread who created the bug remove it. SMBF_THREAD_LOCK - Only let the same thread who created the bug remove it.
SMBF_PRUNE - SMBF_PRUNE -
SMBF_NO_PAUSE - SMBF_NO_PAUSE -
SMBF_STEREO_SWAP - Record in stereo: Write Stream - left channel, Read Stream - right channel SMBF_STEREO_SWAP - Record in stereo: Write Stream - left channel, Read Stream - right channel
</pre> </pre>
*/ */
@ -1925,7 +1925,7 @@ typedef uint32_t switch_io_flag_t;
SWITCH_EVENT_BACKGROUND_JOB - Background Job SWITCH_EVENT_BACKGROUND_JOB - Background Job
SWITCH_EVENT_DETECTED_SPEECH - Detected Speech SWITCH_EVENT_DETECTED_SPEECH - Detected Speech
SWITCH_EVENT_DETECTED_TONE - Detected Tone SWITCH_EVENT_DETECTED_TONE - Detected Tone
SWITCH_EVENT_PRIVATE_COMMAND - A private command event SWITCH_EVENT_PRIVATE_COMMAND - A private command event
SWITCH_EVENT_HEARTBEAT - Machine is alive SWITCH_EVENT_HEARTBEAT - Machine is alive
SWITCH_EVENT_TRAP - Error Trap SWITCH_EVENT_TRAP - Error Trap
SWITCH_EVENT_ADD_SCHEDULE - Something has been scheduled SWITCH_EVENT_ADD_SCHEDULE - Something has been scheduled
@ -2325,15 +2325,15 @@ typedef enum {
SWITCH_IO_WRITE SWITCH_IO_WRITE
} switch_io_type_t; } switch_io_type_t;
typedef switch_status_t (*switch_core_codec_control_func_t) (switch_codec_t *codec, typedef switch_status_t (*switch_core_codec_control_func_t) (switch_codec_t *codec,
switch_codec_control_command_t cmd, switch_codec_control_command_t cmd,
switch_codec_control_type_t ctype, switch_codec_control_type_t ctype,
void *cmd_data, void *cmd_data,
switch_codec_control_type_t atype, switch_codec_control_type_t atype,
void *cmd_arg, void *cmd_arg,
switch_codec_control_type_t *rtype, switch_codec_control_type_t *rtype,
void **ret_data); void **ret_data);
typedef switch_status_t (*switch_core_codec_init_func_t) (switch_codec_t *, switch_codec_flag_t, const switch_codec_settings_t *codec_settings); typedef switch_status_t (*switch_core_codec_init_func_t) (switch_codec_t *, switch_codec_flag_t, const switch_codec_settings_t *codec_settings);
typedef switch_status_t (*switch_core_codec_fmtp_parse_func_t) (const char *fmtp, switch_codec_fmtp_t *codec_fmtp); typedef switch_status_t (*switch_core_codec_fmtp_parse_func_t) (const char *fmtp, switch_codec_fmtp_t *codec_fmtp);
@ -2444,7 +2444,7 @@ typedef switch_status_t (*switch_say_callback_t) (switch_core_session_t *session
typedef switch_status_t (*switch_say_string_callback_t) (switch_core_session_t *session, typedef switch_status_t (*switch_say_string_callback_t) (switch_core_session_t *session,
char *tosay, char *tosay,
switch_say_args_t *say_args, char **rstr); switch_say_args_t *say_args, char **rstr);
struct switch_say_file_handle; struct switch_say_file_handle;
typedef struct switch_say_file_handle switch_say_file_handle_t; typedef struct switch_say_file_handle switch_say_file_handle_t;

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Seven Du <dujinfang@gmail.com> * Seven Du <dujinfang@gmail.com>
* *
@ -42,7 +42,7 @@
#include <switch.h> #include <switch.h>
#include <math.h> #include <math.h>
SWITCH_BEGIN_EXTERN_C SWITCH_BEGIN_EXTERN_C
#define SWITCH_URL_UNSAFE "\r\n #%&+:;<=>?@[\\]^`{|}\"" #define SWITCH_URL_UNSAFE "\r\n #%&+:;<=>?@[\\]^`{|}\""
@ -72,18 +72,18 @@ static inline uint32_t switch_round_to_step(uint32_t num, uint32_t step)
uint32_t x; uint32_t x;
if (!num) return 0; if (!num) return 0;
r = (num % step); r = (num % step);
x = num - r; x = num - r;
if (r > step / 2) { if (r > step / 2) {
x += step; x += step;
} }
return x; return x;
} }
/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii /* https://code.google.com/p/stringencoders/wiki/PerformanceAscii
http://www.azillionmonkeys.com/qed/asmexample.html http://www.azillionmonkeys.com/qed/asmexample.html
*/ */
static inline uint32_t switch_toupper(uint32_t eax) static inline uint32_t switch_toupper(uint32_t eax)
@ -94,7 +94,7 @@ ebx = (0x7f7f7f7ful & ebx) + 0x1a1a1a1aul;
return eax - ebx; return eax - ebx;
} }
/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii /* https://code.google.com/p/stringencoders/wiki/PerformanceAscii
http://www.azillionmonkeys.com/qed/asmexample.html http://www.azillionmonkeys.com/qed/asmexample.html
*/ */
static inline uint32_t switch_tolower(uint32_t eax) static inline uint32_t switch_tolower(uint32_t eax)
@ -108,7 +108,7 @@ static inline uint32_t switch_tolower(uint32_t eax)
#ifdef FS_64BIT #ifdef FS_64BIT
/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii /* https://code.google.com/p/stringencoders/wiki/PerformanceAscii
http://www.azillionmonkeys.com/qed/asmexample.html http://www.azillionmonkeys.com/qed/asmexample.html
*/ */
static inline uint64_t switch_toupper64(uint64_t eax) static inline uint64_t switch_toupper64(uint64_t eax)
@ -119,7 +119,7 @@ uint64_t ebx = (0x7f7f7f7f7f7f7f7full & eax) + 0x0505050505050505ull;
return eax - ebx; return eax - ebx;
} }
/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii /* https://code.google.com/p/stringencoders/wiki/PerformanceAscii
http://www.azillionmonkeys.com/qed/asmexample.html http://www.azillionmonkeys.com/qed/asmexample.html
*/ */
static inline uint64_t switch_tolower64(uint64_t eax) static inline uint64_t switch_tolower64(uint64_t eax)
@ -186,7 +186,7 @@ static inline void switch_tolower_max(char *s)
} }
#else #else
static inline void switch_toupper_max(char *s) static inline void switch_toupper_max(char *s)
{ {
@ -213,7 +213,7 @@ static inline void switch_toupper_max(char *s)
c++; c++;
l--; l--;
} }
} }
static inline void switch_tolower_max(char *s) static inline void switch_tolower_max(char *s)
@ -241,7 +241,7 @@ static inline void switch_tolower_max(char *s)
c++; c++;
l--; l--;
} }
} }
#endif #endif
@ -314,7 +314,7 @@ static inline switch_bool_t switch_is_moh(const char *s)
#define zset(_a, _b) if (!zstr(_b)) _a = _b #define zset(_a, _b) if (!zstr(_b)) _a = _b
/* find a character (find) in a string (in) and return a pointer to that point in the string where the character was found /* find a character (find) in a string (in) and return a pointer to that point in the string where the character was found
using the array (allowed) as allowed non-matching characters, when (allowed) is NULL, behaviour should be identical to strchr() using the array (allowed) as allowed non-matching characters, when (allowed) is NULL, behaviour should be identical to strchr()
*/ */
static inline char *switch_strchr_strict(const char *in, char find, const char *allowed) static inline char *switch_strchr_strict(const char *in, char find, const char *allowed)
@ -343,12 +343,12 @@ static inline char *switch_strchr_strict(const char *in, char find, const char *
acceptable = 1; acceptable = 1;
break; break;
} }
a++; a++;
} }
} }
if (!acceptable) return NULL; if (!acceptable) return NULL;
p++; p++;
@ -410,7 +410,7 @@ static inline char *switch_print_bits(const unsigned char *byte, char *buf, swit
k++; k++;
byte++; byte++;
} }
if (buf[j-1] == ' ') j--; if (buf[j-1] == ' ') j--;
buf[j++] = '\0'; buf[j++] = '\0';
return buf; return buf;
@ -491,7 +491,7 @@ SWITCH_DECLARE(char *) switch_find_parameter(const char *str, const char *param,
/*! /*!
\brief Evaluate the truthfullness of a string expression \brief Evaluate the truthfullness of a string expression
\param expr a string expression \param expr a string expression
\return true or false \return true or false
*/ */
static inline int switch_true(const char *expr) static inline int switch_true(const char *expr)
{ {
@ -523,7 +523,7 @@ static inline switch_byte_t switch_true_byte(const char *expr)
/*! /*!
\brief Evaluate the falsefullness of a string expression \brief Evaluate the falsefullness of a string expression
\param expr a string expression \param expr a string expression
\return true or false \return true or false
*/ */
static inline int switch_false(const char *expr) static inline int switch_false(const char *expr)
{ {
@ -725,7 +725,7 @@ static inline char *switch_sanitize_number(char *number)
while ((q = strrchr(p, '@'))) while ((q = strrchr(p, '@')))
*q = '\0'; *q = '\0';
for (i = 0; i < (int) strlen(warp); i++) { for (i = 0; i < (int) strlen(warp); i++) {
while (p && (q = strchr(p, warp[i]))) while (p && (q = strchr(p, warp[i])))
p = q + 1; p = q + 1;
@ -1048,7 +1048,7 @@ static inline int32_t switch_calc_bitrate(int w, int h, int quality, double fps)
/* KUSH GAUGE*/ /* KUSH GAUGE*/
if (!fps) fps = 15; if (!fps) fps = 15;
r = (int32_t)((double)(w * h * fps * (quality ? quality : 1)) * 0.07) / 1000; r = (int32_t)((double)(w * h * fps * (quality ? quality : 1)) * 0.07) / 1000;
if (!quality) r /= 2; if (!quality) r /= 2;
@ -1065,7 +1065,7 @@ static inline int32_t switch_parse_bandwidth_string(const char *bwv)
if (!strcasecmp(bwv, "auto")) { if (!strcasecmp(bwv, "auto")) {
return -1; return -1;
} }
if ((bw = (float) atof(bwv))) { if ((bw = (float) atof(bwv))) {
if (bw < 0) return 0; if (bw < 0) return 0;
@ -1087,7 +1087,7 @@ static inline int switch_needs_url_encode(const char *s)
const char hex[] = "0123456789ABCDEF"; const char hex[] = "0123456789ABCDEF";
const char *p, *e = end_of_p(s); const char *p, *e = end_of_p(s);
for(p = s; p && *p; p++) { for(p = s; p && *p; p++) {
if (*p == '%' && e-p > 1) { if (*p == '%' && e-p > 1) {
if (strchr(hex, *(p+1)) && strchr(hex, *(p+2))) { if (strchr(hex, *(p+1)) && strchr(hex, *(p+2))) {
@ -1129,7 +1129,7 @@ static inline void switch_separate_file_params(const char *file, char **file_por
*file_portion = NULL; *file_portion = NULL;
*params_portion = NULL; *params_portion = NULL;
while (*file == '{') { while (*file == '{') {
e = switch_find_end_paren(file, '{', '}'); e = switch_find_end_paren(file, '{', '}');
file = e + 1; file = e + 1;
@ -1144,7 +1144,7 @@ static inline void switch_separate_file_params(const char *file, char **file_por
} else { } else {
*file_portion = (char *)space; *file_portion = (char *)space;
} }
return; return;
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -101,7 +101,7 @@ struct switch_xml {
uint32_t refs; uint32_t refs;
}; };
/*! /*!
* \brief Parses a string into a switch_xml_t, ensuring the memory will be freed with switch_xml_free * \brief Parses a string into a switch_xml_t, ensuring the memory will be freed with switch_xml_free
* \param s The string to parse * \param s The string to parse
* \param dup true if you want the string to be strdup()'d automatically * \param dup true if you want the string to be strdup()'d automatically
@ -109,8 +109,8 @@ struct switch_xml {
*/ */
SWITCH_DECLARE(switch_xml_t) switch_xml_parse_str_dynamic(_In_z_ char *s, _In_ switch_bool_t dup); SWITCH_DECLARE(switch_xml_t) switch_xml_parse_str_dynamic(_In_z_ char *s, _In_ switch_bool_t dup);
/*! /*!
* \brief Parses a string into a switch_xml_t * \brief Parses a string into a switch_xml_t
* \param s The string to parse * \param s The string to parse
* \return the switch_xml_t or NULL if an error occured * \return the switch_xml_t or NULL if an error occured
*/ */
@ -200,7 +200,7 @@ SWITCH_DECLARE(const char *) switch_xml_attr_soft(_In_ switch_xml_t xml, _In_z_
///\brief Traverses the switch_xml structure to retrieve a specific subtag. Takes a ///\brief Traverses the switch_xml structure to retrieve a specific subtag. Takes a
///\ variable length list of tag names and indexes. The argument list must be ///\ variable length list of tag names and indexes. The argument list must be
///\ terminated by either an index of -1 or an empty string tag name. Example: ///\ terminated by either an index of -1 or an empty string tag name. Example:
///\ title = switch_xml_get(library, "shelf", 0, "book", 2, "title", -1); ///\ title = switch_xml_get(library, "shelf", 0, "book", 2, "title", -1);
///\ This retrieves the title of the 3rd book on the 1st shelf of library. ///\ This retrieves the title of the 3rd book on the 1st shelf of library.
///\ Returns NULL if not found. ///\ Returns NULL if not found.

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Mathieu Rene <mathieu.rene@gmail.com> * Mathieu Rene <mathieu.rene@gmail.com>
* *
* *
@ -96,7 +96,7 @@ typedef switch_status_t (*switch_xml_config_callback_t) (switch_xml_config_item_
switch_bool_t changed); switch_bool_t changed);
/*! /*!
* \brief A configuration instruction read by switch_xml_config_parse * \brief A configuration instruction read by switch_xml_config_parse
*/ */
struct switch_xml_config_item { struct switch_xml_config_item {
const char *key; /*< The key of the element, or NULL to indicate the end of the list */ const char *key; /*< The key of the element, or NULL to indicate the end of the list */
@ -122,29 +122,29 @@ SWITCH_DECLARE(void) switch_config_perform_set_item(switch_xml_config_item_t *it
const void *defaultvalue, void *data, switch_xml_config_callback_t function, const char *syntax, const void *defaultvalue, void *data, switch_xml_config_callback_t function, const char *syntax,
const char *helptext); const char *helptext);
/*! /*!
* \brief Gets the int representation of an enum * \brief Gets the int representation of an enum
* \param enum_options the switch_xml_config_enum_item_t array for this enum * \param enum_options the switch_xml_config_enum_item_t array for this enum
* \param value string value to search * \param value string value to search
*/ */
SWITCH_DECLARE(switch_status_t) switch_xml_config_enum_str2int(switch_xml_config_enum_item_t *enum_options, const char *value, int *out); SWITCH_DECLARE(switch_status_t) switch_xml_config_enum_str2int(switch_xml_config_enum_item_t *enum_options, const char *value, int *out);
/*! /*!
* \brief Gets the string representation of an enum * \brief Gets the string representation of an enum
* \param enum_options the switch_xml_config_enum_item_t array for this enum * \param enum_options the switch_xml_config_enum_item_t array for this enum
* \param value int value to search * \param value int value to search
*/ */
SWITCH_DECLARE(const char *) switch_xml_config_enum_int2str(switch_xml_config_enum_item_t *enum_options, int value); SWITCH_DECLARE(const char *) switch_xml_config_enum_int2str(switch_xml_config_enum_item_t *enum_options, int value);
/*! /*!
* \brief Prints out an item's documentation on the console * \brief Prints out an item's documentation on the console
* \param level loglevel to use * \param level loglevel to use
* \param item item which the doc should be printed * \param item item which the doc should be printed
*/ */
SWITCH_DECLARE(void) switch_xml_config_item_print_doc(int level, switch_xml_config_item_t *item); SWITCH_DECLARE(void) switch_xml_config_item_print_doc(int level, switch_xml_config_item_t *item);
/*! /*!
* \brief Parses all the xml elements, following a ruleset defined by an array of switch_xml_config_item_t * \brief Parses all the xml elements, following a ruleset defined by an array of switch_xml_config_item_t
* \param xml The first element of the list to parse * \param xml The first element of the list to parse
* \param reload true to skip all non-reloadable options * \param reload true to skip all non-reloadable options
* \param instructions instrutions on how to parse the elements * \param instructions instrutions on how to parse the elements
@ -156,12 +156,12 @@ SWITCH_DECLARE(switch_status_t) switch_xml_config_parse(switch_xml_t xml, switch
* \brief Parses a module's settings * \brief Parses a module's settings
* \param reload true to skip all non-reloadable options * \param reload true to skip all non-reloadable options
* \param file the configuration file to look for * \param file the configuration file to look for
* \param instructions the instructions * \param instructions the instructions
*/ */
SWITCH_DECLARE(switch_status_t) switch_xml_config_parse_module_settings(const char *file, switch_bool_t reload, switch_xml_config_item_t *instructions); SWITCH_DECLARE(switch_status_t) switch_xml_config_parse_module_settings(const char *file, switch_bool_t reload, switch_xml_config_item_t *instructions);
/*! /*!
* \brief Parses all of an event's elements, following a ruleset defined by an array of switch_xml_config_item_t * \brief Parses all of an event's elements, following a ruleset defined by an array of switch_xml_config_item_t
* \param event The event structure containing the key and values to parse * \param event The event structure containing the key and values to parse
* \param reload true to skip all non-reloadable options * \param reload true to skip all non-reloadable options
* \param instructions instrutions on how to parse the elements * \param instructions instrutions on how to parse the elements
@ -171,10 +171,10 @@ SWITCH_DECLARE(switch_status_t) switch_xml_config_parse_event(switch_event_t *ev
switch_xml_config_item_t *instructions); switch_xml_config_item_t *instructions);
/*! /*!
* \brief Parses a list of xml elements into an event * \brief Parses a list of xml elements into an event
* \param xml First element of the xml list to parse * \param xml First element of the xml list to parse
* \param keyname Name of the key attribute * \param keyname Name of the key attribute
* \param keyvalue Name of the value attribute * \param keyvalue Name of the value attribute
* \param event [out] event (if *event is NOT NULL, the headers will be appended to the existing event) * \param event [out] event (if *event is NOT NULL, the headers will be appended to the existing event)
*/ */
SWITCH_DECLARE(switch_size_t) switch_event_import_xml(switch_xml_t xml, const char *keyname, const char *valuename, switch_event_t **event); SWITCH_DECLARE(switch_size_t) switch_event_import_xml(switch_xml_t xml, const char *keyname, const char *valuename, switch_event_t **event);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Marc Olivier Chouinard <mochouinard@moctel.com> * Marc Olivier Chouinard <mochouinard@moctel.com>
* *
* *
@ -38,7 +38,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_abstraction_load);
const char *global_cf = "abstraction.conf"; const char *global_cf = "abstraction.conf";
/* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime) /* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime)
* Defines a switch_loadable_module_function_table_t and a static const char[] modname * Defines a switch_loadable_module_function_table_t and a static const char[] modname
*/ */
SWITCH_MODULE_DEFINITION(mod_abstraction, mod_abstraction_load, mod_abstraction_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_abstraction, mod_abstraction_load, mod_abstraction_shutdown, NULL);
@ -86,12 +86,12 @@ SWITCH_STANDARD_API(api_abstraction_function)
} }
switch_api_execute(destination, api_args, session, stream); switch_api_execute(destination, api_args, session, stream);
switch_safe_free(substituted); switch_safe_free(substituted);
} else { } else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No match for API %s (%s != %s)\n", api_name, parse, cmd); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No match for API %s (%s != %s)\n", api_name, parse, cmd);
} }
switch_regex_safe_free(re); switch_regex_safe_free(re);
} else { } else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "API %s doesn't exist inside the xml structure. You might have forgot to reload the module after editing it\n", api_name); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "API %s doesn't exist inside the xml structure. You might have forgot to reload the module after editing it\n", api_name);
} }

View File

@ -821,7 +821,7 @@ static switch_status_t consume_nalu(h264_codec_context_t *context, switch_frame_
static switch_status_t open_encoder(h264_codec_context_t *context, uint32_t width, uint32_t height) static switch_status_t open_encoder(h264_codec_context_t *context, uint32_t width, uint32_t height)
{ {
int sane = 0; int sane = 0;
if (!context->encoder) { if (!context->encoder) {
if (context->av_codec_id == AV_CODEC_ID_H264) { if (context->av_codec_id == AV_CODEC_ID_H264) {
if (context->codec_settings.video.try_hardware_encoder && (context->encoder = avcodec_find_encoder_by_name("nvenc_h264"))) { if (context->codec_settings.video.try_hardware_encoder && (context->encoder = avcodec_find_encoder_by_name("nvenc_h264"))) {
@ -889,7 +889,7 @@ static switch_status_t open_encoder(h264_codec_context_t *context, uint32_t widt
} }
context->bandwidth *= 3; context->bandwidth *= 3;
//context->encoder_ctx->bit_rate = context->bandwidth * 1024; //context->encoder_ctx->bit_rate = context->bandwidth * 1024;
context->encoder_ctx->width = context->codec_settings.video.width; context->encoder_ctx->width = context->codec_settings.video.width;
context->encoder_ctx->height = context->codec_settings.video.height; context->encoder_ctx->height = context->codec_settings.video.height;
@ -1286,7 +1286,7 @@ static switch_status_t switch_h264_decode(switch_codec_t *codec, switch_frame_t
if (got_picture && decoded_len > 0) { if (got_picture && decoded_len > 0) {
int width = picture->width; int width = picture->width;
int height = picture->height; int height = picture->height;
if (!context->img || (context->img->d_w != width || context->img->d_h != height)) { if (!context->img || (context->img->d_w != width || context->img->d_h != height)) {
switch_img_free(&context->img); switch_img_free(&context->img);
context->img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, width, height, 1); context->img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, width, height, 1);

View File

@ -303,7 +303,7 @@ static switch_status_t add_stream(MediaStream *mst, AVFormatContext *fc, AVCodec
} }
mst->st->id = fc->nb_streams - 1; mst->st->id = fc->nb_streams - 1;
c = mst->st->codec; c = mst->st->codec;
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "id:%d den:%d num:%d\n", mst->st->id, mst->st->time_base.den, mst->st->time_base.num); //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "id:%d den:%d num:%d\n", mst->st->id, mst->st->time_base.den, mst->st->time_base.num);
if (threads > 4) { if (threads > 4) {
@ -340,7 +340,7 @@ static switch_status_t add_stream(MediaStream *mst, AVFormatContext *fc, AVCodec
} else { } else {
mm->fps = fps; mm->fps = fps;
} }
if (mm->vw && mm->vh) { if (mm->vw && mm->vh) {
mst->width = mm->vw; mst->width = mm->vw;
mst->height = mm->vh; mst->height = mm->vh;
@ -392,7 +392,7 @@ static switch_status_t add_stream(MediaStream *mst, AVFormatContext *fc, AVCodec
c->level = 52; c->level = 52;
break; break;
} }
switch (mm->vencspd) { switch (mm->vencspd) {
case SWITCH_VIDEO_ENCODE_SPEED_SLOW: case SWITCH_VIDEO_ENCODE_SPEED_SLOW:
av_opt_set(c->priv_data, "preset", "veryslow", 0); av_opt_set(c->priv_data, "preset", "veryslow", 0);
@ -657,7 +657,7 @@ static void *SWITCH_THREAD_FUNC video_thread_run(switch_thread_t *thread, void *
goto top; goto top;
} }
} else { } else {
size = switch_queue_size(eh->video_queue); size = switch_queue_size(eh->video_queue);
if (size > 5 && !eh->finalize) { if (size > 5 && !eh->finalize) {
@ -672,12 +672,12 @@ static void *SWITCH_THREAD_FUNC video_thread_run(switch_thread_t *thread, void *
} }
} }
} }
//switch_mutex_lock(eh->mutex); //switch_mutex_lock(eh->mutex);
eh->in_callback = 1; eh->in_callback = 1;
av_init_packet(&pkt); av_init_packet(&pkt);
if (eh->video_st->frame) { if (eh->video_st->frame) {
ret = av_frame_make_writable(eh->video_st->frame); ret = av_frame_make_writable(eh->video_st->frame);
@ -688,7 +688,7 @@ static void *SWITCH_THREAD_FUNC video_thread_run(switch_thread_t *thread, void *
} }
fill_avframe(eh->video_st->frame, img); fill_avframe(eh->video_st->frame, img);
if (eh->finalize) { if (eh->finalize) {
if (delta_i && !delta_avg) { if (delta_i && !delta_avg) {
delta_avg = (int)(double)(delta_sum / delta_i); delta_avg = (int)(double)(delta_sum / delta_i);
@ -714,13 +714,13 @@ static void *SWITCH_THREAD_FUNC video_thread_run(switch_thread_t *thread, void *
if (delta_tmp != last_ts) { if (delta_tmp != last_ts) {
delta_sum += delta_tmp; delta_sum += delta_tmp;
delta_i++; delta_i++;
if (delta_i >= 60) { if (delta_i >= 60) {
delta_avg = (int)(double)(delta_sum / delta_i); delta_avg = (int)(double)(delta_sum / delta_i);
delta_i = 0; delta_i = 0;
delta_sum = delta_avg; delta_sum = delta_avg;
} }
eh->video_st->frame->pts = eh->timer->samplecount; eh->video_st->frame->pts = eh->timer->samplecount;
} }
} }
@ -977,12 +977,12 @@ SWITCH_STANDARD_APP(record_av_function)
int offset = DFT_RECORD_OFFSET; int offset = DFT_RECORD_OFFSET;
int fps = codec.implementation->actual_samples_per_second / samples; int fps = codec.implementation->actual_samples_per_second / samples;
int lead_frames = (offset * fps) / 1000; int lead_frames = (offset * fps) / 1000;
for (int x = 0; x < lead_frames; x++) { for (int x = 0; x < lead_frames; x++) {
switch_buffer_write(buffer, buf, datalen); switch_buffer_write(buffer, buf, datalen);
} }
} }
while (switch_channel_ready(channel)) { while (switch_channel_ready(channel)) {
status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_SINGLE_READ, 0); status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_SINGLE_READ, 0);
@ -1585,16 +1585,16 @@ again:
*pts = vframe->pkt_pts; *pts = vframe->pkt_pts;
avframe2img(vframe, img); avframe2img(vframe, img);
img->user_priv = pts; img->user_priv = pts;
#ifdef ALT_WAY #ifdef ALT_WAY
diff = sleep - (switch_time_now() - context->last_vid_push); diff = sleep - (switch_time_now() - context->last_vid_push);
if (diff > 0 && diff <= sleep) { if (diff > 0 && diff <= sleep) {
switch_core_timer_next(&context->video_timer); switch_core_timer_next(&context->video_timer);
} else { } else {
switch_core_timer_sync(&context->video_timer); switch_core_timer_sync(&context->video_timer);
} }
#endif #endif
context->vid_ready = 1; context->vid_ready = 1;
switch_queue_push(context->eh.video_queue, img); switch_queue_push(context->eh.video_queue, img);
@ -1686,7 +1686,7 @@ static switch_status_t av_file_open(switch_file_handle_t *handle, const char *pa
switch_status_t status = SWITCH_STATUS_SUCCESS; switch_status_t status = SWITCH_STATUS_SUCCESS;
switch_set_string(file, path); switch_set_string(file, path);
if ((ext = strrchr((char *)path, '.')) == 0) { if ((ext = strrchr((char *)path, '.')) == 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Format\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Format\n");
return SWITCH_STATUS_GENERR; return SWITCH_STATUS_GENERR;
@ -1923,7 +1923,7 @@ static switch_status_t av_file_write(switch_file_handle_t *handle, void *data, s
switch_buffer_write(context->audio_buffer, data, datalen); switch_buffer_write(context->audio_buffer, data, datalen);
} }
bytes = context->audio_st.frame->nb_samples * 2 * context->audio_st.st->codec->channels; bytes = context->audio_st.frame->nb_samples * 2 * context->audio_st.st->codec->channels;
@ -1937,15 +1937,15 @@ static switch_status_t av_file_write(switch_file_handle_t *handle, void *data, s
switch_buffer_write(context->audio_buffer, buf, bytes - inuse); switch_buffer_write(context->audio_buffer, buf, bytes - inuse);
} }
} }
while ((inuse = switch_buffer_inuse(context->audio_buffer)) >= bytes) { while ((inuse = switch_buffer_inuse(context->audio_buffer)) >= bytes) {
AVPacket pkt = { 0 }; AVPacket pkt = { 0 };
int got_packet = 0; int got_packet = 0;
int ret; int ret;
av_init_packet(&pkt); av_init_packet(&pkt);
if (context->audio_st.resample_ctx) { // need resample if (context->audio_st.resample_ctx) { // need resample
int out_samples = avresample_get_out_samples(context->audio_st.resample_ctx, context->audio_st.frame->nb_samples); int out_samples = avresample_get_out_samples(context->audio_st.resample_ctx, context->audio_st.frame->nb_samples);
av_frame_make_writable(context->audio_st.frame); av_frame_make_writable(context->audio_st.frame);
@ -1955,7 +1955,7 @@ static switch_status_t av_file_write(switch_file_handle_t *handle, void *data, s
ret = avresample_convert(context->audio_st.resample_ctx, ret = avresample_convert(context->audio_st.resample_ctx,
context->audio_st.tmp_frame->data, 0, out_samples, context->audio_st.tmp_frame->data, 0, out_samples,
(uint8_t **)context->audio_st.frame->data, 0, context->audio_st.frame->nb_samples); (uint8_t **)context->audio_st.frame->data, 0, context->audio_st.frame->nb_samples);
if (ret < 0) { if (ret < 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error while converting %d samples, error text: %s\n", switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error while converting %d samples, error text: %s\n",
context->audio_st.frame->nb_samples, get_error_text(ret)); context->audio_st.frame->nb_samples, get_error_text(ret));
@ -1964,7 +1964,7 @@ static switch_status_t av_file_write(switch_file_handle_t *handle, void *data, s
context->audio_st.tmp_frame->pts = context->audio_st.next_pts; context->audio_st.tmp_frame->pts = context->audio_st.next_pts;
context->audio_st.next_pts += context->audio_st.frame->nb_samples; context->audio_st.next_pts += context->audio_st.frame->nb_samples;
ret = avcodec_encode_audio2(context->audio_st.st->codec, &pkt, context->audio_st.tmp_frame, &got_packet); ret = avcodec_encode_audio2(context->audio_st.st->codec, &pkt, context->audio_st.tmp_frame, &got_packet);
} else { } else {
av_frame_make_writable(context->audio_st.frame); av_frame_make_writable(context->audio_st.frame);
switch_buffer_read(context->audio_buffer, context->audio_st.frame->data[0], bytes); switch_buffer_read(context->audio_buffer, context->audio_st.frame->data[0], bytes);
@ -2010,9 +2010,9 @@ static switch_status_t av_file_command(switch_file_handle_t *handle, switch_file
switch(command) { switch(command) {
case SCFC_FLUSH_AUDIO: case SCFC_FLUSH_AUDIO:
switch_mutex_lock(context->mutex); switch_mutex_lock(context->mutex);
switch_buffer_zero(context->audio_buffer); switch_buffer_zero(context->audio_buffer);
switch_mutex_unlock(context->mutex); switch_mutex_unlock(context->mutex);
break; break;
case SCFC_PAUSE_READ: case SCFC_PAUSE_READ:
if (context->read_paused) { if (context->read_paused) {
@ -2131,7 +2131,7 @@ static switch_status_t av_file_read(switch_file_handle_t *handle, void *data, si
if (size == 0) { if (size == 0) {
size_t blank = (handle->samplerate / 20) * 2 * handle->real_channels; size_t blank = (handle->samplerate / 20) * 2 * handle->real_channels;
if (need > blank) { if (need > blank) {
need = blank; need = blank;
} }
@ -2165,7 +2165,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
if ((flags & SVR_FLUSH)) { if ((flags & SVR_FLUSH)) {
flush_video_queue(context->eh.video_queue, 1); flush_video_queue(context->eh.video_queue, 1);
} }
if ((flags & SVR_BLOCK)) { if ((flags & SVR_BLOCK)) {
status = switch_queue_pop(context->eh.video_queue, &pop); status = switch_queue_pop(context->eh.video_queue, &pop);
} else { } else {
@ -2185,7 +2185,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
return (flags & SVR_FLUSH) ? SWITCH_STATUS_BREAK : status; return (flags & SVR_FLUSH) ? SWITCH_STATUS_BREAK : status;
} }
#else #else
static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_frame_t *frame, switch_video_read_flag_t flags) static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_frame_t *frame, switch_video_read_flag_t flags)
{ {
@ -2343,7 +2343,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "picture is too late, off: %" SWITCH_INT64_T_FMT " max delta: %" SWITCH_INT64_T_FMT " queue size:%u fps:%u/%0.2f\n", (int64_t)(now - mst->next_pts), max_delta, switch_queue_size(context->eh.video_queue), context->read_fps, handle->mm.fps); //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "picture is too late, off: %" SWITCH_INT64_T_FMT " max delta: %" SWITCH_INT64_T_FMT " queue size:%u fps:%u/%0.2f\n", (int64_t)(now - mst->next_pts), max_delta, switch_queue_size(context->eh.video_queue), context->read_fps, handle->mm.fps);
switch_img_free(&img); switch_img_free(&img);
//max_delta = AV_TIME_BASE; //max_delta = AV_TIME_BASE;
if (switch_queue_size(context->eh.video_queue) > 0) { if (switch_queue_size(context->eh.video_queue) > 0) {
// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "WTF again\n"); // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "WTF again\n");
goto again; goto again;
@ -2351,7 +2351,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
mst->next_pts = 0; mst->next_pts = 0;
context->video_start_time = 0; context->video_start_time = 0;
return SWITCH_STATUS_BREAK; return SWITCH_STATUS_BREAK;
} }
} }
if ((flags & SVR_BLOCK) || do_fl) { if ((flags & SVR_BLOCK) || do_fl) {
@ -2369,7 +2369,7 @@ static switch_status_t av_file_read_video(switch_file_handle_t *handle, switch_f
return SWITCH_STATUS_BREAK; return SWITCH_STATUS_BREAK;
} }
} }
} else { } else {
return SWITCH_STATUS_BREAK; return SWITCH_STATUS_BREAK;
} }

View File

@ -1,4 +1,4 @@
/* /*
* Contributor(s): * Contributor(s):
* *
* Piotr Gregor <piotrgregor@rsyncme.org> * Piotr Gregor <piotrgregor@rsyncme.org>

View File

@ -1,4 +1,4 @@
/* /*
* Contributor(s): * Contributor(s):
* *
* Eric des Courtis <eric.des.courtis@benbria.com> * Eric des Courtis <eric.des.courtis@benbria.com>
@ -43,7 +43,7 @@ typedef union {
float f; float f;
} float_conv_t; } float_conv_t;
/* /*
* Manipulate these parameters to change * Manipulate these parameters to change
* mapping's resolution. The sine tone * mapping's resolution. The sine tone
* of 1600Hz is detected even with 20 * of 1600Hz is detected even with 20
@ -241,7 +241,7 @@ dump_table_summary(void)
i_1 = index_from_float(1.0); i_1 = index_from_float(1.0);
di = (i_1 - i_0)/100; di = (i_1 - i_0)/100;
if (di == 0) di = 1; if (di == 0) di = 1;
for (; i < ACOS_TABLE_LENGTH; i += di ) for (; i < ACOS_TABLE_LENGTH; i += di )
{ {
f = float_from_index(i); f = float_from_index(i);

View File

@ -1,4 +1,4 @@
/* /*
* Contributor(s): * Contributor(s):
* *
* Eric des Courtis <eric.des.courtis@benbria.com> * Eric des Courtis <eric.des.courtis@benbria.com>

View File

@ -82,7 +82,7 @@
#define AVMD_MIN_FREQUENCY (440.0) #define AVMD_MIN_FREQUENCY (440.0)
/*! Minimum frequency as digital normalized frequency */ /*! Minimum frequency as digital normalized frequency */
#define AVMD_MIN_FREQUENCY_R(r) ((2.0 * M_PI * AVMD_MIN_FREQUENCY) / (r)) #define AVMD_MIN_FREQUENCY_R(r) ((2.0 * M_PI * AVMD_MIN_FREQUENCY) / (r))
/*! /*!
* Maximum beep frequency in Hertz * Maximum beep frequency in Hertz
* Note: The maximum frequency the DESA-2 algorithm can uniquely * Note: The maximum frequency the DESA-2 algorithm can uniquely
* identify is 0.25 of the sampling rate. All the frequencies * identify is 0.25 of the sampling rate. All the frequencies
@ -733,7 +733,7 @@ static void avmd_fire_event(enum avmd_event type, switch_core_session_t *fs_s, d
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-offset", "ERROR (TRUNCATED)"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-offset", "ERROR (TRUNCATED)");
} }
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-offset", buf); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Detector-offset", buf);
res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%u", idx); res = snprintf(buf, AVMD_CHAR_BUF_LEN, "%u", idx);
if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) { if (res < 0 || res > AVMD_CHAR_BUF_LEN - 1) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Error, truncated [%s], [%d] attempeted!\n", buf, res); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(fs_s), SWITCH_LOG_ERROR, "Error, truncated [%s], [%d] attempeted!\n", buf, res);
@ -1137,7 +1137,7 @@ static switch_status_t avmd_parse_cmd_data_one_entry(char *candidate, struct avm
} }
/* this may be option parameter if valid */ /* this may be option parameter if valid */
key = candidate_parsed[0]; /* option name */ key = candidate_parsed[0]; /* option name */
if (zstr(key)) { /* empty key */ if (zstr(key)) { /* empty key */
return SWITCH_STATUS_NOT_INITALIZED; return SWITCH_STATUS_NOT_INITALIZED;
} }
@ -1399,7 +1399,7 @@ SWITCH_STANDARD_APP(avmd_start_app) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Failed to add media bug!\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Failed to add media bug!\n");
goto end_unlock; goto end_unlock;
} }
switch_mutex_lock(avmd_globals.mutex); switch_mutex_lock(avmd_globals.mutex);
++avmd_globals.session_n; ++avmd_globals.session_n;
switch_mutex_unlock(avmd_globals.mutex); switch_mutex_unlock(avmd_globals.mutex);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2011, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2011, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -230,7 +230,7 @@ SWITCH_STANDARD_APP(bert_test_function)
/* Proceed to read and process the received frame ... /* Proceed to read and process the received frame ...
* Note that switch_core_session_read_frame is a blocking operation, we could do reathing in another thread like the playback() app * Note that switch_core_session_read_frame is a blocking operation, we could do reathing in another thread like the playback() app
* does using switch_core_service_session() but OTOH that would lead to more load/cpu usage, extra threads being launched per call leg * does using switch_core_service_session() but OTOH that would lead to more load/cpu usage, extra threads being launched per call leg
* and most likely reduce the overall capacity of the test system */ * and most likely reduce the overall capacity of the test system */
status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
if (!SWITCH_READ_ACCEPTABLE(status)) { if (!SWITCH_READ_ACCEPTABLE(status)) {
@ -381,23 +381,23 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_bert_load)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass %s!\n", BERT_EVENT_TIMEOUT); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass %s!\n", BERT_EVENT_TIMEOUT);
return SWITCH_STATUS_TERM; return SWITCH_STATUS_TERM;
} }
if (switch_event_reserve_subclass(BERT_EVENT_LOST_SYNC) != SWITCH_STATUS_SUCCESS) { if (switch_event_reserve_subclass(BERT_EVENT_LOST_SYNC) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass %s!\n", BERT_EVENT_LOST_SYNC); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass %s!\n", BERT_EVENT_LOST_SYNC);
return SWITCH_STATUS_TERM; return SWITCH_STATUS_TERM;
} }
if (switch_event_reserve_subclass(BERT_EVENT_IN_SYNC) != SWITCH_STATUS_SUCCESS) { if (switch_event_reserve_subclass(BERT_EVENT_IN_SYNC) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass %s!\n", BERT_EVENT_IN_SYNC); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass %s!\n", BERT_EVENT_IN_SYNC);
return SWITCH_STATUS_TERM; return SWITCH_STATUS_TERM;
} }
*module_interface = switch_loadable_module_create_module_interface(pool, modname); *module_interface = switch_loadable_module_create_module_interface(pool, modname);
SWITCH_ADD_APP(app_interface, "bert_test", "Start BERT Test", "Start BERT Test", bert_test_function, "", SAF_NONE); SWITCH_ADD_APP(app_interface, "bert_test", "Start BERT Test", "Start BERT Test", bert_test_function, "", SAF_NONE);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -406,7 +406,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_bert_shutdown)
switch_event_free_subclass(BERT_EVENT_TIMEOUT); switch_event_free_subclass(BERT_EVENT_TIMEOUT);
switch_event_free_subclass(BERT_EVENT_LOST_SYNC); switch_event_free_subclass(BERT_EVENT_LOST_SYNC);
switch_event_free_subclass(BERT_EVENT_IN_SYNC); switch_event_free_subclass(BERT_EVENT_IN_SYNC);
return SWITCH_STATUS_UNLOAD; return SWITCH_STATUS_UNLOAD;
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Mathieu Rene <mrene@avgs.ca> * Mathieu Rene <mrene@avgs.ca>
* Raymond Chandler <intralanman@freeswitch.org> * Raymond Chandler <intralanman@freeswitch.org>
* *
@ -53,19 +53,19 @@ static struct {
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
} globals; } globals;
blacklist_t *blacklist_create(const char *name) blacklist_t *blacklist_create(const char *name)
{ {
switch_memory_pool_t *pool = NULL; switch_memory_pool_t *pool = NULL;
blacklist_t *bl = NULL; blacklist_t *bl = NULL;
switch_core_new_memory_pool(&pool); switch_core_new_memory_pool(&pool);
bl = switch_core_alloc(pool, sizeof(*bl)); bl = switch_core_alloc(pool, sizeof(*bl));
switch_assert(bl); switch_assert(bl);
bl->pool = pool; bl->pool = pool;
switch_core_hash_init(&bl->list); switch_core_hash_init(&bl->list);
switch_mutex_init(&bl->list_mutex, SWITCH_MUTEX_NESTED, pool); switch_mutex_init(&bl->list_mutex, SWITCH_MUTEX_NESTED, pool);
return bl; return bl;
} }
@ -117,14 +117,14 @@ static switch_status_t do_config(switch_bool_t reload)
/* Load up blacklists */ /* Load up blacklists */
switch_xml_t xml, cfg, lists, list; switch_xml_t xml, cfg, lists, list;
switch_hash_index_t *hi = NULL; switch_hash_index_t *hi = NULL;
if (!(xml = switch_xml_open_cfg("mod_blacklist.conf", &cfg, NULL))) { if (!(xml = switch_xml_open_cfg("mod_blacklist.conf", &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't load configuration section\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't load configuration section\n");
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
switch_mutex_lock(globals.lists_mutex); switch_mutex_lock(globals.lists_mutex);
/* Destroy any active lists */ /* Destroy any active lists */
while ((hi = switch_core_hash_first_iter( globals.lists, hi))) { while ((hi = switch_core_hash_first_iter( globals.lists, hi))) {
const void *key; const void *key;
@ -133,7 +133,7 @@ static switch_status_t do_config(switch_bool_t reload)
blacklist_free((blacklist_t*)val); blacklist_free((blacklist_t*)val);
switch_core_hash_delete(globals.lists, (const char*)key); switch_core_hash_delete(globals.lists, (const char*)key);
} }
if ((lists = switch_xml_child(cfg, "lists"))) { if ((lists = switch_xml_child(cfg, "lists"))) {
for (list = switch_xml_child(lists, "list"); list; list = list->next) { for (list = switch_xml_child(lists, "list"); list; list = list->next) {
const char *name = switch_xml_attr_soft(list, "name"); const char *name = switch_xml_attr_soft(list, "name");
@ -151,9 +151,9 @@ static switch_status_t do_config(switch_bool_t reload)
load_list(name, filename); load_list(name, filename);
} }
} }
switch_mutex_unlock(globals.lists_mutex); switch_mutex_unlock(globals.lists_mutex);
if (xml) { if (xml) {
switch_xml_free(xml); switch_xml_free(xml);
xml = NULL; xml = NULL;
@ -175,33 +175,33 @@ SWITCH_STANDARD_API(blacklist_api_function)
char *data; char *data;
int argc; int argc;
char *argv[3]; char *argv[3];
data = strdup(cmd); data = strdup(cmd);
trim(data); trim(data);
if (!(argc = switch_separate_string(data, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) { if (!(argc = switch_separate_string(data, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid usage\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid usage\n");
goto done; goto done;
} }
if (!strcasecmp(argv[0], "check")) { if (!strcasecmp(argv[0], "check")) {
blacklist_t *bl = NULL; blacklist_t *bl = NULL;
switch_bool_t result; switch_bool_t result;
if (argc < 2 || zstr(argv[1]) || zstr(argv[2])) { if (argc < 2 || zstr(argv[1]) || zstr(argv[2])) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Wrong syntax"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Wrong syntax");
goto done; goto done;
} }
switch_mutex_lock(globals.lists_mutex); switch_mutex_lock(globals.lists_mutex);
bl = switch_core_hash_find(globals.lists, argv[1]); bl = switch_core_hash_find(globals.lists, argv[1]);
switch_mutex_unlock(globals.lists_mutex); switch_mutex_unlock(globals.lists_mutex);
if (!bl) { if (!bl) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown blacklist [%s]\n", argv[1]); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown blacklist [%s]\n", argv[1]);
stream->write_function(stream, "false"); stream->write_function(stream, "false");
goto done; goto done;
} }
switch_mutex_lock(bl->list_mutex); switch_mutex_lock(bl->list_mutex);
result = (switch_bool_t)(intptr_t)switch_core_hash_find(bl->list, argv[2]); result = (switch_bool_t)(intptr_t)switch_core_hash_find(bl->list, argv[2]);
stream->write_function(stream, "%s", result ? "true" : "false"); stream->write_function(stream, "%s", result ? "true" : "false");
@ -212,17 +212,17 @@ SWITCH_STANDARD_API(blacklist_api_function)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Wrong syntax"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Wrong syntax");
goto done; goto done;
} }
switch_mutex_lock(globals.lists_mutex); switch_mutex_lock(globals.lists_mutex);
bl = switch_core_hash_find(globals.lists, argv[1]); bl = switch_core_hash_find(globals.lists, argv[1]);
switch_mutex_unlock(globals.lists_mutex); switch_mutex_unlock(globals.lists_mutex);
if (!bl) { if (!bl) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown blacklist [%s]\n", argv[1]); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown blacklist [%s]\n", argv[1]);
stream->write_function(stream, "-ERR Unknown blacklist\n"); stream->write_function(stream, "-ERR Unknown blacklist\n");
goto done; goto done;
} }
switch_mutex_lock(bl->list_mutex); switch_mutex_lock(bl->list_mutex);
switch_core_hash_insert(bl->list, argv[2], (void*)SWITCH_TRUE); switch_core_hash_insert(bl->list, argv[2], (void*)SWITCH_TRUE);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Added [%s] to list [%s]\n", argv[2], argv[1]); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Added [%s] to list [%s]\n", argv[2], argv[1]);
@ -234,17 +234,17 @@ SWITCH_STANDARD_API(blacklist_api_function)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Wrong syntax"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Wrong syntax");
goto done; goto done;
} }
switch_mutex_lock(globals.lists_mutex); switch_mutex_lock(globals.lists_mutex);
bl = switch_core_hash_find(globals.lists, argv[1]); bl = switch_core_hash_find(globals.lists, argv[1]);
switch_mutex_unlock(globals.lists_mutex); switch_mutex_unlock(globals.lists_mutex);
if (!bl) { if (!bl) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown blacklist [%s]\n", argv[1]); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown blacklist [%s]\n", argv[1]);
stream->write_function(stream, "-ERR Unknown blacklist\n"); stream->write_function(stream, "-ERR Unknown blacklist\n");
goto done; goto done;
} }
switch_mutex_lock(bl->list_mutex); switch_mutex_lock(bl->list_mutex);
switch_core_hash_delete(bl->list, argv[2]); switch_core_hash_delete(bl->list, argv[2]);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Removed [%s] from list [%s]\n", argv[2], argv[1]); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Removed [%s] from list [%s]\n", argv[2], argv[1]);
@ -278,7 +278,7 @@ SWITCH_STANDARD_API(blacklist_api_function)
} }
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Saving %s to %s\n", argv[1], filename); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Saving %s to %s\n", argv[1], filename);
switch_mutex_lock(globals.lists_mutex); switch_mutex_lock(globals.lists_mutex);
if (switch_file_open(&fd, filename, SWITCH_FOPEN_WRITE | SWITCH_FOPEN_TRUNCATE | SWITCH_FOPEN_CREATE, SWITCH_FPROT_OS_DEFAULT, globals.pool) if (switch_file_open(&fd, filename, SWITCH_FOPEN_WRITE | SWITCH_FOPEN_TRUNCATE | SWITCH_FOPEN_CREATE, SWITCH_FPROT_OS_DEFAULT, globals.pool)
== SWITCH_STATUS_SUCCESS) { == SWITCH_STATUS_SUCCESS) {
@ -287,7 +287,7 @@ SWITCH_STANDARD_API(blacklist_api_function)
switch_file_printf(fd, "%s\n", (char *)var); switch_file_printf(fd, "%s\n", (char *)var);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "adding %s to the dump file\n", (char *)var); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "adding %s to the dump file\n", (char *)var);
} }
stream->write_function(stream, "+OK\n"); stream->write_function(stream, "+OK\n");
} else { } else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "couldn't open %s for writing\n", filename); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "couldn't open %s for writing\n", filename);
} }
@ -300,7 +300,7 @@ SWITCH_STANDARD_API(blacklist_api_function)
} else if (!zstr(argv[0])) { } else if (!zstr(argv[0])) {
stream->write_function(stream, "-ERR: No such command: %s (see 'blacklist help')\n", argv[0]); stream->write_function(stream, "-ERR: No such command: %s (see 'blacklist help')\n", argv[0]);
} }
done: done:
switch_safe_free(data); switch_safe_free(data);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
@ -313,7 +313,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_blacklist_load)
//switch_application_interface_t *app_interface; //switch_application_interface_t *app_interface;
/* connect my internal structure to the blank pointer passed to me */ /* connect my internal structure to the blank pointer passed to me */
*module_interface = switch_loadable_module_create_module_interface(pool, modname); *module_interface = switch_loadable_module_create_module_interface(pool, modname);
memset(&globals, 0, sizeof(globals)); memset(&globals, 0, sizeof(globals));
globals.pool = pool; globals.pool = pool;

View File

@ -36,4 +36,4 @@
<!-- <tier agent="1000@default" queue="support@default" level="1" position="1"/> --> <!-- <tier agent="1000@default" queue="support@default" level="1" position="1"/> -->
</tiers> </tiers>
</configuration> </configuration>

View File

@ -17,12 +17,12 @@
<!-- comment out sql to not setup a database (directory) lookup --> <!-- comment out sql to not setup a database (directory) lookup -->
<param name="sql" value=" <param name="sql" value="
SELECT name||' ('||type||')' AS name SELECT name||' ('||type||')' AS name
FROM phonebook p JOIN numbers n ON p.id = n.phonebook_id FROM phonebook p JOIN numbers n ON p.id = n.phonebook_id
WHERE n.number='${caller_id_number}' WHERE n.number='${caller_id_number}'
LIMIT 1 LIMIT 1
"/> "/>
<!-- comment out citystate-sql to not setup a database (city/state) <!-- comment out citystate-sql to not setup a database (city/state)
lookup --> lookup -->
<param name="citystate-sql" value=" <param name="citystate-sql" value="
SELECT ratecenter||' '||state as name SELECT ratecenter||' '||state as name

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Rupa Schomaker <rupa@rupa.com> * Rupa Schomaker <rupa@rupa.com>
* *
* mod_cidlookup.c -- API for querying cid->name services and local data * mod_cidlookup.c -- API for querying cid->name services and local data
@ -39,7 +39,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cidlookup_shutdown);
SWITCH_MODULE_RUNTIME_FUNCTION(mod_cidlookup_runtime); SWITCH_MODULE_RUNTIME_FUNCTION(mod_cidlookup_runtime);
SWITCH_MODULE_LOAD_FUNCTION(mod_cidlookup_load); SWITCH_MODULE_LOAD_FUNCTION(mod_cidlookup_load);
/* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime) /* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime)
* Defines a switch_loadable_module_function_table_t and a static const char[] modname * Defines a switch_loadable_module_function_table_t and a static const char[] modname
*/ */
SWITCH_MODULE_DEFINITION(mod_cidlookup, mod_cidlookup_load, mod_cidlookup_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_cidlookup, mod_cidlookup_load, mod_cidlookup_shutdown, NULL);
@ -90,7 +90,7 @@ static switch_cache_db_handle_t *cidlookup_get_db_handle(void)
{ {
switch_cache_db_handle_t *dbh = NULL; switch_cache_db_handle_t *dbh = NULL;
char *dsn; char *dsn;
if (!zstr(globals.odbc_dsn)) { if (!zstr(globals.odbc_dsn)) {
dsn = globals.odbc_dsn; dsn = globals.odbc_dsn;
} else { } else {
@ -100,7 +100,7 @@ static switch_cache_db_handle_t *cidlookup_get_db_handle(void)
if (switch_cache_db_get_db_handle_dsn(&dbh, dsn) != SWITCH_STATUS_SUCCESS) { if (switch_cache_db_get_db_handle_dsn(&dbh, dsn) != SWITCH_STATUS_SUCCESS) {
dbh = NULL; dbh = NULL;
} }
return dbh; return dbh;
} }
@ -383,7 +383,7 @@ static long do_lookup_url(switch_memory_pool_t *pool, switch_event_t *event, cha
switch_curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1); switch_curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1);
switch_curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 10); switch_curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 10);
/* /*
TIMEOUT_MS is introduced in 7.16.2, we have 7.16.0 in tree TIMEOUT_MS is introduced in 7.16.2, we have 7.16.0 in tree
*/ */
#ifdef CURLOPT_TIMEOUT_MS #ifdef CURLOPT_TIMEOUT_MS
if (timeout > 0) { if (timeout > 0) {
@ -452,12 +452,12 @@ static cid_data_t *do_whitepages_lookup(switch_memory_pool_t *pool, switch_event
query = switch_event_expand_headers(event, "http://api.whitepages.com/reverse_phone/1.0/?phone=${whitepages-cid};api_key=${whitepages-api-key}"); query = switch_event_expand_headers(event, "http://api.whitepages.com/reverse_phone/1.0/?phone=${whitepages-cid};api_key=${whitepages-api-key}");
do_lookup_url(pool, event, &xml_s, query, NULL, NULL, 0); do_lookup_url(pool, event, &xml_s, query, NULL, NULL, 0);
if (zstr(xml_s)) { if (zstr(xml_s)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No XML returned for number %s\n", num); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No XML returned for number %s\n", num);
goto done; goto done;
} }
xml = switch_xml_parse_str_dup(xml_s); xml = switch_xml_parse_str_dup(xml_s);
if (!xml) { if (!xml) {
@ -706,7 +706,7 @@ SWITCH_STANDARD_APP(cidlookup_app_function)
if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) { if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) {
const char *uuid = switch_channel_get_partner_uuid(channel); const char *uuid = switch_channel_get_partner_uuid(channel);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
if (uuid) { if (uuid) {
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", uuid);
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Neal Horman <neal at wanlink dot com> * Neal Horman <neal at wanlink dot com>
* *
@ -37,7 +37,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cluechoo_shutdown);
SWITCH_MODULE_RUNTIME_FUNCTION(mod_cluechoo_runtime); SWITCH_MODULE_RUNTIME_FUNCTION(mod_cluechoo_runtime);
SWITCH_MODULE_LOAD_FUNCTION(mod_cluechoo_load); SWITCH_MODULE_LOAD_FUNCTION(mod_cluechoo_load);
/* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime) /* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime)
* Defines a switch_loadable_module_function_table_t and a static const char[] modname * Defines a switch_loadable_module_function_table_t and a static const char[] modname
*/ */
SWITCH_MODULE_DEFINITION(mod_cluechoo, mod_cluechoo_load, mod_cluechoo_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_cluechoo, mod_cluechoo_load, mod_cluechoo_shutdown, NULL);
@ -102,7 +102,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cluechoo_shutdown)
/*======================================== /*========================================
* sl.c: * sl.c:
* Copyright 1993,1998 Toyoda Masashi * Copyright 1993,1998 Toyoda Masashi
* (toyoda@is.titech.ac.jp) * (toyoda@is.titech.ac.jp)
* Last Modified: 1998/ 7/22 * Last Modified: 1998/ 7/22
*======================================== *========================================

View File

@ -1,6 +1,6 @@
/*======================================== /*========================================
* sl.h: Text data of SL version 3.01 * sl.h: Text data of SL version 3.01
* Copyright 1993 Toyoda Masashi * Copyright 1993 Toyoda Masashi
* (toyoda@is.titech.ac.jp) * (toyoda@is.titech.ac.jp)
* Last Modified: 1992/12/23 * Last Modified: 1992/12/23
*======================================== *========================================

View File

@ -445,7 +445,7 @@ SWITCH_STANDARD_API(list_users_function)
} }
} }
} }
if (_domain) { if (_domain) {
tag_name = "domain"; tag_name = "domain";
key_name = "name"; key_name = "name";
@ -3147,7 +3147,7 @@ SWITCH_STANDARD_API(uuid_drop_dtmf)
if (argv[0]) { if (argv[0]) {
uuid = argv[0]; uuid = argv[0];
} }
if (argv[1]) { if (argv[1]) {
action = argv[1]; action = argv[1];
} }
@ -3191,15 +3191,15 @@ SWITCH_STANDARD_API(uuid_drop_dtmf)
switch_channel_set_variable(channel, "drop_dtmf", "false"); switch_channel_set_variable(channel, "drop_dtmf", "false");
} }
} }
is_on = switch_channel_test_flag(channel, CF_DROP_DTMF); is_on = switch_channel_test_flag(channel, CF_DROP_DTMF);
file = switch_channel_get_variable_dup(channel, "drop_dtmf_masking_file", SWITCH_FALSE, -1); file = switch_channel_get_variable_dup(channel, "drop_dtmf_masking_file", SWITCH_FALSE, -1);
digits = switch_channel_get_variable_dup(channel, "drop_dtmf_masking_digits", SWITCH_FALSE, -1); digits = switch_channel_get_variable_dup(channel, "drop_dtmf_masking_digits", SWITCH_FALSE, -1);
stream->write_function(stream, "+OK %s is %s DTMF. mask_file: %s mask_digits: %s\n", uuid, is_on ? "dropping" : "not dropping", stream->write_function(stream, "+OK %s is %s DTMF. mask_file: %s mask_digits: %s\n", uuid, is_on ? "dropping" : "not dropping",
file ? file : "NONE", file ? file : "NONE",
digits ? digits : "NONE"); digits ? digits : "NONE");
switch_core_session_rwunlock(tsession); switch_core_session_rwunlock(tsession);
} else { } else {
stream->write_function(stream, "-ERR No such channel %s!\n", uuid); stream->write_function(stream, "-ERR No such channel %s!\n", uuid);
@ -3308,7 +3308,7 @@ SWITCH_STANDARD_API(uuid_set_media_stats)
static void jsonify_stats(cJSON *json, const char *name, switch_rtp_stats_t *stats) static void jsonify_stats(cJSON *json, const char *name, switch_rtp_stats_t *stats)
{ {
cJSON *jstats = cJSON_CreateObject(); cJSON *jstats = cJSON_CreateObject();
cJSON_AddItemToObject(json, name, jstats); cJSON_AddItemToObject(json, name, jstats);
stats->inbound.std_deviation = sqrt(stats->inbound.variance); stats->inbound.std_deviation = sqrt(stats->inbound.variance);
@ -3345,7 +3345,7 @@ static void jsonify_stats(cJSON *json, const char *name, switch_rtp_stats_t *sta
add_stat(stats->rtcp.packet_count, "rtcp_packet_count"); add_stat(stats->rtcp.packet_count, "rtcp_packet_count");
add_stat(stats->rtcp.octet_count, "rtcp_octet_count"); add_stat(stats->rtcp.octet_count, "rtcp_octet_count");
} }
static switch_bool_t true_enough(cJSON *json) static switch_bool_t true_enough(cJSON *json)
@ -3367,37 +3367,37 @@ SWITCH_STANDARD_JSON_API(json_stats_function)
switch_core_session_t *tsession; switch_core_session_t *tsession;
reply = cJSON_CreateObject(); reply = cJSON_CreateObject();
*json_reply = reply; *json_reply = reply;
if (zstr(uuid)) { if (zstr(uuid)) {
cJSON_AddItemToObject(reply, "response", cJSON_CreateString("INVALID INPUT")); cJSON_AddItemToObject(reply, "response", cJSON_CreateString("INVALID INPUT"));
goto end; goto end;
} }
if ((tsession = switch_core_session_locate(uuid))) { if ((tsession = switch_core_session_locate(uuid))) {
cJSON *jevent; cJSON *jevent;
switch_rtp_stats_t *audio_stats = NULL, *video_stats = NULL; switch_rtp_stats_t *audio_stats = NULL, *video_stats = NULL;
switch_core_media_set_stats(tsession); switch_core_media_set_stats(tsession);
audio_stats = switch_core_media_get_stats(tsession, SWITCH_MEDIA_TYPE_AUDIO, switch_core_session_get_pool(tsession)); audio_stats = switch_core_media_get_stats(tsession, SWITCH_MEDIA_TYPE_AUDIO, switch_core_session_get_pool(tsession));
video_stats = switch_core_media_get_stats(tsession, SWITCH_MEDIA_TYPE_VIDEO, switch_core_session_get_pool(tsession)); video_stats = switch_core_media_get_stats(tsession, SWITCH_MEDIA_TYPE_VIDEO, switch_core_session_get_pool(tsession));
if (audio_stats) { if (audio_stats) {
jsonify_stats(reply, "audio", audio_stats); jsonify_stats(reply, "audio", audio_stats);
} }
if (video_stats) { if (video_stats) {
jsonify_stats(reply, "video", video_stats); jsonify_stats(reply, "video", video_stats);
} }
if (true_enough(cdata) && switch_ivr_generate_json_cdr(tsession, &jevent, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) { if (true_enough(cdata) && switch_ivr_generate_json_cdr(tsession, &jevent, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
cJSON_AddItemToObject(reply, "channelData", jevent); cJSON_AddItemToObject(reply, "channelData", jevent);
} }
switch_core_session_rwunlock(tsession); switch_core_session_rwunlock(tsession);
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
} else { } else {
cJSON_AddItemToObject(reply, "response", cJSON_CreateString("Session does not exist")); cJSON_AddItemToObject(reply, "response", cJSON_CreateString("Session does not exist"));
@ -4225,7 +4225,7 @@ SWITCH_STANDARD_API(uuid_video_bitrate_function)
msg.message_id = SWITCH_MESSAGE_INDICATE_BITRATE_REQ; msg.message_id = SWITCH_MESSAGE_INDICATE_BITRATE_REQ;
msg.numeric_arg = kps * 1024; msg.numeric_arg = kps * 1024;
msg.from = __FILE__; msg.from = __FILE__;
switch_core_session_receive_message(lsession, &msg); switch_core_session_receive_message(lsession, &msg);
switch_core_session_video_reinit(lsession); switch_core_session_video_reinit(lsession);
switch_channel_video_sync(switch_core_session_get_channel(lsession)); switch_channel_video_sync(switch_core_session_get_channel(lsession));
@ -4276,7 +4276,7 @@ SWITCH_STANDARD_API(uuid_codec_debug_function)
msg.numeric_arg = level; msg.numeric_arg = level;
msg.numeric_reply = type; msg.numeric_reply = type;
msg.from = __FILE__; msg.from = __FILE__;
switch_core_session_receive_message(lsession, &msg); switch_core_session_receive_message(lsession, &msg);
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
switch_core_session_rwunlock(lsession); switch_core_session_rwunlock(lsession);
@ -4321,7 +4321,7 @@ SWITCH_STANDARD_API(uuid_codec_param_function)
msg.string_array_arg[2] = argv[3]; msg.string_array_arg[2] = argv[3];
msg.string_array_arg[3] = argv[4]; msg.string_array_arg[3] = argv[4];
msg.from = __FILE__; msg.from = __FILE__;
switch_core_session_receive_message(lsession, &msg); switch_core_session_receive_message(lsession, &msg);
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
switch_core_session_rwunlock(lsession); switch_core_session_rwunlock(lsession);
@ -5918,7 +5918,7 @@ SWITCH_STANDARD_API(uuid_getvar_function)
char *ptr = NULL; char *ptr = NULL;
int idx = -1; int idx = -1;
char *vname = strdup(var_name); char *vname = strdup(var_name);
if ((ptr = strchr(vname, '[')) && strchr(ptr, ']')) { if ((ptr = strchr(vname, '[')) && strchr(ptr, ']')) {
*ptr++ = '\0'; *ptr++ = '\0';
idx = atoi(ptr); idx = atoi(ptr);
@ -5927,11 +5927,11 @@ SWITCH_STANDARD_API(uuid_getvar_function)
free(vname); free(vname);
} }
if (!var_value) { if (!var_value) {
var_value = switch_channel_get_variable(channel, var_name); var_value = switch_channel_get_variable(channel, var_name);
} }
if (var_value != NULL) { if (var_value != NULL) {
stream->write_function(stream, "%s", var_value); stream->write_function(stream, "%s", var_value);
} else { } else {
@ -6389,7 +6389,7 @@ SWITCH_STANDARD_API(quote_shell_arg_function)
} }
#define GETCPUTIME_SYNTAX "[reset]" #define GETCPUTIME_SYNTAX "[reset]"
SWITCH_STANDARD_API(getcputime_function) SWITCH_STANDARD_API(getcputime_function)
{ {
static int64_t reset_ums = 0, reset_kms = 0; // Last reset times in ms static int64_t reset_ums = 0, reset_kms = 0; // Last reset times in ms
switch_cputime t = { 0 }; switch_cputime t = { 0 };
@ -6885,14 +6885,14 @@ SWITCH_STANDARD_JSON_API(json_channel_data_function)
reply = cJSON_CreateObject(); reply = cJSON_CreateObject();
*json_reply = reply; *json_reply = reply;
if (zstr(uuid)) { if (zstr(uuid)) {
cJSON_AddItemToObject(reply, "response", cJSON_CreateString("INVALID INPUT")); cJSON_AddItemToObject(reply, "response", cJSON_CreateString("INVALID INPUT"));
goto end; goto end;
} }
if ((tsession = switch_core_session_locate(uuid))) { if ((tsession = switch_core_session_locate(uuid))) {
cJSON *jevent; cJSON *jevent;
@ -6901,7 +6901,7 @@ SWITCH_STANDARD_JSON_API(json_channel_data_function)
} }
switch_core_session_rwunlock(tsession); switch_core_session_rwunlock(tsession);
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
} else { } else {
cJSON_AddItemToObject(reply, "response", cJSON_CreateString("Session does not exist")); cJSON_AddItemToObject(reply, "response", cJSON_CreateString("Session does not exist"));
@ -6921,7 +6921,7 @@ SWITCH_STANDARD_JSON_API(json_execute_function)
switch_core_session_t *tsession; switch_core_session_t *tsession;
reply = cJSON_CreateObject(); reply = cJSON_CreateObject();
*json_reply = reply; *json_reply = reply;
if (!data) { if (!data) {
cJSON_AddItemToObject(reply, "response", cJSON_CreateString("INVALID INPUT")); cJSON_AddItemToObject(reply, "response", cJSON_CreateString("INVALID INPUT"));
@ -6938,7 +6938,7 @@ SWITCH_STANDARD_JSON_API(json_execute_function)
cJSON_AddItemToObject(reply, "response", cJSON_CreateString("INVALID INPUT")); cJSON_AddItemToObject(reply, "response", cJSON_CreateString("INVALID INPUT"));
goto end; goto end;
} }
if ((tsession = switch_core_session_locate(uuid))) { if ((tsession = switch_core_session_locate(uuid))) {
if (switch_true(edata)) { if (switch_true(edata)) {
cJSON *jevent = NULL; cJSON *jevent = NULL;
@ -6974,7 +6974,7 @@ SWITCH_STANDARD_API(event_channel_broadcast_api_function)
{ {
cJSON *jdata = NULL; cJSON *jdata = NULL;
const char *channel; const char *channel;
if (!cmd) { if (!cmd) {
stream->write_function(stream, "-ERR parsing channel\n", SWITCH_VA_NONE); stream->write_function(stream, "-ERR parsing channel\n", SWITCH_VA_NONE);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
@ -6999,7 +6999,7 @@ SWITCH_STANDARD_API(event_channel_broadcast_api_function)
} }
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
SWITCH_STANDARD_JSON_API(json_api_function) SWITCH_STANDARD_JSON_API(json_api_function)
@ -7024,7 +7024,7 @@ SWITCH_STANDARD_JSON_API(json_api_function)
reply = cJSON_CreateObject(); reply = cJSON_CreateObject();
SWITCH_STANDARD_STREAM(stream); SWITCH_STANDARD_STREAM(stream);
if (cmd && (status = switch_api_execute(cmd->valuestring, arg ? arg->valuestring : NULL, session, &stream)) == SWITCH_STATUS_SUCCESS) { if (cmd && (status = switch_api_execute(cmd->valuestring, arg ? arg->valuestring : NULL, session, &stream)) == SWITCH_STATUS_SUCCESS) {
cJSON_AddItemToObject(reply, "message", cJSON_CreateString((char *) stream.data)); cJSON_AddItemToObject(reply, "message", cJSON_CreateString((char *) stream.data));
} else { } else {
@ -7067,10 +7067,10 @@ SWITCH_STANDARD_JSON_API(json_status_function)
cJSON_AddItemToObject(o, "seconds", cJSON_CreateNumber(duration.sec)); cJSON_AddItemToObject(o, "seconds", cJSON_CreateNumber(duration.sec));
cJSON_AddItemToObject(o, "milliseconds", cJSON_CreateNumber(duration.ms)); cJSON_AddItemToObject(o, "milliseconds", cJSON_CreateNumber(duration.ms));
cJSON_AddItemToObject(o, "microseconds", cJSON_CreateNumber(duration.mms)); cJSON_AddItemToObject(o, "microseconds", cJSON_CreateNumber(duration.mms));
cJSON_AddItemToObject(reply, "uptime", o); cJSON_AddItemToObject(reply, "uptime", o);
cJSON_AddItemToObject(reply, "version", cJSON_CreateString(switch_version_full_human())); cJSON_AddItemToObject(reply, "version", cJSON_CreateString(switch_version_full_human()));
o = cJSON_CreateObject(); o = cJSON_CreateObject();
cJSON_AddItemToObject(reply, "sessions", o); cJSON_AddItemToObject(reply, "sessions", o);
@ -7091,7 +7091,7 @@ SWITCH_STANDARD_JSON_API(json_status_function)
cJSON_AddItemToObject(oo, "max", cJSON_CreateNumber(sps)); cJSON_AddItemToObject(oo, "max", cJSON_CreateNumber(sps));
cJSON_AddItemToObject(oo, "peak", cJSON_CreateNumber(max_sps)); cJSON_AddItemToObject(oo, "peak", cJSON_CreateNumber(max_sps));
cJSON_AddItemToObject(oo, "peak5Min", cJSON_CreateNumber(max_sps_fivemin)); cJSON_AddItemToObject(oo, "peak5Min", cJSON_CreateNumber(max_sps_fivemin));
o = cJSON_CreateObject(); o = cJSON_CreateObject();
cJSON_AddItemToObject(reply, "idleCPU", o); cJSON_AddItemToObject(reply, "idleCPU", o);
@ -7099,7 +7099,7 @@ SWITCH_STANDARD_JSON_API(json_status_function)
cJSON_AddItemToObject(o, "used", cJSON_CreateNumber(switch_core_min_idle_cpu(-1.0))); cJSON_AddItemToObject(o, "used", cJSON_CreateNumber(switch_core_min_idle_cpu(-1.0)));
cJSON_AddItemToObject(o, "allowed", cJSON_CreateNumber(switch_core_idle_cpu())); cJSON_AddItemToObject(o, "allowed", cJSON_CreateNumber(switch_core_idle_cpu()));
if (switch_core_get_stacksizes(&cur, &max) == SWITCH_STATUS_SUCCESS) { if (switch_core_get_stacksizes(&cur, &max) == SWITCH_STATUS_SUCCESS) {
o = cJSON_CreateObject(); o = cJSON_CreateObject();
cJSON_AddItemToObject(reply, "stackSizeKB", o); cJSON_AddItemToObject(reply, "stackSizeKB", o);
@ -7107,10 +7107,10 @@ SWITCH_STANDARD_JSON_API(json_status_function)
cJSON_AddItemToObject(o, "current", cJSON_CreateNumber((double)(cur / 1024))); cJSON_AddItemToObject(o, "current", cJSON_CreateNumber((double)(cur / 1024)));
cJSON_AddItemToObject(o, "max", cJSON_CreateNumber((double)(max / 1024))); cJSON_AddItemToObject(o, "max", cJSON_CreateNumber((double)(max / 1024)));
} }
*json_reply = reply; *json_reply = reply;
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -7119,7 +7119,7 @@ SWITCH_STANDARD_API(json_function)
cJSON *jcmd = NULL, *format = NULL; cJSON *jcmd = NULL, *format = NULL;
const char *message = ""; const char *message = "";
char *response = NULL; char *response = NULL;
if (zstr(cmd)) { if (zstr(cmd)) {
message = "No JSON supplied."; message = "No JSON supplied.";
goto err; goto err;
@ -7142,13 +7142,13 @@ SWITCH_STANDARD_API(json_function)
} else { } else {
response = cJSON_PrintUnformatted(jcmd); response = cJSON_PrintUnformatted(jcmd);
} }
stream->write_function(stream, "%s\n", switch_str_nil(response)); stream->write_function(stream, "%s\n", switch_str_nil(response));
switch_safe_free(response); switch_safe_free(response);
cJSON_Delete(jcmd); cJSON_Delete(jcmd);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
err: err:

View File

@ -1,4 +1,4 @@
<!-- http://wiki.freeswitch.org/wiki/Mod_conference --> <!-- http://wiki.freeswitch.org/wiki/Mod_conference -->
<!-- None of these paths are real if you want any of these options you need to really set them up --> <!-- None of these paths are real if you want any of these options you need to really set them up -->
<configuration name="conference.conf" description="Audio Conference"> <configuration name="conference.conf" description="Audio Conference">
<!-- Advertise certain presence on startup . --> <!-- Advertise certain presence on startup . -->
@ -6,8 +6,8 @@
<room name="3001@$${domain}" status="FreeSWITCH"/> <room name="3001@$${domain}" status="FreeSWITCH"/>
</advertise> </advertise>
<!-- These are the default keys that map when you do not specify a caller control group --> <!-- These are the default keys that map when you do not specify a caller control group -->
<!-- Note: none and default are reserved names for group names. Disabled if dist-dtmf member flag is set. --> <!-- Note: none and default are reserved names for group names. Disabled if dist-dtmf member flag is set. -->
<caller-controls> <caller-controls>
<group name="default"> <group name="default">
<control action="mute" digits="0"/> <control action="mute" digits="0"/>
@ -29,19 +29,19 @@
<profiles> <profiles>
<!--If no profile is specified it will default to "default"--> <!--If no profile is specified it will default to "default"-->
<profile name="default"> <profile name="default">
<!-- Directory to drop CDR's <!-- Directory to drop CDR's
'auto' means $PREFIX/logs/conference_cdr/<confernece_uuid>.cdr.xml 'auto' means $PREFIX/logs/conference_cdr/<confernece_uuid>.cdr.xml
a non-absolute path means $PREFIX/logs/<value>/<confernece_uuid>.cdr.xml a non-absolute path means $PREFIX/logs/<value>/<confernece_uuid>.cdr.xml
absolute path means <value>/<confernece_uuid>.cdr.xml absolute path means <value>/<confernece_uuid>.cdr.xml
--> -->
<!-- <param name="cdr-log-dir" value="auto"/> --> <!-- <param name="cdr-log-dir" value="auto"/> -->
<!-- How to create a CDR event <!-- How to create a CDR event
'content' means event body will contain CDR as XML 'content' means event body will contain CDR as XML
'file' means 'CDR-Path' header will contain a path to file created in 'cdr-log-dir' 'file' means 'CDR-Path' header will contain a path to file created in 'cdr-log-dir'
'none' for no event 'none' for no event
--> -->
<!-- <param name="cdr-event-mode" value="content"/> --> <!-- <param name="cdr-event-mode" value="content"/> -->
<!-- Domain (for presence) --> <!-- Domain (for presence) -->
<param name="domain" value="$${domain}"/> <param name="domain" value="$${domain}"/>
<!-- Sample Rate--> <!-- Sample Rate-->

View File

@ -523,7 +523,7 @@ switch_status_t conference_api_sub_unvmute(conference_member_t *member, switch_s
if (switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY) { if (switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY) {
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
if ((layer = conference_video_get_layer_locked(member))) { if ((layer = conference_video_get_layer_locked(member))) {
layer->clear = 1; layer->clear = 1;
conference_video_release_layer(&layer); conference_video_release_layer(&layer);
@ -1277,7 +1277,7 @@ switch_status_t conference_api_sub_vid_layout(conference_obj_t *conference, swit
} else { } else {
group_name = argv[3]; group_name = argv[3];
} }
if (!group_name) { if (!group_name) {
stream->write_function(stream, "Group name not specified.\n"); stream->write_function(stream, "Group name not specified.\n");
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
@ -1294,7 +1294,7 @@ switch_status_t conference_api_sub_vid_layout(conference_obj_t *conference, swit
} }
stream->write_function(stream, "Change to layout group [%s]\n", group_name); stream->write_function(stream, "Change to layout group [%s]\n", group_name);
if (argv[xx]) { if (argv[xx]) {
if ((idx = atoi(argv[xx])) > 0) { if ((idx = atoi(argv[xx])) > 0) {
idx--; idx--;
@ -1638,7 +1638,7 @@ switch_status_t conference_api_sub_vid_logo_img(conference_member_t *member, swi
} }
layer = conference_video_get_layer_locked(member); layer = conference_video_get_layer_locked(member);
if (!layer) { if (!layer) {
goto end; goto end;
} }
@ -2545,7 +2545,7 @@ switch_status_t conference_api_sub_record(conference_obj_t *conference, switch_s
} }
if (id == 0 && conference->canvases[0]) id = 1; if (id == 0 && conference->canvases[0]) id = 1;
if (id > conference->canvas_count) { if (id > conference->canvas_count) {
id = 1; id = 1;
} }
@ -3001,7 +3001,7 @@ switch_status_t conference_api_dispatch(conference_obj_t *conference, switch_str
} }
member = conference_member_get_by_var(conference, var, val); member = conference_member_get_by_var(conference, var, val);
if (member != NULL) { if (member != NULL) {
pfn(member, stream, argv[argn + 2]); pfn(member, stream, argv[argn + 2]);
switch_thread_rwlock_unlock(member->rwlock); switch_thread_rwlock_unlock(member->rwlock);

View File

@ -45,7 +45,7 @@
static cJSON *get_canvas_info(mcu_canvas_t *canvas) static cJSON *get_canvas_info(mcu_canvas_t *canvas)
{ {
cJSON *obj = cJSON_CreateObject(); cJSON *obj = cJSON_CreateObject();
cJSON_AddItemToObject(obj, "canvasID", cJSON_CreateNumber(canvas->canvas_id)); cJSON_AddItemToObject(obj, "canvasID", cJSON_CreateNumber(canvas->canvas_id));
cJSON_AddItemToObject(obj, "totalLayers", cJSON_CreateNumber(canvas->total_layers)); cJSON_AddItemToObject(obj, "totalLayers", cJSON_CreateNumber(canvas->total_layers));
cJSON_AddItemToObject(obj, "layersUsed", cJSON_CreateNumber(canvas->layers_used)); cJSON_AddItemToObject(obj, "layersUsed", cJSON_CreateNumber(canvas->layers_used));
@ -53,7 +53,7 @@ static cJSON *get_canvas_info(mcu_canvas_t *canvas)
if (canvas->vlayout) { if (canvas->vlayout) {
cJSON_AddItemToObject(obj, "layoutName", cJSON_CreateString(canvas->vlayout->name)); cJSON_AddItemToObject(obj, "layoutName", cJSON_CreateString(canvas->vlayout->name));
} }
return obj; return obj;
} }
@ -188,24 +188,24 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
} }
if (member_id < 0) member_id = 0; if (member_id < 0) member_id = 0;
} }
if (member_id > 0) { if (member_id > 0) {
conference_member_t *member; conference_member_t *member;
if ((member = conference_member_get(conference, member_id))) { if ((member = conference_member_get(conference, member_id))) {
mcu_canvas_t *canvas; mcu_canvas_t *canvas;
if ((canvas = conference_video_get_canvas_locked(member))) { if ((canvas = conference_video_get_canvas_locked(member))) {
cJSON *obj; cJSON *obj;
if ((obj = get_canvas_info(canvas))) { if ((obj = get_canvas_info(canvas))) {
cJSON_AddItemToObject(obj, "layerID", cJSON_CreateNumber(member->video_layer_id)); cJSON_AddItemToObject(obj, "layerID", cJSON_CreateNumber(member->video_layer_id));
cJSON_AddItemToArray(array, obj); cJSON_AddItemToArray(array, obj);
} }
conference_video_release_canvas(&canvas); conference_video_release_canvas(&canvas);
} }
switch_thread_rwlock_unlock(member->rwlock); switch_thread_rwlock_unlock(member->rwlock);
} }
@ -225,12 +225,12 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
switch_mutex_unlock(conference->canvas_mutex); switch_mutex_unlock(conference->canvas_mutex);
} }
switch_thread_rwlock_unlock(conference->rwlock); switch_thread_rwlock_unlock(conference->rwlock);
} }
addobj = array; addobj = array;
} else if (!strcasecmp(action, "list-videoLayouts")) { } else if (!strcasecmp(action, "list-videoLayouts")) {
switch_hash_index_t *hi; switch_hash_index_t *hi;
void *val; void *val;
@ -245,15 +245,15 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
cJSON *obj = cJSON_CreateObject(); cJSON *obj = cJSON_CreateObject();
cJSON *resarray = cJSON_CreateArray(); cJSON *resarray = cJSON_CreateArray();
int i; int i;
switch_core_hash_this(hi, &vvar, NULL, &val); switch_core_hash_this(hi, &vvar, NULL, &val);
vlayout = (video_layout_t *)val; vlayout = (video_layout_t *)val;
for (i = 0; i < vlayout->layers; i++) { for (i = 0; i < vlayout->layers; i++) {
if (vlayout->images[i].res_id) { if (vlayout->images[i].res_id) {
cJSON_AddItemToArray(resarray, cJSON_CreateString((char *)vlayout->images[i].res_id)); cJSON_AddItemToArray(resarray, cJSON_CreateString((char *)vlayout->images[i].res_id));
} }
} }
cJSON_AddItemToObject(obj, "type", cJSON_CreateString("layout")); cJSON_AddItemToObject(obj, "type", cJSON_CreateString("layout"));
cJSON_AddItemToObject(obj, "name", cJSON_CreateString((char *)vvar)); cJSON_AddItemToObject(obj, "name", cJSON_CreateString((char *)vvar));
cJSON_AddItemToObject(obj, "resIDS", resarray); cJSON_AddItemToObject(obj, "resIDS", resarray);
@ -274,11 +274,11 @@ void conference_event_mod_channel_handler(const char *event_channel, cJSON *json
lg = (layout_group_t *) val; lg = (layout_group_t *) val;
name = switch_mprintf("group:%s", (char *)vvar); name = switch_mprintf("group:%s", (char *)vvar);
for (vlnode = lg->layouts; vlnode; vlnode = vlnode->next) { for (vlnode = lg->layouts; vlnode; vlnode = vlnode->next) {
cJSON_AddItemToArray(grouparray, cJSON_CreateString(vlnode->vlayout->name)); cJSON_AddItemToArray(grouparray, cJSON_CreateString(vlnode->vlayout->name));
} }
cJSON_AddItemToObject(obj, "type", cJSON_CreateString("layoutGroup")); cJSON_AddItemToObject(obj, "type", cJSON_CreateString("layoutGroup"));
cJSON_AddItemToObject(obj, "name", cJSON_CreateString(name)); cJSON_AddItemToObject(obj, "name", cJSON_CreateString(name));
cJSON_AddItemToObject(obj, "groupLayouts", grouparray); cJSON_AddItemToObject(obj, "groupLayouts", grouparray);

View File

@ -277,7 +277,7 @@ switch_status_t conference_file_play(conference_obj_t *conference, char *file, u
const char *canvasstr = switch_event_get_header(fnode->fh.params, "canvas"); const char *canvasstr = switch_event_get_header(fnode->fh.params, "canvas");
const char *loopsstr = switch_event_get_header(fnode->fh.params, "loops"); const char *loopsstr = switch_event_get_header(fnode->fh.params, "loops");
int canvas_id = -1; int canvas_id = -1;
if (loopsstr) { if (loopsstr) {
fnode->loops = atoi(loopsstr); fnode->loops = atoi(loopsstr);

View File

@ -800,8 +800,8 @@ void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *ob
} }
member->loop_loop = 1; member->loop_loop = 1;
goto do_continue; goto do_continue;
} }
if (switch_test_flag(read_frame, SFF_CNG)) { if (switch_test_flag(read_frame, SFF_CNG)) {
@ -1003,7 +1003,7 @@ void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *ob
} }
} }
} }
/* skip frames that are not actual media or when we are muted or silent */ /* skip frames that are not actual media or when we are muted or silent */
if ((conference_utils_member_test_flag(member, MFLAG_TALKING) || member->energy_level == 0 || conference_utils_test_flag(member->conference, CFLAG_AUDIO_ALWAYS)) if ((conference_utils_member_test_flag(member, MFLAG_TALKING) || member->energy_level == 0 || conference_utils_test_flag(member->conference, CFLAG_AUDIO_ALWAYS))
&& conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK) && !conference_utils_test_flag(member->conference, CFLAG_WAIT_MOD) && conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK) && !conference_utils_test_flag(member->conference, CFLAG_WAIT_MOD)

View File

@ -152,7 +152,7 @@ void conference_member_update_status_field(conference_member_t *member)
if (!member->conference->la || !member->json || !member->status_field || conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) { if (!member->conference->la || !member->json || !member->status_field || conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
return; return;
} }
switch_live_array_lock(member->conference->la); switch_live_array_lock(member->conference->la);
if (!conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) { if (!conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) {
@ -198,7 +198,7 @@ void conference_member_update_status_field(conference_member_t *member)
if (switch_channel_test_flag(member->channel, CF_VIDEO) || member->avatar_png_img) { if (switch_channel_test_flag(member->channel, CF_VIDEO) || member->avatar_png_img) {
video = cJSON_CreateObject(); video = cJSON_CreateObject();
if (conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) && if (conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) &&
member->video_layer_id > -1 && switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY) { member->video_layer_id > -1 && switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY) {
cJSON_AddItemToObject(video, "visible", cJSON_CreateTrue()); cJSON_AddItemToObject(video, "visible", cJSON_CreateTrue());
} else { } else {
@ -423,7 +423,7 @@ conference_member_t *conference_member_get_by_var(conference_obj_t *conference,
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (member = conference->members; member; member = member->next) { for (member = conference->members; member; member = member->next) {
const char *check_var; const char *check_var;
if (conference_utils_member_test_flag(member, MFLAG_NOCHANNEL)) { if (conference_utils_member_test_flag(member, MFLAG_NOCHANNEL)) {
continue; continue;
} }
@ -692,7 +692,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
switch_mutex_lock(member->audio_out_mutex); switch_mutex_lock(member->audio_out_mutex);
lock_member(member); lock_member(member);
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
if (member->rec) { if (member->rec) {
conference->recording_members++; conference->recording_members++;
} }
@ -766,7 +766,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
member->energy_level = id; member->energy_level = id;
} }
} }
if ((var = switch_channel_get_variable_dup(member->channel, "video_initial_canvas", SWITCH_FALSE, -1))) { if ((var = switch_channel_get_variable_dup(member->channel, "video_initial_canvas", SWITCH_FALSE, -1))) {
uint32_t id = atoi(var) - 1; uint32_t id = atoi(var) - 1;
if (id < conference->canvas_count) { if (id < conference->canvas_count) {
@ -777,16 +777,16 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
if ((var = switch_channel_get_variable_dup(member->channel, "video_initial_watching_canvas", SWITCH_FALSE, -1))) { if ((var = switch_channel_get_variable_dup(member->channel, "video_initial_watching_canvas", SWITCH_FALSE, -1))) {
uint32_t id = atoi(var) - 1; uint32_t id = atoi(var) - 1;
if (id == 0) { if (id == 0) {
id = conference->canvas_count; id = conference->canvas_count;
} }
if (id <= conference->canvas_count && conference->canvases[id]) { if (id <= conference->canvas_count && conference->canvases[id]) {
member->watching_canvas_id = id; member->watching_canvas_id = id;
} }
} }
conference_video_reset_member_codec_index(member); conference_video_reset_member_codec_index(member);
if (has_video) { if (has_video) {
@ -806,7 +806,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
if ((var = switch_channel_get_variable(member->channel, "rtp_video_max_bandwidth_in"))) { if ((var = switch_channel_get_variable(member->channel, "rtp_video_max_bandwidth_in"))) {
member->max_bw_in = switch_parse_bandwidth_string(var); member->max_bw_in = switch_parse_bandwidth_string(var);
} }
if ((var = switch_channel_get_variable(member->channel, "rtp_video_max_bandwidth_out"))) { if ((var = switch_channel_get_variable(member->channel, "rtp_video_max_bandwidth_out"))) {
member->max_bw_out = switch_parse_bandwidth_string(var); member->max_bw_out = switch_parse_bandwidth_string(var);
@ -816,7 +816,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
} }
} }
} }
switch_channel_set_variable_printf(channel, "conference_member_id", "%d", member->id); switch_channel_set_variable_printf(channel, "conference_member_id", "%d", member->id);
switch_channel_set_variable_printf(channel, "conference_moderator", "%s", conference_utils_member_test_flag(member, MFLAG_MOD) ? "true" : "false"); switch_channel_set_variable_printf(channel, "conference_moderator", "%s", conference_utils_member_test_flag(member, MFLAG_MOD) ? "true" : "false");
switch_channel_set_variable_printf(channel, "conference_ghost", "%s", conference_utils_member_test_flag(member, MFLAG_GHOST) ? "true" : "false"); switch_channel_set_variable_printf(channel, "conference_ghost", "%s", conference_utils_member_test_flag(member, MFLAG_GHOST) ? "true" : "false");
@ -958,7 +958,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
cJSON *dvars; cJSON *dvars;
switch_event_t *var_event; switch_event_t *var_event;
switch_event_header_t *hi; switch_event_header_t *hi;
member->json = cJSON_CreateArray(); member->json = cJSON_CreateArray();
cJSON_AddItemToArray(member->json, cJSON_CreateStringPrintf("%0.4d", member->id)); cJSON_AddItemToArray(member->json, cJSON_CreateStringPrintf("%0.4d", member->id));
cJSON_AddItemToArray(member->json, cJSON_CreateString(switch_channel_get_variable(member->channel, "caller_id_number"))); cJSON_AddItemToArray(member->json, cJSON_CreateString(switch_channel_get_variable(member->channel, "caller_id_number")));
@ -979,7 +979,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
for (hi = var_event->headers; hi; hi = hi->next) { for (hi = var_event->headers; hi; hi = hi->next) {
if (!strncasecmp(hi->name, "verto_dvar_", 11)) { if (!strncasecmp(hi->name, "verto_dvar_", 11)) {
char *var = hi->name + 11; char *var = hi->name + 11;
if (var) { if (var) {
cJSON_AddItemToObject(dvars, var, cJSON_CreateString(hi->value)); cJSON_AddItemToObject(dvars, var, cJSON_CreateString(hi->value));
} }
@ -1147,7 +1147,7 @@ switch_status_t conference_member_del(conference_obj_t *conference, conference_m
lock_member(member); lock_member(member);
conference_utils_member_clear_flag(member, MFLAG_INTREE); conference_utils_member_clear_flag(member, MFLAG_INTREE);
switch_safe_free(member->text_framedata); switch_safe_free(member->text_framedata);
member->text_framesize = 0; member->text_framesize = 0;
if (member->text_buffer) { if (member->text_buffer) {

View File

@ -192,7 +192,7 @@ void *SWITCH_THREAD_FUNC conference_record_thread_run(switch_thread_t *thread, v
member->frame_size = SWITCH_RECOMMENDED_BUFFER_SIZE; member->frame_size = SWITCH_RECOMMENDED_BUFFER_SIZE;
member->frame = switch_core_alloc(member->pool, member->frame_size); member->frame = switch_core_alloc(member->pool, member->frame_size);
member->mux_frame = switch_core_alloc(member->pool, member->frame_size); member->mux_frame = switch_core_alloc(member->pool, member->frame_size);
if (conference->canvases[0]) { if (conference->canvases[0]) {
member->canvas_id = rec->canvas_id; member->canvas_id = rec->canvas_id;
canvas = conference->canvases[member->canvas_id]; canvas = conference->canvases[member->canvas_id];

View File

@ -113,7 +113,7 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
const char *val = NULL, *name = NULL, *bgimg = NULL; const char *val = NULL, *name = NULL, *bgimg = NULL;
switch_bool_t auto_3d = SWITCH_FALSE; switch_bool_t auto_3d = SWITCH_FALSE;
int border = 0; int border = 0;
if ((val = switch_xml_attr(x_layout, "name"))) { if ((val = switch_xml_attr(x_layout, "name"))) {
name = val; name = val;
} }
@ -126,7 +126,7 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
auto_3d = switch_true(switch_xml_attr(x_layout, "auto-3d-position")); auto_3d = switch_true(switch_xml_attr(x_layout, "auto-3d-position"));
bgimg = switch_xml_attr(x_layout, "bgimg"); bgimg = switch_xml_attr(x_layout, "bgimg");
if ((val = switch_xml_attr(x_layout, "border"))) { if ((val = switch_xml_attr(x_layout, "border"))) {
border = atoi(val); border = atoi(val);
if (border < 0) border = 0; if (border < 0) border = 0;
@ -147,7 +147,7 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
if ((val = switch_xml_attr(x_image, "x"))) { if ((val = switch_xml_attr(x_image, "x"))) {
x = atoi(val); x = atoi(val);
} }
if ((val = switch_xml_attr(x_image, "y"))) { if ((val = switch_xml_attr(x_image, "y"))) {
y = atoi(val); y = atoi(val);
} }
@ -171,7 +171,7 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
if ((val = switch_xml_attr(x_image, "floor-only"))) { if ((val = switch_xml_attr(x_image, "floor-only"))) {
flooronly = floor = switch_true(val); flooronly = floor = switch_true(val);
} }
if ((val = switch_xml_attr(x_image, "file-only"))) { if ((val = switch_xml_attr(x_image, "file-only"))) {
fileonly = switch_true(val); fileonly = switch_true(val);
} }
@ -187,7 +187,7 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
if ((val = switch_xml_attr(x_image, "audio-position"))) { if ((val = switch_xml_attr(x_image, "audio-position"))) {
audio_position = val; audio_position = val;
} }
if ((val = switch_xml_attr(x_image, "border"))) { if ((val = switch_xml_attr(x_image, "border"))) {
border = atoi(val); border = atoi(val);
@ -203,9 +203,9 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
if (hscale == -1) { if (hscale == -1) {
hscale = scale; hscale = scale;
} }
if (!border) border = conference->video_border_size; if (!border) border = conference->video_border_size;
if (fileonly) { if (fileonly) {
floor = flooronly = 0; floor = flooronly = 0;
} }
@ -220,8 +220,8 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
vlayout->images[vlayout->layers].flooronly = flooronly; vlayout->images[vlayout->layers].flooronly = flooronly;
vlayout->images[vlayout->layers].fileonly = fileonly; vlayout->images[vlayout->layers].fileonly = fileonly;
vlayout->images[vlayout->layers].overlap = overlap; vlayout->images[vlayout->layers].overlap = overlap;
if (res_id) { if (res_id) {
vlayout->images[vlayout->layers].res_id = switch_core_strdup(conference->pool, res_id); vlayout->images[vlayout->layers].res_id = switch_core_strdup(conference->pool, res_id);
} }
@ -256,7 +256,7 @@ void conference_video_parse_layouts(conference_obj_t *conference, int WIDTH, int
vlayout->images[vlayout->layers].audio_position = switch_core_strdup(conference->pool, audio_position); vlayout->images[vlayout->layers].audio_position = switch_core_strdup(conference->pool, audio_position);
} }
} }
vlayout->layers++; vlayout->layers++;
} }
@ -341,7 +341,7 @@ void conference_video_clear_layer(mcu_layer_t *layer)
layer->banner_patched = 0; layer->banner_patched = 0;
layer->refresh = 1; layer->refresh = 1;
} }
void conference_video_reset_layer(mcu_layer_t *layer) void conference_video_reset_layer(mcu_layer_t *layer)
@ -421,7 +421,7 @@ void conference_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg,
layer->bug_frame.img = NULL; layer->bug_frame.img = NULL;
switch_thread_rwlock_unlock(layer->member->rwlock); switch_thread_rwlock_unlock(layer->member->rwlock);
} }
layer->bugged = 0; layer->bugged = 0;
} }
@ -538,7 +538,7 @@ void conference_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg,
if (!layer->img) { if (!layer->img) {
layer->img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, img_w, img_h, 1); layer->img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, img_w, img_h, 1);
} }
if (layer->banner_img && !layer->banner_patched) { if (layer->banner_img && !layer->banner_patched) {
switch_img_fill(layer->canvas->img, layer->x_pos + layer->geometry.border, layer->y_pos + layer->geometry.border, layer->screen_w, layer->screen_h, &layer->canvas->letterbox_bgcolor); switch_img_fill(layer->canvas->img, layer->x_pos + layer->geometry.border, layer->y_pos + layer->geometry.border, layer->screen_w, layer->screen_h, &layer->canvas->letterbox_bgcolor);
switch_img_fit(&layer->banner_img, layer->screen_w, layer->screen_h, SWITCH_FIT_SIZE); switch_img_fit(&layer->banner_img, layer->screen_w, layer->screen_h, SWITCH_FIT_SIZE);
@ -556,13 +556,13 @@ void conference_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg,
if (layer->geometry.border) { if (layer->geometry.border) {
switch_img_fill(IMG, x_pos, y_pos, img_w, img_h, &layer->canvas->border_color); switch_img_fill(IMG, x_pos, y_pos, img_w, img_h, &layer->canvas->border_color);
} }
img_w -= (layer->geometry.border * 2); img_w -= (layer->geometry.border * 2);
img_h -= (layer->geometry.border * 2); img_h -= (layer->geometry.border * 2);
switch_img_scale(img, &layer->img, img_w, img_h); switch_img_scale(img, &layer->img, img_w, img_h);
if (layer->img) { if (layer->img) {
switch_img_patch(IMG, layer->img, x_pos + layer->geometry.border, y_pos + layer->geometry.border); switch_img_patch(IMG, layer->img, x_pos + layer->geometry.border, y_pos + layer->geometry.border);
} }
@ -586,7 +586,7 @@ void conference_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg,
} }
} }
layer->last_img_addr = img_addr; layer->last_img_addr = img_addr;
} else { } else {
@ -644,7 +644,7 @@ mcu_layer_t *conference_video_get_layer_locked(conference_member_t *member)
conference_video_release_canvas(&canvas); conference_video_release_canvas(&canvas);
} }
} }
return layer; return layer;
} }
@ -660,7 +660,7 @@ void conference_video_release_layer(mcu_layer_t **layer)
switch_mutex_unlock(canvas->mutex); switch_mutex_unlock(canvas->mutex);
conference_video_release_canvas(&canvas); conference_video_release_canvas(&canvas);
*layer = NULL; *layer = NULL;
} }
@ -686,7 +686,7 @@ void conference_video_release_canvas(mcu_canvas_t **canvasP)
mcu_canvas_t *canvas = NULL; mcu_canvas_t *canvas = NULL;
switch_assert(canvasP); switch_assert(canvasP);
canvas = *canvasP; canvas = *canvasP;
if (!canvas) return; if (!canvas) return;
@ -708,7 +708,7 @@ void conference_video_detach_video_layer(conference_member_t *member)
mcu_canvas_t *canvas = NULL; mcu_canvas_t *canvas = NULL;
if (member->canvas_id < 0) return; if (member->canvas_id < 0) return;
if (!(canvas = conference_video_get_canvas_locked(member))) { if (!(canvas = conference_video_get_canvas_locked(member))) {
return; return;
} }
@ -718,7 +718,7 @@ void conference_video_detach_video_layer(conference_member_t *member)
if (member->video_layer_id < 0) { if (member->video_layer_id < 0) {
goto end; goto end;
} }
layer = &canvas->layers[member->video_layer_id]; layer = &canvas->layers[member->video_layer_id];
if (layer->geometry.audio_position) { if (layer->geometry.audio_position) {
@ -745,7 +745,7 @@ void conference_video_detach_video_layer(conference_member_t *member)
if (conference_utils_test_flag(member->conference, CFLAG_JSON_STATUS)) { if (conference_utils_test_flag(member->conference, CFLAG_JSON_STATUS)) {
conference_member_update_status_field(member); conference_member_update_status_field(member);
} }
if (canvas->bgimg) { if (canvas->bgimg) {
conference_video_set_canvas_bgimg(canvas, NULL); conference_video_set_canvas_bgimg(canvas, NULL);
} }
@ -754,7 +754,7 @@ void conference_video_detach_video_layer(conference_member_t *member)
switch_mutex_unlock(canvas->mutex); switch_mutex_unlock(canvas->mutex);
conference_video_release_canvas(&canvas); conference_video_release_canvas(&canvas);
} }
@ -1125,7 +1125,7 @@ void conference_video_init_canvas_layers(conference_obj_t *conference, mcu_canva
layer->idx = i; layer->idx = i;
layer->refresh = 1; layer->refresh = 1;
layer->screen_w = (uint32_t)(canvas->img->d_w * layer->geometry.scale / VIDEO_LAYOUT_SCALE); layer->screen_w = (uint32_t)(canvas->img->d_w * layer->geometry.scale / VIDEO_LAYOUT_SCALE);
layer->screen_h = (uint32_t)(canvas->img->d_h * layer->geometry.hscale / VIDEO_LAYOUT_SCALE); layer->screen_h = (uint32_t)(canvas->img->d_h * layer->geometry.hscale / VIDEO_LAYOUT_SCALE);
@ -1177,7 +1177,7 @@ void conference_video_init_canvas_layers(conference_obj_t *conference, mcu_canva
if (conference->video_canvas_bgimg && !vlayout->bgimg) { if (conference->video_canvas_bgimg && !vlayout->bgimg) {
conference_video_set_canvas_bgimg(canvas, conference->video_canvas_bgimg); conference_video_set_canvas_bgimg(canvas, conference->video_canvas_bgimg);
} }
switch_mutex_unlock(canvas->mutex); switch_mutex_unlock(canvas->mutex);
switch_thread_rwlock_unlock(canvas->video_rwlock); switch_thread_rwlock_unlock(canvas->video_rwlock);
@ -1196,7 +1196,7 @@ switch_status_t conference_video_set_canvas_bgimg(mcu_canvas_t *canvas, const ch
} else { } else {
scaled = 1; scaled = 1;
} }
if (!canvas->bgimg) { if (!canvas->bgimg) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot open image for bgimg\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot open image for bgimg\n");
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
@ -1434,7 +1434,7 @@ video_layout_t *conference_video_find_best_layout(conference_obj_t *conference,
for (vlnode = lg->layouts; vlnode; vlnode = vlnode->next) { for (vlnode = lg->layouts; vlnode; vlnode = vlnode->next) {
int x, file_layers = 0, member_count = (int)count - file_count, total = vlnode->vlayout->layers; int x, file_layers = 0, member_count = (int)count - file_count, total = vlnode->vlayout->layers;
for (x = total; x >= 0; x--) { for (x = total; x >= 0; x--) {
if (vlnode->vlayout->images[x].fileonly) { if (vlnode->vlayout->images[x].fileonly) {
file_layers++; file_layers++;
@ -1462,7 +1462,7 @@ video_layout_t *conference_video_get_layout(conference_obj_t *conference, const
} else { } else {
vlayout = switch_core_hash_find(conference->layout_hash, video_layout_name); vlayout = switch_core_hash_find(conference->layout_hash, video_layout_name);
} }
return vlayout; return vlayout;
} }
@ -1473,9 +1473,9 @@ void conference_video_vmute_snap(conference_member_t *member, switch_bool_t clea
if (member->canvas_id > -1 && member->video_layer_id > -1) { if (member->canvas_id > -1 && member->video_layer_id > -1) {
mcu_layer_t *layer = NULL; mcu_layer_t *layer = NULL;
mcu_canvas_t *canvas = NULL; mcu_canvas_t *canvas = NULL;
if ((canvas = conference_video_get_canvas_locked(member))) { if ((canvas = conference_video_get_canvas_locked(member))) {
switch_mutex_lock(canvas->mutex); switch_mutex_lock(canvas->mutex);
layer = &canvas->layers[member->video_layer_id]; layer = &canvas->layers[member->video_layer_id];
switch_img_free(&layer->mute_img); switch_img_free(&layer->mute_img);
@ -1522,7 +1522,7 @@ void conference_video_canvas_set_fnode_layer(mcu_canvas_t *canvas, conference_fi
if (canvas->layout_floor_id > -1) { if (canvas->layout_floor_id > -1) {
idx = canvas->layout_floor_id; idx = canvas->layout_floor_id;
xlayer = &canvas->layers[idx]; xlayer = &canvas->layers[idx];
if (xlayer->fnode && xlayer->fnode != fnode) { if (xlayer->fnode && xlayer->fnode != fnode) {
idx = -1; idx = -1;
} }
@ -1615,7 +1615,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_write_thread_run(switch_thread_
} else { } else {
pop_status = switch_frame_buffer_pop(member->fb, &pop); pop_status = switch_frame_buffer_pop(member->fb, &pop);
} }
if (pop_status == SWITCH_STATUS_SUCCESS) { if (pop_status == SWITCH_STATUS_SUCCESS) {
mcu_layer_t *layer = NULL; mcu_layer_t *layer = NULL;
mcu_canvas_t *canvas = NULL; mcu_canvas_t *canvas = NULL;
@ -1623,14 +1623,14 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_write_thread_run(switch_thread_
if (!pop) { if (!pop) {
break; break;
} }
if (loops == 0 || loops == 50) { if (loops == 0 || loops == 50) {
switch_core_media_gen_key_frame(member->session); switch_core_media_gen_key_frame(member->session);
switch_core_session_request_video_refresh(member->session); switch_core_session_request_video_refresh(member->session);
} }
loops++; loops++;
if ((switch_size_t)pop != 1) { if ((switch_size_t)pop != 1) {
frame = (switch_frame_t *) pop; frame = (switch_frame_t *) pop;
if (switch_test_flag(frame, SFF_ENCODED)) { if (switch_test_flag(frame, SFF_ENCODED)) {
@ -1641,23 +1641,23 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_write_thread_run(switch_thread_
if (!switch_test_flag(frame, SFF_ENCODED) || frame->m) { if (!switch_test_flag(frame, SFF_ENCODED) || frame->m) {
switch_time_t now = switch_time_now(); switch_time_t now = switch_time_now();
if (last) { if (last) {
int delta = (int)(now - last); int delta = (int)(now - last);
if (delta > member->conference->video_fps.ms * 5000) { if (delta > member->conference->video_fps.ms * 5000) {
switch_core_session_request_video_refresh(member->session); switch_core_session_request_video_refresh(member->session);
} }
} }
last = now; last = now;
} }
switch_frame_buffer_free(member->fb, &frame); switch_frame_buffer_free(member->fb, &frame);
} }
canvas = NULL; canvas = NULL;
layer = NULL; layer = NULL;
patched = 0; patched = 0;
@ -1774,7 +1774,7 @@ void conference_video_check_recording(conference_obj_t *conference, mcu_canvas_t
if (!imember->rec) { if (!imember->rec) {
continue; continue;
} }
if (!conference_utils_test_flag(conference, CFLAG_PERSONAL_CANVAS) && canvas && imember->canvas_id != canvas->canvas_id) { if (!conference_utils_test_flag(conference, CFLAG_PERSONAL_CANVAS) && canvas && imember->canvas_id != canvas->canvas_id) {
continue; continue;
} }
@ -1805,10 +1805,10 @@ void conference_video_check_avatar(conference_member_t *member, switch_bool_t fo
canvas = conference_video_get_canvas_locked(member); canvas = conference_video_get_canvas_locked(member);
if (conference_utils_test_flag(member->conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS) && if (conference_utils_test_flag(member->conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS) &&
(!switch_channel_test_flag(member->channel, CF_VIDEO_READY) || (!switch_channel_test_flag(member->channel, CF_VIDEO_READY) ||
(switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY || (switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY ||
switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_INACTIVE))) { switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_INACTIVE))) {
if (canvas) { if (canvas) {
conference_video_release_canvas(&canvas); conference_video_release_canvas(&canvas);
} }
@ -1821,7 +1821,7 @@ void conference_video_check_avatar(conference_member_t *member, switch_bool_t fo
member->avatar_patched = 0; member->avatar_patched = 0;
if (!force && switch_channel_test_flag(member->channel, CF_VIDEO_READY) && if (!force && switch_channel_test_flag(member->channel, CF_VIDEO_READY) &&
switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY && switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE) { switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY && switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE) {
conference_utils_member_set_flag_locked(member, MFLAG_ACK_VIDEO); conference_utils_member_set_flag_locked(member, MFLAG_ACK_VIDEO);
switch_core_session_request_video_refresh(member->session); switch_core_session_request_video_refresh(member->session);
@ -1888,7 +1888,7 @@ void conference_video_patch_fnode(mcu_canvas_t *canvas, conference_file_node_t *
mcu_layer_t *layer = &canvas->layers[fnode->layer_id]; mcu_layer_t *layer = &canvas->layers[fnode->layer_id];
switch_frame_t file_frame = { 0 }; switch_frame_t file_frame = { 0 };
switch_status_t status = switch_core_file_read_video(&fnode->fh, &file_frame, SVR_FLUSH); switch_status_t status = switch_core_file_read_video(&fnode->fh, &file_frame, SVR_FLUSH);
if (status == SWITCH_STATUS_SUCCESS) { if (status == SWITCH_STATUS_SUCCESS) {
switch_img_free(&layer->cur_img); switch_img_free(&layer->cur_img);
layer->cur_img = file_frame.img; layer->cur_img = file_frame.img;
@ -1904,7 +1904,7 @@ void conference_video_patch_fnode(mcu_canvas_t *canvas, conference_file_node_t *
void conference_video_fnode_check(conference_file_node_t *fnode, int canvas_id) { void conference_video_fnode_check(conference_file_node_t *fnode, int canvas_id) {
mcu_canvas_t *canvas = NULL; mcu_canvas_t *canvas = NULL;
if (switch_core_file_has_video(&fnode->fh, SWITCH_TRUE) && switch_core_file_read_video(&fnode->fh, NULL, SVR_CHECK) == SWITCH_STATUS_BREAK) { if (switch_core_file_has_video(&fnode->fh, SWITCH_TRUE) && switch_core_file_read_video(&fnode->fh, NULL, SVR_CHECK) == SWITCH_STATUS_BREAK) {
int full_screen = 0; int full_screen = 0;
char *res_id = NULL; char *res_id = NULL;
@ -1915,7 +1915,7 @@ void conference_video_fnode_check(conference_file_node_t *fnode, int canvas_id)
} }
fnode->canvas_id = canvas_id; fnode->canvas_id = canvas_id;
} }
canvas = fnode->conference->canvases[fnode->canvas_id]; canvas = fnode->conference->canvases[fnode->canvas_id];
if (fnode->fh.params && fnode->conference->canvas_count == 1) { if (fnode->fh.params && fnode->conference->canvas_count == 1) {
full_screen = switch_true(switch_event_get_header(fnode->fh.params, "full-screen")); full_screen = switch_true(switch_event_get_header(fnode->fh.params, "full-screen"));
@ -1969,7 +1969,7 @@ switch_status_t conference_video_find_layer(conference_obj_t *conference, mcu_ca
if (!layer && if (!layer &&
(canvas->layers_used < canvas->total_layers || (canvas->layers_used < canvas->total_layers ||
(avatar_layers && !member->avatar_png_img) || conference_utils_member_test_flag(member, MFLAG_MOD)) && (avatar_layers && !member->avatar_png_img) || conference_utils_member_test_flag(member, MFLAG_MOD)) &&
(member->avatar_png_img || (switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY && (member->avatar_png_img || (switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY &&
switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE))) { switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE))) {
/* find an empty layer */ /* find an empty layer */
@ -2050,7 +2050,7 @@ void conference_video_pop_next_image(conference_member_t *member, switch_image_t
//if (member->avatar_png_img && switch_channel_test_flag(member->channel, CF_VIDEO_READY) && conference_utils_member_test_flag(member, MFLAG_ACK_VIDEO)) { //if (member->avatar_png_img && switch_channel_test_flag(member->channel, CF_VIDEO_READY) && conference_utils_member_test_flag(member, MFLAG_ACK_VIDEO)) {
// switch_img_free(&member->avatar_png_img); // switch_img_free(&member->avatar_png_img);
//} //}
if (switch_channel_test_flag(member->channel, CF_VIDEO_READY)) { if (switch_channel_test_flag(member->channel, CF_VIDEO_READY)) {
do { do {
if (switch_queue_trypop(member->video_queue, &pop) == SWITCH_STATUS_SUCCESS && pop) { if (switch_queue_trypop(member->video_queue, &pop) == SWITCH_STATUS_SUCCESS && pop) {
@ -2063,13 +2063,13 @@ void conference_video_pop_next_image(conference_member_t *member, switch_image_t
size = switch_queue_size(member->video_queue); size = switch_queue_size(member->video_queue);
} while(size > 0); } while(size > 0);
if (conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) && if (conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) &&
member->video_layer_id > -1 && member->video_layer_id > -1 &&
switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY && switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY &&
switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE
) { ) {
switch_vid_params_t vid_params = { 0 }; switch_vid_params_t vid_params = { 0 };
switch_core_media_get_vid_params(member->session, &vid_params); switch_core_media_get_vid_params(member->session, &vid_params);
if (!vid_params.fps) { if (!vid_params.fps) {
@ -2081,7 +2081,7 @@ void conference_video_pop_next_image(conference_member_t *member, switch_image_t
if ((member->good_img % (int)(vid_params.fps * 10)) == 0) { if ((member->good_img % (int)(vid_params.fps * 10)) == 0) {
conference_video_reset_video_bitrate_counters(member); conference_video_reset_video_bitrate_counters(member);
} }
if (member->auto_avatar && member->good_img > vid_params.fps * 3) { if (member->auto_avatar && member->good_img > vid_params.fps * 3) {
conference_video_check_flush(member, SWITCH_TRUE); conference_video_check_flush(member, SWITCH_TRUE);
} }
@ -2123,7 +2123,7 @@ void conference_video_set_incoming_bitrate(conference_member_t *member, int kps,
if (!force && kps < member->managed_kps && member->conference->auto_kps_debounce) { if (!force && kps < member->managed_kps && member->conference->auto_kps_debounce) {
member->auto_kps_debounce_ticks = member->conference->auto_kps_debounce / member->conference->video_fps.ms; member->auto_kps_debounce_ticks = member->conference->auto_kps_debounce / member->conference->video_fps.ms;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "%s setting bitrate debounce timer to %dms\n", switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "%s setting bitrate debounce timer to %dms\n",
switch_channel_get_name(member->channel), member->conference->auto_kps_debounce); switch_channel_get_name(member->channel), member->conference->auto_kps_debounce);
member->managed_kps = kps; member->managed_kps = kps;
member->managed_kps_set = 0; member->managed_kps_set = 0;
@ -2133,8 +2133,8 @@ void conference_video_set_incoming_bitrate(conference_member_t *member, int kps,
msg.message_id = SWITCH_MESSAGE_INDICATE_BITRATE_REQ; msg.message_id = SWITCH_MESSAGE_INDICATE_BITRATE_REQ;
msg.numeric_arg = kps * 1024; msg.numeric_arg = kps * 1024;
msg.from = __FILE__; msg.from = __FILE__;
switch_core_session_receive_message(member->session, &msg); switch_core_session_receive_message(member->session, &msg);
member->managed_kps_set = 1; member->managed_kps_set = 1;
member->managed_kps = kps; member->managed_kps = kps;
@ -2167,7 +2167,7 @@ void conference_video_set_max_incoming_bitrate(conference_obj_t *conference, int
conference_video_set_max_incoming_bitrate_member(imember, kps); conference_video_set_max_incoming_bitrate_member(imember, kps);
} }
} }
switch_mutex_unlock(conference->member_mutex); switch_mutex_unlock(conference->member_mutex);
} }
void conference_video_set_absolute_incoming_bitrate(conference_obj_t *conference, int kps) void conference_video_set_absolute_incoming_bitrate(conference_obj_t *conference, int kps)
@ -2180,7 +2180,7 @@ void conference_video_set_absolute_incoming_bitrate(conference_obj_t *conference
conference_video_set_absolute_incoming_bitrate_member(imember, kps); conference_video_set_absolute_incoming_bitrate_member(imember, kps);
} }
} }
switch_mutex_unlock(conference->member_mutex); switch_mutex_unlock(conference->member_mutex);
} }
void conference_video_check_auto_bitrate(conference_member_t *member, mcu_layer_t *layer) void conference_video_check_auto_bitrate(conference_member_t *member, mcu_layer_t *layer)
@ -2189,8 +2189,8 @@ void conference_video_check_auto_bitrate(conference_member_t *member, mcu_layer_
int kps = 0, kps_in = 0; int kps = 0, kps_in = 0;
int max = 0; int max = 0;
int min_layer = 0, min = 0; int min_layer = 0, min = 0;
if (!conference_utils_test_flag(member->conference, CFLAG_MANAGE_INBOUND_VIDEO_BITRATE) || if (!conference_utils_test_flag(member->conference, CFLAG_MANAGE_INBOUND_VIDEO_BITRATE) ||
switch_channel_test_flag(member->channel, CF_VIDEO_BITRATE_UNMANAGABLE)) { switch_channel_test_flag(member->channel, CF_VIDEO_BITRATE_UNMANAGABLE)) {
return; return;
} }
@ -2212,7 +2212,7 @@ void conference_video_check_auto_bitrate(conference_member_t *member, mcu_layer_
} }
return; return;
} }
if (vid_params.width != member->vid_params.width || vid_params.height != member->vid_params.height) { if (vid_params.width != member->vid_params.width || vid_params.height != member->vid_params.height) {
switch_core_session_request_video_refresh(member->session); switch_core_session_request_video_refresh(member->session);
conference_video_clear_managed_kps(member); conference_video_clear_managed_kps(member);
@ -2224,7 +2224,7 @@ void conference_video_check_auto_bitrate(conference_member_t *member, mcu_layer_
return; return;
} }
if ((kps_in = switch_calc_bitrate(vid_params.width, vid_params.height, if ((kps_in = switch_calc_bitrate(vid_params.width, vid_params.height,
member->conference->video_quality, (int)(member->conference->video_fps.fps))) < 512) { member->conference->video_quality, (int)(member->conference->video_fps.fps))) < 512) {
kps_in = 512; kps_in = 512;
} }
@ -2237,9 +2237,9 @@ void conference_video_check_auto_bitrate(conference_member_t *member, mcu_layer_
min_layer = kps / 2; min_layer = kps / 2;
min = kps_in / 2; min = kps_in / 2;
if (min_layer > min) min = min_layer; if (min_layer > min) min = min_layer;
if (member->conference->max_bw_in) { if (member->conference->max_bw_in) {
max = member->conference->max_bw_in; max = member->conference->max_bw_in;
} else { } else {
@ -2294,7 +2294,7 @@ static void wait_for_canvas(mcu_canvas_t *canvas)
for (i = 0; i < canvas->total_layers; i++) { for (i = 0; i < canvas->total_layers; i++) {
mcu_layer_t *layer = &canvas->layers[i]; mcu_layer_t *layer = &canvas->layers[i];
if (layer->need_patch) { if (layer->need_patch) {
if (layer->member_id && layer->member && conference_utils_member_test_flag(layer->member, MFLAG_RUNNING) && layer->member->fb) { if (layer->member_id && layer->member && conference_utils_member_test_flag(layer->member, MFLAG_RUNNING) && layer->member->fb) {
switch_frame_buffer_trypush(layer->member->fb, (void *) 1); switch_frame_buffer_trypush(layer->member->fb, (void *) 1);
@ -2323,18 +2323,18 @@ static void personal_attach(mcu_layer_t *layer, conference_member_t *member)
layer->avatar_patched = 0; layer->avatar_patched = 0;
switch_img_free(&layer->banner_img); switch_img_free(&layer->banner_img);
switch_img_free(&layer->logo_img); switch_img_free(&layer->logo_img);
if (layer->geometry.audio_position) { if (layer->geometry.audio_position) {
conference_api_sub_position(member, NULL, layer->geometry.audio_position); conference_api_sub_position(member, NULL, layer->geometry.audio_position);
} }
if (member->channel) { if (member->channel) {
var = NULL; var = NULL;
if (member->video_banner_text || if (member->video_banner_text ||
(var = switch_channel_get_variable_dup(member->channel, "video_banner_text", SWITCH_FALSE, -1))) { (var = switch_channel_get_variable_dup(member->channel, "video_banner_text", SWITCH_FALSE, -1))) {
conference_video_layer_set_banner(member, layer, var); conference_video_layer_set_banner(member, layer, var);
} }
var = NULL; var = NULL;
if (member->video_logo || if (member->video_logo ||
(var = switch_channel_get_variable_dup(member->channel, "video_logo_path", SWITCH_FALSE, -1))) { (var = switch_channel_get_variable_dup(member->channel, "video_logo_path", SWITCH_FALSE, -1))) {
@ -2342,7 +2342,7 @@ static void personal_attach(mcu_layer_t *layer, conference_member_t *member)
} }
} }
} }
layer->member_id = member->id; layer->member_id = member->id;
} }
@ -2376,7 +2376,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
canvas->video_layout_group = conference->video_layout_group; canvas->video_layout_group = conference->video_layout_group;
packet = switch_core_alloc(conference->pool, SWITCH_RTP_MAX_BUF_LEN); packet = switch_core_alloc(conference->pool, SWITCH_RTP_MAX_BUF_LEN);
while (conference_globals.running && !conference_utils_test_flag(conference, CFLAG_DESTRUCT) && conference_utils_test_flag(conference, CFLAG_VIDEO_MUXING)) { while (conference_globals.running && !conference_utils_test_flag(conference, CFLAG_DESTRUCT) && conference_utils_test_flag(conference, CFLAG_VIDEO_MUXING)) {
switch_bool_t need_refresh = SWITCH_FALSE, send_keyframe = SWITCH_FALSE, need_reset = SWITCH_FALSE; switch_bool_t need_refresh = SWITCH_FALSE, send_keyframe = SWITCH_FALSE, need_reset = SWITCH_FALSE;
switch_time_t now; switch_time_t now;
@ -2429,14 +2429,14 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
int no_muted = conference_utils_test_flag(imember->conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS); int no_muted = conference_utils_test_flag(imember->conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS);
int no_av = conference_utils_test_flag(imember->conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS); int no_av = conference_utils_test_flag(imember->conference, CFLAG_VIDEO_REQUIRED_FOR_CANVAS);
int seen = conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN); int seen = conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN);
if (imember->channel && switch_channel_ready(imember->channel) && switch_channel_test_flag(imember->channel, CF_VIDEO_READY) && if (imember->channel && switch_channel_ready(imember->channel) && switch_channel_test_flag(imember->channel, CF_VIDEO_READY) &&
!conference_utils_member_test_flag(imember, MFLAG_SECOND_SCREEN) && !conference_utils_member_test_flag(imember, MFLAG_SECOND_SCREEN) &&
conference_utils_member_test_flag(imember, MFLAG_RUNNING) && (!no_muted || seen) && (!no_av || (no_av && !imember->avatar_png_img)) conference_utils_member_test_flag(imember, MFLAG_RUNNING) && (!no_muted || seen) && (!no_av || (no_av && !imember->avatar_png_img))
&& imember->canvas_id == canvas->canvas_id && imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY && imember->video_media_flow != SWITCH_MEDIA_FLOW_INACTIVE) { && imember->canvas_id == canvas->canvas_id && imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY && imember->video_media_flow != SWITCH_MEDIA_FLOW_INACTIVE) {
video_count++; video_count++;
} }
} }
@ -2470,7 +2470,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
if (members_with_avatar != conference->members_with_avatar) { if (members_with_avatar != conference->members_with_avatar) {
count_changed = 1; count_changed = 1;
} }
if (conference_utils_test_flag(conference, CFLAG_REFRESH_LAYOUT)) { if (conference_utils_test_flag(conference, CFLAG_REFRESH_LAYOUT)) {
count_changed = 1; count_changed = 1;
conference_utils_clear_flag(conference, CFLAG_REFRESH_LAYOUT); conference_utils_clear_flag(conference, CFLAG_REFRESH_LAYOUT);
@ -2490,7 +2490,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
if (count_changed && !personal) { if (count_changed && !personal) {
layout_group_t *lg = NULL; layout_group_t *lg = NULL;
video_layout_t *vlayout = NULL; video_layout_t *vlayout = NULL;
if (canvas->video_layout_group && (lg = switch_core_hash_find(conference->layout_group_hash, canvas->video_layout_group))) { if (canvas->video_layout_group && (lg = switch_core_hash_find(conference->layout_group_hash, canvas->video_layout_group))) {
if ((vlayout = conference_video_find_best_layout(conference, lg, canvas->video_count, file_count)) && vlayout != canvas->vlayout) { if ((vlayout = conference_video_find_best_layout(conference, lg, canvas->video_count, file_count)) && vlayout != canvas->vlayout) {
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
@ -2618,17 +2618,17 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
continue; continue;
} }
if (conference_utils_test_flag(imember->conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS) && if (conference_utils_test_flag(imember->conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS) &&
!conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN) && imember->video_layer_id > -1) { !conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN) && imember->video_layer_id > -1) {
conference_video_detach_video_layer(imember); conference_video_detach_video_layer(imember);
switch_img_free(&imember->video_mute_img); switch_img_free(&imember->video_mute_img);
if (imember->id == imember->conference->video_floor_holder) { if (imember->id == imember->conference->video_floor_holder) {
conference_video_set_floor_holder(conference, NULL, SWITCH_FALSE); conference_video_set_floor_holder(conference, NULL, SWITCH_FALSE);
} else if (imember->id == imember->conference->last_video_floor_holder) { } else if (imember->id == imember->conference->last_video_floor_holder) {
conference->last_video_floor_holder = 0; conference->last_video_floor_holder = 0;
} }
switch_core_session_rwunlock(imember->session); switch_core_session_rwunlock(imember->session);
continue; continue;
} }
@ -2707,15 +2707,15 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
} }
if (!layer->mute_patched) { if (!layer->mute_patched) {
if (!imember->video_mute_img) { if (!imember->video_mute_img) {
conference_video_vmute_snap(imember, SWITCH_FALSE); conference_video_vmute_snap(imember, SWITCH_FALSE);
} }
if (imember->video_mute_img || layer->mute_img) { if (imember->video_mute_img || layer->mute_img) {
conference_video_clear_layer(layer); conference_video_clear_layer(layer);
if (!layer->mute_img) { if (!layer->mute_img) {
if (imember->video_mute_img) { if (imember->video_mute_img) {
//layer->mute_img = switch_img_read_png(imember->video_mute_png, SWITCH_IMG_FMT_I420); //layer->mute_img = switch_img_read_png(imember->video_mute_png, SWITCH_IMG_FMT_I420);
switch_img_copy(imember->video_mute_img, &layer->mute_img); switch_img_copy(imember->video_mute_img, &layer->mute_img);
@ -2768,7 +2768,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
layout_group_t *lg = NULL; layout_group_t *lg = NULL;
video_layout_t *vlayout = NULL; video_layout_t *vlayout = NULL;
conference_member_t *omember; conference_member_t *omember;
if (video_key_freq && (now - last_key_time) > video_key_freq) { if (video_key_freq && (now - last_key_time) > video_key_freq) {
send_keyframe = SWITCH_TRUE; send_keyframe = SWITCH_TRUE;
last_key_time = now; last_key_time = now;
@ -2777,7 +2777,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (imember = conference->members; imember; imember = imember->next) { for (imember = conference->members; imember; imember = imember->next) {
if (!imember->rec && if (!imember->rec &&
(!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) || (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ||
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS)) { switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS)) {
@ -2797,12 +2797,12 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
conference_video_init_canvas_layers(conference, imember->canvas, conference->new_personal_vlayout); conference_video_init_canvas_layers(conference, imember->canvas, conference->new_personal_vlayout);
layout_applied++; layout_applied++;
} }
if (imember->channel && switch_channel_test_flag(imember->channel, CF_VIDEO_REFRESH_REQ)) { if (imember->channel && switch_channel_test_flag(imember->channel, CF_VIDEO_REFRESH_REQ)) {
switch_channel_clear_flag(imember->channel, CF_VIDEO_REFRESH_REQ); switch_channel_clear_flag(imember->channel, CF_VIDEO_REFRESH_REQ);
send_keyframe = SWITCH_TRUE; send_keyframe = SWITCH_TRUE;
} }
if (count_changed) { if (count_changed) {
int total = last_video_count; int total = last_video_count;
int kps; int kps;
@ -2812,12 +2812,12 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
total += conference->members_with_avatar; total += conference->members_with_avatar;
} }
if (total > 0 && if (total > 0 &&
(!conference_utils_test_flag(imember->conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS) || (!conference_utils_test_flag(imember->conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS) ||
conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN)) && conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN)) &&
imember->session && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY && imember->session && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY &&
imember->session && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE) { imember->session && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE) {
total--; total--;
} }
@ -2826,21 +2826,21 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
if (conference->members_with_video == 1 && file_count) { if (conference->members_with_video == 1 && file_count) {
total = 0; total = 0;
} }
if (canvas->video_layout_group && (lg = switch_core_hash_find(conference->layout_group_hash, canvas->video_layout_group))) { if (canvas->video_layout_group && (lg = switch_core_hash_find(conference->layout_group_hash, canvas->video_layout_group))) {
if ((vlayout = conference_video_find_best_layout(conference, lg, total + file_count, file_count))) { if ((vlayout = conference_video_find_best_layout(conference, lg, total + file_count, file_count))) {
conference_video_init_canvas_layers(conference, imember->canvas, vlayout); conference_video_init_canvas_layers(conference, imember->canvas, vlayout);
} }
} }
if (imember->channel && !switch_channel_test_flag(imember->channel, CF_VIDEO_BITRATE_UNMANAGABLE) && if (imember->channel && !switch_channel_test_flag(imember->channel, CF_VIDEO_BITRATE_UNMANAGABLE) &&
conference_utils_test_flag(conference, CFLAG_MANAGE_INBOUND_VIDEO_BITRATE)) { conference_utils_test_flag(conference, CFLAG_MANAGE_INBOUND_VIDEO_BITRATE)) {
switch_core_media_get_vid_params(imember->session, &vid_params); switch_core_media_get_vid_params(imember->session, &vid_params);
kps = switch_calc_bitrate(vid_params.width, vid_params.height, conference->video_quality, (int)(imember->conference->video_fps.fps)); kps = switch_calc_bitrate(vid_params.width, vid_params.height, conference->video_quality, (int)(imember->conference->video_fps.fps));
conference_video_set_incoming_bitrate(imember, kps, SWITCH_TRUE); conference_video_set_incoming_bitrate(imember, kps, SWITCH_TRUE);
} }
} }
if (imember->session && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE) { if (imember->session && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY && switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_INACTIVE) {
conference_video_pop_next_image(imember, &imember->pcanvas_img); conference_video_pop_next_image(imember, &imember->pcanvas_img);
} }
@ -2856,10 +2856,10 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
} }
switch_mutex_lock(conference->mutex); switch_mutex_lock(conference->mutex);
if (check_async_file && conference->async_fnode) { if (check_async_file && conference->async_fnode) {
switch_status_t st = switch_core_file_read_video(&conference->async_fnode->fh, &file_frame, SVR_FLUSH); switch_status_t st = switch_core_file_read_video(&conference->async_fnode->fh, &file_frame, SVR_FLUSH);
if (st == SWITCH_STATUS_SUCCESS) { if (st == SWITCH_STATUS_SUCCESS) {
if ((async_file_img = file_frame.img)) { if ((async_file_img = file_frame.img)) {
switch_img_free(&file_imgs[j]); switch_img_free(&file_imgs[j]);
@ -2887,8 +2887,8 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
for (imember = conference->members; imember; imember = imember->next) { for (imember = conference->members; imember; imember = imember->next) {
int i = 0; int i = 0;
mcu_layer_t *floor_layer = NULL; mcu_layer_t *floor_layer = NULL;
if (!imember->rec && if (!imember->rec &&
(!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) || !imember->canvas || (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) || !imember->canvas ||
(switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY || (switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY ||
switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_INACTIVE) || switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_INACTIVE) ||
@ -2907,19 +2907,19 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
if (!file_count && imember->canvas->layout_floor_id > -1 && imember->conference->video_floor_holder && if (!file_count && imember->canvas->layout_floor_id > -1 && imember->conference->video_floor_holder &&
imember->id != imember->conference->video_floor_holder) { imember->id != imember->conference->video_floor_holder) {
if ((omember = conference_member_get(imember->conference, imember->conference->video_floor_holder))) { if ((omember = conference_member_get(imember->conference, imember->conference->video_floor_holder))) {
if (conference->members_with_video + conference->members_with_avatar == 1 || imember != omember) { if (conference->members_with_video + conference->members_with_avatar == 1 || imember != omember) {
layer = &imember->canvas->layers[imember->canvas->layout_floor_id]; layer = &imember->canvas->layers[imember->canvas->layout_floor_id];
floor_layer = layer; floor_layer = layer;
layer = NULL; layer = NULL;
} }
switch_thread_rwlock_unlock(omember->rwlock); switch_thread_rwlock_unlock(omember->rwlock);
} }
} }
for (omember = conference->members; omember; omember = omember->next) { for (omember = conference->members; omember; omember = omember->next) {
mcu_layer_t *layer = NULL; mcu_layer_t *layer = NULL;
switch_image_t *use_img = NULL; switch_image_t *use_img = NULL;
@ -2928,7 +2928,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
switch_core_session_media_flow(omember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY || switch_core_session_media_flow(omember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_INACTIVE) { switch_core_session_media_flow(omember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY || switch_core_session_media_flow(omember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_INACTIVE) {
continue; continue;
} }
if (conference->members_with_video + conference->members_with_avatar != 1 && imember == omember) { if (conference->members_with_video + conference->members_with_avatar != 1 && imember == omember) {
continue; continue;
} }
@ -2936,7 +2936,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
if (file_count && (conference->members_with_video + conference->members_with_avatar == 1)) { if (file_count && (conference->members_with_video + conference->members_with_avatar == 1)) {
floor_layer = NULL; floor_layer = NULL;
} }
if (!file_count && floor_layer && omember->id == conference->video_floor_holder) { if (!file_count && floor_layer && omember->id == conference->video_floor_holder) {
layer = floor_layer; layer = floor_layer;
} else { } else {
@ -2945,7 +2945,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
i++; i++;
} }
} }
if (i < imember->canvas->total_layers) { if (i < imember->canvas->total_layers) {
layer = &imember->canvas->layers[i++]; layer = &imember->canvas->layers[i++];
} }
@ -2960,11 +2960,11 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
} }
use_img = omember->pcanvas_img; use_img = omember->pcanvas_img;
if (files_playing && layer && layer == &imember->canvas->layers[imember->canvas->layout_floor_id]) { if (files_playing && layer && layer == &imember->canvas->layers[imember->canvas->layout_floor_id]) {
use_img = NULL; use_img = NULL;
} }
if (layer) { if (layer) {
if (use_img && !omember->avatar_png_img) { if (use_img && !omember->avatar_png_img) {
@ -3010,7 +3010,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
conference_video_scale_and_patch(layer, img, SWITCH_FALSE); conference_video_scale_and_patch(layer, img, SWITCH_FALSE);
} }
} }
if (imember->session) { if (imember->session) {
switch_core_session_rwunlock(imember->session); switch_core_session_rwunlock(imember->session);
} }
@ -3025,7 +3025,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
for (imember = conference->members; imember; imember = imember->next) { for (imember = conference->members; imember; imember = imember->next) {
switch_frame_t *dupframe; switch_frame_t *dupframe;
if (!imember->rec && if (!imember->rec &&
(!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) || !imember->canvas || (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) || !imember->canvas ||
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS)) { switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS)) {
continue; continue;
@ -3040,7 +3040,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
} }
write_frame.img = imember->canvas->img; write_frame.img = imember->canvas->img;
if (imember->rec) { if (imember->rec) {
switch_core_file_write_video(&imember->rec->fh, &write_frame); switch_core_file_write_video(&imember->rec->fh, &write_frame);
} else { } else {
@ -3066,7 +3066,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
switch_mutex_unlock(conference->member_mutex); switch_mutex_unlock(conference->member_mutex);
} else { } else {
if (conference->async_fnode && (conference->async_fnode->canvas_id == canvas->canvas_id || conference->async_fnode->canvas_id == -1)) { if (conference->async_fnode && (conference->async_fnode->canvas_id == canvas->canvas_id || conference->async_fnode->canvas_id == -1)) {
if (conference->async_fnode->layer_id > -1) { if (conference->async_fnode->layer_id > -1) {
conference_video_patch_fnode(canvas, conference->async_fnode); conference_video_patch_fnode(canvas, conference->async_fnode);
@ -3170,11 +3170,11 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
} else if (file_img) { } else if (file_img) {
switch_img_free(&file_img); switch_img_free(&file_img);
} }
write_frame.img = write_img; write_frame.img = write_img;
wait_for_canvas(canvas); wait_for_canvas(canvas);
if (canvas->recording) { if (canvas->recording) {
conference_video_check_recording(conference, canvas, &write_frame); conference_video_check_recording(conference, canvas, &write_frame);
} }
@ -3196,14 +3196,14 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
timestamp, need_refresh, send_keyframe, need_reset); timestamp, need_refresh, send_keyframe, need_reset);
if (canvas->video_write_bandwidth) { if (canvas->video_write_bandwidth) {
switch_core_codec_control(&write_codecs[i]->codec, SCC_VIDEO_BANDWIDTH, switch_core_codec_control(&write_codecs[i]->codec, SCC_VIDEO_BANDWIDTH,
SCCT_INT, &canvas->video_write_bandwidth, SCCT_NONE, NULL, NULL, NULL); SCCT_INT, &canvas->video_write_bandwidth, SCCT_NONE, NULL, NULL, NULL);
canvas->video_write_bandwidth = 0; canvas->video_write_bandwidth = 0;
} }
} }
} }
switch_mutex_lock(conference->member_mutex); switch_mutex_lock(conference->member_mutex);
for (imember = conference->members; imember; imember = imember->next) { for (imember = conference->members; imember; imember = imember->next) {
switch_frame_t *dupframe; switch_frame_t *dupframe;
@ -3218,7 +3218,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) { switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue; continue;
} }
if (need_refresh) { if (need_refresh) {
switch_core_session_request_video_refresh(imember->session); switch_core_session_request_video_refresh(imember->session);
} }
@ -3545,7 +3545,7 @@ void *SWITCH_THREAD_FUNC conference_video_super_muxing_thread_run(switch_thread_
conference_video_write_canvas_image_to_codec_group(conference, canvas, write_codecs[i], i, timestamp, need_refresh, send_keyframe, need_reset); conference_video_write_canvas_image_to_codec_group(conference, canvas, write_codecs[i], i, timestamp, need_refresh, send_keyframe, need_reset);
if (canvas->video_write_bandwidth) { if (canvas->video_write_bandwidth) {
switch_core_codec_control(&write_codecs[i]->codec, SCC_VIDEO_BANDWIDTH, switch_core_codec_control(&write_codecs[i]->codec, SCC_VIDEO_BANDWIDTH,
SCCT_INT, &canvas->video_write_bandwidth, SCCT_NONE, NULL, NULL, NULL); SCCT_INT, &canvas->video_write_bandwidth, SCCT_NONE, NULL, NULL, NULL);
canvas->video_write_bandwidth = 0; canvas->video_write_bandwidth = 0;
} }
@ -3562,7 +3562,7 @@ void *SWITCH_THREAD_FUNC conference_video_super_muxing_thread_run(switch_thread_
continue; continue;
} }
if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) || if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ||
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) { switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
continue; continue;
@ -3771,7 +3771,7 @@ void conference_video_set_floor_holder(conference_obj_t *conference, conference_
} }
conference_video_release_canvas(&canvas); conference_video_release_canvas(&canvas);
} }
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Adding video floor %s\n", switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Adding video floor %s\n",
switch_channel_get_name(member->channel)); switch_channel_get_name(member->channel));
@ -3916,15 +3916,15 @@ void conference_video_write_frame(conference_obj_t *conference, conference_membe
if (want_refresh) { if (want_refresh) {
for (imember = conference->members; imember; imember = imember->next) { for (imember = conference->members; imember; imember = imember->next) {
switch_core_session_t *isession = imember->session; switch_core_session_t *isession = imember->session;
if (!isession || switch_core_session_read_lock(isession) != SWITCH_STATUS_SUCCESS) { if (!isession || switch_core_session_read_lock(isession) != SWITCH_STATUS_SUCCESS) {
continue; continue;
} }
if (switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ) { if (switch_channel_test_flag(imember->channel, CF_VIDEO_READY) ) {
switch_core_session_request_video_refresh(imember->session); switch_core_session_request_video_refresh(imember->session);
} }
switch_core_session_rwunlock(isession); switch_core_session_rwunlock(isession);
} }
} }
@ -3969,7 +3969,7 @@ switch_status_t conference_video_thread_callback(switch_core_session_t *session,
if (conference_utils_test_flag(member->conference, CFLAG_VIDEO_MUXING)) { if (conference_utils_test_flag(member->conference, CFLAG_VIDEO_MUXING)) {
switch_image_t *img_copy = NULL; switch_image_t *img_copy = NULL;
if (frame->img && (member->video_layer_id > -1 || member->canvas) && if (frame->img && (member->video_layer_id > -1 || member->canvas) &&
conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) && conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) &&
switch_queue_size(member->video_queue) < member->conference->video_fps.fps * 2 && switch_queue_size(member->video_queue) < member->conference->video_fps.fps * 2 &&
!member->conference->playing_video_file) { !member->conference->playing_video_file) {
@ -3992,7 +3992,7 @@ switch_status_t conference_video_thread_callback(switch_core_session_t *session,
} else { } else {
switch_img_copy(frame->img, &img_copy); switch_img_copy(frame->img, &img_copy);
} }
if (switch_queue_trypush(member->video_queue, img_copy) != SWITCH_STATUS_SUCCESS) { if (switch_queue_trypush(member->video_queue, img_copy) != SWITCH_STATUS_SUCCESS) {
switch_img_free(&img_copy); switch_img_free(&img_copy);
} }

View File

@ -258,16 +258,16 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
const char *caller_id_name = switch_channel_get_variable(imember->channel, "caller_id_name"); const char *caller_id_name = switch_channel_get_variable(imember->channel, "caller_id_name");
unsigned char CR[3] = TEXT_UNICODE_LINEFEED; unsigned char CR[3] = TEXT_UNICODE_LINEFEED;
switch_mutex_lock(imember->text_mutex); switch_mutex_lock(imember->text_mutex);
framedatalen = strlen(imember->text_framedata) + strlen(caller_id_name) + 6; framedatalen = strlen(imember->text_framedata) + strlen(caller_id_name) + 6;
switch_zmalloc(framedata, framedatalen); switch_zmalloc(framedata, framedatalen);
switch_snprintf(framedata, framedatalen, "%s::\n%s", caller_id_name, imember->text_framedata); switch_snprintf(framedata, framedatalen, "%s::\n%s", caller_id_name, imember->text_framedata);
memcpy(framedata + strlen(framedata), CR, sizeof(CR)); memcpy(framedata + strlen(framedata), CR, sizeof(CR));
frame.data = framedata; frame.data = framedata;
frame.datalen = framedatalen; frame.datalen = framedatalen;
@ -277,9 +277,9 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
switch_core_session_write_text_frame(omember->session, &frame, 0, 0); switch_core_session_write_text_frame(omember->session, &frame, 0, 0);
} }
} }
free(framedata); free(framedata);
imember->text_framedata[0] = '\0'; imember->text_framedata[0] = '\0';
switch_mutex_unlock(imember->text_mutex); switch_mutex_unlock(imember->text_mutex);
@ -295,7 +295,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
if (conference_utils_member_test_flag(imember, MFLAG_RUNNING) && imember->session) { if (conference_utils_member_test_flag(imember, MFLAG_RUNNING) && imember->session) {
switch_channel_t *channel = switch_core_session_get_channel(imember->session); switch_channel_t *channel = switch_core_session_get_channel(imember->session);
switch_media_flow_t video_media_flow; switch_media_flow_t video_media_flow;
if ((!floor_holder || (imember->score_iir > SCORE_IIR_SPEAKING_MAX && (floor_holder->score_iir < SCORE_IIR_SPEAKING_MIN)))) {// && if ((!floor_holder || (imember->score_iir > SCORE_IIR_SPEAKING_MAX && (floor_holder->score_iir < SCORE_IIR_SPEAKING_MIN)))) {// &&
//(!conference_utils_test_flag(conference, CFLAG_VID_FLOOR) || switch_channel_test_flag(channel, CF_VIDEO))) { //(!conference_utils_test_flag(conference, CFLAG_VID_FLOOR) || switch_channel_test_flag(channel, CF_VIDEO))) {
floor_holder = imember; floor_holder = imember;
@ -316,18 +316,18 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
} }
} }
if (switch_channel_ready(channel) && if (switch_channel_ready(channel) &&
switch_channel_test_flag(channel, CF_VIDEO_READY) && switch_channel_test_flag(channel, CF_VIDEO_READY) &&
imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY && imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY &&
!conference_utils_member_test_flag(imember, MFLAG_SECOND_SCREEN) && !conference_utils_member_test_flag(imember, MFLAG_SECOND_SCREEN) &&
(!conference_utils_test_flag(conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS) || (!conference_utils_test_flag(conference, CFLAG_VIDEO_MUTE_EXIT_CANVAS) ||
conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN))) { conference_utils_member_test_flag(imember, MFLAG_CAN_BE_SEEN))) {
members_with_video++; members_with_video++;
} }
if (switch_channel_ready(channel) && if (switch_channel_ready(channel) &&
switch_channel_test_flag(channel, CF_VIDEO_READY) && switch_channel_test_flag(channel, CF_VIDEO_READY) &&
imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY && imember->video_media_flow != SWITCH_MEDIA_FLOW_SENDONLY &&
!conference_utils_member_test_flag(imember, MFLAG_SECOND_SCREEN)) { !conference_utils_member_test_flag(imember, MFLAG_SECOND_SCREEN)) {
members_seeing_video++; members_seeing_video++;
} }
@ -455,7 +455,7 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
} }
} else if (conference->fnode->type == NODE_TYPE_FILE) { } else if (conference->fnode->type == NODE_TYPE_FILE) {
switch_core_file_read(&conference->fnode->fh, file_frame, &file_sample_len); switch_core_file_read(&conference->fnode->fh, file_frame, &file_sample_len);
if (conference->fnode->fh.vol) { if (conference->fnode->fh.vol) {
switch_change_sln_volume_granular((void *)file_frame, (uint32_t)file_sample_len * conference->fnode->fh.channels, switch_change_sln_volume_granular((void *)file_frame, (uint32_t)file_sample_len * conference->fnode->fh.channels,
conference->fnode->fh.vol); conference->fnode->fh.vol);
@ -470,13 +470,13 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
if (--conference->fnode->loops < 0) { if (--conference->fnode->loops < 0) {
conference->fnode->loops = -1; conference->fnode->loops = -1;
} }
if (conference->fnode->loops) { if (conference->fnode->loops) {
uint32_t pos = 0; uint32_t pos = 0;
switch_core_file_seek(&conference->fnode->fh, &pos, 0, SEEK_SET); switch_core_file_seek(&conference->fnode->fh, &pos, 0, SEEK_SET);
} }
} }
if (!conference->fnode->loops) { if (!conference->fnode->loops) {
conference->fnode->done++; conference->fnode->done++;
} }
@ -501,13 +501,13 @@ void *SWITCH_THREAD_FUNC conference_thread_run(switch_thread_t *thread, void *ob
if (--conference->async_fnode->loops < 0) { if (--conference->async_fnode->loops < 0) {
conference->async_fnode->loops = -1; conference->async_fnode->loops = -1;
} }
if (conference->async_fnode->loops) { if (conference->async_fnode->loops) {
uint32_t pos = 0; uint32_t pos = 0;
switch_core_file_seek(&conference->async_fnode->fh, &pos, 0, SEEK_SET); switch_core_file_seek(&conference->async_fnode->fh, &pos, 0, SEEK_SET);
} }
} }
if (!conference->async_fnode->loops) { if (!conference->async_fnode->loops) {
conference->async_fnode->done++; conference->async_fnode->done++;
} }
@ -1814,17 +1814,17 @@ switch_status_t conference_text_thread_callback(switch_core_session_t *session,
memcpy(tmp, member->text_framedata, member->text_framesize); memcpy(tmp, member->text_framedata, member->text_framesize);
switch_assert(tmp); switch_assert(tmp);
member->text_framesize = inuse + 1024; member->text_framesize = inuse + 1024;
free(member->text_framedata); free(member->text_framedata);
member->text_framedata = tmp; member->text_framedata = tmp;
} }
bytes = switch_buffer_read(member->text_buffer, member->text_framedata, inuse); bytes = switch_buffer_read(member->text_buffer, member->text_framedata, inuse);
*(member->text_framedata + bytes) = '\0'; *(member->text_framedata + bytes) = '\0';
/* /*
for(p = member->text_framedata; p && *p; p++) { for(p = member->text_framedata; p && *p; p++) {
if (*p > 32 && *p < 127) { if (*p > 32 && *p < 127) {
@ -1837,7 +1837,7 @@ switch_status_t conference_text_thread_callback(switch_core_session_t *session,
} }
*/ */
} }
switch_mutex_unlock(member->text_mutex); switch_mutex_unlock(member->text_mutex);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
@ -2986,7 +2986,7 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co
} else { } else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "video-kps-debounce must be 0 or higher\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "video-kps-debounce must be 0 or higher\n");
} }
} else if (!strcasecmp(var, "video-mode") && !zstr(val)) { } else if (!strcasecmp(var, "video-mode") && !zstr(val)) {
if (!strcasecmp(val, "passthrough")) { if (!strcasecmp(val, "passthrough")) {
conference_video_mode = CONF_VIDEO_MODE_PASSTHROUGH; conference_video_mode = CONF_VIDEO_MODE_PASSTHROUGH;
@ -3129,7 +3129,7 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co
if (!video_border_color) { if (!video_border_color) {
video_border_color = "#000000"; video_border_color = "#000000";
} }
if (!video_super_canvas_bgcolor) { if (!video_super_canvas_bgcolor) {
video_super_canvas_bgcolor = "#068df3"; video_super_canvas_bgcolor = "#068df3";
} }
@ -3146,7 +3146,7 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co
conference->no_video_avatar = switch_core_strdup(conference->pool, no_video_avatar); conference->no_video_avatar = switch_core_strdup(conference->pool, no_video_avatar);
} }
conference->video_canvas_bgcolor = switch_core_strdup(conference->pool, video_canvas_bgcolor); conference->video_canvas_bgcolor = switch_core_strdup(conference->pool, video_canvas_bgcolor);
conference->video_border_color = switch_core_strdup(conference->pool, video_border_color); conference->video_border_color = switch_core_strdup(conference->pool, video_border_color);
conference->video_super_canvas_bgcolor = switch_core_strdup(conference->pool, video_super_canvas_bgcolor); conference->video_super_canvas_bgcolor = switch_core_strdup(conference->pool, video_super_canvas_bgcolor);
@ -3529,7 +3529,7 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co
switch_live_array_set_command_handler(conference->la, conference_event_la_command_handler); switch_live_array_set_command_handler(conference->la, conference_event_la_command_handler);
} }
end: end:
switch_mutex_unlock(conference_globals.hash_mutex); switch_mutex_unlock(conference_globals.hash_mutex);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Rupa Schomaker <rupa@rupa.com> * Rupa Schomaker <rupa@rupa.com>
* Yossi Neiman <mishehu@freeswitch.org> * Yossi Neiman <mishehu@freeswitch.org>
* Seven Du <dujinfang@gmail.com> * Seven Du <dujinfang@gmail.com>
@ -45,7 +45,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_curl_shutdown);
SWITCH_MODULE_RUNTIME_FUNCTION(mod_curl_runtime); SWITCH_MODULE_RUNTIME_FUNCTION(mod_curl_runtime);
SWITCH_MODULE_LOAD_FUNCTION(mod_curl_load); SWITCH_MODULE_LOAD_FUNCTION(mod_curl_load);
/* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime) /* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime)
* Defines a switch_loadable_module_function_table_t and a static const char[] modname * Defines a switch_loadable_module_function_table_t and a static const char[] modname
*/ */
SWITCH_MODULE_DEFINITION(mod_curl, mod_curl_load, mod_curl_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_curl, mod_curl_load, mod_curl_shutdown, NULL);
@ -273,14 +273,14 @@ static char *print_json(switch_memory_pool_t *pool, http_data_t *http_data)
char *data = NULL; char *data = NULL;
char tmp[32], *f = NULL; char tmp[32], *f = NULL;
switch_curl_slist_t *header = http_data->headers; switch_curl_slist_t *header = http_data->headers;
if(!top || !headers) { if(!top || !headers) {
cJSON_Delete(headers); cJSON_Delete(headers);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to alloc memory for cJSON structures.\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to alloc memory for cJSON structures.\n");
goto curl_json_output_end; goto curl_json_output_end;
} }
switch_snprintf(tmp, sizeof(tmp), "%ld", http_data->http_response_code); switch_snprintf(tmp, sizeof(tmp), "%ld", http_data->http_response_code);
cJSON_AddItemToObject(top, "status_code", cJSON_CreateString(tmp)); cJSON_AddItemToObject(top, "status_code", cJSON_CreateString(tmp));
if (http_data->http_response) { if (http_data->http_response) {
@ -334,7 +334,7 @@ static char *print_json(switch_memory_pool_t *pool, http_data_t *http_data)
f = cJSON_PrintUnformatted(top); f = cJSON_PrintUnformatted(top);
data = switch_core_strdup(pool, f); data = switch_core_strdup(pool, f);
switch_safe_free(f); switch_safe_free(f);
curl_json_output_end: curl_json_output_end:
cJSON_Delete(top); /* should free up all children */ cJSON_Delete(top); /* should free up all children */
return data; return data;
@ -344,7 +344,7 @@ static size_t http_sendfile_response_callback(void *ptr, size_t size, size_t nme
{ {
register unsigned int realsize = (unsigned int) (size * nmemb); register unsigned int realsize = (unsigned int) (size * nmemb);
http_sendfile_data_t *http_data = data; http_sendfile_data_t *http_data = data;
if(http_data->sendfile_response_count + realsize < HTTP_SENDFILE_RESPONSE_SIZE) if(http_data->sendfile_response_count + realsize < HTTP_SENDFILE_RESPONSE_SIZE)
{ {
// I'm not sure why we need the (realsize+1) here, but it truncates the data by 1 char if I don't do this // I'm not sure why we need the (realsize+1) here, but it truncates the data by 1 char if I don't do this
@ -356,7 +356,7 @@ static size_t http_sendfile_response_callback(void *ptr, size_t size, size_t nme
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Response page is more than %d bytes long, truncating.\n", HTTP_SENDFILE_RESPONSE_SIZE); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Response page is more than %d bytes long, truncating.\n", HTTP_SENDFILE_RESPONSE_SIZE);
realsize = 0; realsize = 0;
} }
return realsize; return realsize;
} }
@ -365,53 +365,53 @@ static void http_sendfile_initialize_curl(http_sendfile_data_t *http_data)
{ {
uint8_t count; uint8_t count;
http_data->curl_handle = curl_easy_init(); http_data->curl_handle = curl_easy_init();
if (!strncasecmp(http_data->url, "https", 5)) if (!strncasecmp(http_data->url, "https", 5))
{ {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Not verifying TLS cert for %s; connection is not secure\n", http_data->url); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Not verifying TLS cert for %s; connection is not secure\n", http_data->url);
curl_easy_setopt(http_data->curl_handle, CURLOPT_SSL_VERIFYPEER, 0); curl_easy_setopt(http_data->curl_handle, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(http_data->curl_handle, CURLOPT_SSL_VERIFYHOST, 0); curl_easy_setopt(http_data->curl_handle, CURLOPT_SSL_VERIFYHOST, 0);
} }
/* From the docs: /* From the docs:
* Optionally, you can provide data to POST using the CURLOPT_READFUNCTION and CURLOPT_READDATA * Optionally, you can provide data to POST using the CURLOPT_READFUNCTION and CURLOPT_READDATA
* options but then you must make sure to not set CURLOPT_POSTFIELDS to anything but NULL * options but then you must make sure to not set CURLOPT_POSTFIELDS to anything but NULL
* curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDSIZE, strlen(data)); * curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDSIZE, strlen(data));
* curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, (void *) data); * curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, (void *) data);
*/ */
// switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Post data: %s\n", data); // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Post data: %s\n", data);
curl_easy_setopt(http_data->curl_handle, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(http_data->curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(http_data->curl_handle, CURLOPT_MAXREDIRS, 15); curl_easy_setopt(http_data->curl_handle, CURLOPT_MAXREDIRS, 15);
curl_easy_setopt(http_data->curl_handle, CURLOPT_URL, http_data->url); curl_easy_setopt(http_data->curl_handle, CURLOPT_URL, http_data->url);
curl_easy_setopt(http_data->curl_handle, CURLOPT_NOSIGNAL, 1); curl_easy_setopt(http_data->curl_handle, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(http_data->curl_handle, CURLOPT_USERAGENT, "freeswitch-curl/1.0"); curl_easy_setopt(http_data->curl_handle, CURLOPT_USERAGENT, "freeswitch-curl/1.0");
http_data->sendfile_response = switch_core_alloc(http_data->pool, sizeof(char) * HTTP_SENDFILE_RESPONSE_SIZE); http_data->sendfile_response = switch_core_alloc(http_data->pool, sizeof(char) * HTTP_SENDFILE_RESPONSE_SIZE);
memset(http_data->sendfile_response, 0, sizeof(char) * HTTP_SENDFILE_RESPONSE_SIZE); memset(http_data->sendfile_response, 0, sizeof(char) * HTTP_SENDFILE_RESPONSE_SIZE);
// Set the function where we will copy out the response body data to // Set the function where we will copy out the response body data to
curl_easy_setopt(http_data->curl_handle, CURLOPT_WRITEFUNCTION, http_sendfile_response_callback); curl_easy_setopt(http_data->curl_handle, CURLOPT_WRITEFUNCTION, http_sendfile_response_callback);
curl_easy_setopt(http_data->curl_handle, CURLOPT_WRITEDATA, (void *) http_data); curl_easy_setopt(http_data->curl_handle, CURLOPT_WRITEDATA, (void *) http_data);
/* Add the file to upload as a POST form field */ /* Add the file to upload as a POST form field */
curl_formadd(&http_data->formpost, &http_data->lastptr, CURLFORM_COPYNAME, http_data->filename_element_name, CURLFORM_FILE, http_data->filename_element, CURLFORM_END); curl_formadd(&http_data->formpost, &http_data->lastptr, CURLFORM_COPYNAME, http_data->filename_element_name, CURLFORM_FILE, http_data->filename_element, CURLFORM_END);
if(!zstr(http_data->extrapost_elements)) if(!zstr(http_data->extrapost_elements))
{ {
// Now to parse out the individual post element/value pairs // Now to parse out the individual post element/value pairs
char *argv[64] = { 0 }; // Probably don't need 64 but eh does it really use that much memory? char *argv[64] = { 0 }; // Probably don't need 64 but eh does it really use that much memory?
uint32_t argc = 0; uint32_t argc = 0;
char *temp_extrapost = switch_core_strdup(http_data->pool, http_data->extrapost_elements); char *temp_extrapost = switch_core_strdup(http_data->pool, http_data->extrapost_elements);
argc = switch_separate_string(temp_extrapost, '&', argv, (sizeof(argv) / sizeof(argv[0]))); argc = switch_separate_string(temp_extrapost, '&', argv, (sizeof(argv) / sizeof(argv[0])));
for(count = 0; count < argc; count++) for(count = 0; count < argc; count++)
{ {
char *argv2[4] = { 0 }; char *argv2[4] = { 0 };
uint32_t argc2 = switch_separate_string(argv[count], '=', argv2, (sizeof(argv2) / sizeof(argv2[0]))); uint32_t argc2 = switch_separate_string(argv[count], '=', argv2, (sizeof(argv2) / sizeof(argv2[0])));
if(argc2 == 2) { if(argc2 == 2) {
switch_url_decode(argv2[0]); switch_url_decode(argv2[0]);
switch_url_decode(argv2[1]); switch_url_decode(argv2[1]);
@ -419,19 +419,19 @@ static void http_sendfile_initialize_curl(http_sendfile_data_t *http_data)
} }
} }
} }
/* Fill in the submit field too, even if this isn't really needed */ /* Fill in the submit field too, even if this isn't really needed */
curl_formadd(&http_data->formpost, &http_data->lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "or_die", CURLFORM_END); curl_formadd(&http_data->formpost, &http_data->lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "or_die", CURLFORM_END);
/* what URL that receives this POST */ /* what URL that receives this POST */
curl_easy_setopt(http_data->curl_handle, CURLOPT_HTTPPOST, http_data->formpost); curl_easy_setopt(http_data->curl_handle, CURLOPT_HTTPPOST, http_data->formpost);
// This part actually fires off the curl, captures the HTTP response code, and then frees up the handle. // This part actually fires off the curl, captures the HTTP response code, and then frees up the handle.
curl_easy_perform(http_data->curl_handle); curl_easy_perform(http_data->curl_handle);
curl_easy_getinfo(http_data->curl_handle, CURLINFO_RESPONSE_CODE, &http_data->http_response_code); curl_easy_getinfo(http_data->curl_handle, CURLINFO_RESPONSE_CODE, &http_data->http_response_code);
curl_easy_cleanup(http_data->curl_handle); curl_easy_cleanup(http_data->curl_handle);
// Clean up the form data from POST // Clean up the form data from POST
curl_formfree(http_data->formpost); curl_formfree(http_data->formpost);
} }
@ -454,14 +454,14 @@ static switch_status_t http_sendfile_test_file_open(http_sendfile_data_t *http_d
else else
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to create event to notify of failure to open file %s\n", http_data->filename_element); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to create event to notify of failure to open file %s\n", http_data->filename_element);
} }
if((switch_test_flag(http_data, CSO_STREAM) || switch_test_flag(http_data, CSO_NONE)) && http_data->stream) if((switch_test_flag(http_data, CSO_STREAM) || switch_test_flag(http_data, CSO_NONE)) && http_data->stream)
http_data->stream->write_function(http_data->stream, "-Err Unable to open file %s\n", http_data->filename_element); http_data->stream->write_function(http_data->stream, "-Err Unable to open file %s\n", http_data->filename_element);
if(switch_test_flag(http_data, CSO_NONE) && !http_data->stream) if(switch_test_flag(http_data, CSO_NONE) && !http_data->stream)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "curl_sendfile: Unable to open file %s\n", http_data->filename_element); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "curl_sendfile: Unable to open file %s\n", http_data->filename_element);
} }
return retval; return retval;
} }
@ -474,31 +474,31 @@ static void http_sendfile_success_report(http_sendfile_data_t *http_data, switch
char *code_as_string = switch_core_alloc(http_data->pool, 16); char *code_as_string = switch_core_alloc(http_data->pool, 16);
memset(code_as_string, 0, 16); memset(code_as_string, 0, 16);
switch_snprintf(code_as_string, 16, "%d", http_data->http_response_code); switch_snprintf(code_as_string, 16, "%d", http_data->http_response_code);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Command-Execution-Identifier", http_data->identifier_str); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Command-Execution-Identifier", http_data->identifier_str);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Filename", http_data->filename_element); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Filename", http_data->filename_element);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File-Access", "Success"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "File-Access", "Success");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "REST-HTTP-Code", code_as_string); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "REST-HTTP-Code", code_as_string);
switch_event_add_body(event, "%s", http_data->sendfile_response); switch_event_add_body(event, "%s", http_data->sendfile_response);
switch_event_fire(&event); switch_event_fire(&event);
switch_event_destroy(&event); switch_event_destroy(&event);
} }
else else
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to create a event to report on success of curl_sendfile.\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to create a event to report on success of curl_sendfile.\n");
} }
if((switch_test_flag(http_data, CSO_STREAM) || switch_test_flag(http_data, CSO_NONE) || switch_test_flag(http_data, CSO_EVENT)) && http_data->stream) if((switch_test_flag(http_data, CSO_STREAM) || switch_test_flag(http_data, CSO_NONE) || switch_test_flag(http_data, CSO_EVENT)) && http_data->stream)
{ {
if(http_data->http_response_code == 200) if(http_data->http_response_code == 200)
http_data->stream->write_function(http_data->stream, "+200 Ok\n"); http_data->stream->write_function(http_data->stream, "+200 Ok\n");
else else
http_data->stream->write_function(http_data->stream, "-%d Err\n", http_data->http_response_code); http_data->stream->write_function(http_data->stream, "-%d Err\n", http_data->http_response_code);
if(http_data->sendfile_response_count && switch_test_flag(http_data, CSO_STREAM)) if(http_data->sendfile_response_count && switch_test_flag(http_data, CSO_STREAM))
http_data->stream->write_function(http_data->stream, "%s\n", http_data->sendfile_response); http_data->stream->write_function(http_data->stream, "%s\n", http_data->sendfile_response);
} }
if(switch_test_flag(http_data, CSO_NONE) && !http_data->stream) if(switch_test_flag(http_data, CSO_NONE) && !http_data->stream)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Sending of file %s to url %s resulted with code %lu\n", http_data->filename_element, http_data->url, http_data->http_response_code); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Sending of file %s to url %s resulted with code %lu\n", http_data->filename_element, http_data->url, http_data->http_response_code);
} }
@ -512,31 +512,31 @@ SWITCH_STANDARD_APP(http_sendfile_app_function)
http_sendfile_data_t *http_data = NULL; http_sendfile_data_t *http_data = NULL;
switch_memory_pool_t *pool = switch_core_session_get_pool(session); switch_memory_pool_t *pool = switch_core_session_get_pool(session);
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
assert(channel != NULL); assert(channel != NULL);
http_data = switch_core_alloc(pool, sizeof(http_sendfile_data_t)); http_data = switch_core_alloc(pool, sizeof(http_sendfile_data_t));
memset(http_data, 0, sizeof(http_sendfile_data_t)); memset(http_data, 0, sizeof(http_sendfile_data_t));
http_data->pool = pool; http_data->pool = pool;
// Either the parameters are provided on the data="" or else they are provided as chanvars. No mixing & matching // Either the parameters are provided on the data="" or else they are provided as chanvars. No mixing & matching
if(!zstr(data)) if(!zstr(data))
{ {
http_data->mydata = switch_core_strdup(http_data->pool, data); http_data->mydata = switch_core_strdup(http_data->pool, data);
if ((argc = switch_separate_string(http_data->mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) if ((argc = switch_separate_string(http_data->mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])))))
{ {
uint8_t i = 0; uint8_t i = 0;
if (argc < 2 || argc > 5) if (argc < 2 || argc > 5)
goto http_sendfile_app_usage; goto http_sendfile_app_usage;
http_data->url = switch_core_strdup(http_data->pool, argv[i++]); http_data->url = switch_core_strdup(http_data->pool, argv[i++]);
switch_url_decode(argv[i]); switch_url_decode(argv[i]);
argc2 = switch_separate_string(argv[i++], '=', argv2, (sizeof(argv2) / sizeof(argv2[0]))); argc2 = switch_separate_string(argv[i++], '=', argv2, (sizeof(argv2) / sizeof(argv2[0])));
if(argc2 == 2) if(argc2 == 2)
{ {
http_data->filename_element_name = switch_core_strdup(pool, argv2[0]); http_data->filename_element_name = switch_core_strdup(pool, argv2[0]);
@ -544,11 +544,11 @@ SWITCH_STANDARD_APP(http_sendfile_app_function)
} }
else else
goto http_sendfile_app_usage; goto http_sendfile_app_usage;
if(argc > 2) if(argc > 2)
{ {
http_data->extrapost_elements = switch_core_strdup(pool, argv[i++]); http_data->extrapost_elements = switch_core_strdup(pool, argv[i++]);
if(argc > 3) if(argc > 3)
{ {
if(!strncasecmp(argv[i++], "event", 5)) if(!strncasecmp(argv[i++], "event", 5))
@ -556,7 +556,7 @@ SWITCH_STANDARD_APP(http_sendfile_app_function)
switch_set_flag(http_data, CSO_EVENT); switch_set_flag(http_data, CSO_EVENT);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Setting output to event handler.\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Setting output to event handler.\n");
} }
if(argc > 4) if(argc > 4)
{ {
if(strncasecmp(argv[i], "uuid", 4)) if(strncasecmp(argv[i], "uuid", 4))
@ -572,16 +572,16 @@ SWITCH_STANDARD_APP(http_sendfile_app_function)
{ {
char *send_output = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_report", SWITCH_TRUE, -1); char *send_output = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_report", SWITCH_TRUE, -1);
char *identifier = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_identifier", SWITCH_TRUE, -1); char *identifier = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_identifier", SWITCH_TRUE, -1);
http_data->url = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_url", SWITCH_TRUE, -1); http_data->url = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_url", SWITCH_TRUE, -1);
http_data->filename_element_name = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_filename_element", SWITCH_TRUE, -1); http_data->filename_element_name = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_filename_element", SWITCH_TRUE, -1);
http_data->filename_element = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_filename", SWITCH_TRUE, -1); http_data->filename_element = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_filename", SWITCH_TRUE, -1);
http_data->extrapost_elements = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_extrapost", SWITCH_TRUE, -1); http_data->extrapost_elements = (char *) switch_channel_get_variable_dup(channel, "curl_sendfile_extrapost", SWITCH_TRUE, -1);
if(zstr(http_data->url) || zstr(http_data->filename_element) || zstr(http_data->filename_element_name)) if(zstr(http_data->url) || zstr(http_data->filename_element) || zstr(http_data->filename_element_name))
goto http_sendfile_app_usage; goto http_sendfile_app_usage;
if(!zstr(send_output)) if(!zstr(send_output))
{ {
if(!strncasecmp(send_output, "event", 5)) if(!strncasecmp(send_output, "event", 5))
@ -599,7 +599,7 @@ SWITCH_STANDARD_APP(http_sendfile_app_function)
switch_set_flag(http_data, CSO_NONE); switch_set_flag(http_data, CSO_NONE);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No parameter specified for curl_sendfile_report. Setting default of 'none'.\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No parameter specified for curl_sendfile_report. Setting default of 'none'.\n");
} }
if(!zstr(identifier)) if(!zstr(identifier))
{ {
if(!strncasecmp(identifier, "uuid", 4)) if(!strncasecmp(identifier, "uuid", 4))
@ -608,33 +608,33 @@ SWITCH_STANDARD_APP(http_sendfile_app_function)
http_data->identifier_str = identifier; http_data->identifier_str = identifier;
} }
} }
switch_url_decode(http_data->filename_element_name); switch_url_decode(http_data->filename_element_name);
switch_url_decode(http_data->filename_element); switch_url_decode(http_data->filename_element);
// We need to check the file now... // We need to check the file now...
if(http_sendfile_test_file_open(http_data, event) != SWITCH_STATUS_SUCCESS) if(http_sendfile_test_file_open(http_data, event) != SWITCH_STATUS_SUCCESS)
goto http_sendfile_app_done; goto http_sendfile_app_done;
switch_file_close(http_data->file_handle); switch_file_close(http_data->file_handle);
switch_url_decode(http_data->url); switch_url_decode(http_data->url);
http_sendfile_initialize_curl(http_data); http_sendfile_initialize_curl(http_data);
http_sendfile_success_report(http_data, event); http_sendfile_success_report(http_data, event);
goto http_sendfile_app_done; goto http_sendfile_app_done;
http_sendfile_app_usage: http_sendfile_app_usage:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failure: Usage: <data=\"%s\">\nOr you can set chanvars curl_senfile_url, curl_sendfile_filename_element, curl_sendfile_filename, curl_sendfile_extrapost\n", HTTP_SENDFILE_APP_SYNTAX); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failure: Usage: <data=\"%s\">\nOr you can set chanvars curl_senfile_url, curl_sendfile_filename_element, curl_sendfile_filename, curl_sendfile_extrapost\n", HTTP_SENDFILE_APP_SYNTAX);
http_sendfile_app_done: http_sendfile_app_done:
if (http_data->headers) if (http_data->headers)
{ {
switch_curl_slist_free_all(http_data->headers); switch_curl_slist_free_all(http_data->headers);
} }
return; return;
} }
@ -648,7 +648,7 @@ SWITCH_STANDARD_API(http_sendfile_function)
http_sendfile_data_t *http_data = NULL; http_sendfile_data_t *http_data = NULL;
switch_memory_pool_t *pool = NULL; switch_memory_pool_t *pool = NULL;
switch_event_t *event = NULL; switch_event_t *event = NULL;
if(zstr(cmd)) if(zstr(cmd))
{ {
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
@ -664,31 +664,31 @@ SWITCH_STANDARD_API(http_sendfile_function)
switch_core_new_memory_pool(&pool); switch_core_new_memory_pool(&pool);
new_memory_pool = SWITCH_TRUE; // So we can properly destroy the memory pool new_memory_pool = SWITCH_TRUE; // So we can properly destroy the memory pool
} }
http_data = switch_core_alloc(pool, sizeof(http_sendfile_data_t)); http_data = switch_core_alloc(pool, sizeof(http_sendfile_data_t));
memset(http_data, 0, sizeof(http_sendfile_data_t)); memset(http_data, 0, sizeof(http_sendfile_data_t));
http_data->mydata = switch_core_strdup(pool, cmd); http_data->mydata = switch_core_strdup(pool, cmd);
http_data->stream = stream; http_data->stream = stream;
http_data->pool = pool; http_data->pool = pool;
// stream->write_function(stream,"\ncmd is %s\nmydata is %s\n", cmd, http_data->mydata); // stream->write_function(stream,"\ncmd is %s\nmydata is %s\n", cmd, http_data->mydata);
if ((argc = switch_separate_string(http_data->mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))))) if ((argc = switch_separate_string(http_data->mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])))))
{ {
uint8_t i = 0; uint8_t i = 0;
if (argc < 2 || argc > 5) if (argc < 2 || argc > 5)
{ {
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
goto http_sendfile_usage; goto http_sendfile_usage;
} }
http_data->url = switch_core_strdup(pool, argv[i++]); http_data->url = switch_core_strdup(pool, argv[i++]);
switch_url_decode(argv[i]); switch_url_decode(argv[i]);
argc2 = switch_separate_string(argv[i++], '=', argv2, (sizeof(argv2) / sizeof(argv2[0]))); argc2 = switch_separate_string(argv[i++], '=', argv2, (sizeof(argv2) / sizeof(argv2[0])));
if(argc2 == 2) if(argc2 == 2)
{ {
http_data->filename_element_name = switch_core_strdup(pool, argv2[0]); http_data->filename_element_name = switch_core_strdup(pool, argv2[0]);
@ -696,14 +696,14 @@ SWITCH_STANDARD_API(http_sendfile_function)
} }
else else
goto http_sendfile_usage; goto http_sendfile_usage;
switch_url_decode(http_data->filename_element_name); switch_url_decode(http_data->filename_element_name);
switch_url_decode(http_data->filename_element); switch_url_decode(http_data->filename_element);
if(argc > 2) if(argc > 2)
{ {
http_data->extrapost_elements = switch_core_strdup(pool, argv[i++]); http_data->extrapost_elements = switch_core_strdup(pool, argv[i++]);
if(argc > 3) if(argc > 3)
{ {
if(!strncasecmp(argv[i], "event", 5)) if(!strncasecmp(argv[i], "event", 5))
@ -719,31 +719,31 @@ SWITCH_STANDARD_API(http_sendfile_function)
{ {
if(strncasecmp(argv[i], "none", 4)) if(strncasecmp(argv[i], "none", 4))
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Invalid 4th parameter set for curl_sendfile. Defaulting to \"none\"\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Invalid 4th parameter set for curl_sendfile. Defaulting to \"none\"\n");
switch_set_flag(http_data, CSO_NONE); switch_set_flag(http_data, CSO_NONE);
} }
i++; i++;
if(argc > 4) if(argc > 4)
http_data->identifier_str = switch_core_strdup(pool, argv[i++]); http_data->identifier_str = switch_core_strdup(pool, argv[i++]);
} }
} }
} }
// We need to check the file now... // We need to check the file now...
if(http_sendfile_test_file_open(http_data, event) != SWITCH_STATUS_SUCCESS) if(http_sendfile_test_file_open(http_data, event) != SWITCH_STATUS_SUCCESS)
goto http_sendfile_done; goto http_sendfile_done;
switch_file_close(http_data->file_handle); switch_file_close(http_data->file_handle);
switch_url_decode(http_data->url); switch_url_decode(http_data->url);
http_sendfile_initialize_curl(http_data); http_sendfile_initialize_curl(http_data);
http_sendfile_success_report(http_data, event); http_sendfile_success_report(http_data, event);
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
goto http_sendfile_done; goto http_sendfile_done;
@ -756,12 +756,12 @@ http_sendfile_done:
{ {
switch_curl_slist_free_all(http_data->headers); switch_curl_slist_free_all(http_data->headers);
} }
if (new_memory_pool == SWITCH_TRUE) if (new_memory_pool == SWITCH_TRUE)
{ {
switch_core_destroy_memory_pool(&pool); switch_core_destroy_memory_pool(&pool);
} }
return status; return status;
} }
@ -1030,7 +1030,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_curl_load)
SWITCH_ADD_API(api_interface, "curl", "curl API", curl_function, SYNTAX); SWITCH_ADD_API(api_interface, "curl", "curl API", curl_function, SYNTAX);
SWITCH_ADD_APP(app_interface, "curl", "Perform a http request", "Perform a http request", SWITCH_ADD_APP(app_interface, "curl", "Perform a http request", "Perform a http request",
curl_app_function, SYNTAX, SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC); curl_app_function, SYNTAX, SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC);
SWITCH_ADD_API(api_interface, "curl_sendfile", "curl_sendfile API", http_sendfile_function, HTTP_SENDFILE_SYNTAX); SWITCH_ADD_API(api_interface, "curl_sendfile", "curl_sendfile API", http_sendfile_function, HTTP_SENDFILE_SYNTAX);
SWITCH_ADD_APP(app_interface, "curl_sendfile", "Send a file and some optional post variables via HTTP", "Send a file and some optional post variables via HTTP", SWITCH_ADD_APP(app_interface, "curl_sendfile", "Send a file and some optional post variables via HTTP", "Send a file and some optional post variables via HTTP",
http_sendfile_app_function, HTTP_SENDFILE_APP_SYNTAX, SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC); http_sendfile_app_function, HTTP_SENDFILE_APP_SYNTAX, SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC);
@ -1045,7 +1045,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_curl_shutdown)
{ {
switch_event_free_subclass(HTTP_SENDFILE_ACK_EVENT); switch_event_free_subclass(HTTP_SENDFILE_ACK_EVENT);
/* Cleanup dynamically allocated config settings */ /* Cleanup dynamically allocated config settings */
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }

View File

@ -728,11 +728,11 @@ static switch_status_t video_thread_callback(switch_core_session_t *session, swi
switch_img_to_raw(frame->img, context->rawImage->imageData, context->rawImage->widthStep, SWITCH_IMG_FMT_RGB24); switch_img_to_raw(frame->img, context->rawImage->imageData, context->rawImage->widthStep, SWITCH_IMG_FMT_RGB24);
detectAndDraw(context); detectAndDraw(context);
if (context->shape_idx && context->shape[0].w && context->last_shape[0].w) { if (context->shape_idx && context->shape[0].w && context->last_shape[0].w) {
int max, min; int max, min;
int pct; int pct;
if (context->shape[0].w > context->last_shape[0].w) { if (context->shape[0].w > context->last_shape[0].w) {
max = context->shape[0].w; max = context->shape[0].w;
min = context->last_shape[0].w; min = context->last_shape[0].w;
@ -742,7 +742,7 @@ static switch_status_t video_thread_callback(switch_core_session_t *session, swi
} }
pct = 100 - (((double)min / (double)max) * 100.0f ); pct = 100 - (((double)min / (double)max) * 100.0f );
if (pct > 25) { if (pct > 25) {
context->detected.simo_count = 0; context->detected.simo_count = 0;
memset(context->last_shape, 0, sizeof(context->last_shape[0]) * MAX_SHAPES); memset(context->last_shape, 0, sizeof(context->last_shape[0]) * MAX_SHAPES);
@ -1331,7 +1331,7 @@ SWITCH_STANDARD_API(cv_bug_api_function)
flags = SMBF_VIDEO_PATCH; flags = SMBF_VIDEO_PATCH;
} }
if ((status = switch_core_media_bug_add(rsession, function, NULL, if ((status = switch_core_media_bug_add(rsession, function, NULL,
cv_bug_callback, context, 0, flags, &bug)) != SWITCH_STATUS_SUCCESS) { cv_bug_callback, context, 0, flags, &bug)) != SWITCH_STATUS_SUCCESS) {
stream->write_function(stream, "-ERR Failure!\n"); stream->write_function(stream, "-ERR Failure!\n");
switch_thread_rwlock_unlock(MODULE_INTERFACE->rwlock); switch_thread_rwlock_unlock(MODULE_INTERFACE->rwlock);
@ -1367,7 +1367,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_cv_load)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass %s!\n", MY_EVENT_VIDEO_DETECT); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass %s!\n", MY_EVENT_VIDEO_DETECT);
return SWITCH_STATUS_TERM; return SWITCH_STATUS_TERM;
} }
*module_interface = switch_loadable_module_create_module_interface(pool, modname); *module_interface = switch_loadable_module_create_module_interface(pool, modname);
MODULE_INTERFACE = *module_interface; MODULE_INTERFACE = *module_interface;
@ -1390,7 +1390,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cv_shutdown)
{ {
switch_event_free_subclass(MY_EVENT_VIDEO_DETECT); switch_event_free_subclass(MY_EVENT_VIDEO_DETECT);
return SWITCH_STATUS_UNLOAD; return SWITCH_STATUS_UNLOAD;
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Ken Rice <krice@freeswitch.org> * Ken Rice <krice@freeswitch.org>
* Mathieu Rene <mathieu.rene@gmail.com> * Mathieu Rene <mathieu.rene@gmail.com>
@ -89,7 +89,7 @@ switch_cache_db_handle_t *limit_get_db_handle(void)
{ {
switch_cache_db_handle_t *dbh = NULL; switch_cache_db_handle_t *dbh = NULL;
char *dsn; char *dsn;
if (!zstr(globals.odbc_dsn)) { if (!zstr(globals.odbc_dsn)) {
dsn = globals.odbc_dsn; dsn = globals.odbc_dsn;
} else { } else {
@ -99,7 +99,7 @@ switch_cache_db_handle_t *limit_get_db_handle(void)
if (switch_cache_db_get_db_handle_dsn(&dbh, dsn) != SWITCH_STATUS_SUCCESS) { if (switch_cache_db_get_db_handle_dsn(&dbh, dsn) != SWITCH_STATUS_SUCCESS) {
dbh = NULL; dbh = NULL;
} }
return dbh; return dbh;
} }
@ -158,7 +158,7 @@ static char * limit_execute_sql2str(char *sql, char *str, size_t len)
cbt.len = len; cbt.len = len;
limit_execute_sql_callback(sql, sql2str_callback, &cbt); limit_execute_sql_callback(sql, sql2str_callback, &cbt);
return cbt.buf; return cbt.buf;
} }
@ -229,7 +229,7 @@ SWITCH_LIMIT_RELEASE(limit_release_db)
} }
limit_execute_sql(sql); limit_execute_sql(sql);
switch_safe_free(sql); switch_safe_free(sql);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -238,12 +238,12 @@ SWITCH_LIMIT_USAGE(limit_usage_db)
char usagestr[128] = ""; char usagestr[128] = "";
int usage = 0; int usage = 0;
char *sql = NULL; char *sql = NULL;
sql = switch_mprintf("select count(hostname) from limit_data where realm='%q' and id='%q'", realm, resource); sql = switch_mprintf("select count(hostname) from limit_data where realm='%q' and id='%q'", realm, resource);
limit_execute_sql2str(sql, usagestr, sizeof(usagestr)); limit_execute_sql2str(sql, usagestr, sizeof(usagestr));
switch_safe_free(sql); switch_safe_free(sql);
usage = atoi(usagestr); usage = atoi(usagestr);
return usage; return usage;
} }
@ -253,7 +253,7 @@ SWITCH_LIMIT_RESET(limit_reset_db)
sql = switch_mprintf("delete from limit_data where hostname='%q';", globals.hostname); sql = switch_mprintf("delete from limit_data where hostname='%q';", globals.hostname);
limit_execute_sql(sql); limit_execute_sql(sql);
switch_safe_free(sql); switch_safe_free(sql);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -262,7 +262,7 @@ SWITCH_LIMIT_STATUS(limit_status_db)
char count[128] = ""; char count[128] = "";
char *ret = NULL; char *ret = NULL;
char *sql = NULL; char *sql = NULL;
sql = switch_mprintf("select count(hostname) from limit_data where hostname='%q'", globals.hostname); sql = switch_mprintf("select count(hostname) from limit_data where hostname='%q'", globals.hostname);
limit_execute_sql2str(sql, count, sizeof(count)); limit_execute_sql2str(sql, count, sizeof(count));
switch_safe_free(sql); switch_safe_free(sql);
@ -686,7 +686,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_db_load)
/* indicate that the module should continue to be loaded */ /* indicate that the module should continue to be loaded */
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Marc Olivier Chouinard <mochouinard at moctel dot com> * Marc Olivier Chouinard <mochouinard at moctel dot com>
* Emmanuel Schmidbauer <e.schmidbauer@gmail.com> * Emmanuel Schmidbauer <e.schmidbauer@gmail.com>
* *
@ -194,7 +194,7 @@ switch_cache_db_handle_t *directory_get_db_handle(void)
{ {
switch_cache_db_handle_t *dbh = NULL; switch_cache_db_handle_t *dbh = NULL;
char *dsn; char *dsn;
if (!zstr(globals.odbc_dsn)) { if (!zstr(globals.odbc_dsn)) {
dsn = globals.odbc_dsn; dsn = globals.odbc_dsn;
} else { } else {
@ -204,7 +204,7 @@ switch_cache_db_handle_t *directory_get_db_handle(void)
if (switch_cache_db_get_db_handle_dsn(&dbh, dsn) != SWITCH_STATUS_SUCCESS) { if (switch_cache_db_get_db_handle_dsn(&dbh, dsn) != SWITCH_STATUS_SUCCESS) {
dbh = NULL; dbh = NULL;
} }
return dbh; return dbh;
} }
@ -661,7 +661,7 @@ static switch_status_t populate_database(switch_core_session_t *session, dir_pro
sql = generate_sql_entry_for_user(session, ux, profile->use_number_alias); sql = generate_sql_entry_for_user(session, ux, profile->use_number_alias);
switch_xml_free(ux); switch_xml_free(ux);
} }
} else { } else {
sql = generate_sql_entry_for_user(session, ut, profile->use_number_alias); sql = generate_sql_entry_for_user(session, ut, profile->use_number_alias);
} }
@ -677,7 +677,7 @@ static switch_status_t populate_database(switch_core_session_t *session, dir_pro
sql = NULL; sql = NULL;
} }
} }
if (++count >= 100) { if (++count >= 100) {
count = 0; count = 0;
sql = switch_mprintf("BEGIN;%s;COMMIT;", sqlvalues); sql = switch_mprintf("BEGIN;%s;COMMIT;", sqlvalues);
@ -1018,7 +1018,7 @@ SWITCH_STANDARD_APP(directory_function)
switch_copy_string(s_param.profile, profile_name, 255); switch_copy_string(s_param.profile, profile_name, 255);
switch_copy_string(s_param.domain, domain_name, 255); switch_copy_string(s_param.domain, domain_name, 255);
if (!(search_by = switch_channel_get_variable(channel, "directory_search_order"))) { if (!(search_by = switch_channel_get_variable(channel, "directory_search_order"))) {
search_by = profile->search_order; search_by = profile->search_order;
} }

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<include> <include>
<extension name="test gateway distro"> <extension name="test gateway distro">
<condition field="destination_number" expression="^(.*)$"> <condition field="destination_number" expression="^(.*)$">
<action application="bridge" data="sofia/gateway/${distributor(test)}/$1"/> <action application="bridge" data="sofia/gateway/${distributor(test)}/$1"/>

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Neal Horman <neal at wanlink dot com> * Neal Horman <neal at wanlink dot com>
* *
@ -37,7 +37,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_distributor_shutdown);
SWITCH_MODULE_RUNTIME_FUNCTION(mod_distributor_runtime); SWITCH_MODULE_RUNTIME_FUNCTION(mod_distributor_runtime);
SWITCH_MODULE_LOAD_FUNCTION(mod_distributor_load); SWITCH_MODULE_LOAD_FUNCTION(mod_distributor_load);
/* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime) /* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime)
* Defines a switch_loadable_module_function_table_t and a static const char[] modname * Defines a switch_loadable_module_function_table_t and a static const char[] modname
*/ */
SWITCH_MODULE_DEFINITION(mod_distributor, mod_distributor_load, mod_distributor_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_distributor, mod_distributor_load, mod_distributor_shutdown, NULL);
@ -173,7 +173,7 @@ static int load_config(int reloading)
switch_zmalloc(node, sizeof(*node)); switch_zmalloc(node, sizeof(*node));
node->name = strdup(name_attr); node->name = strdup(name_attr);
node->wval = tmp; node->wval = tmp;
if (np) { if (np) {
np->next = node; np->next = node;
} else { } else {
@ -228,7 +228,7 @@ static struct dist_node *find_next(struct dist_list *list, int etotal, char **ex
for (;;) { for (;;) {
top: top:
if (++loops > 1000) { if (++loops > 1000) {
break; break;
} }
@ -253,7 +253,7 @@ static struct dist_node *find_next(struct dist_list *list, int etotal, char **ex
if (match) { if (match) {
int i; int i;
match->cur_weight++; match->cur_weight++;
list->lastnode = match; list->lastnode = match;
list->last = mx; list->last = mx;
@ -266,7 +266,7 @@ static struct dist_node *find_next(struct dist_list *list, int etotal, char **ex
goto top; goto top;
} }
} }
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "Choose %s\n", match->name); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "Choose %s\n", match->name);
return match; return match;
@ -279,7 +279,7 @@ static struct dist_node *find_next(struct dist_list *list, int etotal, char **ex
} }
} }
return NULL; return NULL;
} }
@ -294,7 +294,7 @@ static char *dist_engine(const char *name)
int argc = 0; int argc = 0;
char *argv[100] = { 0 }; char *argv[100] = { 0 };
if ((except = strchr(myname, ' '))) { if ((except = strchr(myname, ' '))) {
*except++ = '\0'; *except++ = '\0';
argc = switch_split(except, ' ', argv); argc = switch_split(except, ' ', argv);
@ -443,7 +443,7 @@ SWITCH_STANDARD_API(distributor_ctl_function)
*e++ = '\0'; *e++ = '\0';
if ((np = find_node(list, argv[i]))) { if ((np = find_node(list, argv[i]))) {
int tmp = -1; int tmp = -1;
if (e) { if (e) {
tmp = atoi(e); tmp = atoi(e);
} }
@ -476,7 +476,7 @@ SWITCH_STANDARD_API(distributor_ctl_function)
} }
} }
} }
err: err:
if (err) { if (err) {

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2015, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Ken Rice <krice@freeswitch.org> * Ken Rice <krice@freeswitch.org>
* Michael Murdock <mike at mmurdock dot org> * Michael Murdock <mike at mmurdock dot org>
@ -129,7 +129,7 @@ static switch_status_t digit_nomatch_action_callback(switch_ivr_dmachine_match_t
switch_channel_set_variable(channel, "last_non_matching_digits", match->match_digits); switch_channel_set_variable(channel, "last_non_matching_digits", match->match_digits);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(use_session), SWITCH_LOG_DEBUG, "%s Digit NOT match binding [%s]\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(use_session), SWITCH_LOG_DEBUG, "%s Digit NOT match binding [%s]\n",
switch_channel_get_name(channel), match->match_digits); switch_channel_get_name(channel), match->match_digits);
if (switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) { if (switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) {
@ -137,14 +137,14 @@ static switch_status_t digit_nomatch_action_callback(switch_ivr_dmachine_match_t
if ((status = switch_core_session_queue_event(use_session, &event)) != SWITCH_STATUS_SUCCESS) { if ((status = switch_core_session_queue_event(use_session, &event)) != SWITCH_STATUS_SUCCESS) {
switch_event_destroy(&event); switch_event_destroy(&event);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(use_session), SWITCH_LOG_WARNING, "%s event queue failure.\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(use_session), SWITCH_LOG_WARNING, "%s event queue failure.\n",
switch_core_session_get_name(use_session)); switch_core_session_get_name(use_session));
} }
} }
/* send it back around and skip the dmachine */ /* send it back around and skip the dmachine */
switch_channel_queue_dtmf_string(channel, match->match_digits); switch_channel_queue_dtmf_string(channel, match->match_digits);
if (use_session != session) { if (use_session != session) {
switch_core_session_rwunlock(use_session); switch_core_session_rwunlock(use_session);
} }
@ -166,7 +166,7 @@ static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match)
int x = 0; int x = 0;
char *flags = ""; char *flags = "";
if (act->target == DIGIT_TARGET_PEER || act->target == DIGIT_TARGET_BOTH) { if (act->target == DIGIT_TARGET_PEER || act->target == DIGIT_TARGET_BOTH) {
if (switch_core_session_get_partner(act->session, &use_session) != SWITCH_STATUS_SUCCESS) { if (switch_core_session_get_partner(act->session, &use_session) != SWITCH_STATUS_SUCCESS) {
use_session = act->session; use_session = act->session;
} }
@ -183,14 +183,14 @@ static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match)
switch_channel_set_variable(channel, "last_matching_digits", match->match_digits); switch_channel_set_variable(channel, "last_matching_digits", match->match_digits);
if (switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) { if (switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA) == SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(act->session), SWITCH_LOG_DEBUG, "%s Digit match binding [%s][%s]\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(act->session), SWITCH_LOG_DEBUG, "%s Digit match binding [%s][%s]\n",
switch_channel_get_name(channel), act->string, act->value); switch_channel_get_name(channel), act->string, act->value);
if (!strncasecmp(string, "exec", 4)) { if (!strncasecmp(string, "exec", 4)) {
char *e; char *e;
string += 4; string += 4;
if (*string == ':') { if (*string == ':') {
string++; string++;
@ -220,7 +220,7 @@ static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match)
if ((status = switch_core_session_queue_event(use_session, &event)) != SWITCH_STATUS_SUCCESS) { if ((status = switch_core_session_queue_event(use_session, &event)) != SWITCH_STATUS_SUCCESS) {
switch_event_destroy(&event); switch_event_destroy(&event);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(use_session), SWITCH_LOG_WARNING, "%s event queue failure.\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(use_session), SWITCH_LOG_WARNING, "%s event queue failure.\n",
switch_core_session_get_name(use_session)); switch_core_session_get_name(use_session));
} }
} }
@ -244,7 +244,7 @@ static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match)
switch_api_execute(string, act->value, NULL, &stream); switch_api_execute(string, act->value, NULL, &stream);
if (stream.data) { if (stream.data) {
switch_channel_set_variable(channel, "bind_digit_action_api_result", (char *)stream.data); switch_channel_set_variable(channel, "bind_digit_action_api_result", (char *)stream.data);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(act->session), SWITCH_LOG_DEBUG, "%s Digit match binding [%s][%s] api executed, %s\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(act->session), SWITCH_LOG_DEBUG, "%s Digit match binding [%s][%s] api executed, %s\n",
switch_core_session_get_name(use_session), act->string, act->value, (char *)stream.data); switch_core_session_get_name(use_session), act->string, act->value, (char *)stream.data);
} else { } else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(act->session), SWITCH_LOG_DEBUG, "%s Digit match binding [%s][%s] api executed\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(act->session), SWITCH_LOG_DEBUG, "%s Digit match binding [%s][%s] api executed\n",
@ -252,7 +252,7 @@ static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match)
} }
switch_safe_free(stream.data); switch_safe_free(stream.data);
} }
if (use_session != act->session) { if (use_session != act->session) {
switch_core_session_rwunlock(use_session); switch_core_session_rwunlock(use_session);
@ -275,7 +275,7 @@ static switch_digit_action_target_t str2target(const char *target_str)
if (!strcasecmp(target_str, "both")) { if (!strcasecmp(target_str, "both")) {
return DIGIT_TARGET_BOTH; return DIGIT_TARGET_BOTH;
} }
return DIGIT_TARGET_SELF; return DIGIT_TARGET_SELF;
} }
@ -341,7 +341,7 @@ SWITCH_STANDARD_APP(digit_action_set_realm_function)
return; return;
} }
if ((dmachine = switch_core_session_get_dmachine(session, target))) { if ((dmachine = switch_core_session_get_dmachine(session, target))) {
switch_ivr_dmachine_set_realm(dmachine, realm); switch_ivr_dmachine_set_realm(dmachine, realm);
} }
@ -349,7 +349,7 @@ SWITCH_STANDARD_APP(digit_action_set_realm_function)
} }
static void bind_to_session(switch_core_session_t *session, static void bind_to_session(switch_core_session_t *session,
const char *arg0, const char *arg1, const char *arg2, const char *arg3, const char *arg0, const char *arg1, const char *arg2, const char *arg3,
switch_digit_action_target_t target, switch_digit_action_target_t bind_target) switch_digit_action_target_t target, switch_digit_action_target_t bind_target)
{ {
@ -367,16 +367,16 @@ static void bind_to_session(switch_core_session_t *session,
if ((var = switch_channel_get_variable(channel, "bind_digit_digit_timeout"))) { if ((var = switch_channel_get_variable(channel, "bind_digit_digit_timeout"))) {
digit_timeout = switch_atoul(var); digit_timeout = switch_atoul(var);
} }
if ((var = switch_channel_get_variable(channel, "bind_digit_input_timeout"))) { if ((var = switch_channel_get_variable(channel, "bind_digit_input_timeout"))) {
input_timeout = switch_atoul(var); input_timeout = switch_atoul(var);
} }
switch_ivr_dmachine_create(&dmachine, "DPTOOLS", NULL, digit_timeout, input_timeout, NULL, digit_nomatch_action_callback, session); switch_ivr_dmachine_create(&dmachine, "DPTOOLS", NULL, digit_timeout, input_timeout, NULL, digit_nomatch_action_callback, session);
switch_core_session_set_dmachine(session, dmachine, target); switch_core_session_set_dmachine(session, dmachine, target);
} }
act = switch_core_session_alloc(session, sizeof(*act)); act = switch_core_session_alloc(session, sizeof(*act));
act->realm = switch_core_session_strdup(session, arg0); act->realm = switch_core_session_strdup(session, arg0);
act->input = switch_core_session_strdup(session, arg1); act->input = switch_core_session_strdup(session, arg1);
@ -404,7 +404,7 @@ static void bind_to_session(switch_core_session_t *session,
} }
switch_ivr_dmachine_bind(dmachine, act->realm, act->input, is_priority, 0, digit_action_callback, act); switch_ivr_dmachine_bind(dmachine, act->realm, act->input, is_priority, 0, digit_action_callback, act);
if ((terminators = switch_channel_get_variable(channel, "bda_terminators"))) { if ((terminators = switch_channel_get_variable(channel, "bda_terminators"))) {
switch_ivr_dmachine_set_terminators(dmachine, terminators); switch_ivr_dmachine_set_terminators(dmachine, terminators);
} }
@ -617,7 +617,7 @@ SWITCH_STANDARD_APP(keepalive_function)
msg.message_id = SWITCH_MESSAGE_INDICATE_KEEPALIVE; msg.message_id = SWITCH_MESSAGE_INDICATE_KEEPALIVE;
msg.numeric_arg = seconds; msg.numeric_arg = seconds;
switch_core_session_receive_message(session, &msg); switch_core_session_receive_message(session, &msg);
switch_core_session_enable_heartbeat(session, seconds); switch_core_session_enable_heartbeat(session, seconds);
return; return;
} }
@ -660,7 +660,7 @@ SWITCH_STANDARD_APP(rename_function)
switch_file_rename(argv[0], argv[1], switch_core_session_get_pool(session)); switch_file_rename(argv[0], argv[1], switch_core_session_get_pool(session));
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s RENAME: %s %s\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s RENAME: %s %s\n",
switch_channel_get_name(switch_core_session_get_channel(session)), argv[0], argv[1]); switch_channel_get_name(switch_core_session_get_channel(session)), argv[0], argv[1]);
} else { } else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Usage: %s\n", RENAME_SYNTAX); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Usage: %s\n", RENAME_SYNTAX);
} }
@ -672,7 +672,7 @@ SWITCH_STANDARD_APP(transfer_vars_function)
char *argv[1] = { 0 }; char *argv[1] = { 0 };
int argc; int argc;
char *lbuf = NULL; char *lbuf = NULL;
if (!zstr(data) && (lbuf = switch_core_session_strdup(session, data)) if (!zstr(data) && (lbuf = switch_core_session_strdup(session, data))
&& (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) >= 1) { && (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) >= 1) {
switch_core_session_t *nsession = NULL; switch_core_session_t *nsession = NULL;
@ -922,7 +922,7 @@ SWITCH_STANDARD_APP(eavesdrop_function)
switch_safe_free(e_data.uuid_list[x]); switch_safe_free(e_data.uuid_list[x]);
} }
e_data.total = 0; e_data.total = 0;
if (switch_core_db_handle(&db) != SWITCH_STATUS_SUCCESS) { if (switch_core_db_handle(&db) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Database Error!\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Database Error!\n");
break; break;
@ -1056,7 +1056,7 @@ SWITCH_STANDARD_APP(ring_ready_function)
return; return;
} }
} }
switch_channel_ring_ready(switch_core_session_get_channel(session)); switch_channel_ring_ready(switch_core_session_get_channel(session));
} }
@ -1182,7 +1182,7 @@ SWITCH_STANDARD_APP(sched_transfer_function)
id = switch_ivr_schedule_transfer(when, switch_core_session_get_uuid(session), argv[1], argv[2], argv[3]); id = switch_ivr_schedule_transfer(when, switch_core_session_get_uuid(session), argv[1], argv[2], argv[3]);
snprintf(ids, sizeof(ids), "%u", id); snprintf(ids, sizeof(ids), "%u", id);
switch_channel_set_variable(switch_core_session_get_channel(session), "last_sched_id", ids); switch_channel_set_variable(switch_core_session_get_channel(session), "last_sched_id", ids);
} else { } else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid Args\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid Args\n");
} }
@ -1377,7 +1377,7 @@ SWITCH_STANDARD_APP(pre_answer_function)
{ {
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
const char *arg = (char *) data; const char *arg = (char *) data;
if (!zstr(arg)) { if (!zstr(arg)) {
if (switch_stristr("is_conference", arg)) { if (switch_stristr("is_conference", arg)) {
switch_channel_set_flag(channel, CF_CONFERENCE); switch_channel_set_flag(channel, CF_CONFERENCE);
@ -1559,9 +1559,9 @@ static void base_set (switch_core_session_t *session, const char *data, switch_s
expanded = switch_channel_expand_variables(channel, val); expanded = switch_channel_expand_variables(channel, val);
} }
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s [%s]=[%s]\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s [%s]=[%s]\n",
what, switch_channel_get_name(channel), var, expanded ? expanded : "UNDEF"); what, switch_channel_get_name(channel), var, expanded ? expanded : "UNDEF");
switch_channel_add_variable_var_check(channel, var, expanded, SWITCH_FALSE, stack); switch_channel_add_variable_var_check(channel, var, expanded, SWITCH_FALSE, stack);
if (expanded && expanded != val) { if (expanded && expanded != val) {
@ -1586,11 +1586,11 @@ SWITCH_STANDARD_APP(multiset_function)
arg = switch_core_session_strdup(session, arg); arg = switch_core_session_strdup(session, arg);
argc = switch_split(arg, delim, array); argc = switch_split(arg, delim, array);
for(i = 0; i < argc; i++) { for(i = 0; i < argc; i++) {
base_set(session, array[i], SWITCH_STACK_BOTTOM); base_set(session, array[i], SWITCH_STACK_BOTTOM);
} }
} else { } else {
base_set(session, data, SWITCH_STACK_BOTTOM); base_set(session, data, SWITCH_STACK_BOTTOM);
@ -1933,7 +1933,7 @@ SWITCH_STANDARD_API(strftime_api_function)
if (!zstr(q) && (p = strchr(q, '|'))) { if (!zstr(q) && (p = strchr(q, '|'))) {
*p++ = '\0'; *p++ = '\0';
thetime = switch_time_make(atol(q), 0); thetime = switch_time_make(atol(q), 0);
q = p + 1; q = p + 1;
} else { } else {
@ -2226,7 +2226,7 @@ SWITCH_STANDARD_APP(park_state_function)
/********************************************************************************/ /********************************************************************************/
/* /*
dtmf handler function you can hook up to be executed when a digit is dialed during playback dtmf handler function you can hook up to be executed when a digit is dialed during playback
if you return anything but SWITCH_STATUS_SUCCESS the playback will stop. if you return anything but SWITCH_STATUS_SUCCESS the playback will stop.
*/ */
static switch_status_t bridge_on_dtmf(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen) static switch_status_t bridge_on_dtmf(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen)
@ -2451,7 +2451,7 @@ static switch_status_t tmp_hanguphook(switch_core_session_t *session)
if (!zstr(bond)) { if (!zstr(bond)) {
switch_core_session_t *b_session; switch_core_session_t *b_session;
if ((b_session = switch_core_session_locate(bond))) { if ((b_session = switch_core_session_locate(bond))) {
switch_channel_t *b_channel = switch_core_session_get_channel(b_session); switch_channel_t *b_channel = switch_core_session_get_channel(b_session);
if (switch_channel_up(b_channel)) { if (switch_channel_up(b_channel)) {
@ -2710,7 +2710,7 @@ SWITCH_STANDARD_APP(read_function)
valid_terminators = "#"; valid_terminators = "#";
} }
switch_ivr_read(session, min_digits, max_digits, prompt_audio_file, var_name, digit_buffer, sizeof(digit_buffer), timeout, valid_terminators, switch_ivr_read(session, min_digits, max_digits, prompt_audio_file, var_name, digit_buffer, sizeof(digit_buffer), timeout, valid_terminators,
digit_timeout); digit_timeout);
} }
@ -2799,7 +2799,7 @@ SWITCH_STANDARD_APP(play_and_get_digits_function)
} }
switch_play_and_get_digits(session, min_digits, max_digits, max_tries, timeout, valid_terminators, switch_play_and_get_digits(session, min_digits, max_digits, max_tries, timeout, valid_terminators,
prompt_audio_file, bad_input_audio_file, var_name, digit_buffer, sizeof(digit_buffer), prompt_audio_file, bad_input_audio_file, var_name, digit_buffer, sizeof(digit_buffer),
digits_regex, digit_timeout, transfer_on_failure); digits_regex, digit_timeout, transfer_on_failure);
} }
@ -3066,7 +3066,7 @@ SWITCH_STANDARD_APP(capture_function)
int ovector[30] = {0}; int ovector[30] = {0};
char *lbuf; char *lbuf;
int proceed; int proceed;
if (!zstr(data) && (lbuf = switch_core_session_strdup(session, data)) if (!zstr(data) && (lbuf = switch_core_session_strdup(session, data))
&& (argc = switch_separate_string(lbuf, '|', argv, (sizeof(argv) / sizeof(argv[0])))) == 3) { && (argc = switch_separate_string(lbuf, '|', argv, (sizeof(argv) / sizeof(argv[0])))) == 3) {
if ((proceed = switch_regex_perform(argv[1], argv[2], &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) { if ((proceed = switch_regex_perform(argv[1], argv[2], &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) {
@ -3075,7 +3075,7 @@ SWITCH_STANDARD_APP(capture_function)
switch_regex_safe_free(re); switch_regex_safe_free(re);
} else { } else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "No data specified.\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "No data specified.\n");
} }
} }
SWITCH_STANDARD_APP(record_function) SWITCH_STANDARD_APP(record_function)
@ -3164,7 +3164,7 @@ SWITCH_STANDARD_APP(record_session_function)
path = switch_core_session_strdup(session, data); path = switch_core_session_strdup(session, data);
/* Search for a space then a plus followed by only numbers at the end of the path, /* Search for a space then a plus followed by only numbers at the end of the path,
if found trim any spaces to the left/right of the plus use the left side as the if found trim any spaces to the left/right of the plus use the left side as the
path and right side as a time limit on the recording path and right side as a time limit on the recording
*/ */
@ -3385,7 +3385,7 @@ SWITCH_STANDARD_APP(audio_bridge_function)
moh = switch_channel_get_hold_music(caller_channel); moh = switch_channel_get_hold_music(caller_channel);
} }
if (!zstr(moh) && !strcasecmp(moh, "silence")) { if (!zstr(moh) && !strcasecmp(moh, "silence")) {
moh = NULL; moh = NULL;
} }
@ -3427,7 +3427,7 @@ SWITCH_STANDARD_APP(audio_bridge_function)
if (fail) { if (fail) {
int64_t wait = (int64_t)campon_sleep * 1000000; int64_t wait = (int64_t)campon_sleep * 1000000;
while (stake.running && wait > 0 && switch_channel_ready(caller_channel)) { while (stake.running && wait > 0 && switch_channel_ready(caller_channel)) {
switch_yield(100000); switch_yield(100000);
wait -= 100000; wait -= 100000;
@ -3436,8 +3436,8 @@ SWITCH_STANDARD_APP(audio_bridge_function)
} }
} }
status = switch_ivr_originate(NULL, &peer_session, status = switch_ivr_originate(NULL, &peer_session,
&cause, camp_data, campon_timeout, NULL, NULL, NULL, NULL, NULL, SOF_NONE, &cause, camp_data, campon_timeout, NULL, NULL, NULL, NULL, NULL, SOF_NONE,
switch_channel_get_cause_ptr(caller_channel)); switch_channel_get_cause_ptr(caller_channel));
@ -3564,19 +3564,19 @@ static void pickup_send_presence(const char *key_name)
switch_event_t *event; switch_event_t *event;
int count; int count;
dup_key_name = strdup(key_name); dup_key_name = strdup(key_name);
key_name = dup_key_name; key_name = dup_key_name;
if ((domain_name = strchr(dup_key_name, '@'))) { if ((domain_name = strchr(dup_key_name, '@'))) {
*domain_name++ = '\0'; *domain_name++ = '\0';
} }
if (zstr(domain_name)) { if (zstr(domain_name)) {
dup_domain_name = switch_core_get_domain(SWITCH_TRUE); dup_domain_name = switch_core_get_domain(SWITCH_TRUE);
domain_name = dup_domain_name; domain_name = dup_domain_name;
} }
if (zstr(domain_name)) { if (zstr(domain_name)) {
domain_name = "cluecon.com"; domain_name = "cluecon.com";
} }
@ -3591,7 +3591,7 @@ static void pickup_send_presence(const char *key_name)
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", dup_id); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", dup_id);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", dup_id); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", dup_id);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d call%s)", count, count == 1 ? "" : "s"); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d call%s)", count, count == 1 ? "" : "s");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
@ -3609,7 +3609,7 @@ static void pickup_send_presence(const char *key_name)
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", dup_id); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", dup_id);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", dup_id); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", dup_id);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
@ -3620,13 +3620,13 @@ static void pickup_send_presence(const char *key_name)
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "answer-state", "terminated");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "call-direction", "inbound");
switch_event_fire(&event); switch_event_fire(&event);
} }
} }
switch_safe_free(dup_domain_name); switch_safe_free(dup_domain_name);
switch_safe_free(dup_key_name); switch_safe_free(dup_key_name);
switch_safe_free(dup_id); switch_safe_free(dup_id);
} }
static void pickup_pres_event_handler(switch_event_t *event) static void pickup_pres_event_handler(switch_event_t *event)
@ -3667,7 +3667,7 @@ static void pickup_pres_event_handler(switch_event_t *event)
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", key_name); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", key_name);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", key_name, domain_name); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", key_name, domain_name);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d call%s)", count, count == 1 ? "" : "s"); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "force-status", "Active (%d call%s)", count, count == 1 ? "" : "s");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "active");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
@ -3681,7 +3681,7 @@ static void pickup_pres_event_handler(switch_event_t *event)
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "proto", PICKUP_PROTO);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", key_name); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "login", key_name);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", key_name, domain_name); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", key_name, domain_name);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "force-status", "Idle");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "rpid", "unknown");
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "event_type", "presence");
@ -3751,7 +3751,7 @@ static char *pickup_pop_uuid(const char *key, const char *uuid)
if ((head = switch_core_hash_find(globals.pickup_hash, key))) { if ((head = switch_core_hash_find(globals.pickup_hash, key))) {
switch_core_hash_delete(globals.pickup_hash, key); switch_core_hash_delete(globals.pickup_hash, key);
if (uuid) { if (uuid) {
pickup_node_t *np, *lp = NULL; pickup_node_t *np, *lp = NULL;
@ -3762,14 +3762,14 @@ static char *pickup_pop_uuid(const char *key, const char *uuid)
} else { } else {
head = np->next; head = np->next;
} }
node = np; node = np;
break; break;
} }
lp = np; lp = np;
} }
} else { } else {
node = head; node = head;
head = head->next; head = head->next;
@ -3786,13 +3786,13 @@ static char *pickup_pop_uuid(const char *key, const char *uuid)
free(node->key); free(node->key);
free(node); free(node);
} }
switch_mutex_unlock(globals.pickup_mutex); switch_mutex_unlock(globals.pickup_mutex);
if (r) pickup_send_presence(key); if (r) pickup_send_presence(key);
switch_safe_free(dup_key); switch_safe_free(dup_key);
return r; return r;
} }
@ -3829,7 +3829,7 @@ static switch_status_t pickup_event_handler(switch_core_session_t *session)
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
case CS_HANGUP: case CS_HANGUP:
{ {
if (switch_channel_test_flag(channel, CF_CHANNEL_SWAP)) { if (switch_channel_test_flag(channel, CF_CHANNEL_SWAP)) {
const char *key = switch_channel_get_variable(channel, "channel_swap_uuid"); const char *key = switch_channel_get_variable(channel, "channel_swap_uuid");
switch_core_session_t *swap_session; switch_core_session_t *swap_session;
@ -3903,7 +3903,7 @@ static switch_call_cause_t pickup_outgoing_channel(switch_core_session_t *sessio
switch_core_session_set_private(nsession, tech_pvt); switch_core_session_set_private(nsession, tech_pvt);
nchannel = switch_core_session_get_channel(nsession); nchannel = switch_core_session_get_channel(nsession);
switch_channel_set_cap(nchannel, CC_PROXY_MEDIA); switch_channel_set_cap(nchannel, CC_PROXY_MEDIA);
switch_channel_set_cap(nchannel, CC_BYPASS_MEDIA); switch_channel_set_cap(nchannel, CC_BYPASS_MEDIA);
@ -3912,7 +3912,7 @@ static switch_call_cause_t pickup_outgoing_channel(switch_core_session_t *sessio
switch_channel_set_caller_profile(nchannel, caller_profile); switch_channel_set_caller_profile(nchannel, caller_profile);
switch_channel_set_state(nchannel, CS_ROUTING); switch_channel_set_state(nchannel, CS_ROUTING);
*new_session = nsession; *new_session = nsession;
@ -3963,7 +3963,7 @@ SWITCH_STANDARD_APP(pickup_function)
if ((uuid = pickup_pop_uuid((char *)data, NULL))) { if ((uuid = pickup_pop_uuid((char *)data, NULL))) {
if ((pickup_session = switch_core_session_locate(uuid))) { if ((pickup_session = switch_core_session_locate(uuid))) {
switch_channel_t *pickup_channel = switch_core_session_get_channel(pickup_session); switch_channel_t *pickup_channel = switch_core_session_get_channel(pickup_session);
switch_caller_profile_t *pickup_caller_profile = switch_channel_get_caller_profile(pickup_channel), switch_caller_profile_t *pickup_caller_profile = switch_channel_get_caller_profile(pickup_channel),
*caller_profile = switch_channel_get_caller_profile(channel); *caller_profile = switch_channel_get_caller_profile(channel);
const char *name, *num; const char *name, *num;
switch_event_t *event; switch_event_t *event;
@ -3974,10 +3974,10 @@ SWITCH_STANDARD_APP(pickup_function)
switch_channel_set_variable(channel, hp->name, hp->value); switch_channel_set_variable(channel, hp->name, hp->value);
} }
switch_channel_set_flag(pickup_channel, CF_CHANNEL_SWAP); switch_channel_set_flag(pickup_channel, CF_CHANNEL_SWAP);
switch_channel_set_variable(pickup_channel, "channel_swap_uuid", switch_core_session_get_uuid(session)); switch_channel_set_variable(pickup_channel, "channel_swap_uuid", switch_core_session_get_uuid(session));
name = caller_profile->caller_id_name; name = caller_profile->caller_id_name;
num = caller_profile->caller_id_number; num = caller_profile->caller_id_number;
@ -3986,11 +3986,11 @@ SWITCH_STANDARD_APP(pickup_function)
caller_profile->callee_id_name = name; caller_profile->callee_id_name = name;
caller_profile->callee_id_number = num; caller_profile->callee_id_number = num;
if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) { if (switch_event_create(&event, SWITCH_EVENT_CALL_UPDATE) == SWITCH_STATUS_SUCCESS) {
const char *partner_uuid = switch_channel_get_partner_uuid(channel); const char *partner_uuid = switch_channel_get_partner_uuid(channel);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Direction", "RECV");
if (partner_uuid) { if (partner_uuid) {
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", partner_uuid); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Bridged-To", partner_uuid);
} }
@ -4221,7 +4221,7 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
} }
var_event = NULL; var_event = NULL;
} }
if (switch_xml_locate_user_merged("id", user, domain, NULL, &x_user, params) != SWITCH_STATUS_SUCCESS) { if (switch_xml_locate_user_merged("id", user, domain, NULL, &x_user, params) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Can't find user [%s@%s]\n", user, domain); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Can't find user [%s@%s]\n", user, domain);
cause = SWITCH_CAUSE_SUBSCRIBER_ABSENT; cause = SWITCH_CAUSE_SUBSCRIBER_ABSENT;
@ -4345,7 +4345,7 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
switch_safe_free(d_dest); switch_safe_free(d_dest);
} }
} }
if (new_channel && x_user) { if (new_channel && x_user) {
if ((x_params = switch_xml_child(x_user, "variables"))) { if ((x_params = switch_xml_child(x_user, "variables"))) {
for (x_param = switch_xml_child(x_params, "variable"); x_param; x_param = x_param->next) { for (x_param = switch_xml_child(x_params, "variable"); x_param; x_param = x_param->next) {
@ -4493,7 +4493,7 @@ SWITCH_STANDARD_APP(detect_silence_function)
} }
static switch_status_t event_chat_send(switch_event_t *message_event) static switch_status_t event_chat_send(switch_event_t *message_event)
{ {
switch_event_t *event; switch_event_t *event;
const char *to; const char *to;
@ -4512,7 +4512,7 @@ static switch_status_t event_chat_send(switch_event_t *message_event)
if (switch_event_fire(&event) == SWITCH_STATUS_SUCCESS) { if (switch_event_fire(&event) == SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
switch_event_destroy(&event); switch_event_destroy(&event);
return SWITCH_STATUS_MEMERR; return SWITCH_STATUS_MEMERR;
@ -4521,7 +4521,7 @@ static switch_status_t event_chat_send(switch_event_t *message_event)
static switch_status_t api_chat_send(switch_event_t *message_event) static switch_status_t api_chat_send(switch_event_t *message_event)
{ {
const char *proto; const char *proto;
const char *from; const char *from;
const char *to; const char *to;
//const char *subject; //const char *subject;
//const char *body; //const char *body;
@ -4534,7 +4534,7 @@ static switch_status_t api_chat_send(switch_event_t *message_event)
//subject = switch_event_get_header(message_event, "subject"); //subject = switch_event_get_header(message_event, "subject");
//body = switch_event_get_body(message_event); //body = switch_event_get_body(message_event);
type = switch_event_get_header(message_event, "type"); type = switch_event_get_header(message_event, "type");
hint = switch_event_get_header(message_event, "hint"); hint = switch_event_get_header(message_event, "hint");
if (to) { if (to) {
@ -4610,7 +4610,7 @@ SWITCH_STANDARD_APP(limit_function)
mydata = switch_core_session_strdup(session, data); mydata = switch_core_session_strdup(session, data);
argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
} }
backend = argv[0]; backend = argv[0];
/* must have at least one item */ /* must have at least one item */
@ -4618,10 +4618,10 @@ SWITCH_STANDARD_APP(limit_function)
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "USAGE: limit %s\n", LIMIT_USAGE); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "USAGE: limit %s\n", LIMIT_USAGE);
return; return;
} }
/* if this is an invalid backend, fallback to db backend */ /* if this is an invalid backend, fallback to db backend */
/* TODO: remove this when we can! */ /* TODO: remove this when we can! */
if (switch_true(switch_channel_get_variable(channel, "switch_limit_backwards_compat_flag")) && if (switch_true(switch_channel_get_variable(channel, "switch_limit_backwards_compat_flag")) &&
!switch_loadable_module_get_limit_interface(backend)) { !switch_loadable_module_get_limit_interface(backend)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Unknown backend '%s'. To maintain backwards compatability, falling back on db backend and shifting argumens. Either update your diaplan to include the backend, fix the typo, or load the appropriate limit implementation module.\n", backend); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Unknown backend '%s'. To maintain backwards compatability, falling back on db backend and shifting argumens. Either update your diaplan to include the backend, fix the typo, or load the appropriate limit implementation module.\n", backend);
mydata = switch_core_session_sprintf(session, "db %s", data); mydata = switch_core_session_sprintf(session, "db %s", data);
@ -4709,9 +4709,9 @@ SWITCH_STANDARD_APP(limit_execute_function)
mydata = switch_core_session_strdup(session, data); mydata = switch_core_session_strdup(session, data);
argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
} }
/* backwards compat version, if we have 5, just prepend with db and reparse */ /* backwards compat version, if we have 5, just prepend with db and reparse */
if (switch_true(switch_channel_get_variable(channel, "switch_limit_backwards_compat_flag")) && if (switch_true(switch_channel_get_variable(channel, "switch_limit_backwards_compat_flag")) &&
argc == 5) { argc == 5) {
mydata = switch_core_session_sprintf(session, "db %s", data); mydata = switch_core_session_sprintf(session, "db %s", data);
argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
@ -4758,7 +4758,7 @@ SWITCH_STANDARD_APP(limit_execute_function)
/* Only release the resource if we are still in CS_EXECUTE */ /* Only release the resource if we are still in CS_EXECUTE */
if (switch_channel_get_state(switch_core_session_get_channel(session)) == CS_EXECUTE) { if (switch_channel_get_state(switch_core_session_get_channel(session)) == CS_EXECUTE) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "immediately releasing\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "immediately releasing\n");
switch_limit_release(backend, session, realm, id); switch_limit_release(backend, session, realm, id);
} }
} }
} }
@ -4902,12 +4902,12 @@ static switch_status_t next_file(switch_file_handle_t *handle)
} }
if (context->file && switch_test_flag(handle, SWITCH_FILE_DATA_SHORT)) { /* TODO handle other data type flags */ if (context->file && switch_test_flag(handle, SWITCH_FILE_DATA_SHORT)) { /* TODO handle other data type flags */
switch_size_t len; switch_size_t len;
uint16_t buf[SWITCH_RECOMMENDED_BUFFER_SIZE] = { 0 }; uint16_t buf[SWITCH_RECOMMENDED_BUFFER_SIZE] = { 0 };
switch_status_t stat; switch_status_t stat;
switch_file_handle_t fh = { 0 }; switch_file_handle_t fh = { 0 };
if ((stat = switch_core_file_open(&fh, context->file, handle->channels, handle->samplerate, if ((stat = switch_core_file_open(&fh, context->file, handle->channels, handle->samplerate,
SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL)) == SWITCH_STATUS_SUCCESS) { SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL)) == SWITCH_STATUS_SUCCESS) {
do { do {
len = SWITCH_RECOMMENDED_BUFFER_SIZE / handle->channels; len = SWITCH_RECOMMENDED_BUFFER_SIZE / handle->channels;
@ -4916,7 +4916,7 @@ static switch_status_t next_file(switch_file_handle_t *handle)
} }
} while (stat == SWITCH_STATUS_SUCCESS); } while (stat == SWITCH_STATUS_SUCCESS);
switch_core_file_close(&fh); switch_core_file_close(&fh);
switch_file_remove(context->file, handle->memory_pool); switch_file_remove(context->file, handle->memory_pool);
} else { } else {
@ -4962,7 +4962,7 @@ static switch_status_t file_string_file_seek(switch_file_handle_t *handle, unsig
context->index = -1; context->index = -1;
return next_file(handle); return next_file(handle);
} }
if (!handle->seekable) { if (!handle->seekable) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "File is not seekable\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "File is not seekable\n");
return SWITCH_STATUS_NOTIMPL; return SWITCH_STATUS_NOTIMPL;
@ -5004,7 +5004,7 @@ static switch_status_t file_string_file_set_string(switch_file_handle_t *handle,
file_string_context_t *context = handle->private_info; file_string_context_t *context = handle->private_info;
file_string_audio_col_t *col_ptr = context->audio_cols; file_string_audio_col_t *col_ptr = context->audio_cols;
while (col_ptr && col != col_ptr->col) { while (col_ptr && col != col_ptr->col) {
col_ptr = col_ptr->next; col_ptr = col_ptr->next;
} }
@ -5017,7 +5017,7 @@ static switch_status_t file_string_file_set_string(switch_file_handle_t *handle,
col_ptr->next = context->audio_cols; col_ptr->next = context->audio_cols;
context->audio_cols = col_ptr; context->audio_cols = col_ptr;
} }
return switch_core_file_set_string(&context->fh, col, string); return switch_core_file_set_string(&context->fh, col, string);
} }
@ -5232,7 +5232,7 @@ static switch_status_t read_frame_callback(switch_core_session_t *session, switc
} }
return switch_channel_test_app_flag_key(rf->key, channel, MUTEX_FLAG_WAIT) ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE; return switch_channel_test_app_flag_key(rf->key, channel, MUTEX_FLAG_WAIT) ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
} }
static void free_node(mutex_node_t **npp) static void free_node(mutex_node_t **npp)
@ -5256,7 +5256,7 @@ static void cancel(switch_core_session_t *session, master_mutex_t *master)
for (np = master->list; np; np = np->next) { for (np = master->list; np; np = np->next) {
if (np && !strcmp(np->uuid, uuid)) { if (np && !strcmp(np->uuid, uuid)) {
switch_core_event_hook_remove_state_change(session, mutex_hanguphook); switch_core_event_hook_remove_state_change(session, mutex_hanguphook);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s mutex %s canceled\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s mutex %s canceled\n",
switch_core_session_get_uuid(session), switch_core_session_get_uuid(session),
switch_core_session_get_name(session), master->key); switch_core_session_get_name(session), master->key);
@ -5269,7 +5269,7 @@ static void cancel(switch_core_session_t *session, master_mutex_t *master)
} }
free_node(&np); free_node(&np);
break; break;
} }
@ -5288,7 +5288,7 @@ static void advance(master_mutex_t *master, switch_bool_t pop_current)
if (!master || !master->list) { if (!master || !master->list) {
goto end; goto end;
} }
while (master->list) { while (master->list) {
mutex_node_t *np; mutex_node_t *np;
@ -5302,14 +5302,14 @@ static void advance(master_mutex_t *master, switch_bool_t pop_current)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "ADVANCE POP %p\n", (void *)np); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "ADVANCE POP %p\n", (void *)np);
free_node(&np); free_node(&np);
} }
if (master->list) { if (master->list) {
switch_core_session_t *session; switch_core_session_t *session;
if ((session = switch_core_session_locate(master->list->uuid))) { if ((session = switch_core_session_locate(master->list->uuid))) {
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,
"%s mutex %s advanced\n", switch_channel_get_name(channel), master->key); "%s mutex %s advanced\n", switch_channel_get_name(channel), master->key);
switch_channel_set_app_flag_key(master->key, channel, MUTEX_FLAG_SET); switch_channel_set_app_flag_key(master->key, channel, MUTEX_FLAG_SET);
switch_channel_clear_app_flag_key(master->key, channel, MUTEX_FLAG_WAIT); switch_channel_clear_app_flag_key(master->key, channel, MUTEX_FLAG_WAIT);
@ -5327,7 +5327,7 @@ static void advance(master_mutex_t *master, switch_bool_t pop_current)
switch_mutex_unlock(globals.mutex_mutex); switch_mutex_unlock(globals.mutex_mutex);
} }
static void confirm(switch_core_session_t *session, master_mutex_t *master) static void confirm(switch_core_session_t *session, master_mutex_t *master)
@ -5346,7 +5346,7 @@ static void confirm(switch_core_session_t *session, master_mutex_t *master)
if (!strcmp(master->list->uuid, switch_core_session_get_uuid(session))) { if (!strcmp(master->list->uuid, switch_core_session_get_uuid(session))) {
switch_channel_clear_app_flag_key(master->key, channel, MUTEX_FLAG_SET); switch_channel_clear_app_flag_key(master->key, channel, MUTEX_FLAG_SET);
switch_core_event_hook_remove_state_change(session, mutex_hanguphook); switch_core_event_hook_remove_state_change(session, mutex_hanguphook);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s mutex %s cleared\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s mutex %s cleared\n",
switch_core_session_get_uuid(session), switch_core_session_get_uuid(session),
switch_channel_get_name(channel), master->key); switch_channel_get_name(channel), master->key);
advance(master, SWITCH_TRUE); advance(master, SWITCH_TRUE);
@ -5396,7 +5396,7 @@ static switch_bool_t do_mutex(switch_core_session_t *session, const char *key, s
switch_mutex_unlock(globals.mutex_mutex); switch_mutex_unlock(globals.mutex_mutex);
return SWITCH_FALSE; return SWITCH_FALSE;
} }
if (!(master = switch_core_hash_find(globals.mutex_hash, key))) { if (!(master = switch_core_hash_find(globals.mutex_hash, key))) {
master = switch_core_alloc(globals.pool, sizeof(*master)); master = switch_core_alloc(globals.pool, sizeof(*master));
master->key = switch_core_strdup(globals.pool, key); master->key = switch_core_strdup(globals.pool, key);
@ -5406,7 +5406,7 @@ static switch_bool_t do_mutex(switch_core_session_t *session, const char *key, s
} else { } else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "EXIST MASTER %s %p\n", key, (void *) master); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "EXIST MASTER %s %p\n", key, (void *) master);
} }
if (on) { if (on) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "HIT ON\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "HIT ON\n");
@ -5430,7 +5430,7 @@ static switch_bool_t do_mutex(switch_core_session_t *session, const char *key, s
switch_channel_clear_app_flag_key(key, channel, MUTEX_FLAG_WAIT); switch_channel_clear_app_flag_key(key, channel, MUTEX_FLAG_WAIT);
switch_channel_set_private(channel, "_mutex_master", master); switch_channel_set_private(channel, "_mutex_master", master);
switch_core_event_hook_add_state_change(session, mutex_hanguphook); switch_core_event_hook_add_state_change(session, mutex_hanguphook);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s mutex %s acquired\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s mutex %s acquired\n",
switch_core_session_get_uuid(session), switch_core_session_get_uuid(session),
switch_channel_get_name(channel), key); switch_channel_get_name(channel), key);
switch_mutex_unlock(globals.mutex_mutex); switch_mutex_unlock(globals.mutex_mutex);
@ -5444,7 +5444,7 @@ static switch_bool_t do_mutex(switch_core_session_t *session, const char *key, s
} }
switch_mutex_unlock(globals.mutex_mutex); switch_mutex_unlock(globals.mutex_mutex);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s mutex %s is busy, waiting...\n", switch_channel_get_name(channel), key); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s mutex %s is busy, waiting...\n", switch_channel_get_name(channel), key);
if ((feedback = switch_channel_get_variable(channel, "mutex_feedback"))) { if ((feedback = switch_channel_get_variable(channel, "mutex_feedback"))) {
@ -5456,19 +5456,19 @@ static switch_bool_t do_mutex(switch_core_session_t *session, const char *key, s
if ((rf.exten = switch_channel_get_variable(channel, "mutex_orbit_exten"))) { if ((rf.exten = switch_channel_get_variable(channel, "mutex_orbit_exten"))) {
to_val = 60; to_val = 60;
} }
if ((var = switch_channel_get_variable(channel, "mutex_timeout"))) { if ((var = switch_channel_get_variable(channel, "mutex_timeout"))) {
long tmp = atol(var); long tmp = atol(var);
if (tmp > 0) { if (tmp > 0) {
to_val = tmp; to_val = tmp;
} }
} }
if (to_val) { if (to_val) {
switch_codec_implementation_t read_impl; switch_codec_implementation_t read_impl;
switch_core_session_get_read_impl(session, &read_impl); switch_core_session_get_read_impl(session, &read_impl);
rf.to = (1000 / (read_impl.microseconds_per_packet / 1000)) * to_val; rf.to = (1000 / (read_impl.microseconds_per_packet / 1000)) * to_val;
rf.dp = switch_channel_get_variable(channel, "mutex_orbit_dialplan"); rf.dp = switch_channel_get_variable(channel, "mutex_orbit_dialplan");
rf.context = switch_channel_get_variable(channel, "mutex_orbit_context"); rf.context = switch_channel_get_variable(channel, "mutex_orbit_context");
@ -5500,7 +5500,7 @@ static switch_bool_t do_mutex(switch_core_session_t *session, const char *key, s
if (switch_channel_test_app_flag_key(key, channel, MUTEX_FLAG_WAIT) || !switch_channel_up(channel)) { if (switch_channel_test_app_flag_key(key, channel, MUTEX_FLAG_WAIT) || !switch_channel_up(channel)) {
cancel(session, master); cancel(session, master);
} else { } else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s mutex %s acquired\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s %s mutex %s acquired\n",
switch_core_session_get_uuid(session), switch_core_session_get_uuid(session),
switch_channel_get_name(channel), key); switch_channel_get_name(channel), key);
switch_core_event_hook_add_state_change(session, mutex_hanguphook); switch_core_event_hook_add_state_change(session, mutex_hanguphook);
@ -5534,7 +5534,7 @@ SWITCH_STANDARD_APP(mutex_function)
} }
do_mutex(session, key, on); do_mutex(session, key, on);
} }
@ -5587,7 +5587,7 @@ void *SWITCH_THREAD_FUNC page_thread(switch_thread_t *thread, void *obj)
if (switch_ivr_originate(NULL, &session, &cause, pd->dial_str, 60, NULL, NULL, NULL, NULL, pd->var_event, SOF_NONE, NULL) == SWITCH_STATUS_SUCCESS) { if (switch_ivr_originate(NULL, &session, &cause, pd->dial_str, 60, NULL, NULL, NULL, NULL, pd->var_event, SOF_NONE, NULL) == SWITCH_STATUS_SUCCESS) {
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
switch_channel_set_variable(channel, "page_file", pd->path); switch_channel_set_variable(channel, "page_file", pd->path);
mypd = switch_core_session_alloc(session, sizeof(*mypd)); mypd = switch_core_session_alloc(session, sizeof(*mypd));
@ -5613,14 +5613,14 @@ void *SWITCH_THREAD_FUNC page_thread(switch_thread_t *thread, void *obj)
return NULL; return NULL;
} }
static void launch_call(const char *dial_str, static void launch_call(const char *dial_str,
const char *path, const char *exten, const char *context, const char *dp, const char *path, const char *exten, const char *context, const char *dp,
switch_mutex_t *mutex, uint32_t *counter, switch_event_t **var_event) switch_mutex_t *mutex, uint32_t *counter, switch_event_t **var_event)
{ {
switch_thread_data_t *td; switch_thread_data_t *td;
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
page_data_t *pd; page_data_t *pd;
switch_core_new_memory_pool(&pool); switch_core_new_memory_pool(&pool);
pd = switch_core_alloc(pool, sizeof(*pd)); pd = switch_core_alloc(pool, sizeof(*pd));
@ -5648,7 +5648,7 @@ static void launch_call(const char *dial_str,
td->obj = pd; td->obj = pd;
switch_thread_pool_launch_thread(&td); switch_thread_pool_launch_thread(&td);
} }
typedef struct call_monitor_s { typedef struct call_monitor_s {
@ -5689,7 +5689,7 @@ void *SWITCH_THREAD_FUNC call_monitor_thread(switch_thread_t *thread, void *obj)
while (data && *data && *data == ' ') { while (data && *data && *data == ' ') {
data++; data++;
} }
while (*data == '<') { while (*data == '<') {
char *parsed = NULL; char *parsed = NULL;
@ -5716,15 +5716,15 @@ void *SWITCH_THREAD_FUNC call_monitor_thread(switch_thread_t *thread, void *obj)
} }
while (sent < size) { while (sent < size) {
do { do {
switch_mutex_lock(mutex); switch_mutex_lock(mutex);
busy = (counter >= cm->chunk_size); busy = (counter >= cm->chunk_size);
switch_mutex_unlock(mutex); switch_mutex_unlock(mutex);
if (busy) { if (busy) {
switch_yield(100000); switch_yield(100000);
} }
} while (busy); } while (busy);
launch_call(argv[sent++], cm->path, cm->exten, cm->context, cm->dp, mutex, &counter, &var_event); launch_call(argv[sent++], cm->path, cm->exten, cm->context, cm->dp, mutex, &counter, &var_event);
@ -5755,7 +5755,7 @@ static void launch_call_monitor(const char *path, int del, const char *data, uin
switch_thread_data_t *td; switch_thread_data_t *td;
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
call_monitor_t *cm; call_monitor_t *cm;
switch_core_new_memory_pool(&pool); switch_core_new_memory_pool(&pool);
cm = switch_core_alloc(pool, sizeof(*cm)); cm = switch_core_alloc(pool, sizeof(*cm));
@ -5777,7 +5777,7 @@ static void launch_call_monitor(const char *path, int del, const char *data, uin
td->obj = cm; td->obj = cm;
switch_thread_pool_launch_thread(&td); switch_thread_pool_launch_thread(&td);
} }
@ -5814,10 +5814,10 @@ SWITCH_STANDARD_APP(page_function)
if ((l = switch_channel_get_variable(channel, "page_dp"))) { if ((l = switch_channel_get_variable(channel, "page_dp"))) {
dp = l; dp = l;
} }
l = switch_channel_get_variable(channel, "page_record_limit"); l = switch_channel_get_variable(channel, "page_record_limit");
if (l) { if (l) {
if (*l == '+') { if (*l == '+') {
l++; l++;
@ -5866,7 +5866,7 @@ SWITCH_STANDARD_APP(page_function)
} }
switch_ivr_play_file(session, NULL, beep, NULL); switch_ivr_play_file(session, NULL, beep, NULL);
switch_ivr_record_file(session, &fh, path, &args, limit); switch_ivr_record_file(session, &fh, path, &args, limit);
} }
@ -5874,7 +5874,7 @@ SWITCH_STANDARD_APP(page_function)
if (zstr(exten)) { if (zstr(exten)) {
exten = switch_core_session_sprintf(session, "playback:%s", path); exten = switch_core_session_sprintf(session, "playback:%s", path);
} }
if (switch_file_exists(path, switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) { if (switch_file_exists(path, switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) {
launch_call_monitor(path, del, pdata, chunk_size, exten, context, dp); launch_call_monitor(path, del, pdata, chunk_size, exten, context, dp);
} else { } else {
@ -5909,7 +5909,7 @@ SWITCH_STANDARD_API(page_api_function)
while (data && *data && *data == ' ') { while (data && *data && *data == ' ') {
data++; data++;
} }
while (*data == '(') { while (*data == '(') {
char *parsed = NULL; char *parsed = NULL;
@ -5928,7 +5928,7 @@ SWITCH_STANDARD_API(page_api_function)
if (!var_event) { if (!var_event) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Parse Error!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Parse Error!\n");
goto end; goto end;
} }
pdata = data; pdata = data;
@ -5948,7 +5948,7 @@ SWITCH_STANDARD_API(page_api_function)
if ((l = switch_event_get_header(var_event, "page_dp"))) { if ((l = switch_event_get_header(var_event, "page_dp"))) {
dp = l; dp = l;
} }
if ((l = switch_event_get_header(var_event, "page_chunk_size"))) { if ((l = switch_event_get_header(var_event, "page_chunk_size"))) {
uint32_t tmp = switch_atoui(l); uint32_t tmp = switch_atoui(l);
@ -5967,7 +5967,7 @@ SWITCH_STANDARD_API(page_api_function)
oexten = switch_mprintf("playback:%s", path); oexten = switch_mprintf("playback:%s", path);
exten = oexten; exten = oexten;
} }
if (switch_file_exists(path, NULL) == SWITCH_STATUS_SUCCESS) { if (switch_file_exists(path, NULL) == SWITCH_STATUS_SUCCESS) {
launch_call_monitor(path, 0, pdata, chunk_size, exten, context, dp); launch_call_monitor(path, 0, pdata, chunk_size, exten, context, dp);
} else { } else {
@ -5976,7 +5976,7 @@ SWITCH_STANDARD_API(page_api_function)
end: end:
switch_safe_free(odata); switch_safe_free(odata);
switch_safe_free(oexten); switch_safe_free(oexten);
@ -6217,16 +6217,16 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load)
SWITCH_ADD_APP(app_interface, "blind_transfer_ack", "", "", blind_transfer_ack_function, "[true|false]", SAF_NONE); SWITCH_ADD_APP(app_interface, "blind_transfer_ack", "", "", blind_transfer_ack_function, "[true|false]", SAF_NONE);
SWITCH_ADD_APP(app_interface, "bind_digit_action", "bind a key sequence or regex to an action", SWITCH_ADD_APP(app_interface, "bind_digit_action", "bind a key sequence or regex to an action",
"bind a key sequence or regex to an action", bind_digit_action_function, BIND_DIGIT_ACTION_USAGE, SAF_SUPPORT_NOMEDIA); "bind a key sequence or regex to an action", bind_digit_action_function, BIND_DIGIT_ACTION_USAGE, SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "capture", "capture data into a var", "capture data into a var", SWITCH_ADD_APP(app_interface, "capture", "capture data into a var", "capture data into a var",
capture_function, "<varname>|<data>|<regex>", SAF_SUPPORT_NOMEDIA); capture_function, "<varname>|<data>|<regex>", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "clear_digit_action", "clear all digit bindings", "", SWITCH_ADD_APP(app_interface, "clear_digit_action", "clear all digit bindings", "",
clear_digit_action_function, CLEAR_DIGIT_ACTION_USAGE, SAF_SUPPORT_NOMEDIA); clear_digit_action_function, CLEAR_DIGIT_ACTION_USAGE, SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "digit_action_set_realm", "change binding realm", "", SWITCH_ADD_APP(app_interface, "digit_action_set_realm", "change binding realm", "",
digit_action_set_realm_function, DIGIT_ACTION_SET_REALM_USAGE, SAF_SUPPORT_NOMEDIA); digit_action_set_realm_function, DIGIT_ACTION_SET_REALM_USAGE, SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "privacy", "Set privacy on calls", "Set caller privacy on calls.", privacy_function, "off|on|name|full|number", SWITCH_ADD_APP(app_interface, "privacy", "Set privacy on calls", "Set caller privacy on calls.", privacy_function, "off|on|name|full|number",
@ -6258,7 +6258,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load)
SWITCH_ADD_APP(app_interface, "eval", "Do Nothing", "Do Nothing", eval_function, "", SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC | SAF_ZOMBIE_EXEC); SWITCH_ADD_APP(app_interface, "eval", "Do Nothing", "Do Nothing", eval_function, "", SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC | SAF_ZOMBIE_EXEC);
SWITCH_ADD_APP(app_interface, "set_media_stats", "Set Media Stats", "Set Media Stats", set_media_stats_function, "", SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC | SAF_ZOMBIE_EXEC); SWITCH_ADD_APP(app_interface, "set_media_stats", "Set Media Stats", "Set Media Stats", set_media_stats_function, "", SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC | SAF_ZOMBIE_EXEC);
SWITCH_ADD_APP(app_interface, "stop", "Do Nothing", "Do Nothing", eval_function, "", SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC); SWITCH_ADD_APP(app_interface, "stop", "Do Nothing", "Do Nothing", eval_function, "", SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC);
SWITCH_ADD_APP(app_interface, "set_zombie_exec", "Enable Zombie Execution", "Enable Zombie Execution", SWITCH_ADD_APP(app_interface, "set_zombie_exec", "Enable Zombie Execution", "Enable Zombie Execution",
zombie_function, "", SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC); zombie_function, "", SAF_SUPPORT_NOMEDIA | SAF_ROUTING_EXEC);
SWITCH_ADD_APP(app_interface, "pre_answer", "Pre-Answer the call", "Pre-Answer the call for a channel.", pre_answer_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "pre_answer", "Pre-Answer the call", "Pre-Answer the call for a channel.", pre_answer_function, "", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "answer", "Answer the call", "Answer the call for a channel.", answer_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "answer", "Answer the call", "Answer the call for a channel.", answer_function, "", SAF_SUPPORT_NOMEDIA);
@ -6311,7 +6311,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load)
SWITCH_ADD_APP(app_interface, "video_decode", "Set video decode.", "Set video decode.", video_set_decode_function, "[[on|wait]|off]", SWITCH_ADD_APP(app_interface, "video_decode", "Set video decode.", "Set video decode.", video_set_decode_function, "[[on|wait]|off]",
SAF_NONE); SAF_NONE);
SWITCH_ADD_APP(app_interface, "send_info", "Send info", "Send info", send_info_function, "<info>", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "send_info", "Send info", "Send info", send_info_function, "<info>", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "jitterbuffer", "Send session jitterbuffer", "Send a jitterbuffer message to a session.", SWITCH_ADD_APP(app_interface, "jitterbuffer", "Send session jitterbuffer", "Send a jitterbuffer message to a session.",
jitterbuffer_function, "<jitterbuffer_data>", SAF_SUPPORT_NOMEDIA); jitterbuffer_function, "<jitterbuffer_data>", SAF_SUPPORT_NOMEDIA);
SWITCH_ADD_APP(app_interface, "send_display", "Send session a new display", "Send session a new display.", display_function, "<text>", SWITCH_ADD_APP(app_interface, "send_display", "Send session a new display", "Send session a new display.", display_function, "<text>",
SAF_SUPPORT_NOMEDIA); SAF_SUPPORT_NOMEDIA);
@ -6377,10 +6377,10 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load)
SWITCH_ADD_APP(app_interface, "loop_playback", "Playback File looply", "Playback a file to the channel looply for limted times", SWITCH_ADD_APP(app_interface, "loop_playback", "Playback File looply", "Playback a file to the channel looply for limted times",
loop_playback_function, "[+loops] <path>", SAF_NONE); loop_playback_function, "[+loops] <path>", SAF_NONE);
SWITCH_ADD_APP(app_interface, "att_xfer", "Attended Transfer", "Attended Transfer", att_xfer_function, "<channel_url>", SAF_NONE); SWITCH_ADD_APP(app_interface, "att_xfer", "Attended Transfer", "Attended Transfer", att_xfer_function, "<channel_url>", SAF_NONE);
SWITCH_ADD_APP(app_interface, "read", "Read Digits", "Read Digits", read_function, SWITCH_ADD_APP(app_interface, "read", "Read Digits", "Read Digits", read_function,
"<min> <max> <file> <var_name> <timeout> <terminators> <digit_timeout>", SAF_NONE); "<min> <max> <file> <var_name> <timeout> <terminators> <digit_timeout>", SAF_NONE);
SWITCH_ADD_APP(app_interface, "play_and_get_digits", "Play and get Digits", "Play and get Digits", SWITCH_ADD_APP(app_interface, "play_and_get_digits", "Play and get Digits", "Play and get Digits",
play_and_get_digits_function, play_and_get_digits_function,
"\n\t<min> <max> <tries> <timeout> <terminators> <file> <invalid_file> <var_name> <regexp> [<digit_timeout>] ['<failure_ext> [failure_dp [failure_context]]']", SAF_NONE); "\n\t<min> <max> <tries> <timeout> <terminators> <file> <invalid_file> <var_name> <regexp> [<digit_timeout>] ['<failure_ext> [failure_dp [failure_context]]']", SAF_NONE);
SWITCH_ADD_APP(app_interface, "stop_video_write_overlay", "Stop video write overlay", "Stop video write overlay", stop_video_write_overlay_session_function, "<path>", SAF_NONE); SWITCH_ADD_APP(app_interface, "stop_video_write_overlay", "Stop video write overlay", "Stop video write overlay", stop_video_write_overlay_session_function, "<path>", SAF_NONE);

View File

@ -7,7 +7,7 @@
<!-- Default Technology and profile --> <!-- Default Technology and profile -->
<param name="default-techprofile" value="sofia/default"/> <param name="default-techprofile" value="sofia/default"/>
<!-- IP or Hostname of Default Route --> <!-- IP or Hostname of Default Route -->
<param name="default-gateway" value="192.168.66.6"/> <param name="default-gateway" value="192.168.66.6"/>
@ -21,7 +21,7 @@
call_limit varchar(16) - contains optional call limit call_limit varchar(16) - contains optional call limit
tech_prefix varchar(128) - tech prefix used to build dial string (ex: sofia/default ) tech_prefix varchar(128) - tech prefix used to build dial string (ex: sofia/default )
acctcode varchar(128) - used to set channel variable acctcode for logging into the CDRs acctcode varchar(128) - used to set channel variable acctcode for logging into the CDRs
destination_number varchar(16) - Number returning for the query for building the dial string. (ex: 18005551212) destination_number varchar(16) - Number returning for the query for building the dial string. (ex: 18005551212)
See Documentation on the Wiki for further information --> See Documentation on the Wiki for further information -->
<!-- <param name="custom-query" value="call FS_GET_SIP_LOCATION(%s);"/> --> <!-- <param name="custom-query" value="call FS_GET_SIP_LOCATION(%s);"/> -->
</settings> </settings>

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Jay Binks <jaybinks@gmail.com> * Jay Binks <jaybinks@gmail.com>
* *
@ -117,7 +117,7 @@ static switch_status_t load_config(void)
globals.timeout = 5000; globals.timeout = 5000;
globals.retries = 3; globals.retries = 3;
globals.random = 0; globals.random = 0;
if ((settings = switch_xml_child(cfg, "settings"))) { if ((settings = switch_xml_child(cfg, "settings"))) {
for (param = switch_xml_child(settings, "param"); param; param = param->next) { for (param = switch_xml_child(settings, "param"); param; param = param->next) {
const char *var = switch_xml_attr_soft(param, "name"); const char *var = switch_xml_attr_soft(param, "name");
@ -165,8 +165,8 @@ static switch_status_t load_config(void)
HKEY hKey; HKEY hKey;
DWORD data_sz; DWORD data_sz;
char* buf; char* buf;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters",
0, KEY_QUERY_VALUE, &hKey); 0, KEY_QUERY_VALUE, &hKey);
if (hKey) { if (hKey) {
@ -249,7 +249,7 @@ static void add_result(enum_record_t **results, int order, int preference, char
new_result->service = strdup(service); new_result->service = strdup(service);
new_result->route = strdup(route); new_result->route = strdup(route);
new_result->supported = supported; new_result->supported = supported;
if (!*results) { if (!*results) {
*results = new_result; *results = new_result;
@ -310,7 +310,7 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
char *packstr; char *packstr;
char *regex, *replace; char *regex, *replace;
if (zstr(str)) { if (zstr(str)) {
if (str != NULL) { if (str != NULL) {
/* In this case ldns_rr2str returned a malloc'd null terminated string */ /* In this case ldns_rr2str returned a malloc'd null terminated string */
@ -339,7 +339,7 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
if (zstr(service) || zstr(packstr)) { if (zstr(service) || zstr(packstr)) {
goto end; goto end;
} }
if (!zstr(argv[4])) { if (!zstr(argv[4])) {
order = atoi(argv[4]); order = atoi(argv[4]);
} }
@ -355,7 +355,7 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
} else { } else {
goto end; goto end;
} }
for (p = replace; p && *p; p++) { for (p = replace; p && *p; p++) {
if (*p == '\\') { if (*p == '\\') {
*p = '$'; *p = '$';
@ -388,11 +388,11 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
} else { } else {
orig_uri = replace; orig_uri = replace;
} }
switch_mutex_lock(MUTEX); switch_mutex_lock(MUTEX);
for (route = globals.route_order; route; route = route->next) { for (route = globals.route_order; route; route = route->next) {
char *uri = orig_uri; char *uri = orig_uri;
if (strcasecmp(service, route->service)) { if (strcasecmp(service, route->service)) {
continue; continue;
} }
@ -429,13 +429,13 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
supported++; supported++;
add_result(results, order, preference, service, uri, supported); add_result(results, order, preference, service, uri, supported);
} }
switch_safe_free(uri_expanded); switch_safe_free(uri_expanded);
switch_safe_free(substituted_2); switch_safe_free(substituted_2);
switch_regex_safe_free(re2); switch_regex_safe_free(re2);
} }
switch_mutex_unlock(MUTEX); switch_mutex_unlock(MUTEX);
if (!supported) { if (!supported) {
add_result(results, order, preference, service, orig_uri, 0); add_result(results, order, preference, service, orig_uri, 0);
@ -449,7 +449,7 @@ static void parse_naptr(const ldns_rr *naptr, const char *number, enum_record_t
end: end:
switch_safe_free(str); switch_safe_free(str);
return; return;
} }
@ -471,15 +471,15 @@ switch_status_t ldns_lookup(const char *number, const char *root, char *server_n
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Parse Error!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Parse Error!\n");
goto end; goto end;
} }
if (!(domain = ldns_dname_new_frm_str(name))) { if (!(domain = ldns_dname_new_frm_str(name))) {
goto end; goto end;
} }
if (server_name) { if (server_name) {
res = ldns_resolver_new(); res = ldns_resolver_new();
switch_assert(res); switch_assert(res);
for(inameserver=0; inameserver<ENUM_MAXNAMESERVERS; inameserver++) { for(inameserver=0; inameserver<ENUM_MAXNAMESERVERS; inameserver++) {
if ( server_name[inameserver] != NULL ) { if ( server_name[inameserver] != NULL ) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Adding Nameserver [%s]\n", server_name[inameserver]); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Adding Nameserver [%s]\n", server_name[inameserver]);
@ -488,9 +488,9 @@ switch_status_t ldns_lookup(const char *number, const char *root, char *server_n
ldns_rdf_deep_free(serv_rdf); ldns_rdf_deep_free(serv_rdf);
added_server = 1; added_server = 1;
} }
} }
} }
} }
if (!added_server) { if (!added_server) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "No Nameservers specified, using host default\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "No Nameservers specified, using host default\n");
/* create a new resolver from /etc/resolv.conf */ /* create a new resolver from /etc/resolv.conf */
@ -520,7 +520,7 @@ switch_status_t ldns_lookup(const char *number, const char *root, char *server_n
if ((naptr = ldns_pkt_rr_list_by_type(p, LDNS_RR_TYPE_NAPTR, LDNS_SECTION_ANSWER))) { if ((naptr = ldns_pkt_rr_list_by_type(p, LDNS_RR_TYPE_NAPTR, LDNS_SECTION_ANSWER))) {
size_t i; size_t i;
ldns_rr_list_sort(naptr); ldns_rr_list_sort(naptr);
for (i = 0; i < ldns_rr_list_rr_count(naptr); i++) { for (i = 0; i < ldns_rr_list_rr_count(naptr); i++) {
parse_naptr(ldns_rr_list_rr(naptr, i), number, results); parse_naptr(ldns_rr_list_rr(naptr, i), number, results);
@ -535,7 +535,7 @@ switch_status_t ldns_lookup(const char *number, const char *root, char *server_n
end: end:
switch_safe_free(name); switch_safe_free(name);
if (domain) { if (domain) {
ldns_rdf_deep_free(domain); ldns_rdf_deep_free(domain);
} }
@ -556,7 +556,7 @@ static switch_status_t enum_lookup(char *root, char *in, enum_record_t **results
switch_status_t sstatus = SWITCH_STATUS_SUCCESS; switch_status_t sstatus = SWITCH_STATUS_SUCCESS;
char *mnum = NULL, *mroot = NULL, *p; char *mnum = NULL, *mroot = NULL, *p;
char *server[ENUM_MAXNAMESERVERS]; char *server[ENUM_MAXNAMESERVERS];
int inameserver = 0; int inameserver = 0;
char *argv[ ENUM_MAXNAMESERVERS ] = { 0 }; char *argv[ ENUM_MAXNAMESERVERS ] = { 0 };
int argc; int argc;
int x = 0; int x = 0;
@ -580,12 +580,12 @@ static switch_status_t enum_lookup(char *root, char *in, enum_record_t **results
/* Empty the server array */ /* Empty the server array */
for(inameserver=0; inameserver<ENUM_MAXNAMESERVERS; inameserver++) { for(inameserver=0; inameserver<ENUM_MAXNAMESERVERS; inameserver++) {
server[inameserver] = NULL; server[inameserver] = NULL;
} }
inameserver = 0; inameserver = 0;
/* check for enum_nameserver channel var */ /* check for enum_nameserver channel var */
if (channel) { if (channel) {
enum_nameserver = switch_channel_get_variable(channel, "enum_nameserver"); enum_nameserver = switch_channel_get_variable(channel, "enum_nameserver");
} }
@ -691,7 +691,7 @@ SWITCH_STANDARD_APP(enum_app_function)
root = argv[1]; root = argv[1];
if (enum_lookup(root, dest, &results, channel, session) == SWITCH_STATUS_SUCCESS) { if (enum_lookup(root, dest, &results, channel, session) == SWITCH_STATUS_SUCCESS) {
switch_event_t *vars; switch_event_t *vars;
if (switch_channel_get_variables(channel, &vars) == SWITCH_STATUS_SUCCESS) { if (switch_channel_get_variables(channel, &vars) == SWITCH_STATUS_SUCCESS) {
switch_event_header_t *hi; switch_event_header_t *hi;
for (hi = vars->headers; hi; hi = hi->next) { for (hi = vars->headers; hi; hi = hi->next) {
@ -921,7 +921,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_enum_shutdown)
switch_safe_free(globals.root); switch_safe_free(globals.root);
switch_safe_free(globals.isn_root); switch_safe_free(globals.isn_root);
return SWITCH_STATUS_UNLOAD; return SWITCH_STATUS_UNLOAD;
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* *
@ -165,7 +165,7 @@ SWITCH_STANDARD_APP(bcast_function)
const char *codec_name = "PCMU"; const char *codec_name = "PCMU";
int read_rate = 8000; int read_rate = 8000;
int need_transcode = 0; int need_transcode = 0;
inc_serno(); inc_serno();
switch_core_session_get_read_impl(session, &read_impl); switch_core_session_get_read_impl(session, &read_impl);
@ -313,7 +313,7 @@ SWITCH_STANDARD_APP(bcast_function)
goto fail; goto fail;
} }
while (!ready) { while (!ready) {
status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
@ -333,7 +333,7 @@ SWITCH_STANDARD_APP(bcast_function)
alert_packet->audio_header.codec = 0x00; alert_packet->audio_header.codec = 0x00;
alert_packet->audio_header.flags = 0; alert_packet->audio_header.flags = 0;
if ((var = switch_channel_get_variable(channel, "esf_multicast_write_codec"))) { if ((var = switch_channel_get_variable(channel, "esf_multicast_write_codec"))) {
if (!strcasecmp(var, "PCMU")) { if (!strcasecmp(var, "PCMU")) {
codec_name = var; codec_name = var;
@ -379,7 +379,7 @@ SWITCH_STANDARD_APP(bcast_function)
goto fail; goto fail;
} }
} }
if (!(rtp_port = switch_rtp_request_port(source_ip))) { if (!(rtp_port = switch_rtp_request_port(source_ip))) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "RTP Port Error\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "RTP Port Error\n");
@ -393,7 +393,7 @@ SWITCH_STANDARD_APP(bcast_function)
alert_packet->audio_header.codec, alert_packet->audio_header.codec,
160, 160,
20000, flags, "soft", &err, switch_core_session_get_pool(session)); 20000, flags, "soft", &err, switch_core_session_get_pool(session));
if (!switch_rtp_ready(rtp_session)) { if (!switch_rtp_ready(rtp_session)) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "RTP Error\n"); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "RTP Error\n");
goto fail; goto fail;
@ -420,7 +420,7 @@ SWITCH_STANDARD_APP(bcast_function)
strncpy((char *)polycom_packet->cid, caller_id_name, sizeof(polycom_packet->cid)); strncpy((char *)polycom_packet->cid, caller_id_name, sizeof(polycom_packet->cid));
polycom_packet->cid_len = 13; polycom_packet->cid_len = 13;
polycom_packet->op = 0x0F; polycom_packet->op = 0x0F;
polycom_packet->channel = 0x1a; polycom_packet->channel = 0x1a;
polycom_packet->serno = htonl(get_serno()); polycom_packet->serno = htonl(get_serno());
@ -485,27 +485,27 @@ SWITCH_STANDARD_APP(bcast_function)
ebuf = read_frame->data; ebuf = read_frame->data;
encoded_datalen = read_frame->datalen; encoded_datalen = read_frame->datalen;
} }
switch_rtp_write_frame(rtp_session, read_frame); switch_rtp_write_frame(rtp_session, read_frame);
seq += 160; seq += 160;
alert_packet->audio_header.seq = htonl(seq); alert_packet->audio_header.seq = htonl(seq);
if (last_polycom_len) { if (last_polycom_len) {
memcpy(alert_packet->data, last_polycom_buf, last_polycom_len); memcpy(alert_packet->data, last_polycom_buf, last_polycom_len);
memcpy(alert_packet->data + last_polycom_len, ebuf, encoded_datalen); memcpy(alert_packet->data + last_polycom_len, ebuf, encoded_datalen);
} else { } else {
memcpy(alert_packet->data, ebuf, encoded_datalen); memcpy(alert_packet->data, ebuf, encoded_datalen);
} }
bytes = sizeof(*alert_packet) + encoded_datalen + last_polycom_len; bytes = sizeof(*alert_packet) + encoded_datalen + last_polycom_len;
switch_socket_sendto(socket, polycom_addr, 0, (void *) polycom_buf, &bytes); switch_socket_sendto(socket, polycom_addr, 0, (void *) polycom_buf, &bytes);
last_polycom_len = encoded_datalen; last_polycom_len = encoded_datalen;
memcpy((void *)last_polycom_buf, (void *)ebuf, last_polycom_len); memcpy((void *)last_polycom_buf, (void *)ebuf, last_polycom_len);
} else { } else {
bytes = read_frame->packetlen; bytes = read_frame->packetlen;
switch_socket_sendto(socket, audio_addr, 0, read_frame->packet, &bytes); switch_socket_sendto(socket, audio_addr, 0, read_frame->packet, &bytes);
@ -543,7 +543,7 @@ SWITCH_STANDARD_APP(bcast_function)
if (socket) { if (socket) {
switch_socket_close(socket); switch_socket_close(socket);
} }
if (polycom_socket) { if (polycom_socket) {
switch_socket_close(polycom_socket); switch_socket_close(polycom_socket);
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Marc Olivier Chouinard <mochouinard@moctel.com> * Marc Olivier Chouinard <mochouinard@moctel.com>
* *
* *
@ -38,7 +38,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_esl_shutdown);
SWITCH_MODULE_RUNTIME_FUNCTION(mod_esl_runtime); SWITCH_MODULE_RUNTIME_FUNCTION(mod_esl_runtime);
SWITCH_MODULE_LOAD_FUNCTION(mod_esl_load); SWITCH_MODULE_LOAD_FUNCTION(mod_esl_load);
/* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime) /* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime)
* Defines a switch_loadable_module_function_table_t and a static const char[] modname * Defines a switch_loadable_module_function_table_t and a static const char[] modname
*/ */
SWITCH_MODULE_DEFINITION(mod_esl, mod_esl_load, mod_esl_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_esl, mod_esl_load, mod_esl_shutdown, NULL);
@ -65,7 +65,7 @@ SWITCH_STANDARD_API(single_esl_api_function)
if (password && (host = strchr(password, ' '))) { if (password && (host = strchr(password, ' '))) {
*host++ = '\0'; *host++ = '\0';
} }
if (host && (s_timeout = strchr(host, ' '))) { if (host && (s_timeout = strchr(host, ' '))) {
*s_timeout++ = '\0'; *s_timeout++ = '\0';

View File

@ -2,7 +2,7 @@
* *
* Written by: * Written by:
* Hongli Lai <hongli@telekabel.nl> * Hongli Lai <hongli@telekabel.nl>
* tkorrovi <tkorrovi@altavista.net> on 2002/02/26. * tkorrovi <tkorrovi@altavista.net> on 2002/02/26.
* Andrew Westcott <ajwestco@users.sourceforge.net> * Andrew Westcott <ajwestco@users.sourceforge.net>
* *
* Offered for use in the public domain without any warranty. * Offered for use in the public domain without any warranty.

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* mod_expr.c -- Framework Demo Module * mod_expr.c -- Framework Demo Module

View File

@ -1,4 +1,4 @@
<!-- <!--
Parking extensions... transferring calls to 5900 will park them in a queue. Parking extensions... transferring calls to 5900 will park them in a queue.
--> -->
<extension name="park"> <extension name="park">
@ -8,7 +8,7 @@
</condition> </condition>
</extension> </extension>
<!-- <!--
Parking pickup extension. Calling 5901 will pickup the call. Parking pickup extension. Calling 5901 will pickup the call.
--> -->
<extension name="unpark"> <extension name="unpark">

View File

@ -84,7 +84,7 @@ SWITCH_MODULE_DEFINITION(mod_fifo, mod_fifo_load, mod_fifo_shutdown, NULL);
* who will be available to answer a single caller. In ringall this * who will be available to answer a single caller. In ringall this
* maximum is the number who will be called, in enterprise the need defines * maximum is the number who will be called, in enterprise the need defines
* how many agents will be called. outbound_per_cycle_min will define * how many agents will be called. outbound_per_cycle_min will define
* the minimum agents who will be called to answer a caller regardless of * the minimum agents who will be called to answer a caller regardless of
* need, giving the enterprise strategy the ability to ring through more * need, giving the enterprise strategy the ability to ring through more
* than one agent for one caller. * than one agent for one caller.
@ -1999,19 +1999,19 @@ static int place_call_enterprise_callback(void *pArg, int argc, char **argv, cha
* care of invoking the handler. * care of invoking the handler.
* *
* Within the ringall call strategy outbound_per_cycle is used to define * Within the ringall call strategy outbound_per_cycle is used to define
* how many agents exactly are assigned to the caller. With ringall if * how many agents exactly are assigned to the caller. With ringall if
* multiple callers are calling in and one is answered, because the call * multiple callers are calling in and one is answered, because the call
* is assigned to all agents the call to the agents that is not answered * is assigned to all agents the call to the agents that is not answered
* will be lose raced and the other agents will drop the call before the * will be lose raced and the other agents will drop the call before the
* next one will begin to ring. When oubound_per_cycle is used in the * next one will begin to ring. When oubound_per_cycle is used in the
* enterprise strategy it acts as a maximum value for how many agents * enterprise strategy it acts as a maximum value for how many agents
* are rung at once on any call, the caller is not assigned to any agent * are rung at once on any call, the caller is not assigned to any agent
* until the call is answered. Enterprise only rings the number of phones * until the call is answered. Enterprise only rings the number of phones
* that are needed, so outbound_per_cycle as a max does not give you the * that are needed, so outbound_per_cycle as a max does not give you the
* effect of ringall. outbound_per_cycle_min defines how many agents minimum * effect of ringall. outbound_per_cycle_min defines how many agents minimum
* will be rung by an incoming caller through fifo, which can give a ringall * will be rung by an incoming caller through fifo, which can give a ringall
* effect. outbound_per_cycle and outbound_per_cycle_min both default to 1. * effect. outbound_per_cycle and outbound_per_cycle_min both default to 1.
* *
*/ */
static int find_consumers(fifo_node_t *node) static int find_consumers(fifo_node_t *node)
{ {
@ -4083,7 +4083,7 @@ static void list_node(fifo_node_t *node, switch_xml_t x_report, int *off, int ve
switch_xml_set_attr_d(x_fifo, "outbound_per_cycle", tmp); switch_xml_set_attr_d(x_fifo, "outbound_per_cycle", tmp);
switch_snprintf(tmp, sizeof(buffer), "%u", node->outbound_per_cycle_min); switch_snprintf(tmp, sizeof(buffer), "%u", node->outbound_per_cycle_min);
switch_xml_set_attr_d(x_fifo, "outbound_per_cycle_min", tmp); switch_xml_set_attr_d(x_fifo, "outbound_per_cycle_min", tmp);
switch_snprintf(tmp, sizeof(buffer), "%u", node->ring_timeout); switch_snprintf(tmp, sizeof(buffer), "%u", node->ring_timeout);
switch_xml_set_attr_d(x_fifo, "ring_timeout", tmp); switch_xml_set_attr_d(x_fifo, "ring_timeout", tmp);

View File

@ -211,7 +211,7 @@ dsp_fsk_handle_t *dsp_fsk_create(dsp_fsk_attr_t *attr)
/* /*
* dsp_fsk_destroy * dsp_fsk_destroy
* *
* Destroys a handle, releasing any associated memory. Sets handle pointer to NULL * Destroys a handle, releasing any associated memory. Sets handle pointer to NULL
* so A destroyed handle can not be used for anything after the destroy. * so A destroyed handle can not be used for anything after the destroy.
*/ */
@ -306,11 +306,11 @@ dsp_fsk_sample (dsp_fsk_handle_t *handle, double normalized_sample)
if (handle->cellpos > 1.0) { if (handle->cellpos > 1.0) {
handle->cellpos -= 1.0; handle->cellpos -= 1.0;
switch (handle->state) { switch (handle->state) {
case FSK_STATE_DATA: case FSK_STATE_DATA:
{ {
(*handle->attr.bithandler) (handle->attr.bithandler_arg, handle->current_bit); (*handle->attr.bithandler) (handle->attr.bithandler_arg, handle->current_bit);
} }
break; break;

View File

@ -109,5 +109,5 @@ void dsp_fsk_sample(dsp_fsk_handle_t *handle, double normalized_sample);
extern fsk_modem_definition_t fsk_modem_definitions[]; extern fsk_modem_definition_t fsk_modem_definitions[];
#endif #endif

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* mod_fsk -- FSK data transfer * mod_fsk -- FSK data transfer
@ -39,7 +39,7 @@ void bitstream_init(bitstream_t *bsp, uint8_t *data, uint32_t datalen, endian_t
bsp->datalen = datalen; bsp->datalen = datalen;
bsp->endian = endian; bsp->endian = endian;
bsp->ss = ss; bsp->ss = ss;
if (endian < 0) { if (endian < 0) {
bsp->top = bsp->bit_index = 7; bsp->top = bsp->bit_index = 7;
bsp->bot = 0; bsp->bot = 0;
@ -53,7 +53,7 @@ void bitstream_init(bitstream_t *bsp, uint8_t *data, uint32_t datalen, endian_t
int8_t bitstream_get_bit(bitstream_t *bsp) int8_t bitstream_get_bit(bitstream_t *bsp)
{ {
int8_t bit = -1; int8_t bit = -1;
if (bsp->byte_index >= bsp->datalen) { if (bsp->byte_index >= bsp->datalen) {
goto done; goto done;
@ -71,19 +71,19 @@ int8_t bitstream_get_bit(bitstream_t *bsp)
} }
bit = (bsp->data[bsp->byte_index] >> (bsp->bit_index)) & 1; bit = (bsp->data[bsp->byte_index] >> (bsp->bit_index)) & 1;
if (bsp->bit_index == bsp->bot) { if (bsp->bit_index == bsp->bot) {
bsp->bit_index = bsp->top; bsp->bit_index = bsp->top;
if (bsp->ss) { if (bsp->ss) {
bsp->ssv = 2; bsp->ssv = 2;
goto done; goto done;
} }
if (++bsp->byte_index > bsp->datalen) { if (++bsp->byte_index > bsp->datalen) {
bit = -1; bit = -1;
goto done; goto done;
} }
} else { } else {
bsp->bit_index = bsp->bit_index + bsp->endian; bsp->bit_index = bsp->bit_index + bsp->endian;
} }
@ -109,7 +109,7 @@ static void fsk_byte_handler (void *x, int data)
if (state->dlen) { if (state->dlen) {
goto add_byte; goto add_byte;
} }
if (state->bpos == 1) { if (state->bpos == 1) {
state->blen = byte; state->blen = byte;
@ -189,7 +189,7 @@ switch_status_t fsk_data_parse(fsk_data_state_t *state, size_t *type, char **dat
size_t i; size_t i;
int sum = 0; int sum = 0;
top: top:
if (state->checksum != 0 || state->ppos >= state->dlen - 1) { if (state->checksum != 0 || state->ppos >= state->dlen - 1) {
@ -201,7 +201,7 @@ switch_status_t fsk_data_parse(fsk_data_state_t *state, size_t *type, char **dat
sum += state->buf[i]; sum += state->buf[i];
} }
state->checksum = sum % 256; state->checksum = sum % 256;
state->ppos = 2; state->ppos = 2;
if (state->buf[0] != CID_TYPE_MDMF && state->buf[0] != CID_TYPE_SDMF) { if (state->buf[0] != CID_TYPE_MDMF && state->buf[0] != CID_TYPE_SDMF) {
state->checksum = -1; state->checksum = -1;
@ -224,7 +224,7 @@ switch_status_t fsk_data_parse(fsk_data_state_t *state, size_t *type, char **dat
} }
} }
*data = (char *)&state->buf[state->ppos]; *data = (char *)&state->buf[state->ppos];
state->ppos += *len; state->ppos += *len;
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} else if (state->buf[0] == CID_TYPE_MDMF) { } else if (state->buf[0] == CID_TYPE_MDMF) {
*type = state->buf[state->ppos++]; *type = state->buf[state->ppos++];
@ -277,7 +277,7 @@ int fsk_demod_init(fsk_data_state_t *state, int rate, uint8_t *buf, size_t bufsi
memset(buf, 0, bufsize); memset(buf, 0, bufsize);
state->buf = buf; state->buf = buf;
state->bufsize = bufsize; state->bufsize = bufsize;
dsp_fsk_attr_init (&fsk1200_attr); dsp_fsk_attr_init (&fsk1200_attr);
dsp_fsk_attr_set_samplerate (&fsk1200_attr, rate); dsp_fsk_attr_set_samplerate (&fsk1200_attr, rate);
dsp_fsk_attr_set_bytehandler (&fsk1200_attr, fsk_byte_handler, state); dsp_fsk_attr_set_bytehandler (&fsk1200_attr, fsk_byte_handler, state);
@ -293,7 +293,7 @@ int fsk_demod_init(fsk_data_state_t *state, int rate, uint8_t *buf, size_t bufsi
size_t fsk_modulator_generate_bit(fsk_modulator_t *fsk_trans, int8_t bit, int16_t *buf, size_t buflen) size_t fsk_modulator_generate_bit(fsk_modulator_t *fsk_trans, int8_t bit, int16_t *buf, size_t buflen)
{ {
size_t i; size_t i;
for(i = 0 ; i < buflen; i++) { for(i = 0 ; i < buflen; i++) {
fsk_trans->bit_accum += fsk_trans->bit_factor; fsk_trans->bit_accum += fsk_trans->bit_factor;
if (fsk_trans->bit_accum >= FSK_MOD_FACTOR) { if (fsk_trans->bit_accum >= FSK_MOD_FACTOR) {
@ -333,7 +333,7 @@ void fsk_modulator_generate_chan_sieze(fsk_modulator_t *fsk_trans)
uint32_t i = 0; uint32_t i = 0;
size_t r = 0; size_t r = 0;
int8_t bit = 0; int8_t bit = 0;
for (i = 0; i < fsk_trans->chan_sieze_bits; i++) { for (i = 0; i < fsk_trans->chan_sieze_bits; i++) {
if ((r = fsk_modulator_generate_bit(fsk_trans, bit, fsk_trans->sample_buffer, sizeof(fsk_trans->sample_buffer) / 2))) { if ((r = fsk_modulator_generate_bit(fsk_trans, bit, fsk_trans->sample_buffer, sizeof(fsk_trans->sample_buffer) / 2))) {
if (fsk_trans->write_sample_callback(fsk_trans->sample_buffer, r, fsk_trans->user_data) != SWITCH_STATUS_SUCCESS) { if (fsk_trans->write_sample_callback(fsk_trans->sample_buffer, r, fsk_trans->user_data) != SWITCH_STATUS_SUCCESS) {
@ -344,7 +344,7 @@ void fsk_modulator_generate_chan_sieze(fsk_modulator_t *fsk_trans)
} }
bit = !bit; bit = !bit;
} }
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* mod_fsk -- FSK data transfer * mod_fsk -- FSK data transfer

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* *
* mod_fsk.c -- FSK data transfer * mod_fsk.c -- FSK data transfer
@ -36,7 +36,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_fsk_shutdown);
SWITCH_MODULE_RUNTIME_FUNCTION(mod_fsk_runtime); SWITCH_MODULE_RUNTIME_FUNCTION(mod_fsk_runtime);
SWITCH_MODULE_LOAD_FUNCTION(mod_fsk_load); SWITCH_MODULE_LOAD_FUNCTION(mod_fsk_load);
/* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime) /* SWITCH_MODULE_DEFINITION(name, load, shutdown, runtime)
* Defines a switch_loadable_module_function_table_t and a static const char[] modname * Defines a switch_loadable_module_function_table_t and a static const char[] modname
*/ */
SWITCH_MODULE_DEFINITION(mod_fsk, mod_fsk_load, mod_fsk_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_fsk, mod_fsk_load, mod_fsk_shutdown, NULL);
@ -46,7 +46,7 @@ switch_status_t my_write_sample(int16_t *buf, size_t buflen, void *user_data)
switch_buffer_t *buffer = (switch_buffer_t *) user_data; switch_buffer_t *buffer = (switch_buffer_t *) user_data;
switch_buffer_write(buffer, buf, buflen * 2); switch_buffer_write(buffer, buf, buflen * 2);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -62,7 +62,7 @@ static switch_status_t write_fsk_data(uint32_t rate, int32_t db, switch_buffer_t
switch_size_t plen = 0; switch_size_t plen = 0;
memset(&fsk_trans, 0, sizeof(fsk_trans)); memset(&fsk_trans, 0, sizeof(fsk_trans));
time(&now); time(&now);
localtime_r(&now, &tm); localtime_r(&now, &tm);
strftime(time_str, sizeof(time_str), "%m%d%H%M", &tm); strftime(time_str, sizeof(time_str), "%m%d%H%M", &tm);
@ -91,7 +91,7 @@ static switch_status_t write_fsk_data(uint32_t rate, int32_t db, switch_buffer_t
} }
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Encoding [%s][%s]\n", hp->name, hp->value); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Encoding [%s][%s]\n", hp->name, hp->value);
if (!strcasecmp(name, "phone_num")) { if (!strcasecmp(name, "phone_num")) {
fsk_data_add_mdmf(&fsk_data, MDMF_PHONE_NUM, (uint8_t *)hp->value, strlen(hp->value)); fsk_data_add_mdmf(&fsk_data, MDMF_PHONE_NUM, (uint8_t *)hp->value, strlen(hp->value));
} else if (!strcasecmp(name, "phone_name")) { } else if (!strcasecmp(name, "phone_name")) {
@ -122,14 +122,14 @@ SWITCH_STANDARD_APP(fsk_send_function) {
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
switch_frame_t *read_frame; switch_frame_t *read_frame;
switch_status_t status; switch_status_t status;
if (data) { if (data) {
switch_ivr_sleep(session, 1000, SWITCH_TRUE, NULL); switch_ivr_sleep(session, 1000, SWITCH_TRUE, NULL);
switch_core_session_send_dtmf_string(session, (const char *) data); switch_core_session_send_dtmf_string(session, (const char *) data);
switch_ivr_sleep(session, 1500, SWITCH_TRUE, NULL); switch_ivr_sleep(session, 1500, SWITCH_TRUE, NULL);
} }
if (switch_core_session_set_codec_slin(session, &sdata) != SWITCH_STATUS_SUCCESS) { if (switch_core_session_set_codec_slin(session, &sdata) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),
SWITCH_LOG_ERROR, "FAILURE\n"); SWITCH_LOG_ERROR, "FAILURE\n");
@ -139,7 +139,7 @@ SWITCH_STANDARD_APP(fsk_send_function) {
switch_buffer_create_dynamic(&buffer, 1024, 2048, 0); switch_buffer_create_dynamic(&buffer, 1024, 2048, 0);
switch_channel_get_variables(channel, &event); switch_channel_get_variables(channel, &event);
write_fsk_data(sdata.codec.implementation->actual_samples_per_second, -14, buffer, event, "fsk_"); write_fsk_data(sdata.codec.implementation->actual_samples_per_second, -14, buffer, event, "fsk_");
while(switch_channel_ready(channel)) { while(switch_channel_ready(channel)) {
@ -149,14 +149,14 @@ SWITCH_STANDARD_APP(fsk_send_function) {
break; break;
} }
if ((sdata.write_frame.datalen = switch_buffer_read(buffer, sdata.write_frame.data, if ((sdata.write_frame.datalen = switch_buffer_read(buffer, sdata.write_frame.data,
sdata.codec.implementation->decoded_bytes_per_packet)) <= 0) { sdata.codec.implementation->decoded_bytes_per_packet)) <= 0) {
break; break;
} }
if (sdata.write_frame.datalen < sdata.codec.implementation->decoded_bytes_per_packet) { if (sdata.write_frame.datalen < sdata.codec.implementation->decoded_bytes_per_packet) {
memset((char *)sdata.write_frame.data + sdata.write_frame.datalen, 255, memset((char *)sdata.write_frame.data + sdata.write_frame.datalen, 255,
sdata.codec.implementation->decoded_bytes_per_packet - sdata.write_frame.datalen); sdata.codec.implementation->decoded_bytes_per_packet - sdata.write_frame.datalen);
sdata.write_frame.datalen = sdata.codec.implementation->decoded_bytes_per_packet; sdata.write_frame.datalen = sdata.codec.implementation->decoded_bytes_per_packet;
} }
@ -168,7 +168,7 @@ SWITCH_STANDARD_APP(fsk_send_function) {
switch_buffer_destroy(&buffer); switch_buffer_destroy(&buffer);
switch_core_codec_destroy(&sdata.codec); switch_core_codec_destroy(&sdata.codec);
switch_core_session_set_read_codec(session, NULL); switch_core_session_set_read_codec(session, NULL);
} }
typedef struct { typedef struct {
@ -191,11 +191,11 @@ static switch_bool_t fsk_detect_callback(switch_media_bug_t *bug, void *user_dat
case SWITCH_ABC_TYPE_INIT: { case SWITCH_ABC_TYPE_INIT: {
switch_codec_implementation_t read_impl = { 0 }; switch_codec_implementation_t read_impl = { 0 };
switch_core_session_get_read_impl(pvt->session, &read_impl); switch_core_session_get_read_impl(pvt->session, &read_impl);
if (fsk_demod_init(&pvt->fsk_data, read_impl.actual_samples_per_second, pvt->fbuf, sizeof(pvt->fbuf))) { if (fsk_demod_init(&pvt->fsk_data, read_impl.actual_samples_per_second, pvt->fbuf, sizeof(pvt->fbuf))) {
return SWITCH_FALSE; return SWITCH_FALSE;
} }
break; break;
} }
case SWITCH_ABC_TYPE_CLOSE: case SWITCH_ABC_TYPE_CLOSE:
@ -224,10 +224,10 @@ static switch_bool_t fsk_detect_callback(switch_media_bug_t *bug, void *user_dat
int total = 0; int total = 0;
switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA); switch_event_create_plain(&event, SWITCH_EVENT_CHANNEL_DATA);
while(fsk_data_parse(&pvt->fsk_data, &type, &sp, &mlen) == SWITCH_STATUS_SUCCESS) { while(fsk_data_parse(&pvt->fsk_data, &type, &sp, &mlen) == SWITCH_STATUS_SUCCESS) {
char *varname = NULL, *val, *p; char *varname = NULL, *val, *p;
switch_copy_string(str, sp, mlen+1); switch_copy_string(str, sp, mlen+1);
*(str+mlen) = '\0'; *(str+mlen) = '\0';
switch_clean_string(str); switch_clean_string(str);
@ -258,7 +258,7 @@ static switch_bool_t fsk_detect_callback(switch_media_bug_t *bug, void *user_dat
if (varname && val) { if (varname && val) {
total++; total++;
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(pvt->session), SWITCH_LOG_DEBUG, "%s setting FSK var [%s][%s]\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(pvt->session), SWITCH_LOG_DEBUG, "%s setting FSK var [%s][%s]\n",
switch_channel_get_name(channel), varname, val); switch_channel_get_name(channel), varname, val);
switch_channel_set_variable(channel, varname, val); switch_channel_set_variable(channel, varname, val);
if (event) { if (event) {
@ -272,21 +272,21 @@ static switch_bool_t fsk_detect_callback(switch_media_bug_t *bug, void *user_dat
switch_event_destroy(&event); switch_event_destroy(&event);
} }
} }
if (total && (app_var = switch_channel_get_variable(channel, "execute_on_fsk"))) { if (total && (app_var = switch_channel_get_variable(channel, "execute_on_fsk"))) {
char *app_arg; char *app_arg;
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(pvt->session), SWITCH_LOG_DEBUG, "%s processing execute_on_fsk [%s]\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(pvt->session), SWITCH_LOG_DEBUG, "%s processing execute_on_fsk [%s]\n",
switch_channel_get_name(channel), app_var); switch_channel_get_name(channel), app_var);
if ((app_arg = strchr(app_var, ' '))) { if ((app_arg = strchr(app_var, ' '))) {
*app_arg++ = '\0'; *app_arg++ = '\0';
} }
switch_core_session_execute_application(pvt->session, app_var, app_arg); switch_core_session_execute_application(pvt->session, app_var, app_arg);
} }
pvt->skip = 10; pvt->skip = 10;
} }
memset(rframe->data, 255, rframe->datalen); memset(rframe->data, 255, rframe->datalen);
if (type == SWITCH_ABC_TYPE_READ_REPLACE) { if (type == SWITCH_ABC_TYPE_READ_REPLACE) {
@ -359,12 +359,12 @@ switch_status_t fsk_detect_session(switch_core_session_t *session, const char *f
} }
SWITCH_STANDARD_APP(fsk_recv_function) SWITCH_STANDARD_APP(fsk_recv_function)
{ {
fsk_detect_session(session, data); fsk_detect_session(session, data);
} }
SWITCH_STANDARD_APP(fsk_display_function) SWITCH_STANDARD_APP(fsk_display_function)
{ {
/* expected to be called via 'execute_on_fsk' -- passes display update over FSK */ /* expected to be called via 'execute_on_fsk' -- passes display update over FSK */
@ -380,7 +380,7 @@ SWITCH_STANDARD_APP(fsk_display_function)
if (zstr(cid_name)) { if (zstr(cid_name)) {
cid_name = cid_num; cid_name = cid_num;
} }
if (zstr(cid_num)) { if (zstr(cid_num)) {
return; return;
} }
@ -409,13 +409,13 @@ SWITCH_STANDARD_APP(fsk_display_function)
} }
} }
SWITCH_STANDARD_APP(fsk_simplify_function) SWITCH_STANDARD_APP(fsk_simplify_function)
{ {
/* expected to be called via 'execute_on_fsk' -- redirects call to point-to-point and eliminates legs in the middle */ /* expected to be called via 'execute_on_fsk' -- redirects call to point-to-point and eliminates legs in the middle */
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
const char *sip_uri, *fsk_simplify_profile, *fsk_simplify_context; const char *sip_uri, *fsk_simplify_profile, *fsk_simplify_context;
char *bridgeto; char *bridgeto;
if (!(sip_uri = switch_channel_get_variable(channel, "fsk_uri"))) { if (!(sip_uri = switch_channel_get_variable(channel, "fsk_uri"))) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "%s Missing URI field!\n", switch_channel_get_name(channel)); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "%s Missing URI field!\n", switch_channel_get_name(channel));
} }
@ -431,21 +431,21 @@ SWITCH_STANDARD_APP(fsk_simplify_function)
switch_channel_t *pchannel; switch_channel_t *pchannel;
bridgeto = switch_core_session_sprintf(session, "bridge:sofia/%s/sip:%s", fsk_simplify_profile, sip_uri); bridgeto = switch_core_session_sprintf(session, "bridge:sofia/%s/sip:%s", fsk_simplify_profile, sip_uri);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s transfering to [%s]\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "%s transfering to [%s]\n",
switch_channel_get_name(channel), bridgeto); switch_channel_get_name(channel), bridgeto);
if (switch_core_session_get_partner(session, &psession) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_get_partner(session, &psession) == SWITCH_STATUS_SUCCESS) {
pchannel = switch_core_session_get_channel(psession); pchannel = switch_core_session_get_channel(psession);
switch_channel_set_flag(pchannel, CF_REDIRECT); switch_channel_set_flag(pchannel, CF_REDIRECT);
switch_channel_set_flag(pchannel, CF_TRANSFER); switch_channel_set_flag(pchannel, CF_TRANSFER);
} }
switch_ivr_session_transfer(session, bridgeto, "inline", fsk_simplify_context); switch_ivr_session_transfer(session, bridgeto, "inline", fsk_simplify_context);
if (psession) { if (psession) {
switch_ivr_session_transfer(psession, "sleep:5000", "inline", NULL); switch_ivr_session_transfer(psession, "sleep:5000", "inline", NULL);
switch_core_session_rwunlock(psession); switch_core_session_rwunlock(psession);
} }
} }
} }

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Seven Du <dujinfang@gmail.com> * Seven Du <dujinfang@gmail.com>
* *
@ -124,14 +124,14 @@ SWITCH_STANDARD_APP(record_fsv_function)
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "%s waiting for video.\n", switch_channel_get_name(channel)); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "%s waiting for video.\n", switch_channel_get_name(channel));
count = 100; count = 100;
if (!--sanity) { if (!--sanity) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s timeout waiting for video.\n", switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "%s timeout waiting for video.\n",
switch_channel_get_name(channel)); switch_channel_get_name(channel));
switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "Got timeout while waiting for video"); switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "Got timeout while waiting for video");
goto done; goto done;
} }
} }
} }
if (!switch_channel_ready(channel)) { if (!switch_channel_ready(channel)) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_CRIT, "%s not ready.\n", switch_channel_get_name(channel)); switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_CRIT, "%s not ready.\n", switch_channel_get_name(channel));
switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "Channel not ready"); switch_channel_set_variable(channel, SWITCH_CURRENT_APPLICATION_RESPONSE_VARIABLE, "Channel not ready");
@ -241,7 +241,7 @@ SWITCH_STANDARD_APP(record_fsv_function)
} }
break; break;
} }
if (mutex) { if (mutex) {
switch_mutex_unlock(mutex); switch_mutex_unlock(mutex);
} }
@ -442,7 +442,7 @@ SWITCH_STANDARD_APP(play_fsv_function)
if (terminators && !strcasecmp(terminators, "none")) if (terminators && !strcasecmp(terminators, "none"))
{ {
terminators = NULL; terminators = NULL;
} }
if (terminators && strchr(terminators, dtmf.digit)) { if (terminators && strchr(terminators, dtmf.digit)) {
@ -452,7 +452,7 @@ SWITCH_STANDARD_APP(play_fsv_function)
} }
} }
} }
} }
switch_core_thread_session_end(session); switch_core_thread_session_end(session);
@ -625,7 +625,7 @@ SWITCH_STANDARD_APP(play_yuv_function)
break; break;
} }
} }
if (read_frame) { if (read_frame) {
memset(read_frame->data, 0, read_frame->datalen); memset(read_frame->data, 0, read_frame->datalen);
switch_core_session_write_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0); switch_core_session_write_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0);
@ -699,7 +699,7 @@ static void decode_video_thread(switch_core_session_t *session, void *obj)
switch_core_session_request_video_refresh(session); switch_core_session_request_video_refresh(session);
count = 1; count = 1;
} }
if (frame && frame->datalen > 0) { if (frame && frame->datalen > 0) {
switch_core_session_write_video_frame(session, frame, SWITCH_IO_FLAG_NONE, 0); switch_core_session_write_video_frame(session, frame, SWITCH_IO_FLAG_NONE, 0);

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Ken Rice <krice at suspicious dot org * Ken Rice <krice at suspicious dot org
* Mathieu Rene <mathieu.rene@gmail.com> * Mathieu Rene <mathieu.rene@gmail.com>
@ -98,18 +98,18 @@ typedef struct {
const char *username; const char *username;
const char *password; const char *password;
int port; int port;
int interval; int interval;
esl_handle_t handle; esl_handle_t handle;
switch_hash_t *index; switch_hash_t *index;
switch_thread_rwlock_t *rwlock; switch_thread_rwlock_t *rwlock;
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
switch_bool_t running; switch_bool_t running;
switch_thread_t *thread; switch_thread_t *thread;
limit_remote_state_t state; limit_remote_state_t state;
} limit_remote_t; } limit_remote_t;
@ -232,24 +232,24 @@ SWITCH_HASH_DELETE_FUNC(limit_hash_cleanup_delete_callback) {
if (item->total_usage == 0 && item->rate_usage == 0) { if (item->total_usage == 0 && item->rate_usage == 0) {
/* Noone is using this item anymore */ /* Noone is using this item anymore */
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Freeing limit item: %s\n", (const char *) key); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Freeing limit item: %s\n", (const char *) key);
free(item); free(item);
return SWITCH_TRUE; return SWITCH_TRUE;
} }
return SWITCH_FALSE; return SWITCH_FALSE;
} }
SWITCH_HASH_DELETE_FUNC(limit_hash_remote_cleanup_callback) SWITCH_HASH_DELETE_FUNC(limit_hash_remote_cleanup_callback)
{ {
limit_hash_item_t *item = (limit_hash_item_t *) val; limit_hash_item_t *item = (limit_hash_item_t *) val;
switch_time_t now = (switch_time_t)(intptr_t)pData; switch_time_t now = (switch_time_t)(intptr_t)pData;
if (item->last_update != now) { if (item->last_update != now) {
free(item); free(item);
return SWITCH_TRUE; return SWITCH_TRUE;
} }
return SWITCH_FALSE; return SWITCH_FALSE;
} }
@ -262,7 +262,7 @@ SWITCH_STANDARD_SCHED_FUNC(limit_hash_cleanup_callback)
} }
switch_thread_rwlock_unlock(globals.limit_hash_rwlock); switch_thread_rwlock_unlock(globals.limit_hash_rwlock);
if (globals.limit_hash) { if (globals.limit_hash) {
task->runtime = switch_epoch_time_now(NULL) + LIMIT_HASH_CLEANUP_INTERVAL; task->runtime = switch_epoch_time_now(NULL) + LIMIT_HASH_CLEANUP_INTERVAL;
} }
} }
@ -323,7 +323,7 @@ SWITCH_LIMIT_RELEASE(limit_release_hash)
} }
switch_thread_rwlock_unlock(globals.limit_hash_rwlock); switch_thread_rwlock_unlock(globals.limit_hash_rwlock);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -338,7 +338,7 @@ SWITCH_LIMIT_USAGE(limit_usage_hash)
hash_key = switch_mprintf("%s_%s", realm, resource); hash_key = switch_mprintf("%s_%s", realm, resource);
remote_usage = get_remote_usage(hash_key); remote_usage = get_remote_usage(hash_key);
count = remote_usage.total_usage; count = remote_usage.total_usage;
*rcount = remote_usage.rate_usage; *rcount = remote_usage.rate_usage;
@ -382,15 +382,15 @@ SWITCH_LIMIT_STATUS(limit_status_hash)
switch_hash_index_t *hi = NULL; switch_hash_index_t *hi = NULL;
int count = 0; int count = 0;
char *ret = NULL; char *ret = NULL;
switch_thread_rwlock_rdlock(globals.limit_hash_rwlock); switch_thread_rwlock_rdlock(globals.limit_hash_rwlock);
for (hi = switch_core_hash_first(globals.limit_hash); hi; switch_core_hash_next(hi)) { for (hi = switch_core_hash_first(globals.limit_hash); hi; switch_core_hash_next(hi)) {
count++; count++;
} }
switch_thread_rwlock_unlock(globals.limit_hash_rwlock); switch_thread_rwlock_unlock(globals.limit_hash_rwlock);
ret = switch_mprintf("There are %d elements being tracked.", count); ret = switch_mprintf("There are %d elements being tracked.", count);
return ret; return ret;
*/ */
@ -577,7 +577,7 @@ SWITCH_STANDARD_API(hash_api_function)
} }
#define HASH_DUMP_SYNTAX "all|limit|db [<realm>]" #define HASH_DUMP_SYNTAX "all|limit|db [<realm>]"
SWITCH_STANDARD_API(hash_dump_function) SWITCH_STANDARD_API(hash_dump_function)
{ {
int mode; int mode;
switch_hash_index_t *hi; switch_hash_index_t *hi;
@ -586,7 +586,7 @@ SWITCH_STANDARD_API(hash_dump_function)
char *mydata = NULL; char *mydata = NULL;
int realm = 0; int realm = 0;
char *realmvalue = NULL; char *realmvalue = NULL;
if (zstr(cmd)) { if (zstr(cmd)) {
stream->write_function(stream, "Usage: "HASH_DUMP_SYNTAX"\n"); stream->write_function(stream, "Usage: "HASH_DUMP_SYNTAX"\n");
goto done; goto done;
@ -600,8 +600,8 @@ SWITCH_STANDARD_API(hash_dump_function)
if (argc == 2) { if (argc == 2) {
realm = 1; realm = 1;
realmvalue = switch_mprintf("%s_", argv[1]); realmvalue = switch_mprintf("%s_", argv[1]);
} }
if (!strcmp(cmd, "all")) { if (!strcmp(cmd, "all")) {
mode = 3; mode = 3;
} else if (!strcmp(cmd, "limit")) { } else if (!strcmp(cmd, "limit")) {
@ -612,7 +612,7 @@ SWITCH_STANDARD_API(hash_dump_function)
stream->write_function(stream, "Usage: "HASH_DUMP_SYNTAX"\n"); stream->write_function(stream, "Usage: "HASH_DUMP_SYNTAX"\n");
goto done; goto done;
} }
if (mode & 1) { if (mode & 1) {
switch_thread_rwlock_rdlock(globals.limit_hash_rwlock); switch_thread_rwlock_rdlock(globals.limit_hash_rwlock);
for (hi = switch_core_hash_first(globals.limit_hash); hi; hi = switch_core_hash_next(&hi)) { for (hi = switch_core_hash_first(globals.limit_hash); hi; hi = switch_core_hash_next(&hi)) {
@ -621,14 +621,14 @@ SWITCH_STANDARD_API(hash_dump_function)
switch_ssize_t keylen; switch_ssize_t keylen;
limit_hash_item_t *item; limit_hash_item_t *item;
switch_core_hash_this(hi, &key, &keylen, &val); switch_core_hash_this(hi, &key, &keylen, &val);
item = (limit_hash_item_t *)val; item = (limit_hash_item_t *)val;
stream->write_function(stream, "L/%s/%d/%d/%d/%d\n", key, item->total_usage, item->rate_usage, item->interval, item->last_check); stream->write_function(stream, "L/%s/%d/%d/%d/%d\n", key, item->total_usage, item->rate_usage, item->interval, item->last_check);
} }
switch_thread_rwlock_unlock(globals.limit_hash_rwlock); switch_thread_rwlock_unlock(globals.limit_hash_rwlock);
} }
if (mode & 2) { if (mode & 2) {
switch_thread_rwlock_rdlock(globals.db_hash_rwlock); switch_thread_rwlock_rdlock(globals.db_hash_rwlock);
for (hi = switch_core_hash_first(globals.db_hash); hi; hi = switch_core_hash_next(&hi)) { for (hi = switch_core_hash_first(globals.db_hash); hi; hi = switch_core_hash_next(&hi)) {
@ -646,7 +646,7 @@ SWITCH_STANDARD_API(hash_dump_function)
} }
switch_thread_rwlock_unlock(globals.db_hash_rwlock); switch_thread_rwlock_unlock(globals.db_hash_rwlock);
} }
done: done:
switch_safe_free(mydata); switch_safe_free(mydata);
switch_safe_free(realmvalue); switch_safe_free(realmvalue);
@ -655,38 +655,38 @@ SWITCH_STANDARD_API(hash_dump_function)
} }
#define HASH_REMOTE_SYNTAX "list|kill [name]|rescan" #define HASH_REMOTE_SYNTAX "list|kill [name]|rescan"
SWITCH_STANDARD_API(hash_remote_function) SWITCH_STANDARD_API(hash_remote_function)
{ {
//int argc; //int argc;
char *argv[10]; char *argv[10];
char *dup = NULL; char *dup = NULL;
if (zstr(cmd)) { if (zstr(cmd)) {
stream->write_function(stream, "-ERR Usage: "HASH_REMOTE_SYNTAX"\n"); stream->write_function(stream, "-ERR Usage: "HASH_REMOTE_SYNTAX"\n");
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
dup = strdup(cmd); dup = strdup(cmd);
switch_split(dup, ' ', argv); switch_split(dup, ' ', argv);
if (argv[0] && !strcmp(argv[0], "list")) { if (argv[0] && !strcmp(argv[0], "list")) {
switch_hash_index_t *hi; switch_hash_index_t *hi;
stream->write_function(stream, "Remote connections:\nName\t\t\tState\n"); stream->write_function(stream, "Remote connections:\nName\t\t\tState\n");
switch_thread_rwlock_rdlock(globals.remote_hash_rwlock); switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
for (hi = switch_core_hash_first(globals.remote_hash); hi; hi = switch_core_hash_next(&hi)) { for (hi = switch_core_hash_first(globals.remote_hash); hi; hi = switch_core_hash_next(&hi)) {
void *val; void *val;
const void *key; const void *key;
switch_ssize_t keylen; switch_ssize_t keylen;
limit_remote_t *item; limit_remote_t *item;
switch_core_hash_this(hi, &key, &keylen, &val); switch_core_hash_this(hi, &key, &keylen, &val);
item = (limit_remote_t *)val; item = (limit_remote_t *)val;
stream->write_function(stream, "%s\t\t\t%s\n", item->name, state_str(item->state)); stream->write_function(stream, "%s\t\t\t%s\n", item->name, state_str(item->state));
} }
switch_thread_rwlock_unlock(globals.remote_hash_rwlock); switch_thread_rwlock_unlock(globals.remote_hash_rwlock);
stream->write_function(stream, "+OK\n"); stream->write_function(stream, "+OK\n");
} else if (argv[0] && !strcmp(argv[0], "kill")) { } else if (argv[0] && !strcmp(argv[0], "kill")) {
const char *name = argv[1]; const char *name = argv[1];
limit_remote_t *remote; limit_remote_t *remote;
@ -697,15 +697,15 @@ SWITCH_STANDARD_API(hash_remote_function)
switch_thread_rwlock_rdlock(globals.remote_hash_rwlock); switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
remote = switch_core_hash_find(globals.remote_hash, name); remote = switch_core_hash_find(globals.remote_hash, name);
switch_thread_rwlock_unlock(globals.remote_hash_rwlock); switch_thread_rwlock_unlock(globals.remote_hash_rwlock);
if (remote) { if (remote) {
limit_remote_destroy(&remote); limit_remote_destroy(&remote);
switch_thread_rwlock_wrlock(globals.remote_hash_rwlock); switch_thread_rwlock_wrlock(globals.remote_hash_rwlock);
switch_core_hash_delete(globals.remote_hash, name); switch_core_hash_delete(globals.remote_hash, name);
switch_thread_rwlock_unlock(globals.remote_hash_rwlock); switch_thread_rwlock_unlock(globals.remote_hash_rwlock);
stream->write_function(stream, "+OK\n"); stream->write_function(stream, "+OK\n");
} else { } else {
stream->write_function(stream, "-ERR No such remote instance %s\n", name); stream->write_function(stream, "-ERR No such remote instance %s\n", name);
} }
@ -714,9 +714,9 @@ SWITCH_STANDARD_API(hash_remote_function)
stream->write_function(stream, "+OK\n"); stream->write_function(stream, "+OK\n");
} else { } else {
stream->write_function(stream, "-ERR Usage: "HASH_REMOTE_SYNTAX"\n"); stream->write_function(stream, "-ERR Usage: "HASH_REMOTE_SYNTAX"\n");
} }
done: done:
switch_safe_free(dup); switch_safe_free(dup);
@ -724,11 +724,11 @@ done:
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
limit_remote_t *limit_remote_create(const char *name, const char *host, uint16_t port, const char *username, const char *password, int interval) limit_remote_t *limit_remote_create(const char *name, const char *host, uint16_t port, const char *username, const char *password, int interval)
{ {
limit_remote_t *r; limit_remote_t *r;
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
switch_thread_rwlock_rdlock(globals.remote_hash_rwlock); switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
if (switch_core_hash_find(globals.remote_hash, name)) { if (switch_core_hash_find(globals.remote_hash, name)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Already have a remote instance named %s\n", name); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Already have a remote instance named %s\n", name);
@ -736,11 +736,11 @@ limit_remote_t *limit_remote_create(const char *name, const char *host, uint16_t
return NULL; return NULL;
} }
switch_thread_rwlock_unlock(globals.remote_hash_rwlock); switch_thread_rwlock_unlock(globals.remote_hash_rwlock);
if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) { if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
return NULL; return NULL;
} }
r = switch_core_alloc(pool, sizeof(limit_remote_t)); r = switch_core_alloc(pool, sizeof(limit_remote_t));
r->pool = pool; r->pool = pool;
r->name = switch_core_strdup(r->pool, name); r->name = switch_core_strdup(r->pool, name);
@ -749,10 +749,10 @@ limit_remote_t *limit_remote_create(const char *name, const char *host, uint16_t
r->username = switch_core_strdup(r->pool, username); r->username = switch_core_strdup(r->pool, username);
r->password = switch_core_strdup(r->pool, password); r->password = switch_core_strdup(r->pool, password);
r->interval = interval; r->interval = interval;
switch_thread_rwlock_create(&r->rwlock, pool); switch_thread_rwlock_create(&r->rwlock, pool);
switch_core_hash_init(&r->index); switch_core_hash_init(&r->index);
switch_thread_rwlock_rdlock(globals.remote_hash_rwlock); switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
switch_core_hash_insert(globals.remote_hash, name, r); switch_core_hash_insert(globals.remote_hash, name, r);
switch_thread_rwlock_unlock(globals.remote_hash_rwlock); switch_thread_rwlock_unlock(globals.remote_hash_rwlock);
@ -776,17 +776,17 @@ void limit_remote_destroy(limit_remote_t **r)
/* Free hashtable data */ /* Free hashtable data */
for (hi = switch_core_hash_first((*r)->index); hi; hi = switch_core_hash_next(&hi)) { for (hi = switch_core_hash_first((*r)->index); hi; hi = switch_core_hash_next(&hi)) {
void *val; void *val;
const void *key; const void *key;
switch_ssize_t keylen; switch_ssize_t keylen;
switch_core_hash_this(hi, &key, &keylen, &val); switch_core_hash_this(hi, &key, &keylen, &val);
free(val); free(val);
} }
switch_thread_rwlock_unlock((*r)->rwlock); switch_thread_rwlock_unlock((*r)->rwlock);
switch_thread_rwlock_destroy((*r)->rwlock); switch_thread_rwlock_destroy((*r)->rwlock);
switch_core_destroy_memory_pool(&((*r)->pool)); switch_core_destroy_memory_pool(&((*r)->pool));
*r = NULL; *r = NULL;
} }
@ -796,21 +796,21 @@ void limit_remote_destroy(limit_remote_t **r)
static limit_hash_item_t get_remote_usage(const char *key) { static limit_hash_item_t get_remote_usage(const char *key) {
limit_hash_item_t usage = { 0 }; limit_hash_item_t usage = { 0 };
switch_hash_index_t *hi; switch_hash_index_t *hi;
switch_thread_rwlock_rdlock(globals.remote_hash_rwlock); switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
for (hi = switch_core_hash_first(globals.remote_hash); hi; hi = switch_core_hash_next(&hi)) { for (hi = switch_core_hash_first(globals.remote_hash); hi; hi = switch_core_hash_next(&hi)) {
void *val; void *val;
const void *hashkey; const void *hashkey;
switch_ssize_t keylen; switch_ssize_t keylen;
limit_remote_t *remote; limit_remote_t *remote;
limit_hash_item_t *item; limit_hash_item_t *item;
switch_core_hash_this(hi, &hashkey, &keylen, &val); switch_core_hash_this(hi, &hashkey, &keylen, &val);
remote = (limit_remote_t *)val; remote = (limit_remote_t *)val;
if (remote->state != REMOTE_UP) { if (remote->state != REMOTE_UP) {
continue; continue;
} }
switch_thread_rwlock_rdlock(remote->rwlock); switch_thread_rwlock_rdlock(remote->rwlock);
if ((item = switch_core_hash_find(remote->index, key))) { if ((item = switch_core_hash_find(remote->index, key))) {
usage.total_usage += item->total_usage; usage.total_usage += item->total_usage;
@ -821,9 +821,9 @@ static limit_hash_item_t get_remote_usage(const char *key) {
} }
switch_thread_rwlock_unlock(remote->rwlock); switch_thread_rwlock_unlock(remote->rwlock);
} }
switch_thread_rwlock_unlock(globals.remote_hash_rwlock); switch_thread_rwlock_unlock(globals.remote_hash_rwlock);
return usage; return usage;
} }
@ -835,7 +835,7 @@ static void *SWITCH_THREAD_FUNC limit_remote_thread(switch_thread_t *thread, voi
if (esl_connect_timeout(&remote->handle, remote->host, (esl_port_t)remote->port, remote->username, remote->password, 5000) == ESL_SUCCESS) { if (esl_connect_timeout(&remote->handle, remote->host, (esl_port_t)remote->port, remote->username, remote->password, 5000) == ESL_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Connected to remote FreeSWITCH (%s) at %s:%d\n", switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Connected to remote FreeSWITCH (%s) at %s:%d\n",
remote->name, remote->host, remote->port); remote->name, remote->host, remote->port);
remote->state = REMOTE_UP; remote->state = REMOTE_UP;
} else { } else {
esl_disconnect(&remote->handle); esl_disconnect(&remote->handle);
@ -860,20 +860,20 @@ static void *SWITCH_THREAD_FUNC limit_remote_thread(switch_thread_t *thread, voi
switch_time_t now = switch_epoch_time_now(NULL); switch_time_t now = switch_epoch_time_now(NULL);
while (p && *p) { while (p && *p) {
/* We are getting the limit data as: /* We are getting the limit data as:
L/key/usage/rate/interval/last_checked L/key/usage/rate/interval/last_checked
*/ */
if ((p2 = strchr(p, '\n'))) { if ((p2 = strchr(p, '\n'))) {
*p2++ = '\0'; *p2++ = '\0';
} }
/* Now p points at the beginning of the current line, /* Now p points at the beginning of the current line,
p2 at the start of the next one */ p2 at the start of the next one */
if (*p == 'L') { /* Limit data */ if (*p == 'L') { /* Limit data */
char *argv[5]; char *argv[5];
int argc = switch_split(p+2, '/', argv); int argc = switch_split(p+2, '/', argv);
if (argc < 5) { if (argc < 5) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "[%s] Protocol error: missing argument in line: %s\n", switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "[%s] Protocol error: missing argument in line: %s\n",
remote->name, p); remote->name, p);
} else { } else {
limit_hash_item_t *item; limit_hash_item_t *item;
@ -890,11 +890,11 @@ static void *SWITCH_THREAD_FUNC limit_remote_thread(switch_thread_t *thread, voi
switch_thread_rwlock_unlock(remote->rwlock); switch_thread_rwlock_unlock(remote->rwlock);
} }
} }
p = p2; p = p2;
} }
free(data); free(data);
/* Now free up anything that wasn't in this update since it means their usage is 0 */ /* Now free up anything that wasn't in this update since it means their usage is 0 */
switch_thread_rwlock_wrlock(remote->rwlock); switch_thread_rwlock_wrlock(remote->rwlock);
switch_core_hash_delete_multi(remote->index, limit_hash_remote_cleanup_callback, (void*)(intptr_t)now); switch_core_hash_delete_multi(remote->index, limit_hash_remote_cleanup_callback, (void*)(intptr_t)now);
@ -902,12 +902,12 @@ static void *SWITCH_THREAD_FUNC limit_remote_thread(switch_thread_t *thread, voi
} }
} }
} }
switch_yield(remote->interval * 1000); switch_yield(remote->interval * 1000);
} }
remote->thread = NULL; remote->thread = NULL;
return NULL; return NULL;
} }
@ -927,7 +927,7 @@ static void do_config(switch_bool_t reload)
int interval = 0; int interval = 0;
limit_remote_t *remote; limit_remote_t *remote;
switch_threadattr_t *thd_attr = NULL; switch_threadattr_t *thd_attr = NULL;
if (reload) { if (reload) {
switch_thread_rwlock_rdlock(globals.remote_hash_rwlock); switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
if (switch_core_hash_find(globals.remote_hash, name)) { if (switch_core_hash_find(globals.remote_hash, name)) {
@ -940,15 +940,15 @@ static void do_config(switch_bool_t reload)
if (!zstr(szport)) { if (!zstr(szport)) {
port = (uint16_t)atoi(szport); port = (uint16_t)atoi(szport);
} }
if (!zstr(szinterval)) { if (!zstr(szinterval)) {
interval = atoi(szinterval); interval = atoi(szinterval);
} }
remote = limit_remote_create(name, host, port, username, password, interval); remote = limit_remote_create(name, host, port, username, password, interval);
remote->state = REMOTE_DOWN; remote->state = REMOTE_DOWN;
switch_threadattr_create(&thd_attr, remote->pool); switch_threadattr_create(&thd_attr, remote->pool);
switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
switch_thread_create(&remote->thread, thd_attr, limit_remote_thread, remote, remote->pool); switch_thread_create(&remote->thread, thd_attr, limit_remote_thread, remote, remote->pool);
@ -990,24 +990,24 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_hash_load)
switch_scheduler_add_task(switch_epoch_time_now(NULL) + LIMIT_HASH_CLEANUP_INTERVAL, limit_hash_cleanup_callback, "limit_hash_cleanup", "mod_hash", 0, NULL, switch_scheduler_add_task(switch_epoch_time_now(NULL) + LIMIT_HASH_CLEANUP_INTERVAL, limit_hash_cleanup_callback, "limit_hash_cleanup", "mod_hash", 0, NULL,
SSHF_NONE); SSHF_NONE);
SWITCH_ADD_APP(app_interface, "hash", "Insert into the hashtable", HASH_DESC, hash_function, HASH_USAGE, SAF_SUPPORT_NOMEDIA | SAF_ZOMBIE_EXEC) SWITCH_ADD_APP(app_interface, "hash", "Insert into the hashtable", HASH_DESC, hash_function, HASH_USAGE, SAF_SUPPORT_NOMEDIA | SAF_ZOMBIE_EXEC)
SWITCH_ADD_API(commands_api_interface, "hash", "hash get/set", hash_api_function, "[insert|delete|select]/<realm>/<key>/<value>"); SWITCH_ADD_API(commands_api_interface, "hash", "hash get/set", hash_api_function, "[insert|delete|select]/<realm>/<key>/<value>");
SWITCH_ADD_API(commands_api_interface, "hash_dump", "dump hash/limit_hash data (used for synchronization)", hash_dump_function, HASH_DUMP_SYNTAX); SWITCH_ADD_API(commands_api_interface, "hash_dump", "dump hash/limit_hash data (used for synchronization)", hash_dump_function, HASH_DUMP_SYNTAX);
SWITCH_ADD_API(commands_api_interface, "hash_remote", "hash remote", hash_remote_function, HASH_REMOTE_SYNTAX); SWITCH_ADD_API(commands_api_interface, "hash_remote", "hash remote", hash_remote_function, HASH_REMOTE_SYNTAX);
switch_console_set_complete("add hash insert"); switch_console_set_complete("add hash insert");
switch_console_set_complete("add hash delete"); switch_console_set_complete("add hash delete");
switch_console_set_complete("add hash select"); switch_console_set_complete("add hash select");
switch_console_set_complete("add hash_remote list"); switch_console_set_complete("add hash_remote list");
switch_console_set_complete("add hash_remote kill"); switch_console_set_complete("add hash_remote kill");
switch_console_set_complete("add hash_remote rescan"); switch_console_set_complete("add hash_remote rescan");
do_config(SWITCH_FALSE); do_config(SWITCH_FALSE);
/* indicate that the module should continue to be loaded */ /* indicate that the module should continue to be loaded */
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -1015,25 +1015,25 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
{ {
switch_hash_index_t *hi = NULL; switch_hash_index_t *hi = NULL;
switch_bool_t remote_clean = SWITCH_TRUE; switch_bool_t remote_clean = SWITCH_TRUE;
switch_scheduler_del_task_group("mod_hash"); switch_scheduler_del_task_group("mod_hash");
/* Kill remote connections, destroy needs a wrlock so we unlock after finding a pointer */ /* Kill remote connections, destroy needs a wrlock so we unlock after finding a pointer */
while(remote_clean) { while(remote_clean) {
void *val; void *val;
const void *key = NULL; const void *key = NULL;
switch_ssize_t keylen; switch_ssize_t keylen;
limit_remote_t *item = NULL; limit_remote_t *item = NULL;
switch_thread_rwlock_rdlock(globals.remote_hash_rwlock); switch_thread_rwlock_rdlock(globals.remote_hash_rwlock);
if ((hi = switch_core_hash_first(globals.remote_hash))) { if ((hi = switch_core_hash_first(globals.remote_hash))) {
switch_core_hash_this(hi, &key, &keylen, &val); switch_core_hash_this(hi, &key, &keylen, &val);
item = (limit_remote_t *)val; item = (limit_remote_t *)val;
} }
switch_thread_rwlock_unlock(globals.remote_hash_rwlock); switch_thread_rwlock_unlock(globals.remote_hash_rwlock);
if (!item) { if (!item) {
remote_clean = SWITCH_FALSE; remote_clean = SWITCH_FALSE;
} else { } else {
limit_remote_destroy(&item); limit_remote_destroy(&item);
switch_thread_rwlock_wrlock(globals.remote_hash_rwlock); switch_thread_rwlock_wrlock(globals.remote_hash_rwlock);
@ -1044,7 +1044,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
switch_thread_rwlock_wrlock(globals.limit_hash_rwlock); switch_thread_rwlock_wrlock(globals.limit_hash_rwlock);
switch_thread_rwlock_wrlock(globals.db_hash_rwlock); switch_thread_rwlock_wrlock(globals.db_hash_rwlock);
while ((hi = switch_core_hash_first_iter( globals.limit_hash, hi))) { while ((hi = switch_core_hash_first_iter( globals.limit_hash, hi))) {
void *val = NULL; void *val = NULL;
const void *key; const void *key;
@ -1053,7 +1053,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
free(val); free(val);
switch_core_hash_delete(globals.limit_hash, key); switch_core_hash_delete(globals.limit_hash, key);
} }
while ((hi = switch_core_hash_first_iter( globals.db_hash, hi))) { while ((hi = switch_core_hash_first_iter( globals.db_hash, hi))) {
void *val = NULL; void *val = NULL;
const void *key; const void *key;
@ -1064,7 +1064,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hash_shutdown)
} }
switch_core_hash_destroy(&globals.limit_hash); switch_core_hash_destroy(&globals.limit_hash);
switch_core_hash_destroy(&globals.db_hash); switch_core_hash_destroy(&globals.db_hash);
switch_core_hash_destroy(&globals.remote_hash); switch_core_hash_destroy(&globals.remote_hash);
switch_thread_rwlock_unlock(globals.limit_hash_rwlock); switch_thread_rwlock_unlock(globals.limit_hash_rwlock);

View File

@ -119,7 +119,7 @@ switch_status_t hiredis_profile_create(hiredis_profile_t **new_profile, char *na
{ {
hiredis_profile_t *profile = NULL; hiredis_profile_t *profile = NULL;
switch_memory_pool_t *pool = NULL; switch_memory_pool_t *pool = NULL;
switch_core_new_memory_pool(&pool); switch_core_new_memory_pool(&pool);
profile = switch_core_alloc(pool, sizeof(hiredis_profile_t)); profile = switch_core_alloc(pool, sizeof(hiredis_profile_t));

View File

@ -32,7 +32,7 @@
#include <mod_hiredis.h> #include <mod_hiredis.h>
switch_status_t mod_hiredis_do_config() switch_status_t mod_hiredis_do_config()
{ {
char *conf = "hiredis.conf"; char *conf = "hiredis.conf";
switch_xml_t xml, cfg, profiles, profile, connections, connection, params, param; switch_xml_t xml, cfg, profiles, profile, connections, connection, params, param;
@ -43,7 +43,7 @@ switch_status_t mod_hiredis_do_config()
} }
if ( (profiles = switch_xml_child(cfg, "profiles")) != NULL) { if ( (profiles = switch_xml_child(cfg, "profiles")) != NULL) {
for (profile = switch_xml_child(profiles, "profile"); profile; profile = profile->next) { for (profile = switch_xml_child(profiles, "profile"); profile; profile = profile->next) {
hiredis_profile_t *new_profile = NULL; hiredis_profile_t *new_profile = NULL;
uint8_t ignore_connect_fail = 0; uint8_t ignore_connect_fail = 0;
uint8_t ignore_error = 0; uint8_t ignore_error = 0;
@ -79,10 +79,10 @@ switch_status_t mod_hiredis_do_config()
/* Add connection to profile */ /* Add connection to profile */
if ( (connections = switch_xml_child(profile, "connections")) != NULL) { if ( (connections = switch_xml_child(profile, "connections")) != NULL) {
for (connection = switch_xml_child(connections, "connection"); connection; connection = connection->next) { for (connection = switch_xml_child(connections, "connection"); connection; connection = connection->next) {
char *host = NULL, *password = NULL; char *host = NULL, *password = NULL;
uint32_t port = 0, timeout_ms = 0, max_connections = 0; uint32_t port = 0, timeout_ms = 0, max_connections = 0;
for (param = switch_xml_child(connection, "param"); param; param = param->next) { for (param = switch_xml_child(connection, "param"); param; param = param->next) {
char *var = (char *) switch_xml_attr_soft(param, "name"); char *var = (char *) switch_xml_attr_soft(param, "name");
if ( !strncmp(var, "hostname", 8) ) { if ( !strncmp(var, "hostname", 8) ) {
@ -114,9 +114,9 @@ switch_status_t mod_hiredis_do_config()
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Profiles config is missing\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Profiles config is missing\n");
goto err; goto err;
} }
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
err: err:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Configuration failed\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Configuration failed\n");
return SWITCH_STATUS_GENERR; return SWITCH_STATUS_GENERR;

View File

@ -457,7 +457,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_hiredis_shutdown)
} }
switch_core_hash_destroy(&(mod_hiredis_globals.profiles)); switch_core_hash_destroy(&(mod_hiredis_globals.profiles));
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }

View File

@ -29,20 +29,20 @@
<permission name="set-vars" value="false"> <permission name="set-vars" value="false">
<!-- default to "deny" or "allow" --> <!-- default to "deny" or "allow" -->
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case --> <!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
<!-- <!--
<variable-list default="deny"> <variable-list default="deny">
<variable name="caller_id_name"/> <variable name="caller_id_name"/>
<variable name="hangup"/> <variable name="hangup"/>
</variable-list> </variable-list>
--> -->
</permission> </permission>
<permission name="get-vars" value="false"> <permission name="get-vars" value="false">
<!-- default to "deny" or "allow" --> <!-- default to "deny" or "allow" -->
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case --> <!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
<!-- <!--
<variable-list default="deny"> <variable-list default="deny">
<variable name="caller_id_name"/> <variable name="caller_id_name"/>
<variable name="hangup"/> <variable name="hangup"/>
</variable-list> </variable-list>
--> -->
</permission> </permission>
@ -58,15 +58,15 @@
<permission name="expand-vars" value="false"> <permission name="expand-vars" value="false">
<!-- default to "deny" or "allow" --> <!-- default to "deny" or "allow" -->
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case --> <!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
<!-- <!--
<variable-list default="deny"> <variable-list default="deny">
<variable name="caller_id_name"/> <variable name="caller_id_name"/>
<variable name="hangup"/> <variable name="hangup"/>
</variable-list> </variable-list>
<api-list default="deny"> <api-list default="deny">
<api name="expr"/> <api name="expr"/>
<api name="lua"/> <api name="lua"/>
</api-list> </api-list>
--> -->
</permission> </permission>
@ -79,11 +79,11 @@
<permission name="conference" value="true"/> <permission name="conference" value="true"/>
<permission name="conference-set-profile" value="false"/> <permission name="conference-set-profile" value="false"/>
</permissions> </permissions>
<params> <params>
<!-- default url can be overridden by app data --> <!-- default url can be overridden by app data -->
<param name="gateway-url" value="http://www.freeswitch.org/api/index.cgi" /> <param name="gateway-url" value="http://www.freeswitch.org/api/index.cgi" />
<!-- set this to provide authentication credentials to the server --> <!-- set this to provide authentication credentials to the server -->
<!--<param name="gateway-credentials" value="muser:mypass"/>--> <!--<param name="gateway-credentials" value="muser:mypass"/>-->
<!--<param name="auth-scheme" value="basic"/>--> <!--<param name="auth-scheme" value="basic"/>-->

View File

@ -1,4 +1,4 @@
/* /*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org> * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
* *
@ -22,7 +22,7 @@
* the Initial Developer. All Rights Reserved. * the Initial Developer. All Rights Reserved.
* *
* Contributor(s): * Contributor(s):
* *
* Anthony Minessale II <anthm@freeswitch.org> * Anthony Minessale II <anthm@freeswitch.org>
* Raymond Chandler <intralanman@freeswitch.org> * Raymond Chandler <intralanman@freeswitch.org>
* Seven Du <dujinfang@gmail.com> * Seven Du <dujinfang@gmail.com>
@ -238,7 +238,7 @@ SWITCH_STANDARD_API(httapi_api_function)
static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match) static switch_status_t digit_action_callback(switch_ivr_dmachine_match_t *match)
{ {
action_binding_t *action_binding = (action_binding_t *) match->user_data; action_binding_t *action_binding = (action_binding_t *) match->user_data;
action_binding->client->matching_action_binding = action_binding; action_binding->client->matching_action_binding = action_binding;
action_binding->match_digits = switch_core_strdup(action_binding->client->pool, match->match_digits); action_binding->match_digits = switch_core_strdup(action_binding->client->pool, match->match_digits);
@ -250,7 +250,7 @@ static switch_status_t digit_nomatch_action_callback(switch_ivr_dmachine_match_t
action_binding_t *action_binding = (action_binding_t *) match->user_data; action_binding_t *action_binding = (action_binding_t *) match->user_data;
action_binding->client->no_matching_action_binding = action_binding; action_binding->client->no_matching_action_binding = action_binding;
return SWITCH_STATUS_BREAK; return SWITCH_STATUS_BREAK;
} }
@ -339,7 +339,7 @@ static switch_status_t parse_get_var(const char *tag_name, client_t *client, swi
} }
if (client->profile->perms.get_vars && if (client->profile->perms.get_vars &&
(!client->profile->var_params.get_var_list || switch_event_check_permission_list(client->profile->var_params.get_var_list, var))) { (!client->profile->var_params.get_var_list || switch_event_check_permission_list(client->profile->var_params.get_var_list, var))) {
const char *vval = switch_channel_get_variable(client->channel, var); const char *vval = switch_channel_get_variable(client->channel, var);
if (vval) { if (vval) {
@ -351,12 +351,12 @@ static switch_status_t parse_get_var(const char *tag_name, client_t *client, swi
} }
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
static switch_status_t parse_continue(const char *tag_name, client_t *client, switch_xml_t tag, const char *body) static switch_status_t parse_continue(const char *tag_name, client_t *client, switch_xml_t tag, const char *body)
{ {
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -364,7 +364,7 @@ static switch_status_t parse_log(const char *tag_name, client_t *client, switch_
{ {
const char *level = switch_xml_attr(tag, "level"); const char *level = switch_xml_attr(tag, "level");
const char *clean = switch_xml_attr(tag, "clean"); const char *clean = switch_xml_attr(tag, "clean");
if (switch_true(clean)) { if (switch_true(clean)) {
console_clean_log(level, body); console_clean_log(level, body);
} else { } else {
@ -414,7 +414,7 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
say_method = switch_xml_attr(tag, "method"); say_method = switch_xml_attr(tag, "method");
say_gender = switch_xml_attr(tag, "gender"); say_gender = switch_xml_attr(tag, "gender");
text = switch_xml_attr(tag, "text"); text = switch_xml_attr(tag, "text");
if (zstr(text)) { if (zstr(text)) {
if (!zstr(file)) { if (!zstr(file)) {
text = file; text = file;
@ -427,9 +427,9 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "speak: missing required attributes or text! (language) (type) (method) \n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "speak: missing required attributes or text! (language) (type) (method) \n");
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
say = 1; say = 1;
} else if (!strcasecmp(tag_name, "speak")) { } else if (!strcasecmp(tag_name, "speak")) {
tts_engine = switch_xml_attr(tag, "engine"); tts_engine = switch_xml_attr(tag, "engine");
tts_voice = switch_xml_attr(tag, "voice"); tts_voice = switch_xml_attr(tag, "voice");
@ -470,7 +470,7 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
char *p; char *p;
SWITCH_STANDARD_STREAM(stream); SWITCH_STANDARD_STREAM(stream);
cmd = switch_mprintf("%s|name_path", id); cmd = switch_mprintf("%s|name_path", id);
switch_api_execute("vm_prefs", cmd, NULL, &stream); switch_api_execute("vm_prefs", cmd, NULL, &stream);
@ -501,7 +501,7 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
text = free_string; text = free_string;
switch_ivr_play_file(client->session, NULL, "voicemail/vm-person.wav", &nullargs); switch_ivr_play_file(client->session, NULL, "voicemail/vm-person.wav", &nullargs);
} }
switch_safe_free(resp); switch_safe_free(resp);
@ -527,7 +527,7 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid digit timeout [%s]\n", digit_timeout_); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid digit timeout [%s]\n", digit_timeout_);
} }
} }
if (input_timeout_) { if (input_timeout_) {
tmp = atol(input_timeout_); tmp = atol(input_timeout_);
@ -541,7 +541,7 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
if ((bind = switch_xml_child(tag, "bind"))) { if ((bind = switch_xml_child(tag, "bind"))) {
action_binding_t *action_binding; action_binding_t *action_binding;
const char *realm = "default"; const char *realm = "default";
input++; input++;
@ -550,9 +550,9 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
top_action_binding->action = (char *) action; top_action_binding->action = (char *) action;
top_action_binding->error_file = (char *)error_file; top_action_binding->error_file = (char *)error_file;
switch_ivr_dmachine_create(&dmachine, "HTTAPI", NULL, digit_timeout, 0, switch_ivr_dmachine_create(&dmachine, "HTTAPI", NULL, digit_timeout, 0,
NULL, digit_nomatch_action_callback, top_action_binding); NULL, digit_nomatch_action_callback, top_action_binding);
while(bind) { while(bind) {
action_binding = switch_core_session_alloc(client->session, sizeof(*action_binding)); action_binding = switch_core_session_alloc(client->session, sizeof(*action_binding));
action_binding->realm = (char *) realm; action_binding->realm = (char *) realm;
@ -562,11 +562,11 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
action_binding->strip = (char *) switch_xml_attr(bind, "strip"); action_binding->strip = (char *) switch_xml_attr(bind, "strip");
action_binding->error_file = (char *) error_file; action_binding->error_file = (char *) error_file;
action_binding->parent = top_action_binding; action_binding->parent = top_action_binding;
switch_ivr_dmachine_bind(dmachine, action_binding->realm, action_binding->input, 0, 0, digit_action_callback, action_binding); switch_ivr_dmachine_bind(dmachine, action_binding->realm, action_binding->input, 0, 0, digit_action_callback, action_binding);
bind = bind->next; bind = bind->next;
} }
switch_ivr_dmachine_set_realm(dmachine, realm); switch_ivr_dmachine_set_realm(dmachine, realm);
if (!zstr(terminators)) { if (!zstr(terminators)) {
switch_ivr_dmachine_set_terminators(dmachine, terminators); switch_ivr_dmachine_set_terminators(dmachine, terminators);
@ -597,7 +597,7 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
char *result = NULL; char *result = NULL;
status = switch_ivr_play_and_detect_speech(client->session, file, sp_engine, sp_grammar, &result, input_timeout, args); status = switch_ivr_play_and_detect_speech(client->session, file, sp_engine, sp_grammar, &result, input_timeout, args);
if (!zstr(result)) { if (!zstr(result)) {
switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, name, result); switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, name, result);
switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "detected_speech"); switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "detected_speech");
@ -642,7 +642,7 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
break; break;
} }
} while (loops-- > 0); } while (loops-- > 0);
if (submit) { if (submit) {
if (client->matching_action_binding) { if (client->matching_action_binding) {
@ -660,26 +660,26 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, name, client->matching_action_binding->match_digits); switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, name, client->matching_action_binding->match_digits);
switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "dtmf"); switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "input_type", "dtmf");
} }
if (client->matching_action_binding->action) { if (client->matching_action_binding->action) {
sub_action = client->matching_action_binding->action; sub_action = client->matching_action_binding->action;
} else if (client->matching_action_binding->parent && client->matching_action_binding->parent->action) { } else if (client->matching_action_binding->parent && client->matching_action_binding->parent->action) {
sub_action = client->matching_action_binding->parent->action; sub_action = client->matching_action_binding->parent->action;
} }
} }
if (!sub_action && top_action_binding && top_action_binding->action) { if (!sub_action && top_action_binding && top_action_binding->action) {
sub_action = top_action_binding->action; sub_action = top_action_binding->action;
} }
if (sub_action && client->matching_action_binding && client->matching_action_binding->match_digits) { if (sub_action && client->matching_action_binding && client->matching_action_binding->match_digits) {
if (!strncasecmp(sub_action, "dial:", 5)) { if (!strncasecmp(sub_action, "dial:", 5)) {
char *context = NULL; char *context = NULL;
char *dp = NULL; char *dp = NULL;
if (client->profile->perms.dial.set_context) { if (client->profile->perms.dial.set_context) {
context = switch_core_session_strdup(client->session, sub_action + 5); context = switch_core_session_strdup(client->session, sub_action + 5);
if ((dp = strchr(context, ':'))) { if ((dp = strchr(context, ':'))) {
*dp++ = '\0'; *dp++ = '\0';
if (!client->profile->perms.dial.set_dp) { if (!client->profile->perms.dial.set_dp) {
@ -690,19 +690,19 @@ static switch_status_t parse_playback(const char *tag_name, client_t *client, sw
switch_ivr_session_transfer(client->session, client->matching_action_binding->match_digits, dp, context); switch_ivr_session_transfer(client->session, client->matching_action_binding->match_digits, dp, context);
status = SWITCH_STATUS_FALSE; status = SWITCH_STATUS_FALSE;
} else { } else {
switch_event_add_header_string(client->params, SWITCH_STACK_BOTTOM, "url", sub_action); switch_event_add_header_string(client->params, SWITCH_STACK_BOTTOM, "url", sub_action);
} }
} }
} }
if (dmachine) { if (dmachine) {
switch_ivr_dmachine_destroy(&dmachine); switch_ivr_dmachine_destroy(&dmachine);
} }
switch_safe_free(free_string); switch_safe_free(free_string);
return status; return status;
} }
@ -713,7 +713,7 @@ static switch_status_t parse_conference(const char *tag_name, client_t *client,
const char *profile_name = switch_xml_attr(tag, "profile"); const char *profile_name = switch_xml_attr(tag, "profile");
const char *pin = switch_xml_attr(tag, "pin"); const char *pin = switch_xml_attr(tag, "pin");
const char *flags = switch_xml_attr(tag, "flags"); const char *flags = switch_xml_attr(tag, "flags");
if (!client->profile->perms.conference.enabled) { if (!client->profile->perms.conference.enabled) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Permission Denied!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Permission Denied!\n");
switch_channel_hangup(client->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); switch_channel_hangup(client->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
@ -742,7 +742,7 @@ static switch_status_t parse_conference(const char *tag_name, client_t *client,
static switch_status_t parse_dial(const char *tag_name, client_t *client, switch_xml_t tag, const char *body) static switch_status_t parse_dial(const char *tag_name, client_t *client, switch_xml_t tag, const char *body)
{ {
const char *context = NULL; const char *context = NULL;
const char *dp = NULL; const char *dp = NULL;
const char *cid_name = NULL; const char *cid_name = NULL;
const char *cid_number = NULL; const char *cid_number = NULL;
@ -779,7 +779,7 @@ static switch_status_t parse_dial(const char *tag_name, client_t *client, switch
cid_number = switch_channel_get_variable(client->channel, "caller_id_number"); cid_number = switch_channel_get_variable(client->channel, "caller_id_number");
} }
str = switch_core_session_sprintf(client->session, str = switch_core_session_sprintf(client->session,
"{origination_caller_id_name='%s',origination_caller_id_number='%s'}%s", cid_name, cid_number, body); "{origination_caller_id_name='%s',origination_caller_id_number='%s'}%s", cid_name, cid_number, body);
switch_core_session_execute_application(client->session, "bridge", str); switch_core_session_execute_application(client->session, "bridge", str);
@ -812,7 +812,7 @@ static switch_status_t parse_sms(const char *tag_name, client_t *client, switch_
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", switch_channel_get_variable(client->channel, "caller_id_number")); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "from", switch_channel_get_variable(client->channel, "caller_id_number"));
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to", to); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "to", to);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "text/plain"); switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "type", "text/plain");
if (body) { if (body) {
switch_event_add_body(event, "%s", body); switch_event_add_body(event, "%s", body);
} }
@ -856,7 +856,7 @@ static switch_status_t parse_execute(const char *tag_name, client_t *client, swi
if (!client->profile->perms.expand_vars) { if (!client->profile->perms.expand_vars) {
const char *p; const char *p;
for(p = data; p && *p; p++) { for(p = data; p && *p; p++) {
if (*p == '$') { if (*p == '$') {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Expand Variables: Permission Denied!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Expand Variables: Permission Denied!\n");
@ -929,16 +929,16 @@ static switch_status_t parse_record_call(const char *tag_name, client_t *client,
} else { } else {
client->record.action = (char *) action; client->record.action = (char *) action;
client->record.name = (char *)name; client->record.name = (char *)name;
client->record.file = switch_core_session_sprintf(client->session, "%s%s%s.wav", client->record.file = switch_core_session_sprintf(client->session, "%s%s%s.wav",
SWITCH_GLOBAL_dirs.temp_dir, SWITCH_PATH_SEPARATOR, switch_core_session_get_uuid(client->session)); SWITCH_GLOBAL_dirs.temp_dir, SWITCH_PATH_SEPARATOR, switch_core_session_get_uuid(client->session));
record_file = client->record.file; record_file = client->record.file;
} }
if (limit_) { if (limit_) {
limit = atoi(limit_); limit = atoi(limit_);
if (limit < 0) limit = 0; if (limit < 0) limit = 0;
} }
switch_ivr_record_session(client->session, (char *)record_file, limit, NULL); switch_ivr_record_session(client->session, (char *)record_file, limit, NULL);
@ -982,7 +982,7 @@ static switch_status_t parse_record(const char *tag_name, client_t *client, swit
if (zstr(file)) { if (zstr(file)) {
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
fname = switch_core_strdup(client->pool, file); fname = switch_core_strdup(client->pool, file);
for(p = fname; p && *p; p++) { for(p = fname; p && *p; p++) {
@ -1006,7 +1006,7 @@ static switch_status_t parse_record(const char *tag_name, client_t *client, swit
tmp_record_path = fname; tmp_record_path = fname;
http = 1; http = 1;
} else { } else {
tmp_record_path = switch_core_sprintf(client->pool, "%s%s%s_%s.%s", tmp_record_path = switch_core_sprintf(client->pool, "%s%s%s_%s.%s",
SWITCH_GLOBAL_dirs.temp_dir, SWITCH_PATH_SEPARATOR, uuid_str, fname, ext); SWITCH_GLOBAL_dirs.temp_dir, SWITCH_PATH_SEPARATOR, uuid_str, fname, ext);
} }
@ -1045,19 +1045,19 @@ static switch_status_t parse_record(const char *tag_name, client_t *client, swit
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid digit timeout [%s]\n", digit_timeout_); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid digit timeout [%s]\n", digit_timeout_);
} }
} }
if ((bind = switch_xml_child(tag, "bind"))) { if ((bind = switch_xml_child(tag, "bind"))) {
action_binding_t *action_binding; action_binding_t *action_binding;
const char *realm = "default"; const char *realm = "default";
top_action_binding = switch_core_session_alloc(client->session, sizeof(*action_binding)); top_action_binding = switch_core_session_alloc(client->session, sizeof(*action_binding));
top_action_binding->client = client; top_action_binding->client = client;
top_action_binding->action = (char *) action; top_action_binding->action = (char *) action;
top_action_binding->error_file = (char *)error_file; top_action_binding->error_file = (char *)error_file;
switch_ivr_dmachine_create(&dmachine, "HTTAPI", NULL, digit_timeout, 0, switch_ivr_dmachine_create(&dmachine, "HTTAPI", NULL, digit_timeout, 0,
NULL, digit_nomatch_action_callback, top_action_binding); NULL, digit_nomatch_action_callback, top_action_binding);
while(bind) { while(bind) {
action_binding = switch_core_session_alloc(client->session, sizeof(*action_binding)); action_binding = switch_core_session_alloc(client->session, sizeof(*action_binding));
action_binding->realm = (char *) realm; action_binding->realm = (char *) realm;
@ -1066,11 +1066,11 @@ static switch_status_t parse_record(const char *tag_name, client_t *client, swit
action_binding->action = (char *) switch_xml_attr(bind, "action"); action_binding->action = (char *) switch_xml_attr(bind, "action");
action_binding->error_file = (char *) error_file; action_binding->error_file = (char *) error_file;
action_binding->parent = top_action_binding; action_binding->parent = top_action_binding;
switch_ivr_dmachine_bind(dmachine, action_binding->realm, action_binding->input, 0, 0, digit_action_callback, action_binding); switch_ivr_dmachine_bind(dmachine, action_binding->realm, action_binding->input, 0, 0, digit_action_callback, action_binding);
bind = bind->next; bind = bind->next;
} }
switch_ivr_dmachine_set_realm(dmachine, realm); switch_ivr_dmachine_set_realm(dmachine, realm);
if (!zstr(terminators)) { if (!zstr(terminators)) {
switch_ivr_dmachine_set_terminators(dmachine, terminators); switch_ivr_dmachine_set_terminators(dmachine, terminators);
@ -1092,7 +1092,7 @@ static switch_status_t parse_record(const char *tag_name, client_t *client, swit
switch_file_handle_t fh = { 0 }; switch_file_handle_t fh = { 0 };
fh.thresh = thresh; fh.thresh = thresh;
fh.silence_hits = silence_hits; fh.silence_hits = silence_hits;
status = switch_ivr_record_file(client->session, &fh, tmp_record_path, args, record_limit); status = switch_ivr_record_file(client->session, &fh, tmp_record_path, args, record_limit);
} }
@ -1142,7 +1142,7 @@ static switch_status_t parse_common(const char *tag_name, client_t *client, swit
if (tmp_action) { if (tmp_action) {
switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "url", tmp_action); switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "url", tmp_action);
} }
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
@ -1155,7 +1155,7 @@ static switch_status_t parse_xml(client_t *client)
if ((len = switch_buffer_peek_zerocopy(client->buffer, &bdata)) && switch_buffer_len(client->buffer) > len) { if ((len = switch_buffer_peek_zerocopy(client->buffer, &bdata)) && switch_buffer_len(client->buffer) > len) {
switch_xml_t xml, tag, category; switch_xml_t xml, tag, category;
if (globals.debug) { if (globals.debug) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Debugging Return Data:\n%s\n", (char *)bdata); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Debugging Return Data:\n%s\n", (char *)bdata);
} }
@ -1165,7 +1165,7 @@ static switch_status_t parse_xml(client_t *client)
if (client->profile->perms.set_params) { if (client->profile->perms.set_params) {
if ((category = switch_xml_child(xml, "params"))) { if ((category = switch_xml_child(xml, "params"))) {
tag = category->child; tag = category->child;
while(tag) { while(tag) {
if (!zstr(tag->name)) { if (!zstr(tag->name)) {
char *val = tag->txt; char *val = tag->txt;
@ -1182,7 +1182,7 @@ static switch_status_t parse_xml(client_t *client)
if (client->profile->perms.set_vars) { if (client->profile->perms.set_vars) {
if ((category = switch_xml_child(xml, "variables"))) { if ((category = switch_xml_child(xml, "variables"))) {
tag = category->child; tag = category->child;
while(tag) { while(tag) {
if (!zstr(tag->name)) { if (!zstr(tag->name)) {
char *val = tag->txt; char *val = tag->txt;
@ -1190,8 +1190,8 @@ static switch_status_t parse_xml(client_t *client)
val = NULL; val = NULL;
} }
if (client->profile->perms.set_vars && if (client->profile->perms.set_vars &&
(!client->profile->var_params.set_var_list || (!client->profile->var_params.set_var_list ||
switch_event_check_permission_list(client->profile->var_params.set_var_list, tag->name))) { switch_event_check_permission_list(client->profile->var_params.set_var_list, tag->name))) {
switch_channel_set_variable(client->channel, tag->name, val); switch_channel_set_variable(client->channel, tag->name, val);
} else { } else {
@ -1204,7 +1204,7 @@ static switch_status_t parse_xml(client_t *client)
} }
if ((category = switch_xml_child(xml, "work"))) { if ((category = switch_xml_child(xml, "work"))) {
tag = category->child; tag = category->child;
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
@ -1219,18 +1219,18 @@ static switch_status_t parse_xml(client_t *client)
if (tag->txt && client->profile->perms.expand_vars) { if (tag->txt && client->profile->perms.expand_vars) {
switch_channel_get_variables(client->channel, &templ_data); switch_channel_get_variables(client->channel, &templ_data);
switch_event_merge(templ_data, client->params); switch_event_merge(templ_data, client->params);
expanded = switch_event_expand_headers_check(templ_data, tag->txt, expanded = switch_event_expand_headers_check(templ_data, tag->txt,
client->profile->var_params.expand_var_list, client->profile->var_params.expand_var_list,
client->profile->var_params.api_list, 0); client->profile->var_params.api_list, 0);
switch_event_destroy(&templ_data); switch_event_destroy(&templ_data);
} }
runs++; runs++;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Process Tag: [%s]\n", tag->name); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Process Tag: [%s]\n", tag->name);
parse_common(tag->name, client, tag, expanded); parse_common(tag->name, client, tag, expanded);
status = handler(tag->name, client, tag, expanded); status = handler(tag->name, client, tag, expanded);
if (expanded && expanded != tag->txt) { if (expanded && expanded != tag->txt) {
free(expanded); free(expanded);
} }
@ -1249,15 +1249,15 @@ static switch_status_t parse_xml(client_t *client)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "No instructions found in result!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "No instructions found in result!\n");
status = SWITCH_STATUS_FALSE; status = SWITCH_STATUS_FALSE;
} }
switch_xml_free(xml); switch_xml_free(xml);
} }
} }
return status; return status;
} }
static size_t get_header_callback(void *ptr, size_t size, size_t nmemb, void *userdata) static size_t get_header_callback(void *ptr, size_t size, size_t nmemb, void *userdata)
{ {
@ -1285,7 +1285,7 @@ static size_t get_header_callback(void *ptr, size_t size, size_t nmemb, void *us
switch_event_add_header_string(client->headers, SWITCH_STACK_BOTTOM, header, val); switch_event_add_header_string(client->headers, SWITCH_STACK_BOTTOM, header, val);
} }
switch_safe_free(header); switch_safe_free(header);
return realsize; return realsize;
} }
@ -1305,7 +1305,7 @@ static size_t file_callback(void *ptr, size_t size, size_t nmemb, void *data)
} }
switch_buffer_write(client->buffer, ptr, realsize); switch_buffer_write(client->buffer, ptr, realsize);
return realsize; return realsize;
} }
@ -1313,7 +1313,7 @@ static void client_destroy(client_t **client)
{ {
if (client && *client) { if (client && *client) {
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
switch_event_destroy(&(*client)->headers); switch_event_destroy(&(*client)->headers);
switch_event_destroy(&(*client)->params); switch_event_destroy(&(*client)->params);
switch_event_destroy(&(*client)->one_time_params); switch_event_destroy(&(*client)->one_time_params);
@ -1333,7 +1333,7 @@ static void client_reset(client_t *client)
switch_event_destroy(&client->one_time_params); switch_event_destroy(&client->one_time_params);
switch_event_create(&client->one_time_params, SWITCH_EVENT_CLONE); switch_event_create(&client->one_time_params, SWITCH_EVENT_CLONE);
client->one_time_params->flags |= EF_UNIQ_HEADERS; client->one_time_params->flags |= EF_UNIQ_HEADERS;
switch_event_create(&client->headers, SWITCH_EVENT_CLONE); switch_event_create(&client->headers, SWITCH_EVENT_CLONE);
@ -1367,13 +1367,13 @@ static client_t *client_create(switch_core_session_t *session, const char *profi
client->pool = pool; client->pool = pool;
switch_event_create(&client->headers, SWITCH_EVENT_CLONE); switch_event_create(&client->headers, SWITCH_EVENT_CLONE);
if (session) { if (session) {
client->session = session; client->session = session;
client->channel = switch_core_session_get_channel(session); client->channel = switch_core_session_get_channel(session);
} }
client->profile = profile; client->profile = profile;
client->max_bytes = HTTAPI_MAX_API_BYTES; client->max_bytes = HTTAPI_MAX_API_BYTES;
@ -1406,7 +1406,7 @@ static void cleanup_attachments(client_t *client)
if (switch_file_exists(hp->value, client->pool) == SWITCH_STATUS_SUCCESS) { if (switch_file_exists(hp->value, client->pool) == SWITCH_STATUS_SUCCESS) {
unlink(hp->value); unlink(hp->value);
} }
} }
} }
} }
@ -1416,7 +1416,7 @@ size_t put_file_read( void *ptr, size_t size, size_t nmemb, void *userdata)
} }
static switch_status_t httapi_sync(client_t *client) static switch_status_t httapi_sync(client_t *client)
{ {
switch_CURL *curl_handle = NULL; switch_CURL *curl_handle = NULL;
char *data = NULL; char *data = NULL;
@ -1433,7 +1433,7 @@ static switch_status_t httapi_sync(client_t *client)
FILE *fd = NULL; FILE *fd = NULL;
char *creds, *dup_creds = NULL, *ua = NULL; char *creds, *dup_creds = NULL, *ua = NULL;
if (client->one_time_params && client->one_time_params->headers) { if (client->one_time_params && client->one_time_params->headers) {
save_params = client->params; save_params = client->params;
switch_event_dup(&client->params, save_params); switch_event_dup(&client->params, save_params);
@ -1449,7 +1449,7 @@ static switch_status_t httapi_sync(client_t *client)
if (zstr(ua)) { if (zstr(ua)) {
ua = client->profile->ua; ua = client->profile->ua;
} }
if (!(session_id = switch_event_get_header(client->params, "HTTAPI_SESSION_ID"))) { if (!(session_id = switch_event_get_header(client->params, "HTTAPI_SESSION_ID"))) {
if (client->channel && !(session_id = switch_channel_get_variable(client->channel, "HTTAPI_SESSION_ID"))) { if (client->channel && !(session_id = switch_channel_get_variable(client->channel, "HTTAPI_SESSION_ID"))) {
session_id = switch_core_session_get_uuid(client->session); session_id = switch_core_session_get_uuid(client->session);
@ -1471,7 +1471,7 @@ static switch_status_t httapi_sync(client_t *client)
} }
get_style_method = method ? strcasecmp(method, "post") : 1; get_style_method = method ? strcasecmp(method, "post") : 1;
switch_event_add_header_string(client->params, SWITCH_STACK_TOP, "session_id", session_id); switch_event_add_header_string(client->params, SWITCH_STACK_TOP, "session_id", session_id);
dynamic_url = switch_event_expand_headers(client->params, url); dynamic_url = switch_event_expand_headers(client->params, url);
@ -1484,7 +1484,7 @@ static switch_status_t httapi_sync(client_t *client)
} }
if (!put_file) { if (!put_file) {
switch_curl_process_form_post_params(client->params, curl_handle, &formpost); switch_curl_process_form_post_params(client->params, curl_handle, &formpost);
} }
if (formpost) { if (formpost) {
@ -1495,11 +1495,11 @@ static switch_status_t httapi_sync(client_t *client)
if (get_style_method) { if (get_style_method) {
char *tmp = switch_mprintf("%s%c%s", dynamic_url, strchr(dynamic_url, '?') != NULL ? '&' : '?', data); char *tmp = switch_mprintf("%s%c%s", dynamic_url, strchr(dynamic_url, '?') != NULL ? '&' : '?', data);
if (dynamic_url != url) { if (dynamic_url != url) {
free(dynamic_url); free(dynamic_url);
} }
dynamic_url = tmp; dynamic_url = tmp;
} }
} }
@ -1525,7 +1525,7 @@ static switch_status_t httapi_sync(client_t *client)
if ((p = strstr(q, "://"))) { if ((p = strstr(q, "://"))) {
*(p+3) = '\0'; *(p+3) = '\0';
} }
p = switch_mprintf("%s%s", q, r); p = switch_mprintf("%s%s", q, r);
if (p) { if (p) {
free(dynamic_url); free(dynamic_url);
@ -1546,9 +1546,9 @@ static switch_status_t httapi_sync(client_t *client)
*p = '\0'; *p = '\0';
if ((q = strchr(dup_creds, '@'))) *q = '\0'; if ((q = strchr(dup_creds, '@'))) *q = '\0';
creds = dup_creds; creds = dup_creds;
p = switch_mprintf("%s%s", p, use_url); p = switch_mprintf("%s%s", p, use_url);
free(dynamic_url); free(dynamic_url);
dynamic_url = p; dynamic_url = p;
@ -1593,7 +1593,7 @@ static switch_status_t httapi_sync(client_t *client)
curl_easy_setopt(curl_handle, CURLOPT_UPLOAD, 1L); curl_easy_setopt(curl_handle, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl_handle, CURLOPT_READDATA, fd); curl_easy_setopt(curl_handle, CURLOPT_READDATA, fd);
curl_easy_setopt(curl_handle, CURLOPT_READFUNCTION, put_file_read); curl_easy_setopt(curl_handle, CURLOPT_READFUNCTION, put_file_read);
} else if (formpost) { } else if (formpost) {
curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, formpost); curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, formpost);
} else { } else {
@ -1646,7 +1646,7 @@ static switch_status_t httapi_sync(client_t *client)
} else { } else {
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
} }
if (client->profile->ssl_cacert_file) { if (client->profile->ssl_cacert_file) {
switch_curl_easy_setopt(curl_handle, CURLOPT_CAINFO, client->profile->ssl_cacert_file); switch_curl_easy_setopt(curl_handle, CURLOPT_CAINFO, client->profile->ssl_cacert_file);
@ -1891,7 +1891,7 @@ static switch_status_t do_config(void)
profile->perms.set_params = 1; profile->perms.set_params = 1;
profile->perms.conference.enabled = 1; profile->perms.conference.enabled = 1;
profile->perms.dial.enabled = 1; profile->perms.dial.enabled = 1;
if ((tag = switch_xml_child(profile_tag, "conference"))) { if ((tag = switch_xml_child(profile_tag, "conference"))) {
for (param = switch_xml_child(tag, "param"); param; param = param->next) { for (param = switch_xml_child(tag, "param"); param; param = param->next) {
@ -1937,7 +1937,7 @@ static switch_status_t do_config(void)
switch_xml_t x_list, x_var; switch_xml_t x_list, x_var;
if ((x_list = switch_xml_child(param, "variable-list"))) { if ((x_list = switch_xml_child(param, "variable-list"))) {
char *var = (char *) switch_xml_attr_soft(param, "default"); char *var = (char *) switch_xml_attr_soft(param, "default");
profile->var_params.default_allow = (var && !strcasecmp(var, "allow")); profile->var_params.default_allow = (var && !strcasecmp(var, "allow"));
switch_event_create(&profile->var_params.set_var_list, SWITCH_EVENT_CLONE); switch_event_create(&profile->var_params.set_var_list, SWITCH_EVENT_CLONE);
profile->var_params.set_var_list->flags |= EF_UNIQ_HEADERS; profile->var_params.set_var_list->flags |= EF_UNIQ_HEADERS;
@ -1965,7 +1965,7 @@ static switch_status_t do_config(void)
switch_xml_t x_list, x_var; switch_xml_t x_list, x_var;
if ((x_list = switch_xml_child(param, "variable-list"))) { if ((x_list = switch_xml_child(param, "variable-list"))) {
char *var = (char *) switch_xml_attr_soft(param, "default"); char *var = (char *) switch_xml_attr_soft(param, "default");
profile->var_params.default_allow = (var && !strcasecmp(var, "allow")); profile->var_params.default_allow = (var && !strcasecmp(var, "allow"));
switch_event_create(&profile->var_params.get_var_list, SWITCH_EVENT_CLONE); switch_event_create(&profile->var_params.get_var_list, SWITCH_EVENT_CLONE);
profile->var_params.get_var_list->flags |= EF_UNIQ_HEADERS; profile->var_params.get_var_list->flags |= EF_UNIQ_HEADERS;
@ -1990,12 +1990,12 @@ static switch_status_t do_config(void)
profile->perms.extended_data = switch_true_byte(val); profile->perms.extended_data = switch_true_byte(val);
} else if (!strcasecmp(var, "execute-apps")) { } else if (!strcasecmp(var, "execute-apps")) {
profile->perms.execute_apps = switch_true_byte(val); profile->perms.execute_apps = switch_true_byte(val);
if (profile->perms.execute_apps) { if (profile->perms.execute_apps) {
switch_xml_t x_list, x_app; switch_xml_t x_list, x_app;
if ((x_list = switch_xml_child(param, "application-list"))) { if ((x_list = switch_xml_child(param, "application-list"))) {
char *var = (char *) switch_xml_attr_soft(param, "default"); char *var = (char *) switch_xml_attr_soft(param, "default");
profile->dial_params.default_allow = (var && !strcasecmp(var, "allow")); profile->dial_params.default_allow = (var && !strcasecmp(var, "allow"));
switch_event_create(&profile->dial_params.app_list, SWITCH_EVENT_CLONE); switch_event_create(&profile->dial_params.app_list, SWITCH_EVENT_CLONE);
profile->dial_params.app_list->flags |= EF_UNIQ_HEADERS; profile->dial_params.app_list->flags |= EF_UNIQ_HEADERS;
@ -2016,7 +2016,7 @@ static switch_status_t do_config(void)
} }
} }
} }
} else if (!strcasecmp(var, "expand-vars")) { } else if (!strcasecmp(var, "expand-vars")) {
profile->perms.expand_vars = switch_true_byte(val); profile->perms.expand_vars = switch_true_byte(val);
@ -2024,7 +2024,7 @@ static switch_status_t do_config(void)
switch_xml_t x_list, x_var, x_api; switch_xml_t x_list, x_var, x_api;
if ((x_list = switch_xml_child(param, "variable-list"))) { if ((x_list = switch_xml_child(param, "variable-list"))) {
char *var = (char *) switch_xml_attr_soft(param, "default"); char *var = (char *) switch_xml_attr_soft(param, "default");
profile->var_params.default_allow = (var && !strcasecmp(var, "allow")); profile->var_params.default_allow = (var && !strcasecmp(var, "allow"));
switch_event_create(&profile->var_params.expand_var_list, SWITCH_EVENT_CLONE); switch_event_create(&profile->var_params.expand_var_list, SWITCH_EVENT_CLONE);
profile->var_params.expand_var_list->flags |= EF_UNIQ_HEADERS; profile->var_params.expand_var_list->flags |= EF_UNIQ_HEADERS;
@ -2047,7 +2047,7 @@ static switch_status_t do_config(void)
if ((x_list = switch_xml_child(param, "api-list"))) { if ((x_list = switch_xml_child(param, "api-list"))) {
char *api = (char *) switch_xml_attr_soft(param, "default"); char *api = (char *) switch_xml_attr_soft(param, "default");
profile->var_params.default_allow = (api && !strcasecmp(api, "allow")); profile->var_params.default_allow = (api && !strcasecmp(api, "allow"));
switch_event_create(&profile->var_params.api_list, SWITCH_EVENT_CLONE); switch_event_create(&profile->var_params.api_list, SWITCH_EVENT_CLONE);
profile->var_params.api_list->flags |= EF_UNIQ_HEADERS; profile->var_params.api_list->flags |= EF_UNIQ_HEADERS;
@ -2202,7 +2202,7 @@ static switch_status_t my_on_reporting(switch_core_session_t *session)
} }
switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "exiting", "true"); switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "exiting", "true");
if (client->record.file) { if (client->record.file) {
char *key = switch_core_sprintf(client->pool, "attach_file:%s:%s.wav", client->record.name, switch_core_session_get_uuid(session)); char *key = switch_core_sprintf(client->pool, "attach_file:%s:%s.wav", client->record.name, switch_core_session_get_uuid(session));
switch_ivr_stop_record_session(client->session, client->record.file); switch_ivr_stop_record_session(client->session, client->record.file);
@ -2221,7 +2221,7 @@ static switch_status_t my_on_reporting(switch_core_session_t *session)
switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "exiting", "true"); switch_event_add_header_string(client->one_time_params, SWITCH_STACK_BOTTOM, "exiting", "true");
} }
} }
httapi_sync(client); httapi_sync(client);
client_destroy(&client); client_destroy(&client);
@ -2264,7 +2264,7 @@ SWITCH_STANDARD_APP(httapi_function)
} else { } else {
url = data; url = data;
} }
if (!zstr(url) && switch_stristr("://", url)) { if (!zstr(url) && switch_stristr("://", url)) {
if (!params) { if (!params) {
switch_event_create(&params, SWITCH_EVENT_CLONE); switch_event_create(&params, SWITCH_EVENT_CLONE);
@ -2288,7 +2288,7 @@ SWITCH_STANDARD_APP(httapi_function)
if (zstr(profile_name) && !(profile_name = switch_channel_get_variable(channel, "httapi_profile"))) { if (zstr(profile_name) && !(profile_name = switch_channel_get_variable(channel, "httapi_profile"))) {
profile_name = "default"; profile_name = "default";
} }
if ((client = client_create(session, profile_name, &params))) { if ((client = client_create(session, profile_name, &params))) {
switch_channel_set_private(channel, "_HTTAPI_CLIENT_", client); switch_channel_set_private(channel, "_HTTAPI_CLIENT_", client);
switch_channel_add_state_handler(channel, &state_handlers); switch_channel_add_state_handler(channel, &state_handlers);
@ -2346,7 +2346,7 @@ SWITCH_STANDARD_APP(httapi_function)
switch_safe_free(parsed); switch_safe_free(parsed);
} }
@ -2355,7 +2355,7 @@ SWITCH_STANDARD_APP(httapi_function)
static const char *find_ext(const char *in) static const char *find_ext(const char *in)
{ {
const char *p = in + (strlen(in) - 1); const char *p = in + (strlen(in) - 1);
while(p >= in && *p) { while(p >= in && *p) {
if (*p == '/') return NULL; if (*p == '/') return NULL;
if (*p == '.') return (p+1); if (*p == '.') return (p+1);
@ -2379,11 +2379,11 @@ static char *load_cache_data(http_file_context_t *context, const char *url)
if (context->url_params) { if (context->url_params) {
ext = switch_event_get_header(context->url_params, "ext"); ext = switch_event_get_header(context->url_params, "ext");
} }
if (zstr(ext)) { if (zstr(ext)) {
ext = find_ext(url); ext = find_ext(url);
} }
if (ext && (p = strchr(ext, '?'))) { if (ext && (p = strchr(ext, '?'))) {
dext = strdup(ext); dext = strdup(ext);
if ((p = strchr(dext, '?'))) { if ((p = strchr(dext, '?'))) {
@ -2432,7 +2432,7 @@ static size_t save_file_callback(void *ptr, size_t size, size_t nmemb, void *dat
unsigned char *buffer = (unsigned char *) ptr; unsigned char *buffer = (unsigned char *) ptr;
client->bytes += realsize; client->bytes += realsize;
if (client->bytes > client->max_bytes) { if (client->bytes > client->max_bytes) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Oversized file detected [%d bytes]\n", (int) client->bytes); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Oversized file detected [%d bytes]\n", (int) client->bytes);
client->err = 1; client->err = 1;
@ -2468,14 +2468,14 @@ static switch_status_t fetch_cache_data(http_file_context_t *context, const char
const char *profile_name = NULL; const char *profile_name = NULL;
int tries = 10; int tries = 10;
if (context->url_params) { if (context->url_params) {
profile_name = switch_event_get_header(context->url_params, "profile_name"); profile_name = switch_event_get_header(context->url_params, "profile_name");
} }
if (zstr(profile_name)) { if (zstr(profile_name)) {
if (globals.profile) profile_name = globals.profile->name; if (globals.profile) profile_name = globals.profile->name;
} }
if (zstr(profile_name)) { if (zstr(profile_name)) {
profile_name = "default"; profile_name = "default";
} }
@ -2500,7 +2500,7 @@ static switch_status_t fetch_cache_data(http_file_context_t *context, const char
if (context->url_params) { if (context->url_params) {
ua = switch_event_get_header(context->url_params, "user_agent"); ua = switch_event_get_header(context->url_params, "user_agent");
} }
if (zstr(ua)) { if (zstr(ua)) {
ua = "mod_httapi/1.0"; ua = "mod_httapi/1.0";
} }
@ -2520,7 +2520,7 @@ static switch_status_t fetch_cache_data(http_file_context_t *context, const char
if ((p = strstr(q, "://"))) { if ((p = strstr(q, "://"))) {
*(p+3) = '\0'; *(p+3) = '\0';
} }
p = switch_mprintf("%s%s", q, r); p = switch_mprintf("%s%s", q, r);
dynamic_url = p; dynamic_url = p;
free(q); free(q);
@ -2617,12 +2617,12 @@ static switch_status_t fetch_cache_data(http_file_context_t *context, const char
switch_curl_easy_setopt(curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); switch_curl_easy_setopt(curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
switch_curl_easy_setopt(curl_handle, CURLOPT_USERPWD, dup_creds); switch_curl_easy_setopt(curl_handle, CURLOPT_USERPWD, dup_creds);
} }
switch_curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, ua); switch_curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, ua);
switch_curl_easy_perform(curl_handle); switch_curl_easy_perform(curl_handle);
switch_curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &code); switch_curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &code);
switch_curl_easy_cleanup(curl_handle); switch_curl_easy_cleanup(curl_handle);
if (client->fd > -1) { if (client->fd > -1) {
close(client->fd); close(client->fd);
client->fd = -1; client->fd = -1;
@ -2645,7 +2645,7 @@ static switch_status_t fetch_cache_data(http_file_context_t *context, const char
case 404: case 404:
status = SWITCH_STATUS_NOTFOUND; status = SWITCH_STATUS_NOTFOUND;
break; break;
default: default:
status = SWITCH_STATUS_FALSE; status = SWITCH_STATUS_FALSE;
break; break;
@ -2695,7 +2695,7 @@ static switch_status_t write_meta_file(http_file_context_t *context, const char
} else if (headers && (cc = switch_event_get_header(headers, "Cache-Control"))) { } else if (headers && (cc = switch_event_get_header(headers, "Cache-Control"))) {
if ((p = switch_stristr("max-age=", cc))) { if ((p = switch_stristr("max-age=", cc))) {
p += 8; p += 8;
if (!zstr(p)) { if (!zstr(p)) {
x = atoi(p); x = atoi(p);
@ -2710,11 +2710,11 @@ static switch_status_t write_meta_file(http_file_context_t *context, const char
} }
} }
switch_snprintf(write_data, sizeof(write_data), switch_snprintf(write_data, sizeof(write_data),
"%" TIME_T_FMT ":%s", "%" TIME_T_FMT ":%s",
switch_epoch_time_now(NULL) + ttl, switch_epoch_time_now(NULL) + ttl,
data); data);
status = write(fd, write_data, (int)strlen(write_data) + 1) > 0 ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE; status = write(fd, write_data, (int)strlen(write_data) + 1) > 0 ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
} }
@ -2737,7 +2737,7 @@ static void lock_file(http_file_context_t *context, switch_bool_t lock)
switch_yield(100000); switch_yield(100000);
} }
} while(x); } while(x);
switch_core_hash_insert(globals.request_hash, context->dest_url, (void *)1); switch_core_hash_insert(globals.request_hash, context->dest_url, (void *)1);
switch_mutex_unlock(globals.request_mutex); switch_mutex_unlock(globals.request_mutex);
} else { } else {
@ -2768,7 +2768,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
if (context->url_params) { if (context->url_params) {
ext = switch_event_get_header(context->url_params, "ext"); ext = switch_event_get_header(context->url_params, "ext");
} }
if (zstr(ext)) { if (zstr(ext)) {
ext = find_ext(context->cache_file); ext = find_ext(context->cache_file);
} }
@ -2787,7 +2787,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
unreachable = 1; unreachable = 1;
} }
} }
if (zstr(ext) && headers && (ct = switch_event_get_header(headers, "content-type"))) { if (zstr(ext) && headers && (ct = switch_event_get_header(headers, "content-type"))) {
newext = switch_core_mime_type2ext(ct); newext = switch_core_mime_type2ext(ct);
} }
@ -2803,7 +2803,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
status = SWITCH_STATUS_NOTFOUND; status = SWITCH_STATUS_NOTFOUND;
goto end; goto end;
} }
if (!unreachable && !zstr(context->metadata)) { if (!unreachable && !zstr(context->metadata)) {
metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s:%s", metadata = switch_core_sprintf(context->pool, "%s:%s:%s:%s:%s",
url, url,
@ -2818,7 +2818,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
switch_goto_status(SWITCH_STATUS_SUCCESS, end); switch_goto_status(SWITCH_STATUS_SUCCESS, end);
} }
} }
switch_event_destroy(&headers); switch_event_destroy(&headers);
} }
@ -2836,9 +2836,9 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
switch_event_get_header_nil(headers, "content-length"), switch_event_get_header_nil(headers, "content-length"),
ext ext
); );
write_meta_file(context, metadata, headers); write_meta_file(context, metadata, headers);
if (switch_file_exists(context->cache_file, context->pool) == SWITCH_STATUS_SUCCESS) { if (switch_file_exists(context->cache_file, context->pool) == SWITCH_STATUS_SUCCESS) {
status = SWITCH_STATUS_SUCCESS; status = SWITCH_STATUS_SUCCESS;
} }
@ -2851,7 +2851,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
} }
switch_event_destroy(&headers); switch_event_destroy(&headers);
return status; return status;
} }
@ -2916,21 +2916,21 @@ static switch_status_t file_open(switch_file_handle_t *handle, const char *path,
context->fh.samples = handle->samples; context->fh.samples = handle->samples;
context->fh.samplerate = handle->samplerate; context->fh.samplerate = handle->samplerate;
context->fh.prefix = handle->prefix; context->fh.prefix = handle->prefix;
if (context->url_params) { if (context->url_params) {
context->write.file_name = switch_event_get_header(context->url_params, "file"); context->write.file_name = switch_event_get_header(context->url_params, "file");
context->write.profile_name = switch_event_get_header(context->url_params, "profile"); context->write.profile_name = switch_event_get_header(context->url_params, "profile");
context->write.method = switch_event_get_header(context->url_params, "method"); context->write.method = switch_event_get_header(context->url_params, "method");
context->write.name = switch_event_get_header(context->url_params, "name"); context->write.name = switch_event_get_header(context->url_params, "name");
} }
if (!context->write.file_name) { if (!context->write.file_name) {
char *p; char *p;
if ((p = strrchr(context->dest_url, '/'))) { if ((p = strrchr(context->dest_url, '/'))) {
p++; p++;
context->write.file_name = switch_core_strdup(context->pool, p); context->write.file_name = switch_core_strdup(context->pool, p);
} }
} }
if (!context->write.file_name) { if (!context->write.file_name) {
@ -2943,16 +2943,16 @@ static switch_status_t file_open(switch_file_handle_t *handle, const char *path,
} else { } else {
ext = "wav"; ext = "wav";
} }
if (!context->write.profile_name) context->write.profile_name = "default"; if (!context->write.profile_name) context->write.profile_name = "default";
if (!context->write.method) context->write.method = !strcasecmp(ext, "cgi") ? "post" : "put"; if (!context->write.method) context->write.method = !strcasecmp(ext, "cgi") ? "post" : "put";
if (!context->write.name) context->write.name = "recorded_file"; if (!context->write.name) context->write.name = "recorded_file";
switch_uuid_str(context->write.uuid_str, sizeof(context->write.uuid_str)); switch_uuid_str(context->write.uuid_str, sizeof(context->write.uuid_str));
context->write.file = switch_core_sprintf(context->pool, "%s%s%s_%s", context->write.file = switch_core_sprintf(context->pool, "%s%s%s_%s",
SWITCH_GLOBAL_dirs.temp_dir, SWITCH_PATH_SEPARATOR, context->write.uuid_str, context->write.file_name); SWITCH_GLOBAL_dirs.temp_dir, SWITCH_PATH_SEPARATOR, context->write.uuid_str, context->write.file_name);
if (switch_core_file_open(&context->fh, context->write.file, handle->channels, handle->samplerate, handle->flags, NULL) != SWITCH_STATUS_SUCCESS) { if (switch_core_file_open(&context->fh, context->write.file, handle->channels, handle->samplerate, handle->flags, NULL) != SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_GENERR; return SWITCH_STATUS_GENERR;
@ -2971,11 +2971,11 @@ static switch_status_t file_open(switch_file_handle_t *handle, const char *path,
if (status != SWITCH_STATUS_SUCCESS) { if (status != SWITCH_STATUS_SUCCESS) {
return status; return status;
} }
if ((status = switch_core_file_open(&context->fh, if ((status = switch_core_file_open(&context->fh,
context->cache_file, context->cache_file,
handle->channels, handle->channels,
handle->samplerate, handle->samplerate,
handle->flags, NULL)) != SWITCH_STATUS_SUCCESS) { handle->flags, NULL)) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid cache file %s opening url %s Discarding file.\n", context->cache_file, path); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid cache file %s opening url %s Discarding file.\n", context->cache_file, path);
unlink(context->cache_file); unlink(context->cache_file);
@ -3051,12 +3051,12 @@ static switch_status_t http_file_file_close(switch_file_handle_t *handle)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find suitable profile\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find suitable profile\n");
switch_event_destroy(&params); switch_event_destroy(&params);
} }
unlink(context->write.file); unlink(context->write.file);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
if (context->del_on_close) { if (context->del_on_close) {
if (context->cache_file) { if (context->cache_file) {
unlink(context->cache_file); unlink(context->cache_file);
@ -3075,7 +3075,7 @@ static switch_status_t http_file_file_close(switch_file_handle_t *handle)
static switch_status_t http_file_read_video(switch_file_handle_t *handle, switch_frame_t *frame, switch_video_read_flag_t flags) static switch_status_t http_file_read_video(switch_file_handle_t *handle, switch_frame_t *frame, switch_video_read_flag_t flags)
{ {
http_file_context_t *context = handle->private_info; http_file_context_t *context = handle->private_info;
return switch_core_file_read_video(&context->fh, frame, flags); return switch_core_file_read_video(&context->fh, frame, flags);
} }
@ -3089,7 +3089,7 @@ static switch_status_t http_file_write_video(switch_file_handle_t *handle, switc
static switch_status_t http_file_write(switch_file_handle_t *handle, void *data, size_t *len) static switch_status_t http_file_write(switch_file_handle_t *handle, void *data, size_t *len)
{ {
http_file_context_t *context = handle->private_info; http_file_context_t *context = handle->private_info;
return switch_core_file_write(&context->fh, data, len); return switch_core_file_write(&context->fh, data, len);
} }
@ -3127,7 +3127,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_httapi_load)
switch_application_interface_t *app_interface; switch_application_interface_t *app_interface;
switch_file_interface_t *http_file_interface; switch_file_interface_t *http_file_interface;
switch_file_interface_t *https_file_interface; switch_file_interface_t *https_file_interface;
/* connect my internal structure to the blank pointer passed to me */ /* connect my internal structure to the blank pointer passed to me */
*module_interface = switch_loadable_module_create_module_interface(pool, modname); *module_interface = switch_loadable_module_create_module_interface(pool, modname);
@ -3165,11 +3165,11 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_httapi_load)
https_file_interface->file_seek = http_file_file_seek; https_file_interface->file_seek = http_file_file_seek;
https_file_interface->file_read_video = http_file_read_video; https_file_interface->file_read_video = http_file_read_video;
https_file_interface->file_write_video = http_file_write_video; https_file_interface->file_write_video = http_file_write_video;
switch_snprintf(globals.cache_path, sizeof(globals.cache_path), "%s%shttp_file_cache", SWITCH_GLOBAL_dirs.storage_dir, SWITCH_PATH_SEPARATOR); switch_snprintf(globals.cache_path, sizeof(globals.cache_path), "%s%shttp_file_cache", SWITCH_GLOBAL_dirs.storage_dir, SWITCH_PATH_SEPARATOR);
switch_dir_make_recursive(globals.cache_path, SWITCH_DEFAULT_DIR_PERMS, pool); switch_dir_make_recursive(globals.cache_path, SWITCH_DEFAULT_DIR_PERMS, pool);
switch_core_hash_init(&globals.profile_hash); switch_core_hash_init(&globals.profile_hash);
switch_core_hash_init(&globals.request_hash); switch_core_hash_init(&globals.request_hash);
switch_core_hash_init_case(&globals.parse_hash, SWITCH_FALSE); switch_core_hash_init_case(&globals.parse_hash, SWITCH_FALSE);
@ -3198,14 +3198,14 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_httapi_load)
if (do_config() != SWITCH_STATUS_SUCCESS) { if (do_config() != SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
} }
SWITCH_ADD_API(httapi_api_interface, "httapi", SWITCH_ADD_API(httapi_api_interface, "httapi",
"HT-TAPI Hypertext Telephony API", httapi_api_function, HTTAPI_SYNTAX); "HT-TAPI Hypertext Telephony API", httapi_api_function, HTTAPI_SYNTAX);
SWITCH_ADD_APP(app_interface, "httapi", SWITCH_ADD_APP(app_interface, "httapi",
"HT-TAPI Hypertext Telephony API", "HT-TAPI Hypertext Telephony API",
"HT-TAPI Hypertext Telephony API", httapi_function, "{<param1>=<val1>}", SAF_SUPPORT_NOMEDIA); "HT-TAPI Hypertext Telephony API", httapi_function, "{<param1>=<val1>}", SAF_SUPPORT_NOMEDIA);
switch_console_set_complete("add httapi debug_on"); switch_console_set_complete("add httapi debug_on");
@ -3233,9 +3233,9 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_httapi_shutdown)
} }
switch_core_hash_destroy(&globals.profile_hash); switch_core_hash_destroy(&globals.profile_hash);
switch_core_hash_destroy(&globals.parse_hash); switch_core_hash_destroy(&globals.parse_hash);
while (globals.hash_root) { while (globals.hash_root) {
ptr = globals.hash_root; ptr = globals.hash_root;
switch_core_hash_destroy(&ptr->hash); switch_core_hash_destroy(&ptr->hash);

View File

@ -359,7 +359,7 @@ static switch_status_t http_put(url_cache_t *cache, http_profile_t *profile, swi
switch_curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers); switch_curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers);
switch_curl_easy_setopt(curl_handle, CURLOPT_URL, full_url); switch_curl_easy_setopt(curl_handle, CURLOPT_URL, full_url);
/* we want to use our own read function so we can send a portion of the file */ /* we want to use our own read function so we can send a portion of the file */
switch_curl_easy_setopt(curl_handle, CURLOPT_READFUNCTION, read_callback); switch_curl_easy_setopt(curl_handle, CURLOPT_READFUNCTION, read_callback);
switch_curl_easy_setopt(curl_handle, CURLOPT_READDATA, &block_info); switch_curl_easy_setopt(curl_handle, CURLOPT_READDATA, &block_info);

View File

@ -86,7 +86,7 @@ static void test_parse_url(void)
parse_url(strdup("https://my-bucket-with-dash.s3-us-west-2.amazonaws.com/greeting/file/1002/Lumino.mp3"), NULL, "s3", &bucket, &object); parse_url(strdup("https://my-bucket-with-dash.s3-us-west-2.amazonaws.com/greeting/file/1002/Lumino.mp3"), NULL, "s3", &bucket, &object);
ASSERT_STRING_EQUALS("my-bucket-with-dash", bucket); ASSERT_STRING_EQUALS("my-bucket-with-dash", bucket);
ASSERT_STRING_EQUALS("greeting/file/1002/Lumino.mp3", object); ASSERT_STRING_EQUALS("greeting/file/1002/Lumino.mp3", object);
parse_url(strdup("http://quotes.s3.foo.bar.s3.amazonaws.com/greeting/file/1002/Lumino.mp3"), NULL, "s3", &bucket, &object); parse_url(strdup("http://quotes.s3.foo.bar.s3.amazonaws.com/greeting/file/1002/Lumino.mp3"), NULL, "s3", &bucket, &object);
ASSERT_STRING_EQUALS("quotes.s3.foo.bar", bucket); ASSERT_STRING_EQUALS("quotes.s3.foo.bar", bucket);
ASSERT_STRING_EQUALS("greeting/file/1002/Lumino.mp3", object); ASSERT_STRING_EQUALS("greeting/file/1002/Lumino.mp3", object);

View File

@ -1,5 +1,5 @@
<include> <include>
<X-PRE-PROCESS cmd="set" data="AT_EPENT1=0 0 0 -1 -1 0 -1 0 -1 -1 0 -1"/> <X-PRE-PROCESS cmd="set" data="AT_EPENT1=0 0 0 -1 -1 0 -1 0 -1 -1 0 -1"/>
<X-PRE-PROCESS cmd="set" data="AT_EPENT2=1 1 1 -1 -1 1 -1 1 -1 -1 1 -1"/> <X-PRE-PROCESS cmd="set" data="AT_EPENT2=1 1 1 -1 -1 1 -1 1 -1 -1 1 -1"/>
<X-PRE-PROCESS cmd="set" data="AT_CPENT1=0 -1 -1 0 -1 0 0 0 -1 -1 0 -1"/> <X-PRE-PROCESS cmd="set" data="AT_CPENT1=0 -1 -1 0 -1 0 0 0 -1 -1 0 -1"/>
@ -8,9 +8,9 @@
<X-PRE-PROCESS cmd="set" data="AT_CMAJ2=1 -1 1 1 -1 1 -1 1 1 -1 1 -1"/> <X-PRE-PROCESS cmd="set" data="AT_CMAJ2=1 -1 1 1 -1 1 -1 1 1 -1 1 -1"/>
<X-PRE-PROCESS cmd="set" data="AT_BBLUES=1 -1 1 -1 -1 1 -1 1 1 1 -1 -1"/> <X-PRE-PROCESS cmd="set" data="AT_BBLUES=1 -1 1 -1 -1 1 -1 1 1 1 -1 -1"/>
<X-PRE-PROCESS cmd="set" data="ATGPENT2=-1 1 -1 1 -1 1 -1 -1 1 -1 1 -1"/> <X-PRE-PROCESS cmd="set" data="ATGPENT2=-1 1 -1 1 -1 1 -1 -1 1 -1 1 -1"/>
<extension name="101"> <extension name="101">
<condition field="destination_number" expression="^101$"> <condition field="destination_number" expression="^101$">
<!-- AUTOTALENT DEFAULTS --> <!-- AUTOTALENT DEFAULTS -->
<!-- <!--
@ -65,13 +65,13 @@
<action application="set"><![CDATA[ladspa_params=${AT_TUNE} ${AT_FIXED} ${AT_PULL} ${AT_EPENT2} ${AT_AMOUNT} ${AT_SMOOTH} ${AT_SHIFT} ${AT_OUTSCALE} ${AT_LFODEPTH} ${AT_LFORATE} ${AT_LFOSHAPE} ${AT_LFOSYMM} ${AT_LFOQUANT} ${AT_FCORR} ${AT_FWARP} ${AT_MIX}]]></action> <action application="set"><![CDATA[ladspa_params=${AT_TUNE} ${AT_FIXED} ${AT_PULL} ${AT_EPENT2} ${AT_AMOUNT} ${AT_SMOOTH} ${AT_SHIFT} ${AT_OUTSCALE} ${AT_LFODEPTH} ${AT_LFORATE} ${AT_LFOSHAPE} ${AT_LFOSYMM} ${AT_LFOQUANT} ${AT_FCORR} ${AT_FWARP} ${AT_MIX}]]></action>
<action application="ladspa_run" data="r|autotalent||${ladspa_params}"/> <action application="ladspa_run" data="r|autotalent||${ladspa_params}"/>
<action application="ladspa_run" data="r|tap_chorusflanger||"/> <action application="ladspa_run" data="r|tap_chorusflanger||"/>
<action application="ladspa_run" data="r|phasers_1217.so|autoPhaser|"/> <action application="ladspa_run" data="r|phasers_1217.so|autoPhaser|"/>
<action application="bridge" data="sofia/internal/888@conference.freeswitch.org"/> <action application="bridge" data="sofia/internal/888@conference.freeswitch.org"/>
</condition> </condition>
</extension> </extension>
</include> </include>

Some files were not shown because too many files have changed in this diff Show More