[asterisk-users] SIP_HEADER function; what names are available?

Steve Langstaff steve.langstaff at citel.com
Mon Oct 23 01:58:11 MST 2006


Looking at the source code for Asterisk 1.2.7.1 (just what I've got
handy), it appears that the SIP_HEADER() function just parses the SIP
INVITE for whatever SIP *header* you specify - so:
a) there's no list of headers you can check for - it depends on the user
agent generating the request and
b) the request URI is not a SIP header, so you can't get to it using a
stock SIP_HEADER() function.

However, I suppose that there is nothing stopping you from hacking the
source for your Asterisk installation to provide access to the URI... In
chan_sip.c:func_header_read() you could do something like:

static char *func_header_read(struct ast_channel *chan, char *cmd, char
*data, char *buf, size_t len) 
{
<snip/>
	content = get_header(&p->initreq, data);

	if (ast_strlen_zero(content)) {
<new>
		/* look for an experimental pseudo-header that allows us
access to the request URI */
		/* but note that this is not a real header name! */
		if (strcmp(data,
"x-Asterisk-Request-URI-pseudo-header")==0)
		{
			ast_copy_string(buf, &p->initreq.rlPart2, len);
			ast_mutex_unlock(&chan->lock);
			return buf;
		}
</new>
		ast_mutex_unlock(&chan->lock);
		return NULL;
	}
<snip/>
}

> -----Original Message-----
> From: asterisk-users-bounces at lists.digium.com 
> [mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of 
> Ricardo Carvalho
> Sent: 20 October 2006 17:51
> To: kjcsb; Asterisk Users Mailing List - Non-Commercial Discussion
> Subject: Re: [asterisk-users] SIP_HEADER function; what names 
> are available?
> 
> Any news on this thread? I also need to know the way to get 
> the R-URI from sip INVITE messages received by Asterisk, 
> through ${SIP_HEADER()}.
> 
> Thanks in advance,
> Ricardo.
> 
> 
> 
> 
> 
> 
> kjcsb wrote:
> >>> I have read the wiki about the SIP_HEADER function 
> (http://www.voip- 
> >>> info.org/wiki/index.php?page=Asterisk+func+sip_header). 
> Where can I 
> >>> get a list of the names that are available to be used with the 
> >>> function e.g. TO is one name as in ${SIP_HEADER(TO)}. 
> What are the 
> >>> others?
> >>>
> >>
> >> I would guess that you can check the RFC. Easier is to 
> turn on SIP  
> >> debug and see the INVITE packet yourself and
> >> check the headers that you have with your equipment.
> >>
> >> /Olle
> >>
> > Thanks but I don't know how to get the actual INVITE details (the 
> > request URI?). For example I want to get 
> sip:95556789 at 60.234.xxx.xxx 
> > SIP/2.0 from the following dialogue:
> >
> > INVITE sip:95556789 at 60.234.xxx.xxx SIP/2.0
> > Record-Route: <sip:147.202.nn.nnn;ftag=bf7eced18eb7271b;lr=on>
> > Via: SIP/2.0/UDP 147.202.nn.nnn;branch=z9hG4bKe49c.21b320a3.0
> > Via: SIP/2.0/UDP 60.234.nnn.nnn;branch=z9hG4bK76bf3dec8d45b972
> > From: "User" <sip:1122334455 at proxy.domain.com>;tag=bf7eced18eb7271b
> > To: <sip:5556789 at domain.com>
> >
> > etc
> >
> > I can get Record-Route, Via, From, To etc but don't know how to get 
> > the bit after the INVITE. Interestingly only the first Via 
> is returned 
> > by ${SIP_HEADER(VIA)}.
> >
> > I've tried R-URI, RURI, URI, ALL, *, blank.
> >
> > Any advice appreciated.
> >
> > Cameron
> > _______________________________________________
> > --Bandwidth and Colocation provided by Easynews.com --
> >
> > asterisk-users mailing list
> > To UNSUBSCRIBE or update options visit:
> >   http://lists.digium.com/mailman/listinfo/asterisk-users
> >
> 
> _______________________________________________
> --Bandwidth and Colocation provided by Easynews.com --
> 
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users
> 


More information about the asterisk-users mailing list