diff -urN res/res_features.c res/res_features.c --- res/res_features.c 2008-09-26 17:32:01.000000000 -0300 +++ res/res_features.c 2008-10-02 12:16:12.000000000 -0300 @@ -774,6 +774,9 @@ struct ast_bridge_config bconfig; struct ast_frame *f; int l; + struct timeval start = { 0 , 0 }; /*trace subclass '-1'*/ + int diffTraceSC = 0; /*trace subclass '-1'*/ + start = ast_tvnow(); /*trace subclass '-1'*/ if (option_debug) ast_log(LOG_DEBUG, "Executing Attended Transfer %s, %s (sense=%d) \n", chan->name, peer->name, sense); @@ -782,9 +785,14 @@ /* Start autoservice on chan while we talk to the originator */ ast_autoservice_start(transferee); ast_indicate(transferee, AST_CONTROL_HOLD); + + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|0|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ /* Transfer */ res = ast_stream_and_wait(transferer, "pbx-transfer", transferer->language, AST_DIGIT_ANY); + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|1|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ if (res < 0) { finishup(transferee); return res; @@ -794,6 +802,8 @@ /* this is specific of atxfer */ res = ast_app_dtget(transferer, transferer_real_context, xferto, sizeof(xferto), 100, transferdigittimeout); + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|2|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ if (res < 0) { /* hangup, would be 0 for invalid and 1 for valid */ finishup(transferee); return res; @@ -815,6 +825,8 @@ return FEATURE_RETURN_SUCCESS; } + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|4|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ l = strlen(xferto); snprintf(xferto + l, sizeof(xferto) - l, "@%s/n", transferer_real_context); /* append context */ newchan = ast_feature_request_and_dial(transferer, "Local", ast_best_codec(transferer->nativeformats), @@ -829,6 +841,8 @@ return FEATURE_RETURN_SUCCESS; } + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|5|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ if (check_compat(transferer, newchan)) { /* we do mean transferee here, NOT transferer */ finishup(transferee); @@ -846,13 +860,22 @@ transferer->_softhangup = 0; return FEATURE_RETURN_SUCCESS; } + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|6|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ if (check_compat(transferee, newchan)) { finishup(transferee); return -1; } + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|7|%d|trace subclass '-1' %s\n", diffTraceSC, transferee->name); /*trace subclass '-1'*/ + ast_indicate(transferee, AST_CONTROL_UNHOLD); + + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|8|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ ast_log(LOG_WARNING, "builtin_atxfer|8.1|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ if ((ast_autoservice_stop(transferee) < 0) || (ast_waitfordigit(transferee, 100) < 0) @@ -863,11 +886,17 @@ return -1; } + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|9|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ + + xferchan = ast_channel_alloc(0, AST_STATE_DOWN, 0, 0, "", "", "", 0, "Transfered/%s", transferee->name); if (!xferchan) { ast_hangup(newchan); return -1; } + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|10|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ /* Make formats okay */ xferchan->visible_indication = transferer->visible_indication; xferchan->readformat = transferee->readformat; @@ -878,9 +907,13 @@ ast_clear_flag(xferchan, AST_FLAGS_ALL); xferchan->_softhangup = 0; + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|11|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ if ((f = ast_read(xferchan))) ast_frfree(f); + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|12|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ newchan->_state = AST_STATE_UP; ast_clear_flag(newchan, AST_FLAGS_ALL); newchan->_softhangup = 0; @@ -894,10 +927,16 @@ tobj->chan = newchan; tobj->peer = xferchan; tobj->bconfig = *config; + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|13|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ if (ast_stream_and_wait(newchan, xfersound, newchan->language, "")) ast_log(LOG_WARNING, "Failed to play transfer sound!\n"); + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|14|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ ast_bridge_call_thread_launch(tobj); + diffTraceSC = ast_tvdiff_ms(ast_tvnow(), start); /*trace subclass '-1'*/ + ast_log(LOG_WARNING, "builtin_atxfer|15|%d|trace subclass '-1'\n", diffTraceSC); /*trace subclass '-1'*/ return -1; /* XXX meaning the channel is bridged ? */ }