[asterisk-commits] crichter: branch crichter/0.4.0 r39129 - in
/team/crichter/0.4.0: ./ apps/ ch...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Mon Aug 7 01:15:39 MST 2006
Author: crichter
Date: Mon Aug 7 03:15:38 2006
New Revision: 39129
URL: http://svn.digium.com/view/asterisk?rev=39129&view=rev
Log:
Merged revisions 36915,36940,37003,37147,37171,37177,37215,37229,37310,37322,37354,37364,37384,37405,37421,37444,37461,37507,37519,37534,37549,37574,37615,37700,37768,37811,37837,37862,37957,38171,38203,38237,38292,38313,38332,38350,38373,38424,38505,38553,38589,38614,38656,38658,38676,38689,38734,38764 via svnmerge from
https://origsvn.digium.com/svn/asterisk/team/crichter/0.3.0
........
r36915 | root | 2006-07-04 17:00:39 +0200 (Di, 04 Jul 2006) | 1 line
automerge commit
........
r36940 | crichter | 2006-07-04 19:02:59 +0200 (Di, 04 Jul 2006) | 1 line
removed the reloading of the ntdebug stuff, since this is a bit buggy, we only set it when loading chan_misdn for now. fixed a litle state problem when receiving RELEASE_COMPLETE. also we may only play tones to a NT when the extension does not match and such cases.
........
r37003 | root | 2006-07-05 18:00:35 +0200 (Mi, 05 Jul 2006) | 1 line
automerge commit
........
r37147 | root | 2006-07-06 16:00:36 +0200 (Do, 06 Jul 2006) | 1 line
automerge commit
........
r37171 | crichter | 2006-07-06 17:05:49 +0200 (Do, 06 Jul 2006) | 8 lines
* removed tone_indicate, we genrate only the dialtone by ourself (and the hanguptone of course)
* removed the state handling from release_chan, and simplified the ast_hangup/ast_queue_hangup stuff
* added pp_l2_check option, for pp lines where the pbx does not initially gets the L2 up
* simplified and fixed a bug in the pid generation code
* fixed a bug in empty_chan, which might cause segfaults and memorry corruptions
* added prepare_bc function, which is sort of the opposite of empty_bc
........
r37177 | root | 2006-07-06 18:00:35 +0200 (Do, 06 Jul 2006) | 1 line
automerge commit
........
r37215 | root | 2006-07-06 23:00:20 +0200 (Do, 06 Jul 2006) | 1 line
automerge commit
........
r37229 | root | 2006-07-07 00:00:30 +0200 (Fr, 07 Jul 2006) | 1 line
automerge commit
........
r37310 | root | 2006-07-08 02:00:26 +0200 (Sa, 08 Jul 2006) | 1 line
automerge commit
........
r37322 | crichter | 2006-07-10 13:03:27 +0200 (Mo, 10 Jul 2006) | 1 line
removed unnecessary locking, which might have created deadlocks. removed find_chan_by_l3id, since the l3id is not unique over all ports. removed automatic nt_stack reinitialization, since this creates segfaults.
........
r37354 | crichter | 2006-07-10 22:51:40 +0200 (Mo, 10 Jul 2006) | 1 line
removed mqueue branch reference, because mqueue is head now.
........
r37364 | root | 2006-07-11 00:00:21 +0200 (Di, 11 Jul 2006) | 1 line
automerge commit
........
r37384 | root | 2006-07-11 22:00:26 +0200 (Di, 11 Jul 2006) | 1 line
automerge commit
........
r37405 | root | 2006-07-12 06:00:20 +0200 (Mi, 12 Jul 2006) | 1 line
automerge commit
........
r37421 | root | 2006-07-12 16:00:25 +0200 (Mi, 12 Jul 2006) | 1 line
automerge commit
........
r37444 | root | 2006-07-12 18:00:21 +0200 (Mi, 12 Jul 2006) | 1 line
automerge commit
........
r37461 | root | 2006-07-12 21:00:22 +0200 (Mi, 12 Jul 2006) | 1 line
automerge commit
........
r37507 | crichter | 2006-07-13 16:07:28 +0200 (Do, 13 Jul 2006) | 1 line
added even more statefulness for sending out disconnect/release/release_complete messages. added support for incoming presentation/screening. fixed a bug that we generate TONE_EVENTS on hanguptone_indicatem, which caused asterisk to write blocking thread messages. added nodialtone option to prevent dialtone for always_immediate
........
r37519 | root | 2006-07-13 18:00:59 +0200 (Do, 13 Jul 2006) | 1 line
automerge commit
........
r37534 | root | 2006-07-13 19:00:21 +0200 (Do, 13 Jul 2006) | 1 line
automerge commit
........
r37549 | root | 2006-07-13 21:00:20 +0200 (Do, 13 Jul 2006) | 1 line
automerge commit
........
r37574 | root | 2006-07-14 00:00:21 +0200 (Fr, 14 Jul 2006) | 1 line
automerge commit
........
r37615 | root | 2006-07-14 16:00:24 +0200 (Fr, 14 Jul 2006) | 1 line
automerge commit
........
r37700 | root | 2006-07-16 02:00:20 +0200 (So, 16 Jul 2006) | 1 line
automerge commit
........
r37768 | root | 2006-07-17 18:00:21 +0200 (Mo, 17 Jul 2006) | 1 line
automerge commit
........
r37811 | root | 2006-07-18 01:00:20 +0200 (Di, 18 Jul 2006) | 1 line
automerge commit
........
r37837 | root | 2006-07-18 02:00:19 +0200 (Di, 18 Jul 2006) | 1 line
automerge commit
........
r37862 | root | 2006-07-18 03:00:20 +0200 (Di, 18 Jul 2006) | 1 line
automerge commit
........
r37957 | root | 2006-07-19 20:00:25 +0200 (Mi, 19 Jul 2006) | 1 line
automerge commit
........
r38171 | root | 2006-07-24 20:00:20 +0200 (Mo, 24 Jul 2006) | 1 line
automerge commit
........
r38203 | root | 2006-07-25 22:00:22 +0200 (Di, 25 Jul 2006) | 1 line
automerge commit
........
r38237 | root | 2006-07-26 18:00:33 +0200 (Mi, 26 Jul 2006) | 1 line
automerge commit
........
r38292 | root | 2006-07-27 04:00:21 +0200 (Do, 27 Jul 2006) | 1 line
automerge commit
........
r38313 | root | 2006-07-27 05:00:19 +0200 (Do, 27 Jul 2006) | 1 line
automerge commit
........
r38332 | root | 2006-07-27 07:00:21 +0200 (Do, 27 Jul 2006) | 1 line
automerge commit
........
r38350 | root | 2006-07-27 18:00:23 +0200 (Do, 27 Jul 2006) | 1 line
automerge commit
........
r38373 | root | 2006-07-28 01:00:20 +0200 (Fr, 28 Jul 2006) | 1 line
automerge commit
........
r38424 | root | 2006-07-28 21:00:23 +0200 (Fr, 28 Jul 2006) | 1 line
automerge commit
........
r38505 | root | 2006-07-30 02:00:23 +0200 (So, 30 Jul 2006) | 1 line
automerge commit
........
r38553 | root | 2006-07-31 07:00:22 +0200 (Mo, 31 Jul 2006) | 1 line
automerge commit
........
r38589 | root | 2006-07-31 20:00:24 +0200 (Mo, 31 Jul 2006) | 1 line
automerge commit
........
r38614 | root | 2006-08-01 00:00:20 +0200 (Di, 01 Aug 2006) | 1 line
automerge commit
........
r38656 | crichter | 2006-08-01 21:57:35 +0200 (Di, 01 Aug 2006) | 25 lines
* removed pp_l2_check (fixed L2 bug in mISDNuser)
* added blocking flag to stack object. A port can be blocked/unblocked from the
cli
* added EVENT_PORT_ALARM to send alarm infos to the chan_misdn.c layer (later
we can add a manager event for that)
* added block_on_alarm option, to block the port whenever a ALARM occurs
* added need_busy flag to indicate if we've sended a CONTROL_BUSY already
* changed a bunch of cb_log(-1,..) to cb_log(0,..) due to funny behaviour in
recent asterisk ast_log messages..
* fixed a few ETSI state violations, especially when finishing calls in
different seldom states
* changed debug levels a lot to make the log more readable in low debuglevels
* some first fixes for the HOLD/RETRIEVE stuff (doesn't work totally still)
* removed the PRECONNECTED state stuff
* added cause 27 when we get a CLEANUP directly after a outgoing SETUP, this
creates a CHANISUNAVAIL instead of a NOANSWER
* removed the addr pointer from "misdn show stacks" that's not needed anymore
and makes the output more unreadable
* added cause saving on RELEASE/RELEASE_COMPLETE
* set cause to 16 on prepare_bc
* removed stack getting from ph_control functions, we don't really need it
there
* added beroec api
........
r38658 | root | 2006-08-01 22:00:21 +0200 (Di, 01 Aug 2006) | 1 line
automerge commit
........
r38676 | crichter | 2006-08-01 22:15:57 +0200 (Di, 01 Aug 2006) | 1 line
the alarm message has no call, so we shouldn't search for a chan_list object
........
r38689 | root | 2006-08-02 02:00:20 +0200 (Mi, 02 Aug 2006) | 1 line
automerge commit
........
r38734 | root | 2006-08-02 22:00:27 +0200 (Mi, 02 Aug 2006) | 1 line
automerge commit
........
r38764 | root | 2006-08-03 08:00:21 +0200 (Do, 03 Aug 2006) | 1 line
automerge commit
........
Modified:
team/crichter/0.4.0/ (props changed)
team/crichter/0.4.0/app.c
team/crichter/0.4.0/apps/app_chanspy.c
team/crichter/0.4.0/apps/app_sms.c
team/crichter/0.4.0/apps/app_voicemail.c
team/crichter/0.4.0/apps/app_zapras.c
team/crichter/0.4.0/asterisk.c
team/crichter/0.4.0/channel.c
team/crichter/0.4.0/channels/Makefile
team/crichter/0.4.0/channels/chan_agent.c
team/crichter/0.4.0/channels/chan_iax2.c
team/crichter/0.4.0/channels/chan_misdn.c
team/crichter/0.4.0/channels/chan_modem.c
team/crichter/0.4.0/channels/chan_oss.c
team/crichter/0.4.0/channels/chan_sip.c
team/crichter/0.4.0/channels/chan_zap.c
team/crichter/0.4.0/channels/misdn/Makefile
team/crichter/0.4.0/channels/misdn/chan_misdn_config.h
team/crichter/0.4.0/channels/misdn/isdn_lib.c
team/crichter/0.4.0/channels/misdn/isdn_lib.h
team/crichter/0.4.0/channels/misdn/isdn_lib_intern.h
team/crichter/0.4.0/channels/misdn/isdn_msg_parser.c
team/crichter/0.4.0/channels/misdn_config.c
team/crichter/0.4.0/codecs/gsm/Makefile
team/crichter/0.4.0/configs/iax.conf.sample
team/crichter/0.4.0/configs/misdn.conf.sample
team/crichter/0.4.0/contrib/init.d/rc.mandrake.zaptel
team/crichter/0.4.0/doc/README.enum
team/crichter/0.4.0/doc/README.misdn
team/crichter/0.4.0/enum.c
team/crichter/0.4.0/formats/format_h263.c
team/crichter/0.4.0/frame.c
team/crichter/0.4.0/funcs/func_db.c
team/crichter/0.4.0/pbx/pbx_config.c
team/crichter/0.4.0/res/res_agi.c
team/crichter/0.4.0/res/res_features.c
team/crichter/0.4.0/res/res_musiconhold.c
team/crichter/0.4.0/rtp.c
team/crichter/0.4.0/utils.c
Propchange: team/crichter/0.4.0/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Aug 7 03:15:38 2006
@@ -1,1 +1,1 @@
-/team/crichter/0.3.0:1-36869
+/team/crichter/0.3.0:1-38802
Modified: team/crichter/0.4.0/app.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/app.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/app.c (original)
+++ team/crichter/0.4.0/app.c Mon Aug 7 03:15:38 2006
@@ -1158,7 +1158,7 @@
snprintf(fs, strlen(path) + 19, "%s/.lock-%08x", path, rand());
fd = open(fs, O_WRONLY | O_CREAT | O_EXCL, 0600);
if (fd < 0) {
- fprintf(stderr, "Unable to create lock file '%s': %s\n", path, strerror(errno));
+ ast_log(LOG_ERROR, "Unable to create lock file '%s': %s\n", path, strerror(errno));
return AST_LOCK_PATH_NOT_FOUND;
}
close(fd);
@@ -1167,11 +1167,13 @@
time(&start);
while (((res = link(fs, s)) < 0) && (errno == EEXIST) && (time(NULL) - start < 5))
usleep(1);
+
+ unlink(fs);
+
if (res) {
ast_log(LOG_WARNING, "Failed to lock path '%s': %s\n", path, strerror(errno));
return AST_LOCK_TIMEOUT;
} else {
- unlink(fs);
ast_log(LOG_DEBUG, "Locked path '%s'\n", path);
return AST_LOCK_SUCCESS;
}
@@ -1180,12 +1182,22 @@
int ast_unlock_path(const char *path)
{
char *s;
+ int res;
+
s = alloca(strlen(path) + 10);
- if (!s)
+ if (!s) {
+ ast_log(LOG_WARNING, "Out of memory!\n");
return -1;
+ }
+
snprintf(s, strlen(path) + 9, "%s/%s", path, ".lock");
- ast_log(LOG_DEBUG, "Unlocked path '%s'\n", path);
- return unlink(s);
+
+ if ((res = unlink(s)))
+ ast_log(LOG_ERROR, "Could not unlock path '%s': %s\n", path, strerror(errno));
+ else
+ ast_log(LOG_DEBUG, "Unlocked path '%s'\n", path);
+
+ return res;
}
int ast_record_review(struct ast_channel *chan, const char *playfile, const char *recordfile, int maxtime, const char *fmt, int *duration, const char *path)
Modified: team/crichter/0.4.0/apps/app_chanspy.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/apps/app_chanspy.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/apps/app_chanspy.c (original)
+++ team/crichter/0.4.0/apps/app_chanspy.c Mon Aug 7 03:15:38 2006
@@ -419,19 +419,19 @@
char *opts[OPT_ARG_ARRAY_SIZE];
ast_app_parse_options(chanspy_opts, &flags, opts, options);
if (ast_test_flag(&flags, OPTION_GROUP)) {
- mygroup = opts[1];
+ mygroup = opts[OPT_ARG_GROUP];
}
if (ast_test_flag(&flags, OPTION_RECORD)) {
- if (!(recbase = opts[2])) {
+ if (!(recbase = opts[OPT_ARG_RECORD])) {
recbase = "chanspy";
}
}
silent = ast_test_flag(&flags, OPTION_QUIET);
bronly = ast_test_flag(&flags, OPTION_BRIDGED);
- if (ast_test_flag(&flags, OPTION_VOLUME) && opts[1]) {
+ if (ast_test_flag(&flags, OPTION_VOLUME) && opts[OPT_ARG_VOLUME]) {
int vol;
- if ((sscanf(opts[0], "%d", &vol) != 1) || (vol > 4) || (vol < -4))
+ if ((sscanf(opts[OPT_ARG_VOLUME], "%d", &vol) != 1) || (vol > 4) || (vol < -4))
ast_log(LOG_NOTICE, "Volume factor must be a number between -4 and 4\n");
else
volfactor = vol;
Modified: team/crichter/0.4.0/apps/app_sms.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/apps/app_sms.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/apps/app_sms.c (original)
+++ team/crichter/0.4.0/apps/app_sms.c Mon Aug 7 03:15:38 2006
@@ -1205,7 +1205,8 @@
f.datalen = samples * 2;
#endif
f.offset = AST_FRIENDLY_OFFSET;
- f.data = buf + AST_FRIENDLY_OFFSET;
+ f.mallocd = 0;
+ f.data = buf;
f.samples = samples;
f.src = "app_sms";
/* create a buffer containing the digital sms pattern */
Modified: team/crichter/0.4.0/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/apps/app_voicemail.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/apps/app_voicemail.c (original)
+++ team/crichter/0.4.0/apps/app_voicemail.c Mon Aug 7 03:15:38 2006
@@ -2617,7 +2617,8 @@
} else if (ast_fileexists(tmptxtfile, NULL, NULL) <= 0) {
if (option_debug)
ast_log(LOG_DEBUG, "The recorded media file is gone, so we should remove the .txt file too!\n");
- unlink(tmptxtfile);
+ unlink(tmptxtfile);
+ ast_unlock_path(dir);
} else {
for (;;) {
make_file(fn, sizeof(fn), dir, msgnum);
@@ -3632,6 +3633,11 @@
if (!ast_strlen_zero(category))
res = ast_play_and_wait(chan, category);
+ if (res) {
+ ast_log(LOG_WARNING, "No sound file for category '%s' was found.\n", category);
+ res = 0;
+ }
+
return res;
}
@@ -4374,7 +4380,7 @@
if (vms->newmessages) {
res = say_and_wait(chan, vms->newmessages, chan->language);
if (!res) {
- if (vms->oldmessages == 1)
+ if (vms->newmessages == 1)
res = ast_play_and_wait(chan, "vm-INBOXs");
else
res = ast_play_and_wait(chan, "vm-INBOX");
Modified: team/crichter/0.4.0/apps/app_zapras.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/apps/app_zapras.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/apps/app_zapras.c (original)
+++ team/crichter/0.4.0/apps/app_zapras.c Mon Aug 7 03:15:38 2006
@@ -127,12 +127,6 @@
argv[argc++] = "plugin";
argv[argc++] = "zaptel.so";
argv[argc++] = "stdin";
-
-#if 0
- for (x=0;x<argc;x++) {
- fprintf(stderr, "Arg %d: %s\n", x, argv[x]);
- }
-#endif
/* Finally launch PPP */
execv(PPP_EXEC, argv);
Modified: team/crichter/0.4.0/asterisk.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/asterisk.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/asterisk.c (original)
+++ team/crichter/0.4.0/asterisk.c Mon Aug 7 03:15:38 2006
@@ -734,15 +734,9 @@
Called by soft_hangup to interrupt the poll, read, or other
system call. We don't actually need to do anything though.
Remember: Cannot EVER ast_log from within a signal handler
- SLD: seems to be some pthread activity relating to the printf anyway:
- which is leading to a deadlock?
*/
static void urg_handler(int num)
{
-#if 0
- if (option_debug > 2)
- printf("-- Asterisk Urgent handler\n");
-#endif
signal(num, urg_handler);
return;
}
@@ -1000,46 +994,40 @@
{
printf(term_end());
fflush(stdout);
+
/* Called when readline data is available */
- if (s && !ast_all_zeros(s))
+ if (!ast_all_zeros(s))
ast_el_add_history(s);
- /* Give the console access to the shell */
- if (s) {
- /* The real handler for bang */
- if (s[0] == '!') {
- if (s[1])
- ast_safe_system(s+1);
- else
- ast_safe_system(getenv("SHELL") ? getenv("SHELL") : "/bin/sh");
- } else
+ /* The real handler for bang */
+ if (s[0] == '!') {
+ if (s[1])
+ ast_safe_system(s+1);
+ else
+ ast_safe_system(getenv("SHELL") ? getenv("SHELL") : "/bin/sh");
+ } else
ast_cli_command(STDOUT_FILENO, s);
- } else
- fprintf(stdout, "\nUse \"quit\" to exit\n");
}
static int remoteconsolehandler(char *s)
{
int ret = 0;
+
/* Called when readline data is available */
- if (s && !ast_all_zeros(s))
+ if (!ast_all_zeros(s))
ast_el_add_history(s);
- /* Give the console access to the shell */
- if (s) {
- /* The real handler for bang */
- if (s[0] == '!') {
- if (s[1])
- ast_safe_system(s+1);
- else
- ast_safe_system(getenv("SHELL") ? getenv("SHELL") : "/bin/sh");
- ret = 1;
- }
- if ((strncasecmp(s, "quit", 4) == 0 || strncasecmp(s, "exit", 4) == 0) &&
- (s[4] == '\0' || isspace(s[4]))) {
- quit_handler(0, 0, 0, 0);
- ret = 1;
- }
- } else
- fprintf(stdout, "\nUse \"quit\" to exit\n");
+ /* The real handler for bang */
+ if (s[0] == '!') {
+ if (s[1])
+ ast_safe_system(s+1);
+ else
+ ast_safe_system(getenv("SHELL") ? getenv("SHELL") : "/bin/sh");
+ ret = 1;
+ }
+ if ((strncasecmp(s, "quit", 4) == 0 || strncasecmp(s, "exit", 4) == 0) &&
+ (s[4] == '\0' || isspace(s[4]))) {
+ quit_handler(0, 0, 0, 0);
+ ret = 1;
+ }
return ret;
}
@@ -2431,7 +2419,7 @@
consolehandler((char *)buf);
} else {
if (write(STDOUT_FILENO, "\nUse EXIT or QUIT to exit the asterisk console\n",
- strlen("\nUse EXIT or QUIT to exit the asterisk console\n")) < 0) {
+ strlen("\nUse EXIT or QUIT to exit the asterisk console\n")) < 0) {
/* Whoa, stdout disappeared from under us... Make /dev/null's */
int fd;
fd = open("/dev/null", O_RDWR);
Modified: team/crichter/0.4.0/channel.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/channel.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/channel.c (original)
+++ team/crichter/0.4.0/channel.c Mon Aug 7 03:15:38 2006
@@ -2345,6 +2345,13 @@
/* Now we have a good choice for both. */
ast_mutex_lock(&chan->lock);
+
+ if ((*rawformat == native) && (*format == fmt)) {
+ /* the channel is already in these formats, so nothing to do */
+ ast_mutex_unlock(&chan->lock);
+ return 0;
+ }
+
*rawformat = native;
/* User perspective is fmt */
*format = fmt;
@@ -2748,25 +2755,43 @@
{
struct ast_frame null = { AST_FRAME_NULL, };
int res = -1;
-
- /* each of these channels may be sitting behind a channel proxy (i.e. chan_agent)
- and if so, we don't really want to masquerade it, but its proxy */
- if (original->_bridge && (original->_bridge != ast_bridged_channel(original)))
- original = original->_bridge;
-
- if (clone->_bridge && (clone->_bridge != ast_bridged_channel(clone)))
- clone = clone->_bridge;
-
- if (original == clone) {
- ast_log(LOG_WARNING, "Can't masquerade channel '%s' into itself!\n", original->name);
- return -1;
- }
+ struct ast_channel *final_orig = original, *final_clone = clone;
+
ast_mutex_lock(&original->lock);
while(ast_mutex_trylock(&clone->lock)) {
ast_mutex_unlock(&original->lock);
usleep(1);
ast_mutex_lock(&original->lock);
}
+
+ /* each of these channels may be sitting behind a channel proxy (i.e. chan_agent)
+ and if so, we don't really want to masquerade it, but its proxy */
+ if (original->_bridge && (original->_bridge != ast_bridged_channel(original)))
+ final_orig = original->_bridge;
+
+ if (clone->_bridge && (clone->_bridge != ast_bridged_channel(clone)))
+ final_clone = clone->_bridge;
+
+ if ((final_orig != original) || (final_clone != clone)) {
+ ast_mutex_lock(&final_orig->lock);
+ while(ast_mutex_trylock(&final_clone->lock)) {
+ ast_mutex_unlock(&final_orig->lock);
+ usleep(1);
+ ast_mutex_lock(&final_orig->lock);
+ }
+ ast_mutex_unlock(&clone->lock);
+ ast_mutex_unlock(&original->lock);
+ original = final_orig;
+ clone = final_clone;
+ }
+
+ if (original == clone) {
+ ast_log(LOG_WARNING, "Can't masquerade channel '%s' into itself!\n", original->name);
+ ast_mutex_unlock(&clone->lock);
+ ast_mutex_unlock(&original->lock);
+ return -1;
+ }
+
ast_log(LOG_DEBUG, "Planning to masquerade channel %s into the structure of %s\n",
clone->name, original->name);
if (original->masq) {
@@ -2783,8 +2808,10 @@
ast_log(LOG_DEBUG, "Done planning to masquerade channel %s into the structure of %s\n", clone->name, original->name);
res = 0;
}
+
ast_mutex_unlock(&clone->lock);
ast_mutex_unlock(&original->lock);
+
return res;
}
@@ -3353,7 +3380,6 @@
struct timeval nexteventts = { 0, };
char caller_warning = 0;
char callee_warning = 0;
- int to;
if (c0->_bridge) {
ast_log(LOG_WARNING, "%s is already in a bridge with %s\n",
@@ -3405,20 +3431,28 @@
o0nativeformats = c0->nativeformats;
o1nativeformats = c1->nativeformats;
- if (config->timelimit) {
+ if (config->feature_timer) {
+ nexteventts = ast_tvadd(config->start_time, ast_samp2tv(config->feature_timer, 1000));
+ } else if (config->timelimit) {
nexteventts = ast_tvadd(config->start_time, ast_samp2tv(config->timelimit, 1000));
if (caller_warning || callee_warning)
nexteventts = ast_tvsub(nexteventts, ast_samp2tv(config->play_warning, 1000));
}
for (/* ever */;;) {
+ struct timeval now;
+ int to;
+
to = -1;
- if (config->timelimit) {
- struct timeval now;
+
+ if (!ast_tvzero(nexteventts)) {
now = ast_tvnow();
to = ast_tvdiff_ms(nexteventts, now);
if (to < 0)
to = 0;
+ }
+
+ if (config->timelimit) {
time_left_ms = config->timelimit - ast_tvdiff_ms(now, config->start_time);
if (time_left_ms < to)
to = time_left_ms;
@@ -3483,7 +3517,8 @@
(config->timelimit == 0) &&
(c0->tech->bridge == c1->tech->bridge) &&
!nativefailed && !c0->monitor && !c1->monitor &&
- !c0->spies && !c1->spies) {
+ !c0->spies && !c1->spies && !ast_test_flag(&(config->features_callee),AST_FEATURE_REDIRECT) &&
+ !ast_test_flag(&(config->features_caller),AST_FEATURE_REDIRECT) ) {
/* Looks like they share a bridge method and nothing else is in the way */
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Attempting native bridge of %s and %s\n", c0->name, c1->name);
Modified: team/crichter/0.4.0/channels/Makefile
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/channels/Makefile?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/channels/Makefile (original)
+++ team/crichter/0.4.0/channels/Makefile Mon Aug 7 03:15:38 2006
@@ -83,7 +83,12 @@
ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/mISDNuser/mISDNlib.h),)
CHANNEL_LIBS+=chan_misdn.so
- CFLAGS+=-Imisdn
+ CFLAGS+=-Imisdn
+endif
+
+ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/lib/libbnec.so),)
+ MISDNECLIB=-lbnec
+ CFLAGS+=-DWITH_BEROEC
endif
CFLAGS+=-Wno-missing-prototypes -Wno-missing-declarations
@@ -237,8 +242,8 @@
misdn/chan_misdn_lib.a:
make -C misdn
-chan_misdn.so: chan_misdn.o misdn_config.o misdn/chan_misdn_lib.a
- $(CC) -shared -Xlinker -x -L/usr/lib -o $@ $^ -lisdnnet -lmISDN
+chan_misdn.so: chan_misdn.o misdn_config.o misdn/chan_misdn_lib.a
+ $(CC) -shared -Xlinker -x -L/usr/lib -o $@ $^ -lisdnnet -lmISDN $(MISDNECLIB)
chan_misdn.o: chan_misdn.c
$(CC) $(CFLAGS) -DCHAN_MISDN_VERSION=\"0.4.0\" -c $< -o $@
Modified: team/crichter/0.4.0/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/channels/chan_agent.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/channels/chan_agent.c (original)
+++ team/crichter/0.4.0/channels/chan_agent.c Mon Aug 7 03:15:38 2006
@@ -795,14 +795,16 @@
ast_mutex_lock(&p->chan->lock);
ast_softhangup(p->chan, AST_SOFTHANGUP_EXPLICIT);
ast_mutex_unlock(&p->chan->lock);
- } else {
+ } else if (p->loginstart) {
ast_mutex_lock(&p->chan->lock);
ast_moh_start(p->chan, p->moh);
ast_mutex_unlock(&p->chan->lock);
}
}
ast_mutex_unlock(&p->lock);
- ast_device_state_changed("Agent/%s", p->agent);
+ /* Only register a device state change if the agent is still logged in */
+ if (p->loginstart)
+ ast_device_state_changed("Agent/%s", p->agent);
if (p->pending) {
ast_mutex_lock(&agentlock);
Modified: team/crichter/0.4.0/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/channels/chan_iax2.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/channels/chan_iax2.c (original)
+++ team/crichter/0.4.0/channels/chan_iax2.c Mon Aug 7 03:15:38 2006
@@ -147,6 +147,7 @@
static char language[MAX_LANGUAGE] = "";
static char regcontext[AST_MAX_CONTEXT] = "";
+static int maxauthreq = 0;
static int max_retries = 4;
static int ping_time = 20;
static int lagrq_time = 10;
@@ -264,7 +265,8 @@
IAX_RTAUTOCLEAR = (1 << 19), /*!< erase me on expire */
IAX_FORCEJITTERBUF = (1 << 20), /*!< Force jitterbuffer, even when bridged to a channel that can take jitter */
IAX_RTIGNOREREGEXPIRE = (1 << 21), /*!< When using realtime, ignore registration expiration */
- IAX_TRUNKTIMESTAMPS = (1 << 22) /*!< Send trunk timestamps */
+ IAX_TRUNKTIMESTAMPS = (1 << 22), /*!< Send trunk timestamps */
+ IAX_MAXAUTHREQ = (1 << 23) /*!< Maximum outstanding AUTHREQ restriction is in place */
} iax2_flags;
static int global_rtautoclear = 120;
@@ -285,6 +287,8 @@
int amaflags;
unsigned int flags;
int capability;
+ int maxauthreq; /*!< Maximum allowed outstanding AUTHREQs */
+ int curauthreq; /*!< Current number of outstanding AUTHREQs */
char cid_num[AST_MAX_EXTENSION];
char cid_name[AST_MAX_EXTENSION];
struct ast_codec_pref prefs;
@@ -659,6 +663,15 @@
static void destroy_peer(struct iax2_peer *peer);
static int ast_cli_netstats(int fd, int limit_fmt);
+#ifdef __AST_DEBUG_MALLOC
+static void FREE(void *ptr)
+{
+ free(ptr);
+}
+#else
+#define FREE free
+#endif
+
static void iax_debug_output(const char *data)
{
if (iaxdebug)
@@ -1525,6 +1538,7 @@
{
struct ast_channel *c;
struct chan_iax2_pvt *pvt;
+ struct iax2_user *user;
ast_mutex_lock(&iaxsl[callno]);
pvt = iaxs[callno];
if (!pvt) {
@@ -1532,6 +1546,18 @@
return -1;
}
if (!ast_test_flag(pvt, IAX_ALREADYGONE)) {
+ if (ast_test_flag(pvt, IAX_MAXAUTHREQ)) {
+ ast_mutex_lock(&userl.lock);
+ user = userl.users;
+ while (user) {
+ if (!strcmp(user->name, pvt->username)) {
+ user->curauthreq--;
+ break;
+ }
+ user = user->next;
+ }
+ ast_mutex_unlock(&userl.lock);
+ }
/* No more pings or lagrq's */
if (pvt->pingid > -1)
ast_sched_del(sched, pvt->pingid);
@@ -1586,6 +1612,7 @@
struct chan_iax2_pvt *pvt;
struct iax_frame *cur;
struct ast_channel *owner;
+ struct iax2_user *user;
retry:
ast_mutex_lock(&iaxsl[callno]);
@@ -1609,6 +1636,18 @@
if (pvt) {
if (!owner)
pvt->owner = NULL;
+ if (ast_test_flag(pvt, IAX_MAXAUTHREQ)) {
+ ast_mutex_lock(&userl.lock);
+ user = userl.users;
+ while (user) {
+ if (!strcmp(user->name, pvt->username)) {
+ user->curauthreq--;
+ break;
+ }
+ user = user->next;
+ }
+ ast_mutex_unlock(&userl.lock);
+ }
/* No more pings or lagrq's */
if (pvt->pingid > -1)
ast_sched_del(sched, pvt->pingid);
@@ -2153,10 +2192,7 @@
when = ast_tvdiff_ms(ast_tvnow(), pvt->rxcore);
- /* fprintf(stderr, "now = %d, next=%d\n", when, jb_next(pvt->jb)); */
-
when = jb_next(pvt->jb) - when;
- /* fprintf(stderr, "when = %d\n", when); */
if(pvt->jbid > -1) ast_sched_del(sched, pvt->jbid);
@@ -2180,7 +2216,6 @@
struct timeval tv;
ast_mutex_lock(&iaxsl[pvt->callno]);
- /* fprintf(stderr, "get_from_jb called\n"); */
pvt->jbid = -1;
gettimeofday(&tv,NULL);
@@ -2195,7 +2230,6 @@
ret = jb_get(pvt->jb,&frame,now,ast_codec_interp_len(pvt->voiceformat));
switch(ret) {
case JB_OK:
- /*if(frame.type == JB_TYPE_VOICE && next + 20 != jb_next(pvt->jb)) fprintf(stderr, "NEXT %ld is not %ld+20!\n", jb_next(pvt->jb), next); */
fr = frame.data;
__do_deliver(fr);
break;
@@ -2203,10 +2237,7 @@
{
struct ast_frame af;
- /*if(next + 20 != jb_next(pvt->jb)) fprintf(stderr, "NEXT %ld is not %ld+20!\n", jb_next(pvt->jb), next); */
-
/* create an interpolation frame */
- /*fprintf(stderr, "Making Interpolation frame\n"); */
af.frametype = AST_FRAME_VOICE;
af.subclass = pvt->voiceformat;
af.datalen = 0;
@@ -2224,7 +2255,6 @@
}
break;
case JB_DROP:
- /*if(next != jb_next(pvt->jb)) fprintf(stderr, "NEXT %ld is not next %ld!\n", jb_next(pvt->jb), next); */
iax2_frame_free(frame.data);
break;
case JB_NOFRAME:
@@ -3608,9 +3638,6 @@
p->lastsent = ms;
if (voice)
p->nextpred = p->nextpred + f->samples / 8;
-#if 0
- printf("TS: %s - %dms\n", voice ? "Audio" : "Control", ms);
-#endif
return ms;
}
@@ -4713,7 +4740,7 @@
int version = 2;
struct iax2_user *user, *best = NULL;
int bestscore = 0;
- int gotcapability=0;
+ int gotcapability = 0;
char iabuf[INET_ADDRSTRLEN];
struct ast_variable *v = NULL, *tmpvar = NULL;
@@ -4832,6 +4859,9 @@
iaxs[callno]->vars = tmpvar;
}
}
+ /* If a max AUTHREQ restriction is in place, activate it */
+ if (user->maxauthreq > 0)
+ ast_set_flag(iaxs[callno], IAX_MAXAUTHREQ);
iaxs[callno]->prefs = user->prefs;
ast_copy_flags(iaxs[callno], user, IAX_CODEC_USER_FIRST);
ast_copy_flags(iaxs[callno], user, IAX_CODEC_NOPREFS);
@@ -4936,9 +4966,37 @@
static int authenticate_request(struct chan_iax2_pvt *p)
{
+ struct iax2_user *user = NULL;
struct iax_ie_data ied;
- int res;
+ int res = -1, authreq_restrict = 0;
+
memset(&ied, 0, sizeof(ied));
+
+ /* If an AUTHREQ restriction is in place, make sure we can send an AUTHREQ back */
+ if (ast_test_flag(p, IAX_MAXAUTHREQ)) {
+ ast_mutex_lock(&userl.lock);
+ user = userl.users;
+ while (user) {
+ if (!strcmp(user->name, p->username)) {
+ if (user->curauthreq == user->maxauthreq)
+ authreq_restrict = 1;
+ else
+ user->curauthreq++;
+ break;
+ }
+ user = user->next;
+ }
+ ast_mutex_unlock(&userl.lock);
+ }
+
+ /* If the AUTHREQ limit test failed, send back an error */
+ if (authreq_restrict) {
+ iax_ie_append_str(&ied, IAX_IE_CAUSE, "Unauthenticated call limit reached");
+ iax_ie_append_byte(&ied, IAX_IE_CAUSECODE, AST_CAUSE_CALL_REJECTED);
+ send_command_final(p, AST_FRAME_IAX, IAX_COMMAND_REJECT, 0, ied.buf, ied.pos, -1);
+ return 0;
+ }
+
iax_ie_append_short(&ied, IAX_IE_AUTHMETHODS, p->authmethods);
if (p->authmethods & (IAX_AUTH_MD5 | IAX_AUTH_RSA)) {
snprintf(p->challenge, sizeof(p->challenge), "%d", rand());
@@ -4946,10 +5004,14 @@
}
if (p->encmethods)
iax_ie_append_short(&ied, IAX_IE_ENCRYPTION, p->encmethods);
+
iax_ie_append_str(&ied,IAX_IE_USERNAME, p->username);
+
res = send_command(p, AST_FRAME_IAX, IAX_COMMAND_AUTHREQ, 0, ied.buf, ied.pos, -1);
+
if (p->encmethods)
ast_set_flag(p, IAX_ENCRYPTED);
+
return res;
}
@@ -4961,7 +5023,22 @@
char rsasecret[256] = "";
int res = -1;
int x;
-
+ struct iax2_user *user = NULL;
+
+ if (ast_test_flag(p, IAX_MAXAUTHREQ)) {
+ ast_mutex_lock(&userl.lock);
+ user = userl.users;
+ while (user) {
+ if (!strcmp(user->name, p->username)) {
+ user->curauthreq--;
+ break;
+ }
+ user = user->next;
+ }
+ ast_mutex_unlock(&userl.lock);
+ ast_clear_flag(p, IAX_MAXAUTHREQ);
+ }
+
if (!ast_test_flag(&p->state, IAX_STATE_AUTHENTICATED))
return res;
if (ies->password)
@@ -5559,7 +5636,7 @@
while((ext = strsep(&stringp, "&"))) {
if (onoff) {
if (!ast_exists_extension(NULL, regcontext, ext, 1, NULL))
- ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, channeltype);
+ ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), FREE, channeltype);
} else
ast_context_remove_extension(regcontext, ext, 1, NULL);
}
@@ -6960,8 +7037,8 @@
merge_encryption(iaxs[fr->callno],ies.encmethods);
else
iaxs[fr->callno]->encmethods = 0;
- authenticate_request(iaxs[fr->callno]);
- ast_set_flag(&iaxs[fr->callno]->state, IAX_STATE_AUTHENTICATED);
+ if (!authenticate_request(iaxs[fr->callno]))
+ ast_set_flag(&iaxs[fr->callno]->state, IAX_STATE_AUTHENTICATED);
break;
case IAX_COMMAND_DPREQ:
/* Request status in the dialplan */
@@ -8325,6 +8402,7 @@
struct ast_ha *oldha = NULL;
struct iax2_context *oldcon = NULL;
int format;
+ int oldcurauthreq = 0;
char *varname = NULL, *varval = NULL;
struct ast_variable *tmpvar = NULL;
@@ -8343,6 +8421,7 @@
user = NULL;
if (user) {
+ oldcurauthreq = user->curauthreq;
oldha = user->ha;
oldcon = user->contexts;
user->ha = NULL;
@@ -8363,6 +8442,8 @@
if (user) {
memset(user, 0, sizeof(struct iax2_user));
+ user->maxauthreq = maxauthreq;
+ user->curauthreq = oldcurauthreq;
user->prefs = prefs;
user->capability = iax2_capability;
user->encmethods = iax2_encryption;
@@ -8445,6 +8526,10 @@
}
} else if (!strcasecmp(v->name, "inkeys")) {
ast_copy_string(user->inkeys, v->value, sizeof(user->inkeys));
+ } else if (!strcasecmp(v->name, "maxauthreq")) {
+ user->maxauthreq = atoi(v->value);
+ if (user->maxauthreq < 0)
+ user->maxauthreq = 0;
}/* else if (strcasecmp(v->name,"type")) */
/* ast_log(LOG_WARNING, "Ignoring %s\n", v->name); */
v = v->next;
@@ -8637,6 +8722,8 @@
min_reg_expire = IAX_DEFAULT_REG_EXPIRE;
max_reg_expire = IAX_DEFAULT_REG_EXPIRE;
+
+ maxauthreq = 0;
v = ast_variable_browse(cfg, "general");
@@ -8794,6 +8881,10 @@
}
} else if (!strcasecmp(v->name, "language")) {
ast_copy_string(language, v->value, sizeof(language));
+ } else if (!strcasecmp(v->name, "maxauthreq")) {
+ maxauthreq = atoi(v->value);
+ if (maxauthreq < 0)
+ maxauthreq = 0;
} /*else if (strcasecmp(v->name,"type")) */
/* ast_log(LOG_WARNING, "Ignoring %s\n", v->name); */
v = v->next;
Modified: team/crichter/0.4.0/channels/chan_misdn.c
URL: http://svn.digium.com/view/asterisk/team/crichter/0.4.0/channels/chan_misdn.c?rev=39129&r1=39128&r2=39129&view=diff
==============================================================================
--- team/crichter/0.4.0/channels/chan_misdn.c (original)
+++ team/crichter/0.4.0/channels/chan_misdn.c Mon Aug 7 03:15:38 2006
@@ -65,12 +65,6 @@
#include <chan_misdn_config.h>
#include <isdn_lib.h>
-
-ast_mutex_t release_lock_mutex;
-
-#define release_lock ast_mutex_lock(&release_lock_mutex)
-#define release_unlock ast_mutex_unlock(&release_lock_mutex)
-
char global_tracefile[BUFFERSIZE+1];
@@ -138,6 +132,10 @@
char allowed_bearers[BUFFERSIZE+1];
enum misdn_chan_state state;
+ int need_queue_hangup;
+ int need_hangup;
+ int need_busy;
+
int holded;
int orginator;
@@ -314,8 +312,9 @@
-
-static int tone_indicate( struct chan_list *cl, enum tone_e tone);
+static int dialtone_indicate(struct chan_list *cl);
+static int hanguptone_indicate(struct chan_list *cl);
+static int stop_indicate(struct chan_list *cl);
static int start_bc_tones(struct chan_list *cl);
static int stop_bc_tones(struct chan_list *cl);
@@ -559,7 +558,7 @@
if (diff <= 100) {
/* if we are 100ms near the timeout, we are satisfied.. */
- tone_indicate(ch,TONE_NONE);
+ stop_indicate(ch);
if (ast_exists_extension(ch->ast, ch->context, ch->bc->dad, 1, ch->bc->oad)) {
ch->state=MISDN_DIALING;
if (ast_pbx_start(ch->ast) < 0) {
@@ -568,7 +567,7 @@
}
} else {
misdn_overlap_dial_task_disconnect:
- tone_indicate(ch,TONE_BUSY);
+ hanguptone_indicate(ch);
if (ch->bc->nt)
misdn_lib_send_event(ch->bc, EVENT_RELEASE_COMPLETE );
else
@@ -682,6 +681,35 @@
}
+static int misdn_port_block(int fd, int argc, char *argv[])
+{
+ int port;
+
+ if (argc != 4)
+ return RESULT_SHOWUSAGE;
+
+ port = atoi(argv[3]);
+
+ misdn_lib_port_block(port);
+
+ return 0;
+}
+
+static int misdn_port_unblock(int fd, int argc, char *argv[])
+{
+ int port;
+
+ if (argc != 4)
+ return RESULT_SHOWUSAGE;
+
+ port = atoi(argv[3]);
+
+ misdn_lib_port_unblock(port);
+
+ return 0;
+}
+
+
static int misdn_restart_port (int fd, int argc, char *argv[])
{
int port;
@@ -844,6 +872,7 @@
{MISDN_ALERTING,"ALERTING"}, /* when Alerting */
{MISDN_BUSY,"BUSY"}, /* when BUSY */
{MISDN_CONNECTED,"CONNECTED"}, /* when connected */
+ {MISDN_PRECONNECTED,"PRECONNECTED"}, /* when connected */
{MISDN_DISCONNECTED,"DISCONNECTED"}, /* when connected */
{MISDN_RELEASED,"RELEASED"}, /* when connected */
{MISDN_BRIDGED,"BRIDGED"}, /* when bridged */
@@ -876,7 +905,6 @@
void reload_config(void)
{
int i, cfg_debug;
- chan_misdn_log(-1, 0, "Dynamic Crypting Activation is not support during reload at the moment\n");
free_robin_list();
misdn_cfg_reload();
@@ -888,7 +916,6 @@
misdn_debug[i] = cfg_debug;
misdn_debug_only[i] = 0;
}
-
}
static int misdn_reload (int fd, int argc, char *argv[])
@@ -1349,6 +1376,19 @@
complete_ch
};
+static struct ast_cli_entry cli_port_block=
+{ {"misdn","port","block", NULL},
+ misdn_port_block,
+ "Blocks the given port",
+ "Usage: misdn port block\n"
+};
+
+static struct ast_cli_entry cli_port_unblock=
+{ {"misdn","port","unblock", NULL},
+ misdn_port_unblock,
+ "Unblocks the given port",
+ "Usage: misdn port unblock\n"
+};
static struct ast_cli_entry cli_restart_port =
@@ -1527,12 +1567,12 @@
} else {
if (len <=100 || len > 8000) {
- chan_misdn_log(-1,bc->port,"config_jb: Jitterbuffer out of Bounds, setting to 1000\n");
+ chan_misdn_log(0,bc->port,"config_jb: Jitterbuffer out of Bounds, setting to 1000\n");
len=1000;
}
if ( threshold > len ) {
- chan_misdn_log(-1,bc->port,"config_jb: Jitterbuffer Threshold > Jitterbuffer setting to Jitterbuffer -1\n");
+ chan_misdn_log(0,bc->port,"config_jb: Jitterbuffer Threshold > Jitterbuffer setting to Jitterbuffer -1\n");
}
if ( ch->jb) {
@@ -1644,21 +1684,38 @@
ast_copy_string (ast->context,ch->context,sizeof(ast->context));
{
- int ec, ectr;
+ int ec;
misdn_cfg_get( port, MISDN_CFG_ECHOCANCEL, &ec, sizeof(int));
- misdn_cfg_get( port, MISDN_CFG_ECHOTRAINING, &ectr, sizeof(int));
if (ec == 1 ) {
bc->ec_enable=1;
} else if ( ec > 1 ) {
bc->ec_enable=1;
bc->ec_deftaps=ec;
}
+#ifdef WITH_ECHOTRAINING
+ int ectr;
+ misdn_cfg_get( port, MISDN_CFG_ECHOTRAINING, &ectr, sizeof(int));
if ( ectr >= 0 ) {
bc->ec_training=ectr;
}
+#endif
+
+#ifdef WITH_BEROEC
+ misdn_cfg_get(port, MISDN_CFG_BNECHOCANCEL,&bc->bnec_tail, sizeof(int));
+ misdn_cfg_get(port, MISDN_CFG_BNEC_ANTIHOWL, &bc->bnec_ah, sizeof(int));
+ misdn_cfg_get(port, MISDN_CFG_BNEC_NLP, &bc->bnec_nlp, sizeof(int));
+ misdn_cfg_get(port, MISDN_CFG_BNEC_TD, &bc->bnec_td, sizeof(int));
+ misdn_cfg_get(port, MISDN_CFG_BNEC_ADAPT, &bc->bnec_adapt, sizeof(int));
+ misdn_cfg_get(port, MISDN_CFG_BNEC_ZEROCOEFF, &bc->bnec_zero, sizeof(int));
+
+ if (bc->bnec_tail && bc->ec_enable) {
[... 3759 lines stripped ...]
More information about the asterisk-commits
mailing list