On Wed, Aug 3, 2011 at 9:36 PM, Michael Collins <msc@freeswitch.org> wrote:
Just remember that once the call ends, the "session" object you have is read-only.
Good to know.
You can still do interesting things, but you cannot alter CDRs after the call ends, at least not in a session hangup hook.
These days we are trying to modify other channels variables from the hangup hook (channels like the ones involved in whatever kind of transfer).
You are better off with XML CDRs and post-call logic. With all of the screwy transfer scenarios you have to account for you will absolutely need to do some post-processing logic. Sounds like lots of "fun". :P
Fun indeed. Our ideal target would be to have each CDR self-contained. In general, we only want to bill the A-leg CDRs as they are the originators. However, some B-leg CDRs need to be billed if they were created by a transfer and some A-leg CDRs can be discarded if they participated in an attended transfer. As you rightfully mentioned, when transfers are chained is where the obscure scenarios arise. If our experiments provide a working proof of concept, we have two choices left: 1. Subscribe to CHANNEL_STATE events in order to catch transfer directly from event socket. But we would be mixing mod_xml_cdr, mod_xml_curl and event socket altogether, so we want to avoid that. 2. Forget about stateless CDRs and pray (or inspect the source code) for mod_xml_cdr generating originator CDRs last, always. If anybody is interested, I can keep him/her informed. Cheers. -- Isaac Jurado Internet Busines Solutions eConcept