Merged revisions 64515 via svnmerge from
authorChristian Richter <christian.richter@beronet.com>
Fri, 18 May 2007 10:03:38 +0000 (10:03 +0000)
committerChristian Richter <christian.richter@beronet.com>
Fri, 18 May 2007 10:03:38 +0000 (10:03 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r64515 | crichter | 2007-05-16 10:44:51 +0200 (Mi, 16 Mai 2007) | 9 lines

Merged revisions 64513 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r64513 | crichter | 2007-05-16 10:23:42 +0200 (Mi, 16 Mai 2007) | 1 line

in the case immediate=yes, we directly jump into the dialplan, where people can use PlayTones to indicate a Dialtone, so we don't need to to that by ourself. also we should not do a dialtone_indicate for incoming calls on a TE port in overlapdialmode.
........

................

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

channels/chan_misdn.c

index e8f208b..05ccc8b 100644 (file)
@@ -2717,10 +2717,16 @@ static int misdn_write(struct ast_channel *ast, struct ast_frame *frame)
        if ( !frame->samples ) {
                chan_misdn_log(4, ch->bc->port, "misdn_write: zero write\n");
                
        if ( !frame->samples ) {
                chan_misdn_log(4, ch->bc->port, "misdn_write: zero write\n");
                
-               if (ch->state == MISDN_WAITING4DIGS) {
-                       chan_misdn_log(4, ch->bc->port, "misdn_write: WAIT4DIGS ..\n");
+               if (!strcmp(frame->src,"ast_prod")) {
+                       chan_misdn_log(1, ch->bc->port, "misdn_write: state (%s) prodded.\n", misdn_get_ch_state(ch));
+
+                       if (ch->ts) {
+                               chan_misdn_log(4,ch->bc->port,"Starting Playtones\n");
+                               misdn_lib_tone_generator_start(ch->bc);
+                       }
                        return 0;
                }
                        return 0;
                }
+
                return -1;
        }
 
                return -1;
        }
 
@@ -2905,9 +2911,8 @@ static int dialtone_indicate(struct chan_list *cl)
        if (ts) {
                cl->notxtone=0;
                cl->norxtone=0;
        if (ts) {
                cl->notxtone=0;
                cl->norxtone=0;
+               /* This prods us in misdn_write */
                ast_playtones_start(ast,0, ts->data, 0);
                ast_playtones_start(ast,0, ts->data, 0);
-               chan_misdn_log(4,cl->bc->port,"Starting Playtones\n");
-               misdn_lib_tone_generator_start(cl->bc);
        }
 
        return 0;
        }
 
        return 0;
@@ -3575,11 +3580,6 @@ static void do_immediate_setup(struct misdn_bchannel *bc,struct chan_list *ch ,
                ch->state = MISDN_INCOMING_SETUP;
        }
 
                ch->state = MISDN_INCOMING_SETUP;
        }
 
-       if ( !bc->nt && (ch->originator==ORG_MISDN) && !ch->incoming_early_audio ) 
-               chan_misdn_log(1,bc->port, " --> incoming_early_audio off\n");
-        else  
-               dialtone_indicate(ch);
-  
        chan_misdn_log(1, bc->port, "* Starting Ast ctx:%s dad:%s oad:%s with 's' extension\n", ast->context, ast->exten, ast->cid.cid_num);
   
        strncpy(ast->exten,"s", 2);
        chan_misdn_log(1, bc->port, "* Starting Ast ctx:%s dad:%s oad:%s with 's' extension\n", ast->context, ast->exten, ast->cid.cid_num);
   
        strncpy(ast->exten,"s", 2);
@@ -4267,7 +4267,8 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                                if ( !dad_len && stop_tone )
                                        stop_indicate(ch);
                                else
                                if ( !dad_len && stop_tone )
                                        stop_indicate(ch);
                                else
-                                       dialtone_indicate(ch);
+                                       if (bc->nt) 
+                                               dialtone_indicate(ch);
                                
                                
                                if (ch->overlap_dial && !dad_len) {
                                
                                
                                if (ch->overlap_dial && !dad_len) {