Skip to content
Snippets Groups Projects
Commit 1c182a60 authored by Joshua Colp's avatar Joshua Colp
Browse files

Allow an offset for SIP_HEADER so you can get more then 1 header of the same...

Allow an offset for SIP_HEADER so you can get more then 1 header of the same name if they exist. Why someone would want to grab something like Via headers from dialplan I don't exactly know, but okay. (issue #7563 reported by Corydon76)


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@40781 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 5d3869a1
No related branches found
No related tags found
No related merge requests found
......@@ -10857,9 +10857,14 @@ static char show_settings_usage[] =
static int func_header_read(struct ast_channel *chan, char *function, char *data, char *buf, size_t len)
{
struct sip_pvt *p;
const char *content;
if (!data) {
const char *content = NULL;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(header);
AST_APP_ARG(number);
);
int i, number, start = 0;
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "This function requires a header name.\n");
return -1;
}
......@@ -10871,6 +10876,11 @@ static int func_header_read(struct ast_channel *chan, char *function, char *data
return -1;
}
 
AST_STANDARD_APP_ARGS(args, data);
sscanf(args.number, "%d", &number);
if (number < 1)
number = 1;
p = chan->tech_pvt;
 
/* If there is no private structure, this channel is no longer alive */
......@@ -10879,7 +10889,8 @@ static int func_header_read(struct ast_channel *chan, char *function, char *data
return -1;
}
 
content = get_header(&p->initreq, data);
for (i = 0; i < number; i++)
content = __get_header(&p->initreq, args.header, &start);
 
if (ast_strlen_zero(content)) {
ast_channel_unlock(chan);
......@@ -10895,7 +10906,10 @@ static int func_header_read(struct ast_channel *chan, char *function, char *data
static struct ast_custom_function sip_header_function = {
.name = "SIP_HEADER",
.synopsis = "Gets the specified SIP header",
.syntax = "SIP_HEADER(<name>)",
.syntax = "SIP_HEADER(<name>[,<number>])",
.desc = "Since there are several headers (such as Via) which can occur multiple\n"
"times, SIP_HEADER takes an optional second argument to specify which header with\n"
"that name to retrieve. Headers start at offset 1.\n",
.read = func_header_read,
};
 
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment