Miroslav Nachev
2006-Feb-28 08:53 UTC
[Asterisk-Users] How to determine duration call when is used Attended Transfer
Hi, I am trying to determine the actual call duration (billsec) when is used Attended Transfer but this is very dificult because there is no relation between channels. Are there any suggestions how can be solved this? I have an idea where in the CDR must be added new column where to be stored the CDR UniqueID from another channel which is linked. Or to have another database/table (res_features) where to store all events like transfer, hold and conferences. How to add some very useful patch for Attended Transfer? In the standard source code of function builtin_atxfer(...) is writen: newchan = ast_feature_request_and_dial( transferer, "Local", ast_best_codec(transferer->nativeformats), dialstr, 15000, &outstate, cid_num, cid_name); We replace this line with this one: newchan = ast_feature_request_and_dial( transferer, "Local", ast_best_codec(transferer->nativeformats), dialstr, atxfernoanswertimeout, &outstate, cid_num, cid_name); where "atxfernoanswertimeout" is static int which can be configured in features.conf. the default value is 15000. Follow the main useful patch where when the other party is busy the channel return busy signal instead return to the caller. The function is ast_feature_request_and_dial(...): ... else if ((f->subclass == AST_CONTROL_BUSY) || (f->subclass == AST_CONTROL_CONGESTION)) { state = f->subclass; -> new lines: if (option_verbose > 2) ast_verbose( VERBOSE_PREFIX_3 "%s is busy\n", chan->name); ast_indicate(caller, AST_CONTROL_BUSY); -> old lines: /* ast_frfree(f); f = NULL; break; */ Best Regards, Miroslav Nachev