I think, there is somewhere a bug in the add_header function.<br><br>Because if I try to get the from Header (get_header(req, &quot;From&quot;);&nbsp;&nbsp; ) of an INVITE message I get the following output (with manipulated get_header() below):
<br><br>This is 0. for run: INVITE <a href="mailto:sip:4961319208114@hecker.dynalias.com">sip:4961319208114@hecker.dynalias.com</a> SIP/2.0<br>Via: SIP/2.0/UDP <a href="http://192.168.178.31:5060">192.168.178.31:5060</a>;branch=z9hG4bK436ce926;rport
<br>From: &quot;asterisk&quot; &lt;<a href="mailto:sip:asterisk@192.168.178.31">sip:asterisk@192.168.178.31</a>&gt;;tag=as2e3188a0<br>To: &lt;<a href="mailto:sip:4961319208114@hecker.dynalias.com">sip:4961319208114@hecker.dynalias.com
</a>&gt;<br>Contact: &lt;<a href="mailto:sip:asterisk@192.168.178.31">sip:asterisk@192.168.178.31</a>&gt;<br>Call-ID: <a href="mailto:1ab26a851ba858441987f18d5beab90e@192.168.178.31">1ab26a851ba858441987f18d5beab90e@192.168.178.31
</a><br>CSeq: 102 INVITE<br>User-Agent: Asterisk PBX<br>Max-Forwards: 70<br>&nbsp;<br>This is 1. for run: Via: SIP/2.0/UDP <a href="http://192.168.178.31:5060">192.168.178.31:5060</a>;branch=z9hG4bK436ce926;rport<br>From: &quot;asterisk&quot; &lt;
<a href="mailto:sip:asterisk@192.168.178.31">sip:asterisk@192.168.178.31</a>&gt;;tag=as2e3188a0<br>To: &lt;<a href="mailto:sip:4961319208114@hecker.dynalias.com">sip:4961319208114@hecker.dynalias.com</a>&gt;<br>Contact: &lt;
<a href="mailto:sip:asterisk@192.168.178.31">sip:asterisk@192.168.178.31</a>&gt;<br>Call-ID: <a href="mailto:1ab26a851ba858441987f18d5beab90e@192.168.178.31">1ab26a851ba858441987f18d5beab90e@192.168.178.31</a><br>CSeq: 102 INVITE
<br>User-Agent: Asterisk PBX<br>Max-Forwards: 70<br>&nbsp;<br>This is 2. for run: (null) <br>Segmentation fault (core dumped)<br><br>with the following code:<br>static const char *__get_header(const struct sip_request *req, const char *name, int *start)
<br>{<br>&nbsp;&nbsp;&nbsp; int pass;<br><br>&nbsp;&nbsp;&nbsp; for (pass = 0; name &amp;&amp; pass &lt; 2;pass++) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int x, len = strlen(name);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (x=*start; x&lt;req-&gt;headers; x++) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ast_verbose(&quot;This is %d for run: %s \n&quot;, x, req-&gt;header[x]);
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!strncasecmp(req-&gt;header[x], name, len)) {&nbsp; &nbsp;&nbsp;  <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; char *r = req-&gt;header[x] + len;&nbsp;&nbsp;&nbsp; /* skip name */<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pedanticsipchecking)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; r = ast_skip_blanks(r);
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (*r == &#39;:&#39;) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; *start = x+1;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ast_skip_blanks(r+1);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pass == 0) /* Try aliases */
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; name = find_alias(name, NULL);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /* Don&#39;t return NULL, so get_header is always a valid pointer */<br>&nbsp;&nbsp;&nbsp; return &quot;&quot;;<br>}<br><br>So, if it finds the right line segfault occurs because the header[2] pointer is set to null.
<br><br>But I&#39;m not good enough to find the reason, why this pointer isn&#39;t set up correctly..<br>Any hints?<br><br>Thank you!<br><br><br><div><span class="gmail_quote">On 15/03/07, <b class="gmail_sendername">Thomas Hecker
</b> &lt;<a href="mailto:thomas.hecker@gmail.com">thomas.hecker@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br><br>at the end of chan_sip.c&#39;s initreqprep() function all the headers are added to the sip message:<br><br>&nbsp;&nbsp;&nbsp; add_header(req, &quot;To&quot;, to);<br>&nbsp;&nbsp;&nbsp; ast_string_field_set(p, exten, l);<br>&nbsp;&nbsp;&nbsp; build_contact(p);
<br>&nbsp;&nbsp;&nbsp; add_header(req, &quot;Contact&quot;, p-&gt;our_contact);<br>&nbsp;&nbsp;&nbsp; add_header(req, &quot;Call-ID&quot;, p-&gt;callid);<br>&nbsp;&nbsp;&nbsp; add_header(req, &quot;CSeq&quot;, tmp);<br>&nbsp;&nbsp;&nbsp; add_header(req, &quot;User-Agent&quot;, global_useragent);
<br>&nbsp;&nbsp;&nbsp; add_header(req, &quot;Max-Forwards&quot;, DEFAULT_MAX_FORWARDS);<br><br>But when I try to get one of these values with a call to <br>&nbsp;&nbsp;&nbsp; get_header(req, &quot;Contact&quot;) subsequent to the add_headers I get a segmentation fault.
<br><br>Anybody has an Idea why?<br><br>Thank you very much!<br><span class="sg">Thomas Hecker<br>
</span></blockquote></div><br>