Changeset 11306

Show
Ignore:
Timestamp:
02/06/11 19:11:54 (2 years ago)
Author:
p_lindheimer
Message:

closes #4799 and closes #4800 adds various CONNECTEDLINE() calls and macro-blkvm-xxxx functions

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/branches/2.9/core/functions.inc.php

    r11289 r11306  
    13641364          // 
    13651365          $ivr_context = 'from-did-direct-ivr'; 
    1366           if ($ast_lt_16) { 
    1367             $ext->add($ivr_context, $exten['extension'],'', new ext_execif('$["${BLKVM_OVERRIDE}" != ""]','dbDel','${BLKVM_OVERRIDE}')); 
    1368           } else { 
    1369             $ext->add($ivr_context, $exten['extension'],'', new ext_execif('$["${BLKVM_OVERRIDE}" != ""]','Noop','Deleting: ${BLKVM_OVERRIDE}: ${DB_DELETE(${BLKVM_OVERRIDE})}')); 
    1370           } 
     1366          $ext->add($ivr_context, $exten['extension'],'', new ext_macro('blkvm-clr')); 
    13711367          $ext->add($ivr_context, $exten['extension'],'', new ext_setvar('__NODEST', '')); 
    13721368          $ext->add($ivr_context, $exten['extension'],'', new ext_goto('1',$exten['extension'],'from-did-direct')); 
    13731369          if($vm != "novm") { 
    1374             if ($ast_lt_16) { 
    1375               $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_execif('$["${BLKVM_OVERRIDE}" != ""]','dbDel','${BLKVM_OVERRIDE}')); 
    1376             } else { 
    1377               $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_execif('$["${BLKVM_OVERRIDE}" != ""]','Noop','Deleting: ${BLKVM_OVERRIDE}: ${DB_DELETE(${BLKVM_OVERRIDE})}')); 
    1378             } 
     1370            $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_macro('blkvm-clr')); 
    13791371            $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_setvar('__NODEST', '')); 
    13801372            $ext->add($ivr_context, '${VM_PREFIX}'.$exten['extension'],'', new ext_macro('vm',$vm.',DIRECTDIAL,${IVR_RETVM}')); 
     
    19271919      } 
    19281920      $ext->add($context, $exten, '', new ext_dbdel('RG/${ARG3}/${UNIQCHAN}')); 
    1929       $ext->add($context, $exten, '', new ext_dbdel('${BLKVM_OVERRIDE}')); 
     1921      $ext->add($context, $exten, '', new ext_macro('blkvm-clr')); 
    19301922      if ($amp_conf['AST_FUNC_SHARED']) { 
    19311923        $ext->add($context, $exten, '', new ext_setvar('SHARED(ANSWER_STATUS,${FORCE_CONFIRM})','')); 
     
    19941986      $exten = 's'; 
    19951987      $ext->add($context, $exten, '', new ext_setvar('__MACRO_RESULT','')); 
    1996       $ext->add($context, $exten, '', new ext_dbdel('${BLKVM_OVERRIDE}')); 
     1988      $ext->add($context, $exten, '', new ext_macro('blkvm-clr')); 
    19971989      $ext->add($context, $exten, '', new ext_dbdel('RG/${ARG1}/${UNIQCHAN}')); 
    1998  
     1990      $ext->add($context, $exten, '', new ext_noop_trace('DIALEDPEERNUMBER: ${DIALEDPEERNUMBER} CID: ${CALLERID(all)}')); 
     1991      if ($amp_conf['AST_FUNC_MASTER_CHANNEL'] && $amp_conf['AST_FUNC_CONNECTEDLINE']) { 
     1992        $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CONNECTEDLINE(num))','${DIALEDPEERNUMBER}')); 
     1993        $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CONNECTEDLINE(name))','${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}')); 
     1994      } 
    19991995 
    20001996      /* 
     
    20112007      $exten = 's'; 
    20122008      $ext->add($context, $exten, '', new ext_setvar('__MACRO_RESULT','')); 
    2013       $ext->add($context, $exten, '', new ext_dbdel('${BLKVM_OVERRIDE}')); 
     2009      $ext->add($context, $exten, '', new ext_macro('blkvm-clr')); 
     2010      $ext->add($context, $exten, '', new ext_noop_trace('DIALEDPEERNUMBER: ${DIALEDPEERNUMBER} CID: ${CALLERID(all)}')); 
     2011      if ($amp_conf['AST_FUNC_MASTER_CHANNEL'] && $amp_conf['AST_FUNC_CONNECTEDLINE']) { 
     2012        $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CONNECTEDLINE(num))','${DIALEDPEERNUMBER}')); 
     2013        $ext->add($context, $exten, '', new ext_set('MASTER_CHANNEL(CONNECTEDLINE(name))','${DB(AMPUSER/${DIALEDPEERNUMBER}/cidname)}')); 
     2014      } 
    20142015 
    20152016      /* 
     
    27712772      $ext->add('macro-vm','s', '', new ext_setvar("VMGAIN", '${IF($["foo${VM_GAIN}"!="foo"]?"g(${VM_GAIN})":"")}')); 
    27722773 
    2773       // If BLKVM_OVERRIDE is set, then someone told us to block calls from going to 
     2774      // If blkvm-check is set TRUE, then someone told us to block calls from going to 
    27742775      // voicemail. This variable is reset by the answering channel so subsequent 
    27752776      // transfers will properly function. 
    27762777      // 
    2777       $ext->add('macro-vm','s', '', new ext_gotoif('$["foo${DB(${BLKVM_OVERRIDE})}" != "fooTRUE"]','vmx,1')); 
     2778      $ext->add('macro-vm','s', '', new ext_macro('blkvm-check')); 
     2779      $ext->add('macro-vm','s', '', new ext_gotoif('$["${GOSUB_RETVAL}" != "TRUE"]','vmx,1')); 
    27782780 
    27792781      // we didn't branch so block this from voicemail 
    27802782      // 
    2781       $ext->add('macro-vm','s', '', new ext_NoOp('CAME FROM: ${NODEST} - Blocking VM cause of key: ${DB(BLKVM_OVERRIDE)}'));  
     2783      $ext->add('macro-vm','s', '', new ext_noop_trace('CAME FROM: ${NODEST} - Blocking VM macro-blkvm-check returned TRUE'));  
    27822784      $ext->add('macro-vm','s', '', new ext_hangup('')); 
    27832785 
     
    31943196 
    31953197 
     3198      /* macro-blkvm-setifempty 
     3199       * macro-blkvm-set 
     3200       * macro-blkvm-clr 
     3201       * macro-blkvm-check 
     3202       * 
     3203       * These macros are used to tell the voicemail system if it should answer a call or kill the call. 
     3204       * They are also used by modules like findmefollow and ringgroups to determine if a destination 
     3205       * if noanswer should be pursued, or if they should just end because they were called by a higher 
     3206       * level module who's destination should be honored. (Thus if vm should be blocked, so should 
     3207       * such destinations. 
     3208       * 
     3209       * In the past, it was necessary to create and track unique AstDB variables to track this since 
     3210       * it is necessary for a call that is answered, for example a queue memeber who answers a queue 
     3211       * call, to clr the block so that subsequent transfers to voicemail or user extensions which might 
     3212       * hit voicemail could succeed and the nature of Asterisk inheritable variable did not allow 
     3213       * this. This also meant that these needed to be cleaned up when the master channel who 'started 
     3214       * it all' ended, which is attempted in macro-hangupcall. There are still cases where cleanup 
     3215       * does not happen which can result in an accumulation of these. 
     3216       * 
     3217       * With the advent of the SHARED() channel variable starting in 1.6, we can achieve the same 
     3218       * thing with such a SHARED() channel variable which should be more efficient since it does not 
     3219       * hit the DB, but more importantly, there is no cleanup because the variable will die with the 
     3220       * owner channel. 
     3221       * 
     3222       * We check if the SHARED function is availalbe and if so, we use that in our macro. If not, we 
     3223       * fall back to the shared DB variable and keep our cleanup code in hangupcall. 
     3224       * 
     3225       * Note that we have chosen to use a Macro() in place of a GoSub() because in the legacy DB 
     3226       * mode we must have the owning ${EXTEN} to create our unique key. Since GoSub() does not support 
     3227       * passing arguments until 1.6 this would not be possible in 1.4 which is still mainstream. 
     3228       * We have chosen to use the GOSUB_RETVAL in anticipation of a future point where we move to 
     3229       * a GoSub() call which would be slightly more efficient. 
     3230       */ 
     3231 
     3232      if ($amp_conf['AST_FUNC_SHARED']) { 
     3233        $exten = 's'; 
     3234 
     3235        // If it BLKVM_CHANNEL exists, return it's value. If not, then set it and return TRUE 
     3236        // 
     3237        $mcontext = 'macro-blkvm-setifempty'; 
     3238        $ext->add($mcontext,$exten,'', new ext_gotoif('$[!${EXISTS(${BLKVM_CHANNEL})}]', 'init')); 
     3239        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','${SHARED(BLKVM,${BLKVM_CHANNEL})}')); 
     3240        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3241        $ext->add($mcontext,$exten,'init', new ext_set('__BLKVM_CHANNEL','${CHANNEL}')); 
     3242        $ext->add($mcontext,$exten,'', new ext_set('SHARED(BLKVM,${BLKVM_CHANNEL})','TRUE')); 
     3243        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','TRUE')); 
     3244        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3245 
     3246        // If BLKVM_CHANNEL not set or 'reset' is passed, then initialize it to this channel then set and retrun TRUE 
     3247        // 
     3248        $mcontext = 'macro-blkvm-set'; 
     3249        $ext->add($mcontext,$exten,'', new ext_execif('$[!${EXISTS(${BLKVM_CHANNEL})} | "{ARG1}" = "reset"]', 'Set','__BLKVM_CHANNEL=${CHANNEL}')); 
     3250        $ext->add($mcontext,$exten,'', new ext_set('SHARED(BLKVM,${BLKVM_CHANNEL})','TRUE')); 
     3251        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','TRUE')); 
     3252        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3253 
     3254        // if clearing, BLKVM_CHANNEL should already exist (if not, we clear our channel's copy) 
     3255        // 
     3256        $mcontext = 'macro-blkvm-clr'; 
     3257        $ext->add($mcontext,$exten,'', new ext_set('SHARED(BLKVM,${BLKVM_CHANNEL})','')); 
     3258        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','')); 
     3259        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3260 
     3261        // if checking, BLKVM_CHANNEL should already exist (if not, we check our channel's copy) 
     3262        // 
     3263        $mcontext = 'macro-blkvm-check'; 
     3264        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','${SHARED(BLKVM,${BLKVM_CHANNEL})}')); 
     3265        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3266 
     3267      } else { // NO SHARED() 
     3268         
     3269        // If it BLKVM_OVERRIDE exists, return it's value. If not, then set it and return TRUE 
     3270        // 
     3271        $mcontext = 'macro-blkvm-setifempty'; 
     3272        $ext->add($mcontext,$exten,'', new ext_gotoif('$[!${EXISTS(${BLKVM_OVERRIDE})}]', 'init')); 
     3273        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','${DB(${BLKVM_OVERRIDE})}')); 
     3274        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3275        $ext->add($mcontext,$exten,'init', new ext_set('__BLKVM_OVERRIDE','BLKVM/${MACRO_EXTEN}/${CHANNEL}')); 
     3276        $ext->add($mcontext,$exten,'', new ext_set('__BLKVM_BASE','${MACRO_EXTEN}')); 
     3277        $ext->add($mcontext,$exten,'', new ext_set('DB(${BLKVM_OVERRIDE})','TRUE')); 
     3278 
     3279        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','TRUE')); 
     3280        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3281 
     3282        // If BLKVM_OVERRIDE not set or 'reset' is passed, then initialize it to this channel then set and retrun TRUE 
     3283        // 
     3284        $mcontext = 'macro-blkvm-set'; 
     3285        $ext->add($mcontext,$exten,'', new ext_execif('$[!${EXISTS(${BLKVM_OVERRIDE})} | "{ARG1}" = "reset"]', 'Set','__BLKVM_BASE=${MACRO_EXTEN}')); 
     3286        $ext->add($mcontext,$exten,'', new ext_execif('$[!${EXISTS(${BLKVM_OVERRIDE})} | "{ARG1}" = "reset"]', 'Set','__BLKVM_OVERRIDE=BLKVM/${MACRO_EXTEN}/${CHANNEL}')); 
     3287        $ext->add($mcontext,$exten,'', new ext_set('DB(${BLKVM_OVERRIDE})','TRUE')); 
     3288        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','TRUE')); 
     3289        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3290 
     3291        // if clearing, BLKVM_OVERRIDE should already exist (if not, it's already cleared anyhow) 
     3292        // 
     3293        $mcontext = 'macro-blkvm-clr'; 
     3294        $ext->add($mcontext,$exten,'', new ext_gotoif('$[!${EXISTS(${BLKVM_OVERRIDE})}]', 'ret')); 
     3295        $ext->add($mcontext,$exten,'', new ext_dbdel('${BLKVM_OVERRIDE}')); 
     3296        $ext->add($mcontext,$exten,'ret', new ext_set('GOSUB_RETVAL','')); 
     3297        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3298 
     3299        // if checking, BLKVM_OVERRIDE should already exist (if not, '' will be returned) 
     3300        // 
     3301        $mcontext = 'macro-blkvm-check'; 
     3302        $ext->add($mcontext,$exten,'', new ext_set('GOSUB_RETVAL','${DB(${BLKVM_OVERRIDE})}')); 
     3303        $ext->add($mcontext,$exten,'', new ext_macroexit('')); 
     3304      } 
     3305 
    31963306      $mcontext = 'macro-hangupcall'; 
    31973307      $exten = 's'; 
     
    31993309      ; Cleanup any remaining RG flag 
    32003310      */ 
    3201       $ext->add($mcontext,$exten,'start', new ext_gotoif('$["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]','skiprg')); 
     3311      $skip_label = 'skiprg'; 
     3312      $ext->add($mcontext,$exten,'start', new ext_gotoif('$["${USE_CONFIRMATION}"="" | "${RINGGROUP_INDEX}"="" | "${CHANNEL}"!="${UNIQCHAN}"]',$skip_label)); 
    32023313      $ext->add($mcontext,$exten,'', new ext_noop_trace('Cleaning Up Confirmation Flag: RG/${RINGGROUP_INDEX}/${CHANNEL}')); 
    32033314      $ext->add($mcontext,$exten,'delrgi', new ext_dbdel('RG/${RINGGROUP_INDEX}/${CHANNEL}')); 
    32043315 
    3205       /* 
    3206       ; Cleanup any remaining BLKVM flag 
    3207       */ 
    3208       $ext->add($mcontext,$exten,'skiprg', new ext_gotoif('$["${BLKVM_BASE}"="" | "BLKVM/${BLKVM_BASE}/${CHANNEL}"!="${BLKVM_OVERRIDE}"]','skipblkvm')); 
    3209       $ext->add($mcontext,$exten,'', new ext_noop_trace('Cleaning Up Block VM Flag: ${BLKVM_OVERRIDE}')); 
    3210       $ext->add($mcontext,$exten,'delblkvm', new ext_dbdel('${BLKVM_OVERRIDE}')); 
     3316      if (!$amp_conf['AST_FUNC_SHARED']) { 
     3317        $next_label = 'skipblkvm'; 
     3318        // only clr it if we were the originating channel 
     3319        // 
     3320        $ext->add($mcontext,$exten,$skip_label, new ext_gotoif('$["${BLKVM_BASE}"="" | "BLKVM/${BLKVM_BASE}/${CHANNEL}"!="${BLKVM_OVERRIDE}"]',$next_label)); 
     3321        $ext->add($mcontext,$exten,'', new ext_noop_trace('Cleaning Up Block VM Flag: ${BLKVM_OVERRIDE}')); 
     3322        $ext->add($mcontext,$exten,'', new ext_macro('blkvm-clr')); 
     3323        $skip_label = $next_label; 
     3324      } 
    32113325 
    32123326      /* 
    32133327      ; Cleanup any remaining FollowMe DND flags 
    32143328      */ 
    3215       $ext->add($mcontext,$exten,'skipblkvm', new ext_gotoif('$["${FMGRP}"="" | "${FMUNIQUE}"="" | "${CHANNEL}"!="${FMUNIQUE}"]','theend')); 
     3329      $ext->add($mcontext,$exten,$skip_label, new ext_gotoif('$["${FMGRP}"="" | "${FMUNIQUE}"="" | "${CHANNEL}"!="${FMUNIQUE}"]','theend')); 
    32163330      $ext->add($mcontext,$exten,'delfmrgp', new ext_dbdel('FM/DND/${FMGRP}/${CHANNEL}')); 
    32173331      $ext->add($mcontext,$exten,'theend', new ext_hangup()); 
     
    32753389        $ext->add($mcontext,$exten,'', new ext_gotoif('$["${USEGOTO}"="1"]','usegoto,1')); 
    32763390 
    3277         $ext->add($mcontext,$exten,'', new ext_dial('${DSTRING}', '${ARG1},${D_OPTIONS}')); 
     3391        // Once setting CONNECTEDLINE(), add the I option to Dial() so the device doesn't further update the value with the 
     3392        // "device" <devicenum> data from device CID information 
     3393        // 
     3394        if ($amp_conf['AST_FUNC_CONNECTEDLINE']) { 
     3395          $ext->add($mcontext,$exten,'', new ext_gotoif('$["${DB(AMPUSER/${EXTTOCALL}/cidname)}" = ""]','godial')); 
     3396          $ext->add($mcontext,$exten,'', new ext_set('CONNECTEDLINE(name,i)', '${DB(AMPUSER/${EXTTOCALL}/cidname)}')); 
     3397          $ext->add($mcontext,$exten,'', new ext_set('CONNECTEDLINE(num)', '${EXTTOCALL}')); 
     3398          $ext->add($mcontext,$exten,'', new ext_set('D_OPTIONS', '${D_OPTIONS}I')); 
     3399        } 
     3400        $ext->add($mcontext,$exten,'godial', new ext_dial('${DSTRING}', '${ARG1},${D_OPTIONS}')); 
     3401 
    32783402        $ext->add($mcontext,$exten,'', new ext_execif('$["${DIALSTATUS_CW}"!=""]', 'Set', 'DIALSTATUS=${DIALSTATUS_CW}')); 
    32793403        $ext->add($mcontext,$exten,'', new ext_gosubif('$["${SCREEN}"!=""|"${DIALSTATUS}"="ANSWER"]','s-${DIALSTATUS},1'));