[Asterisk-Dev] Re: 'a' and 'o' extensions do not work with app_voicemail.c (was: Newbie needs help)
Chad Scott
chad at idworld.net
Mon Jun 28 11:09:07 MST 2004
I've been doing some debugging on this and I think it's a code problem.
I'm by no means an expert on Asterisk or how it is written or
implemented, but the following patch to app_voicemail.c fixes the
issue. With this code change, Asterisk correctly transfers to the 'a'
and 'o' extensions as I'd expect them to.
As I said, I'm not an expert, so I would strongly recommend against
committing this as-is... someone please interpret why this works and
fix the root problem (or help me understand why this works so I can fix
the root problem).
Index: app_voicemail.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_voicemail.c,v
retrieving revision 1.119
diff -C3 -r1.119 app_voicemail.c
*** app_voicemail.c 26 Jun 2004 16:06:19 -0000 1.119
--- app_voicemail.c 28 Jun 2004 17:58:17 -0000
***************
*** 1727,1735 ****
make_dir(dir, sizeof(dir), vmu->context, ext, "INBOX");
if (mkdir(dir, 0700) && (errno != EEXIST))
ast_log(LOG_WARNING, "mkdir '%s' failed: %s\n",
dir, strerror(errno));
! if (ast_exists_extension(chan,
strlen(chan->macrocontext) ? chan->macrocontext : chan->context, "o",
1, chan->callerid))
strcat(ecodes, "0");
! if (ast_exists_extension(chan,
strlen(chan->macrocontext) ? chan->macrocontext : chan->context, "a",
1, chan->callerid))
strcat(ecodes, "*");
/* Play the beginning intro if desired */
if (!ast_strlen_zero(prefile)) {
--- 1727,1735 ----
make_dir(dir, sizeof(dir), vmu->context, ext, "INBOX");
if (mkdir(dir, 0700) && (errno != EEXIST))
ast_log(LOG_WARNING, "mkdir '%s' failed: %s\n",
dir, strerror(errno));
! if (ast_exists_extension(chan, chan->context, "o", 1,
chan->callerid))
strcat(ecodes, "0");
! if (ast_exists_extension(chan, chan->context, "a", 1,
chan->callerid))
strcat(ecodes, "*");
/* Play the beginning intro if desired */
if (!ast_strlen_zero(prefile)) {
***************
*** 1768,1775 ****
strncpy(chan->exten, "a", sizeof(chan->exten) -
1);
if (!ast_strlen_zero(vmu->exit)) {
strncpy(chan->context, vmu->exit,
sizeof(chan->context) - 1);
- } else if
(!ast_strlen_zero(chan->macrocontext)) {
- strncpy(chan->context,
chan->macrocontext, sizeof(chan->context) - 1);
}
chan->priority = 0;
free_user(vmu);
--- 1768,1773 ----
On Jun 26, 2004, at 8:52 PM, Chad Scott wrote:
> I've been banging my head on a brick wall for about an hour now trying
> to understand why the following doesn't work (which is even provided
> as an example in the distribution!).
>
> The goal is to create a voicemail-only extension not associated with a
> phone. I'd rather not have an extension dedicated to VoicemailMain(),
> so I would like the user to be able to hit '*' during the introductory
> message and be prompted for a password.
>
> For whatever reason, this doesn't work as expected. The first
> section, macro-stdexten, is what is provided in the distribution. It
> defines exten => a,1,VoicemailMain(${ARG1}), which should match the
> return extension from Voicemail() if the user presses '*'. Neither
> this nor my "vmonly" macro do this properly. The '*' key instead does
> nothing.
>
> Am I not understanding macros properly?
>
> Thanks,
> Chad
>
> [macro-stdexten];
> ;
> ; Standard extension macro:
> ; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as
> well
> ; ${ARG2} - Device(s) to ring
> ;
> exten => s,1,Dial(${ARG2},20) ; Ring
> the interface, 20 seconds maximum
> exten => s,2,Goto(s-${DIALSTATUS}) ; Jump
> based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
>
> exten => s-NOANSWER,1,Voicemail(u${ARG1}) ; If
> unavailable, send to voicemail w/ unavail announce
> exten => s-NOANSWER,2,Goto(default,s,1) ; If they
> press #, return to start
>
> exten => s-BUSY,1,Voicemail(b${ARG1}) ; If busy,
> send to voicemail w/ busy announce
> exten => s-BUSY,2,Goto(default,s,1) ; If
> they press #, return to start
>
> exten => s-.,1,Goto(s-NOANSWER,1) ;
> Treat anything else as no answer
>
> exten => a,1,VoicemailMain(${ARG1}) ; If
> they press *, send the user into VoicemailMain
>
> [macro-vmonly]
> exten => s,1,Voicemail(${ARG1})
> exten => s,2,Hangup
>
> exten => a,1,VoicemailMain(${ARG1})
>
> _______________________________________________
> Asterisk-Users mailing list
> Asterisk-Users at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-users
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-users
More information about the asterisk-dev
mailing list