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