]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge Script <automerge@asterisk.org>
Mon, 2 Apr 2007 12:38:35 +0000 (12:38 +0000)
committerAutomerge Script <automerge@asterisk.org>
Mon, 2 Apr 2007 12:38:35 +0000 (12:38 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@59653 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_misdn.c
channels/misdn/chan_misdn_config.h
channels/misdn_config.c

index ec38f47bf7775421a93a19e8fd2d9b9fbd6b2da9..72928717d4929681b3f16aed4ebc25568029c9e6 100644 (file)
@@ -106,6 +106,7 @@ enum misdn_chan_state {
        MISDN_NOTHING=0,        /*!< at beginning */
        MISDN_WAITING4DIGS, /*!<  when waiting for infos */
        MISDN_EXTCANTMATCH, /*!<  when asterisk couldnt match our ext */
+       MISDN_INCOMING_SETUP, /*!<  for incoming setups*/
        MISDN_DIALING, /*!<  when pbx_start */
        MISDN_PROGRESS, /*!<  we got a progress */
        MISDN_PROCEEDING, /*!<  we got a progress */
@@ -146,6 +147,8 @@ struct chan_list {
        int need_hangup;
        int need_busy;
        
+       int noautorespond_on_setup;
+       
        int orginator;
 
        int norxtone;
@@ -682,6 +685,7 @@ static struct state_struct state_array[] = {
        {MISDN_NOTHING,"NOTHING"}, /* at beginning */
        {MISDN_WAITING4DIGS,"WAITING4DIGS"}, /*  when waiting for infos */
        {MISDN_EXTCANTMATCH,"EXTCANTMATCH"}, /*  when asterisk couldnt match our ext */
+       {MISDN_INCOMING_SETUP,"INCOMING SETUP"}, /*  when pbx_start */
        {MISDN_DIALING,"DIALING"}, /*  when pbx_start */
        {MISDN_PROGRESS,"PROGRESS"}, /*  when pbx_start */
        {MISDN_PROCEEDING,"PROCEEDING"}, /*  when pbx_start */
@@ -1492,6 +1496,8 @@ static int read_config(struct chan_list *ch, int orig) {
        misdn_cfg_get( port, MISDN_CFG_NEED_MORE_INFOS, &bc->need_more_infos, sizeof(int));
        misdn_cfg_get( port, MISDN_CFG_NTTIMEOUT, &ch->nttimeout, sizeof(int));
        
+       misdn_cfg_get( port, MISDN_CFG_NOAUTORESPOND_ON_SETUP, &ch->noautorespond_on_setup, sizeof(int));
+       
        misdn_cfg_get( port, MISDN_CFG_FAR_ALERTING, &ch->far_alerting, sizeof(int));
 
        misdn_cfg_get( port, MISDN_CFG_ALLOWED_BEARERS, &ch->allowed_bearers, BUFFERSIZE);
@@ -2131,6 +2137,7 @@ static int misdn_hangup(struct ast_channel *ast)
                chan_misdn_log(2, bc->port, " --> state:%s\n", misdn_get_ch_state(p));
                
                switch (p->state) {
+               case MISDN_INCOMING_SETUP:
                case MISDN_CALLING:
                        p->state=MISDN_CLEANING;
                        misdn_lib_send_event( bc, EVENT_RELEASE_COMPLETE);
@@ -3141,16 +3148,20 @@ static void do_immediate_setup(struct misdn_bchannel *bc,struct chan_list *ch ,
   
        ch->state=MISDN_DIALING;
 
-       if (bc->nt) {
-               int ret; 
-               ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
-       } else {
-               int ret;
-               if ( misdn_lib_is_ptp(bc->port)) {
+       if (!ch->noautorespond_on_setup) {
+               if (bc->nt) {
+                       int ret; 
                        ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
                } else {
-                       ret = misdn_lib_send_event(bc, EVENT_PROCEEDING );
+                       int ret;
+                       if ( misdn_lib_is_ptp(bc->port)) {
+                               ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
+                       } else {
+                               ret = misdn_lib_send_event(bc, EVENT_PROCEEDING );
+                       }
                }
+       } else {
+               ch->state = MISDN_INCOMING_SETUP;
        }
 
        if ( !bc->nt && (ch->orginator==ORG_MISDN) && !ch->incoming_early_audio ) 
@@ -3642,8 +3653,12 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                
                /* Check for Pickup Request first */
                if (!strcmp(chan->exten, ast_pickup_ext())) {
-                       int ret;/** Sending SETUP_ACK**/
-                       ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
+                       if (!ch->noautorespond_on_setup) {
+                               int ret;/** Sending SETUP_ACK**/
+                               ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
+                       } else {
+                               ch->state = MISDN_INCOMING_SETUP;
+                       }
                        if (ast_pickup_call(chan)) {
                                hangup_chan(ch);
                        } else {
@@ -3701,14 +3716,19 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                }
                
                if (ast_exists_extension(ch->ast, ch->context, bc->dad, 1, bc->oad)) {
-                       ch->state=MISDN_DIALING;
                        
-                       if (bc->nt || (bc->need_more_infos && misdn_lib_is_ptp(bc->port)) ) {
-                               int ret; 
-                               ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
+                       if (!ch->noautorespond_on_setup) {
+                               ch->state=MISDN_DIALING;
+
+                               if (bc->nt || (bc->need_more_infos && misdn_lib_is_ptp(bc->port)) ) {
+                                       int ret; 
+                                       ret = misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
+                               } else {
+                                       int ret;
+                                       ret= misdn_lib_send_event(bc, EVENT_PROCEEDING );
+                               }
                        } else {
-                               int ret;
-                               ret= misdn_lib_send_event(bc, EVENT_PROCEEDING );
+                               ch->state = MISDN_INCOMING_SETUP;
                        }
        
                        if (pbx_start_chan(ch)<0) {
@@ -3738,7 +3758,6 @@ cb_events(enum event_e event, struct misdn_bchannel *bc, void *user_data)
                                }
 
                        } else {
-                               
                                int ret= misdn_lib_send_event(bc, EVENT_SETUP_ACKNOWLEDGE );
                                if (ret == -ENOCHAN) {
                                        ast_log(LOG_WARNING,"Channel was catched, before we could Acknowledge\n");
index 78d34750f9443ec9758b081ab8a7babb2ebf5247..e21c59fdb0a680be5a0f54343ec448d9229c04ca 100644 (file)
@@ -56,6 +56,7 @@ enum misdn_cfg_elements {
        MISDN_CFG_PIPELINE,            /* char[] */
 #endif
        MISDN_CFG_NEED_MORE_INFOS,     /* bool */
+       MISDN_CFG_NOAUTORESPOND_ON_SETUP,     /* bool */
        MISDN_CFG_NTTIMEOUT,     /* bool */
        MISDN_CFG_JITTERBUFFER,              /* int */
        MISDN_CFG_JITTERBUFFER_UPPER_THRESHOLD,              /* int */
index 64dc8835d4832fb3cf85e1e097fb5ffea1372c08..cd6a7ffd7fdb45eeb4e2c8449bf3addae3a4ed35 100644 (file)
@@ -117,6 +117,7 @@ static const struct misdn_cfg_spec port_spec[] = {
        { "pipeline", MISDN_CFG_PIPELINE, MISDN_CTYPE_STR, NO_DEFAULT, NONE },
 #endif
        { "need_more_infos", MISDN_CFG_NEED_MORE_INFOS, MISDN_CTYPE_BOOL, "0", NONE },
+       { "noautorespond_on_setup", MISDN_CFG_NOAUTORESPOND_ON_SETUP, MISDN_CTYPE_BOOL, "0", NONE },
        { "nttimeout", MISDN_CFG_NTTIMEOUT, MISDN_CTYPE_BOOL, "no", NONE },
        { "jitterbuffer", MISDN_CFG_JITTERBUFFER, MISDN_CTYPE_INT, "4000", NONE },
        { "jitterbuffer_upper_threshold", MISDN_CFG_JITTERBUFFER_UPPER_THRESHOLD, MISDN_CTYPE_INT, "0", NONE },