--- res/res_parking.orig Sat Aug 2 10:43:06 2003 +++ res/res_parking.c Sat Aug 2 10:56:57 2003 @@ -205,6 +205,11 @@ struct ast_channel *transferer; struct ast_channel *transferee; char *transferer_real_context; + int ms; + int result; + int sip_chan; + struct ast_frame *ft; + /* Answer if need be */ if (ast_answer(chan)) @@ -266,6 +271,33 @@ transferee = peer; } + sip_chan = !strcmp(transferer->type,"sip"); + result = 0; + if( sip_chan) { + ms = 300; /* ms */ + ft = 0; + while(ms ) { + ms = ast_waitfor(transferer, ms); + if (ms > 0) { + ft = ast_read(transferer); + if (ft) { /* Got second keypress */ + if (ft->frametype == AST_FRAME_DTMF) { + result = ft->subclass; + if( result != '#') { + ast_write(transferee,f); + ast_write(transferee,ft); + } + ast_frfree(ft); + break; + } else + ast_frfree(ft); + } + } else + ast_write( transferee, f); + } + } + if( !sip_chan || result == '#') { + /* Use the non-macro context to transfer the call */ if(strlen(transferer->macrocontext)) transferer_real_context=transferer->macrocontext; @@ -372,6 +404,7 @@ if (option_verbose > 1) ast_verbose(VERBOSE_PREFIX_2 "Hungup during autoservice stop on '%s'\n", transferee->name); } + } } else { if (f && (f->frametype == AST_FRAME_DTMF)) { if (who == peer)