Asterisk:
authorMark Spencer <markster@digium.com>
Fri, 15 Aug 2003 04:38:39 +0000 (04:38 +0000)
committerMark Spencer <markster@digium.com>
Fri, 15 Aug 2003 04:38:39 +0000 (04:38 +0000)
#72 - Should eliminate probs on VMWI
#41 - Dynamic add survives reload
#73 - Make festival honor its arguments
#93 - Make events on FXO interfaces more logical
#26 - Prefer "bindaddr" to logical address for registrations
??? - Record crashes AGI

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1338 65c4cc65-6c06-0410-ace0-fbb531ad65f3

30 files changed:
apps/app_agi.c
apps/app_enumlookup.c
apps/app_festival.c
apps/app_queue.c
apps/app_voicemail2.c
channels/chan_sip.c
channels/chan_zap.c
codecs/ilbc/FrameClassify.c
codecs/ilbc/LPCdecode.c
codecs/ilbc/LPCencode.c
codecs/ilbc/StateConstructW.c
codecs/ilbc/StateSearchW.c
codecs/ilbc/anaFilter.c
codecs/ilbc/createCB.c
codecs/ilbc/doCPLC.c
codecs/ilbc/enhancer.c
codecs/ilbc/filter.c
codecs/ilbc/gainquant.c
codecs/ilbc/getCBvec.c
codecs/ilbc/helpfun.c
codecs/ilbc/hpInput.c
codecs/ilbc/hpOutput.c
codecs/ilbc/iCBConstruct.c
codecs/ilbc/iCBSearch.c
codecs/ilbc/iLBC_decode.c
codecs/ilbc/iLBC_encode.c
codecs/ilbc/lsf.c
codecs/ilbc/packing.c
codecs/ilbc/syntFilter.c
pbx/pbx_gtkconsole.c

index 7c7b653..3e332af 100755 (executable)
@@ -452,13 +452,13 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, char
        int res = 0;
        int ms;
 
-        struct ast_dsp *sildet;         /* silence detector dsp */
+        struct ast_dsp *sildet=NULL;         /* silence detector dsp */
         int totalsilence = 0;
         int dspsilence = 0;
         int silence = 0;                /* amount of silence to allow */
         int gotsilence = 0;             /* did we timeout for silence? */
-        char *silencestr;
-        int rfmt;
+        char *silencestr=NULL;
+        int rfmt=0;
 
 
        /* XXX EAGI FIXME XXX */
index d547f8a..4f132a5 100755 (executable)
@@ -22,6 +22,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
+#include <ctype.h>
 
 #include <pthread.h>
 
index 23d7dc1..acc268e 100755 (executable)
@@ -48,7 +48,7 @@ static char *synopsis = "Say text to the user";
 static char *descrip = 
 "  Festival(text[|intkeys]):  Connect to Festival, send the argument, get back the waveform,"
 "play it to the user, allowing any given interrupt keys to immediately terminate and return\n"
-"the value.\n";
+"the value, or 'any' to allow any number back (useful in dialplan)\n";
 
 STANDARD_LOCAL_USER;
 
@@ -122,7 +122,7 @@ static int send_waveform_to_fd(char *waveform, int length, int fd) {
 }
 
 
-static int send_waveform_to_channel(struct ast_channel *chan, char *waveform, int length) {
+static int send_waveform_to_channel(struct ast_channel *chan, char *waveform, int length, char *intkeys) {
        int res=0;
        int fds[2];
        int ms = -1;
@@ -170,9 +170,11 @@ static int send_waveform_to_channel(struct ast_channel *chan, char *waveform, in
                        }
                        if (f->frametype == AST_FRAME_DTMF) {
                                ast_log(LOG_DEBUG, "User pressed a key\n");
-                               ast_frfree(f);
-                               res = 0;
-                               break;
+                               if (strchr(intkeys, f->subclass)) {
+                                       res = f->subclass;
+                                       ast_frfree(f);
+                                       break;
+                               }
                        }
                        if (f->frametype == AST_FRAME_VOICE) {
                                /* Treat as a generator */
@@ -224,7 +226,7 @@ static int send_waveform_to_channel(struct ast_channel *chan, char *waveform, in
 
 
 
-static int festival_exec(struct ast_channel *chan, void *data)
+static int festival_exec(struct ast_channel *chan, void *vdata)
 {
        int usecache;
        int res=0;
@@ -253,9 +255,11 @@ static int festival_exec(struct ast_channel *chan, void *data)
        int readcache=0;
        int writecache=0;
        int strln;
-       int fdesc;
+       int fdesc = -1;
        char buffer[16384];
-       int seekpos;    
+       int seekpos = 0;        
+       char data[256] = "";
+       char *intstr;
        
        struct ast_config *cfg;
        cfg = ast_load(FESTIVAL_CONFIG);
@@ -285,10 +289,17 @@ static int festival_exec(struct ast_channel *chan, void *data)
        
                
 
-       if (!data) {
+       if (!vdata || !strlen(vdata)) {
                ast_log(LOG_WARNING, "festival requires an argument (text)\n");
                return -1;
        }
+       strncpy(data, vdata, sizeof(data) - 1);
+       if ((intstr = strchr(data, '|'))) {
+               *intstr = '\0';
+               intstr++;
+               if (!strcasecmp(intstr, "any"))
+                       intstr = AST_DIGIT_ANY;
+       }
        LOCAL_USER_ADD(u);
        ast_log(LOG_WARNING, "Text passed to festival server : %s\n",(char *)data);
        /* Connect to local festival server */
@@ -398,7 +409,7 @@ static int festival_exec(struct ast_channel *chan, void *data)
                if (strcmp(ack,"WV\n") == 0) {         /* receive a waveform */
                        ast_log(LOG_WARNING,"Festival WV command");
                        waveform = socket_receive_file_to_buff(fd,&filesize);
-                       send_waveform_to_channel(chan,waveform,filesize);
+                       send_waveform_to_channel(chan,waveform,filesize, intstr);
                        free(waveform);
                        res=0;
                        break;
index e4dc2a4..1b5088c 100755 (executable)
@@ -140,6 +140,7 @@ struct member {
        char loc[256];                          /* Location */
        int penalty;                            /* Are we a last resort? */
        int calls;
+       int dynamic;                            /* Are we dynamically added? */
        time_t lastcall;        /* When last successful call was hungup */
        struct member *next;            /* Next member */
 };
@@ -245,14 +246,22 @@ ast_log(LOG_NOTICE, "Queue '%s' Join, Channel '%s', Position '%d'\n", q->name, q
 
 static void free_members(struct ast_call_queue *q)
 {
-       struct member *curm, *next;
+       /* Free non-dynamic members */
+       struct member *curm, *next, *prev;
        curm = q->members;
+       prev = NULL;
        while(curm) {
                next = curm->next;
-               free(curm);
+               if (!curm->dynamic) {
+                       if (prev)
+                               prev->next = next;
+                       else
+                               q->members = next;
+                       free(curm);
+               } else 
+                       prev = curm;
                curm = next;
        }
-       q->members = NULL;
 }
 
 static void destroy_queue(struct ast_call_queue *q)
@@ -1044,9 +1053,10 @@ static int aqm_exec(struct ast_channel *chan, void *data)
                                        save = q->members ;
                                        q->members = create_queue_node( interface ) ;
 
-                                       if( q->members != NULL )
+                                       if( q->members != NULL ) {
+                                               q->members->dynamic = 1;
                                                q->members->next = save ;
-                                       else
+                                       } else
                                                q->members = save ;
 
                                        ast_log(LOG_NOTICE, "Added interface '%s' to queue '%s'\n", interface, queuename);
@@ -1182,7 +1192,6 @@ static void reload_queues(void)
        /* Mark all queues as dead for the moment */
        q = queues;
        while(q) {
-               q->dead = 1;
                q = q->next;
        }
        /* Chug through config file */
@@ -1340,9 +1349,11 @@ static int queues_show(int fd, int argc, char **argv)
                        ast_cli(fd, "   Members: \n");
                        for (mem = q->members; mem; mem = mem->next) {
                                if (mem->penalty)
-                                       snprintf(max, sizeof(max), " with penalty %d", mem->penalty);
+                                       snprintf(max, sizeof(max) - 20, " with penalty %d", mem->penalty);
                                else
                                        strcpy(max, "");
+                               if (mem->dynamic)
+                                       strcat(max, " (dynamic)");
                                if (mem->calls) {
                                        snprintf(calls, sizeof(calls), " has taken %d calls (last was %ld secs ago)",
                                                        mem->calls, time(NULL) - mem->lastcall);
index 2dd8d07..08fe3bc 100755 (executable)
@@ -1793,7 +1793,6 @@ forward_message(struct ast_channel *chan, char *context, char *dir, int curmsg,
                if ((res = ast_readstring(chan, username, sizeof(username) - 1, 2000, 10000, "#") < 0))
                        break;
                if ((receiver = find_user(&srec, context, username))) {
-                       printf("Got %d\n", atoi(username));
                        /* if (play_and_wait(chan, "vm-savedto"))
                                break;
                        */
index b460227..fd5971e 100755 (executable)
@@ -2833,6 +2833,9 @@ static int transmit_register(struct sip_registry *r, char *cmd, char *auth)
                        strncpy(p->peername, r->username, sizeof(p->peername)-1);
                strncpy(p->username, r->username, sizeof(p->username)-1);
                strncpy(p->exten, r->contact, sizeof(p->exten) - 1);
+               /* Always bind to our IP if specified */
+               if (bindaddr.sin_addr.s_addr)
+                       memcpy(&p->ourip, &bindaddr.sin_addr, sizeof(p->ourip));
                build_contact(p);
        }
 
index fe490c5..25b25f2 100755 (executable)
@@ -4348,7 +4348,7 @@ static int handle_init_event(struct zt_pvt *i, int event)
                                }
                        } else {
                                /* Check for callerid, digits, etc */
-                               chan = zt_new(i, AST_STATE_DOWN, 0, SUB_REAL, 0);
+                               chan = zt_new(i, AST_STATE_RESERVED, 0, SUB_REAL, 0);
                                if (chan) {
                                        if (has_voicemail(i))
 #ifdef ZT_TONE_STUTTER
@@ -4560,7 +4560,7 @@ static void *do_monitor(void *data)
                                                        if (last->msgstate != res) {
                                                                int x;
                                                                ast_log(LOG_DEBUG, "Message status for %s changed from %d to %d on %d\n", last->mailbox, last->msgstate, res, last->channel);
-                                                               x = ZT_FLUSH_WRITE;
+                                                               x = ZT_FLUSH_BOTH;
                                                                res2 = ioctl(last->subs[SUB_REAL].zfd, ZT_FLUSH, &x);
                                                                if (res2)
                                                                        ast_log(LOG_WARNING, "Unable to flush input on channel %d\n", last->channel);
index 61ede13..9e8299c 100755 (executable)
@@ -12,6 +12,7 @@
 ******************************************************************/ 
  
 #include "iLBC_define.h" 
+#include "FrameClassify.h"
  
 /*----------------------------------------------------------------* 
  *  Classification of subframes to localize start state                           
index 5ca53d0..b0d273b 100755 (executable)
@@ -18,6 +18,7 @@
 #include "lsf.h" 
 #include "iLBC_define.h" 
 #include "constants.h" 
+#include "LPCdecode.h"
  
 /*----------------------------------------------------------------* 
  *  interpolation of lsf coefficients for the decoder                            
index 251cd3f..eeac4bd 100755 (executable)
 #include "helpfun.h" 
 #include "lsf.h" 
 #include "constants.h" 
+#include "LPCencode.h"
  
 /*----------------------------------------------------------------* 
  *  lpc analysis (subrutine to LPCencode)                            
  *---------------------------------------------------------------*/ 
  
-void SimpleAnalysis( 
+static void SimpleAnalysis( 
     float *lsf,         /* (o) lsf coefficients */ 
     float *data,    /* (i) new data vector */ 
     float *lpc_buffer   /* (i) buffer containing old data */  
@@ -63,7 +64,7 @@ void SimpleAnalysis(
  *  (subrutine to SimpleInterpolateLSF)                            
  *---------------------------------------------------------------*/ 
  
-void LSFinterpolate2a_enc( 
+static void LSFinterpolate2a_enc( 
     float *a,       /* (o) lpc coefficients */  
     float *lsf1,/* (i) first set of lsf coefficients */ 
     float *lsf2,/* (i) second set of lsf coefficients */ 
@@ -81,7 +82,7 @@ void LSFinterpolate2a_enc(
  *  lsf interpolator (subrutine to LPCencode)                            
  *---------------------------------------------------------------*/ 
  
-void SimpleInterpolateLSF( 
+static void SimpleInterpolateLSF( 
     float *syntdenum,   /* (o) the synthesis filter denominator  
                                resulting from the quantized  
                                interpolated lsf */ 
@@ -138,7 +139,7 @@ void SimpleInterpolateLSF(
  *  lsf quantizer (subrutine to LPCencode)                            
  *---------------------------------------------------------------*/ 
  
-void SimplelsfQ( 
+static void SimplelsfQ( 
     float *lsfdeq,  /* (o) dequantized lsf coefficients  
                            (dimension FILTERORDER) */ 
     int *index,     /* (o) quantization index */ 
index c694106..2b2114f 100755 (executable)
@@ -17,6 +17,7 @@
 #include "iLBC_define.h" 
 #include "constants.h" 
 #include "filter.h" 
+#include "StateConstructW.h"
  
 /*----------------------------------------------------------------* 
  *  decoding of the start state 
index 3a761d5..e1134ae 100755 (executable)
@@ -18,6 +18,7 @@
 #include "constants.h" 
 #include "filter.h" 
 #include "helpfun.h" 
+#include "StateSearchW.h"
  
 /*----------------------------------------------------------------* 
  *  predictive noise shaping encoding of scaled start state  
index 19b502e..268c926 100755 (executable)
@@ -13,6 +13,7 @@
  
 #include <string.h> 
 #include "iLBC_define.h" 
+#include "anaFilter.h"
  
 /*----------------------------------------------------------------* 
  *  LP analysis filter. 
index b16ef46..4d95b75 100755 (executable)
@@ -13,6 +13,7 @@
  
 #include "iLBC_define.h" 
 #include "constants.h" 
+#include "createCB.h"
 #include <string.h> 
 #include <math.h> 
  
index 0b0083b..863d6e0 100755 (executable)
 #include <string.h> 
  
 #include "iLBC_define.h" 
+#include "doCPLC.h"
  
 /*----------------------------------------------------------------* 
  *  Compute cross correlation and pitch gain for pitch prediction 
  *  of last subframe at given lag. 
  *---------------------------------------------------------------*/ 
  
-void compCorr( 
+static void compCorr( 
     float *cc,      /* (o) cross correlation coefficient */ 
     float *gc,      /* (o) gain */ 
     float *buffer,  /* (i) signal buffer */ 
index a2878cc..86c4a85 100755 (executable)
@@ -16,6 +16,7 @@
 #include "iLBC_define.h" 
 #include "constants.h" 
 #include "filter.h" 
+#include "enhancer.h"
  
 /*----------------------------------------------------------------* 
  * Find index in array such that the array element with said 
@@ -23,7 +24,7 @@
  * according to the squared-error criterion 
  *---------------------------------------------------------------*/ 
  
-void NearestNeighbor( 
+static void NearestNeighbor( 
     int   *index,   /* (o) index of array element closest to value */ 
     float *array,   /* (i) data array */ 
     float value,/* (i) value */ 
@@ -50,7 +51,7 @@ void NearestNeighbor(
  * compute cross correlation between sequences 
  *---------------------------------------------------------------*/ 
  
-void mycorr1(  
+static void mycorr1(  
     float* corr,    /* (o) correlation of seq1 and seq2 */ 
     float* seq1,    /* (i) first sequence */ 
     int dim1,           /* (i) dimension first seq1 */ 
@@ -71,7 +72,7 @@ void mycorr1(
  * upsample finite array assuming zeros outside bounds 
  *---------------------------------------------------------------*/ 
  
-void enh_upsample(  
+static void enh_upsample(  
     float* useq1,   /* (o) upsampled output sequence */ 
     float* seq1,/* (i) unupsampled sequence */ 
     int dim1,       /* (i) dimension seq1 */ 
@@ -153,7 +154,7 @@ void enh_upsample(
  * sampling rate 
  *---------------------------------------------------------------*/ 
  
-void refiner( 
+static void refiner( 
     float *seg,         /* (o) segment array */ 
     float *updStartPos, /* (o) updated start point */ 
     float* idata,       /* (i) original data buffer */ 
@@ -240,7 +241,7 @@ void refiner(
  * find the smoothed output data 
  *---------------------------------------------------------------*/ 
  
-void smath( 
+static void smath( 
     float *odata,   /* (o) smoothed output */ 
     float *sseq,/* (i) said second sequence of waveforms */ 
     int hl,         /* (i) 2*hl+1 is sseq dimension */ 
@@ -335,7 +336,7 @@ void smath(
  * get the pitch-synchronous sample sequence 
  *---------------------------------------------------------------*/ 
  
-void getsseq( 
+static void getsseq( 
     float *sseq,    /* (o) the pitch-synchronous sequence */ 
     float *idata,       /* (i) original data */ 
     int idatal,         /* (i) dimension of data */ 
@@ -411,7 +412,7 @@ void getsseq(
  * idata+centerStartPos+ENH_BLOCKL-1 
  *---------------------------------------------------------------*/ 
  
-void enhancer( 
+static void enhancer( 
     float *odata,       /* (o) smoothed block, dimension blockl */ 
     float *idata,       /* (i) data buffer used for enhancing */ 
     int idatal,         /* (i) dimension idata */ 
index c74e9cf..2249555 100755 (executable)
@@ -12,7 +12,8 @@
 ******************************************************************/ 
  
 #include "iLBC_define.h" 
+#include "filter.h"
+
 /*----------------------------------------------------------------* 
  *  all-pole filter 
  *---------------------------------------------------------------*/ 
index be64f8a..e0085c6 100755 (executable)
@@ -15,6 +15,7 @@
 #include <math.h> 
 #include "constants.h" 
 #include "filter.h" 
+#include "gainquant.h"
  
 /*----------------------------------------------------------------* 
  *  quantizer for the gain in the gain-shape coding of residual 
index 07e9f2d..9c57f7b 100755 (executable)
@@ -13,6 +13,7 @@
  
 #include "iLBC_define.h" 
 #include "constants.h" 
+#include "getCBvec.h"
 #include <string.h> 
  
 /*----------------------------------------------------------------* 
index 936afd6..67d63c2 100755 (executable)
@@ -14,6 +14,7 @@
 #include <math.h> 
  
 #include "iLBC_define.h" 
+#include "helpfun.h"
 #include "constants.h" 
  
 /*----------------------------------------------------------------* 
index 1599c29..1947e75 100755 (executable)
@@ -12,6 +12,7 @@
 ******************************************************************/ 
  
 #include "constants.h" 
+#include "hpInput.h"
  
 /*----------------------------------------------------------------* 
  *  Input high-pass filter                           
index fa75f25..60a78d2 100755 (executable)
@@ -12,6 +12,7 @@
 ******************************************************************/ 
  
 #include "constants.h" 
+#include "hpOutput.h"
  
 /*----------------------------------------------------------------* 
  *  Output high-pass filter                           
index ccb3f66..acbf54e 100755 (executable)
@@ -16,6 +16,7 @@
 #include "iLBC_define.h" 
 #include "gainquant.h" 
 #include "getCBvec.h" 
+#include "iCBConstruct.h"
  
 /*----------------------------------------------------------------* 
  *  Convert the codebook indexes to make the search easier 
index a6f3030..2279deb 100755 (executable)
@@ -15,6 +15,7 @@
 #include <string.h> 
  
 #include "iLBC_define.h" 
+#include "iCBSearch.h"
 #include "gainquant.h" 
 #include "createCB.h" 
 #include "filter.h" 
index 2347ab8..06602ff 100755 (executable)
@@ -22,6 +22,7 @@
 #include "helpfun.h" 
 #include "constants.h" 
 #include "packing.h" 
+#include "iLBC_decode.h"
 #include "string.h" 
 #include "enhancer.h" 
 #include "hpOutput.h" 
@@ -78,7 +79,7 @@ short initDecode(                   /* (o) Number of decoded
  *  frame residual decoder function (subrutine to iLBC_decode)  
  *---------------------------------------------------------------*/ 
  
-void Decode( 
+static void Decode( 
     float *decresidual,     /* (o) decoded residual frame */ 
     int start,              /* (i) location of start state */ 
     int idxForMax,          /* (i) codebook index for the maximum  
index 6d8e043..5a921e7 100755 (executable)
@@ -22,6 +22,7 @@
 #include "helpfun.h" 
 #include "constants.h" 
 #include "packing.h" 
+#include "iLBC_encode.h"
 #include "iCBSearch.h" 
 #include "iCBConstruct.h" 
 #include "hpInput.h" 
index f768b77..b0429e0 100755 (executable)
@@ -15,6 +15,7 @@
 #include <math.h> 
  
 #include "iLBC_define.h" 
+#include "lsf.h"
  
 /*----------------------------------------------------------------* 
  *  conversion from lpc coefficients to lsf coefficients  
index 6449e55..3818840 100755 (executable)
@@ -18,6 +18,7 @@
 #include "constants.h" 
 #include "helpfun.h" 
 #include "string.h" 
+#include "packing.h"
  
 /*----------------------------------------------------------------* 
  *  splitting an integer into first most significant bits and  
index fe61eaa..121d1f5 100755 (executable)
@@ -12,6 +12,7 @@
 ******************************************************************/ 
  
 #include "iLBC_define.h" 
+#include "syntFilter.h"
  
 /*----------------------------------------------------------------* 
  *  LP synthesis filter. 
index 13e2909..e6388bb 100755 (executable)
@@ -93,7 +93,7 @@ static int cleanup(void *useless)
 }
 
 
-static void __verboser(char *stuff, int opos, int replacelast, int complete)
+static void __verboser(const char *stuff, int opos, int replacelast, int complete)
 {
        char *s2[2];
        struct timeval tv;
@@ -123,7 +123,7 @@ static void __verboser(char *stuff, int opos, int replacelast, int complete)
        }
 }
 
-static void verboser(char *stuff, int opos, int replacelast, int complete) 
+static void verboser(const char *stuff, int opos, int replacelast, int complete) 
 {
        ast_mutex_lock(&verb_lock);
        /* Lock appropriately if we're really being called in verbose mode */