<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 1, 2015 at 3:00 PM, Gabriel Ortiz Lour <span dir="ltr"><<a href="mailto:ortiz.admin@gmail.com" target="_blank">ortiz.admin@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br><div dir="ltr">Hi all,<div><br></div><div>  Having trouble with understanding how chan_sip relates with chan_local. I know I'm using a very old asterisk version (1.8.19.0) but here is what I'm trying to do:</div><div><br></div><div>  I'm using "use_q850_reason" to transport de HANGUPCAUSE from one * box to another, as I can see in the 2nd * log:</div><div><br></div><div>">> Using Reason header for cause code: 50"<br></div><div><br></div><div>This number (50) came from the HANGUPCAUSE i've set on the 1st * box.</div><div><br></div><div>The thing is that I used the AMI to generate a call using a Local channel, and I would like to receive that number in the "Reason" field of the OriginateResponse, so I would know the HANGUPCAUSE of the 1st * box.</div><div><br></div><div>The problem is that the SIP channel in the case is never answered, I'm fighting with the code on chan_sip function "handle_response" and in the channel.c "__ast_request_and_dial", but I can't find where the two channels relate, where to get the "50" that I need...!</div><div><br></div><div>Anyone could help me with some pointers on that?</div><div><br></div></div></blockquote><div><br></div><div>You can't reach across channels from one channel driver to another in any kind of safe fashion. That is, code in chan_sip cannot call or set code in chan_local directly.<br><br></div><div>If one channel needs to inform another channel about some piece of information, then it needs to do so using one of the built-in mechanisms that pass information between channels. In your version, you're best off modifying the control frame AST_CONTROL_HANGUP to pass the chan_sip specific Reason code along with it. You'd do something like the following:<br></div><div>* Update ast_queue_hangup_with_cause to have a new reason parameter set by chan_sip, and pass not just the hangup cause code but also the reason code along with it. That would make f.data point to a structure containing both cause codes, and have the datalen value be set in the frame to the size of the struct.<br></div><div>* Update everyone who handles AST_CONTROL_HANGUP and extracts the cause code out of it to get it from the new structure<br></div><div>* Update the origination routines to extract the Reason code out of its handling of AST_CONTROL_HANGUP<br><br></div><div>That's probably your best path, anyway. It's important to note that another way of doing this was implemented in Asterisk 11. There's a separate control frame that handles cause code information that all channel drivers can use to pass that information along to the core, and potentially further if desired. That mechanism has a reasonable amount of work associated with it, so it wouldn't backport well. If, however, Asterisk 11 is an option, you may want to look into that functionality. The control frame that handles cause code propagation (which could reasonably be extended for more information) is AST_CONTROL_PVT_CAUSE_CODE.<br></div></div><br>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Matthew Jordan<br></div><div>Digium, Inc. | Director of Technology<br></div><div>445 Jan Davis Drive NW - Huntsville, AL 35806 - USA</div><div>Check us out at: <a href="http://digium.com" target="_blank">http://digium.com</a> & <a href="http://asterisk.org" target="_blank">http://asterisk.org</a></div></div></div></div></div>
</div></div>