--- 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)