From 06fde4bfafaff33006359fb9e0ea965b0236e7af Mon Sep 17 00:00:00 2001 From: Matteo Brancaleoni <mbrancaleoni@espia.it> Date: Fri, 14 Feb 2003 06:00:11 +0000 Subject: [PATCH] Fri Feb 14 07:00:01 CET 2003 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@614 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- agi/DialAnMp3.agi | 82 ++++++++++++++++++++++++++++++++++ agi/numeralize | 44 ++++++++++++++++++ apps/app_agi.c | 4 +- channel.c | 3 +- channels/chan_iax.c | 10 ++++- channels/chan_sip.c | 12 +++-- channels/chan_zap.c | 2 +- configs/parking.conf.sample | 2 +- pbx.c | 2 +- sounds/demo-enterkeywords.gsm | Bin 0 -> 9603 bytes sounds/demo-nomatch.gsm | Bin 0 -> 6336 bytes 11 files changed, 151 insertions(+), 10 deletions(-) create mode 100755 agi/DialAnMp3.agi create mode 100755 agi/numeralize create mode 100755 sounds/demo-enterkeywords.gsm create mode 100755 sounds/demo-nomatch.gsm diff --git a/agi/DialAnMp3.agi b/agi/DialAnMp3.agi new file mode 100755 index 0000000000..59a54265e6 --- /dev/null +++ b/agi/DialAnMp3.agi @@ -0,0 +1,82 @@ +#!/usr/bin/perl +# +# Simple AGI application to play mp3's selected by a user both using +# xmms and over the phone itself. +# +$|=1; +while(<STDIN>) { + chomp; + last unless length($_); + if (/^agi_(\w+)\:\s+(.*)$/) { + $AGI{$1} = $2; + } +} + +print STDERR "AGI Environment Dump:\n"; +foreach $i (sort keys %AGI) { + print STDERR " -- $i = $AGI{$i}\n"; +} + +dbmopen(%DIGITS, "/var/lib/asterisk/mp3list", 0644) || die("Unable to open mp3list");; + +sub checkresult { + my ($res) = @_; + my $retval; + $tests++; + chomp $res; + if ($res =~ /^200/) { + $res =~ /result=(-?[\w\*\#]+)/; + return $1; + } else { + return -1; + } +} + +#print STDERR "1. Playing beep...\n"; +#print "STREAM FILE beep \"\"\n"; +#$result = <STDIN>; +#checkresult($result); + +print STDERR "2. Getting song name...\n"; +print "GET DATA demo-enterkeywords\n"; +$result = <STDIN>; +$digitstr = checkresult($result); +if ($digitstr < 0) { + exit(1); +} +$digitstr =~ s/\*/ /g; + +print STDERR "Resulting songname is $digitstr\n"; +@searchwords = split (/\s+/, $digitstr); +print STDERR "Searchwords: " . join(':', @searchwords) . "\n"; + +foreach $key (sort keys %DIGITS) { + @words = split(/\s+/, $DIGITS{$key}); + $match = 1; + foreach $search (@searchwords) { + $match = 0 unless grep(/$search/, @words); + } + if ($match > 0) { + print STDERR "File $key matches\n"; + # Play a beep + print "STREAM FILE beep \"\"\n"; + system("xmms", $key); + $result = <STDIN>; + if (&checkresult($result) < 0) { + exit 0; + } + print "EXEC MP3Player \"$key\"\n"; +# print "WAIT FOR DIGIT 60000\n"; + $result = <STDIN>; + if (&checkresult($result) < 0) { + exit 0; + } + print STDERR "Got here...\n"; + } +} + +print STDERR "4. Testing 'saynumber' of $digitstr...\n"; +print "STREAM FILE demo-nomatch\"\"\n"; +$result = <STDIN>; +checkresult($result); + diff --git a/agi/numeralize b/agi/numeralize new file mode 100755 index 0000000000..5ca51913da --- /dev/null +++ b/agi/numeralize @@ -0,0 +1,44 @@ +#!/usr/bin/perl +# +# Build a database linking filenames to their numerical representations +# using a keypad for the DialAnMp3 application +# + +$mp3dir="/usr/media/mpeg3"; + +dbmopen(%DIGITS, "/var/lib/asterisk/mp3list", 0644) || die("Unable to open mp3list");; +sub process_dir { + my ($dir) = @_; + my $file; + my $digits; + my @entries; + opendir(DIR, $dir); + @entries = readdir(DIR); + closedir(DIR); + foreach $_ (@entries) { + if (!/^\./) { + $file = "$dir/$_"; + if (-d "$file") { + process_dir("$file"); + } else { + $digits = $_; + $digits =~ s/[^ \w]+//g; + $digits =~ s/\_/ /g; + $digits =~ tr/[a-z]/[A-Z]/; + $digits =~ tr/[A-C]/2/; + $digits =~ tr/[D-F]/3/; + $digits =~ tr/[G-I]/4/; + $digits =~ tr/[J-L]/5/; + $digits =~ tr/[M-O]/6/; + $digits =~ tr/[P-S]/7/; + $digits =~ tr/[T-V]/8/; + $digits =~ tr/[W-Z]/9/; + $digits =~ s/\s+/ /; + print "File: $file, digits: $digits\n"; + $DIGITS{$file} = $digits; + } + } + } +} + +process_dir($mp3dir); diff --git a/apps/app_agi.c b/apps/app_agi.c index 91ca9749f8..e7bccedf62 100755 --- a/apps/app_agi.c +++ b/apps/app_agi.c @@ -352,14 +352,14 @@ int ast_app_getdata(struct ast_channel *c, char *prompt, char *s, int maxlen, in static int handle_getdata(struct ast_channel *chan, int fd, int argc, char *argv[]) { int res; - char data[50]; + char data[1024]; int max; int timeout; if (argc < 3) return RESULT_SHOWUSAGE; if (argc >= 4) timeout = atoi(argv[3]); else timeout = 0; - if (argc >= 5) max = atoi(argv[4]); else max = 50; + if (argc >= 5) max = atoi(argv[4]); else max = 1024; res = ast_app_getdata(chan, argv[2], data, max, timeout); if (res == 1) fdprintf(fd, "200 result=%s (timeout)\n", data); diff --git a/channel.c b/channel.c index 83659c0734..e75f74723a 100755 --- a/channel.c +++ b/channel.c @@ -967,7 +967,8 @@ struct ast_frame *ast_read(struct ast_channel *chan) if (!(f->subclass & chan->nativeformats)) { /* This frame can't be from the current native formats -- drop it on the floor */ - ast_log(LOG_NOTICE, "Dropping incompatible voice frame on %s since our native format has changed\n", chan->name); + ast_log(LOG_NOTICE, "Dropping incompatible voice frame on %s of format %d since our native format has changed to %d\n", chan->name, f->subclass, chan->nativeformats); + ast_frfree(f); f = &null_frame; } else if (chan->pvt->readtrans) { f = ast_translate(chan->pvt->readtrans, f, 1); diff --git a/channels/chan_iax.c b/channels/chan_iax.c index ce896c7385..d48b24f552 100755 --- a/channels/chan_iax.c +++ b/channels/chan_iax.c @@ -1758,6 +1758,10 @@ static int iax_bridge(struct ast_channel *c0, struct ast_channel *c1, int flags, ast_verbose(VERBOSE_PREFIX_3 "Can't masquerade, we're different...\n"); return -2; } + if (c0->nativeformats != c1->nativeformats) { + ast_verbose(VERBOSE_PREFIX_3 "Operating with different codecs, can't native bridge...\n"); + return -2; + } if (!transferstarted) { /* Try the transfer */ if (iax_start_transfer(c0, c1)) @@ -2240,12 +2244,13 @@ static int iax_show_channels(int fd, int argc, char *argv[]) #define FORMAT2 "%-15.15s %-10.10s %-11.11s %-11.11s %-7.7s %-6.6s %s\n" #define FORMAT "%-15.15s %-10.10s %5.5d/%5.5d %5.5d/%5.5d %-5.5dms %-4.4dms %d\n" int x; + int numchans = 0; if (argc != 3) return RESULT_SHOWUSAGE; ast_cli(fd, FORMAT2, "Peer", "Username", "ID (Lo/Rem)", "Seq (Tx/Rx)", "Lag", "Jitter", "Format"); for (x=0;x<AST_IAX_MAX_CALLS;x++) { ast_pthread_mutex_lock(&iaxsl[x]); - if (iaxs[x]) + if (iaxs[x]) { ast_cli(fd, FORMAT, inet_ntoa(iaxs[x]->addr.sin_addr), strlen(iaxs[x]->username) ? iaxs[x]->username : "(None)", iaxs[x]->callno, iaxs[x]->peercallno, @@ -2253,8 +2258,11 @@ static int iax_show_channels(int fd, int argc, char *argv[]) iaxs[x]->lag, iaxs[x]->jitter, iaxs[x]->voiceformat); + numchans++; + } ast_pthread_mutex_unlock(&iaxsl[x]); } + ast_cli(fd, "%d active IAX channel(s)\n", numchans); return RESULT_SUCCESS; #undef FORMAT #undef FORMAT2 diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 93d8777349..2d49f13655 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -2413,6 +2413,7 @@ static int sip_show_channels(int fd, int argc, char *argv[]) #define FORMAT2 "%-15.15s %-10.10s %-11.11s %-11.11s %-7.7s %-6.6s %s\n" #define FORMAT "%-15.15s %-10.10s %-11.11s %5.5d/%5.5d %-5.5dms %-4.4dms %d\n" struct sip_pvt *cur; + int numchans = 0; if (argc != 3) return RESULT_SHOWUSAGE; ast_pthread_mutex_lock(&iflock); @@ -2427,8 +2428,10 @@ static int sip_show_channels(int fd, int argc, char *argv[]) 0, cur->owner ? cur->owner->nativeformats : 0); cur = cur->next; + numchans++; } ast_pthread_mutex_unlock(&iflock); + ast_cli(fd, "%d active SIP channel(s)\n", numchans); return RESULT_SUCCESS; #undef FORMAT #undef FORMAT2 @@ -3048,9 +3051,12 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc else transmit_response(p, "202 Accepted", req); ast_log(LOG_DEBUG,"202 Accepted\n"); - transfer_to = c->bridge; - if (transfer_to) - ast_async_goto(transfer_to,"", p->refer_to,1, 1); + c = p->owner; + if (c) { + transfer_to = c->bridge; + if (transfer_to) + ast_async_goto(transfer_to,"", p->refer_to,1, 1); + } } else if (!strcasecmp(cmd, "CANCEL") || !strcasecmp(cmd, "BYE")) { copy_request(&p->initreq, req); diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 45f6aed813..9e8c9c0286 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -5361,11 +5361,11 @@ static void *pri_dchannel(void *vpri) ast_log(LOG_WARNING, "Ringing requested on channel %d not in use on span %d\n", e->ringing.channel, pri->span); chan = 0; } else if (!strlen(pri->pvt[chan]->dop.dialstr)) { + zt_enable_ec(pri->pvt[chan]); pri->pvt[chan]->subs[SUB_REAL].needringing =1; } else ast_log(LOG_DEBUG, "Deferring ringing notification because of extra digits to dial...\n"); } - zt_enable_ec(pri->pvt[chan]); break; case PRI_EVENT_FACNAME: chan = e->facname.channel; diff --git a/configs/parking.conf.sample b/configs/parking.conf.sample index 54658c9670..20eb427474 100755 --- a/configs/parking.conf.sample +++ b/configs/parking.conf.sample @@ -6,4 +6,4 @@ parkext => 700 ; What ext. to dial to park parkpos => 701-720 ; What extensions to park calls on context => parkedcalls ; Which context parked calls are in - +;parkingtime => 45 ; Number of seconds a call can be parked for (default is 45 seconds) diff --git a/pbx.c b/pbx.c index ba3d2bcb04..6e0f073b23 100755 --- a/pbx.c +++ b/pbx.c @@ -1139,7 +1139,7 @@ int ast_pbx_run(struct ast_channel *c) /* Something bad happened, or a hangup has been requested. */ if (((res >= '0') && (res <= '9')) || ((res >= 'A') && (res <= 'F'))) { ast_log(LOG_DEBUG, "Oooh, got something to jump out with ('%c')!\n", res); - exten[pos++] = res; + exten[pos++] = digit = res; break; } switch(res) { diff --git a/sounds/demo-enterkeywords.gsm b/sounds/demo-enterkeywords.gsm new file mode 100755 index 0000000000000000000000000000000000000000..dafd7a7d947c15a38d093c538b91c21e1b87aede GIT binary patch literal 9603 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 literal 0 HcmV?d00001 diff --git a/sounds/demo-nomatch.gsm b/sounds/demo-nomatch.gsm new file mode 100755 index 0000000000000000000000000000000000000000..a869457e58b2723603b9cd0a1638f389537541c6 GIT binary patch literal 6336 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 literal 0 HcmV?d00001 -- GitLab