From: Joshua Colp Date: Mon, 21 Aug 2006 19:33:42 +0000 (+0000) Subject: Allow an offset for SIP_HEADER so you can get more then 1 header of the same name... X-Git-Tag: 1.4.0-beta1~338 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1c182a606a84e06e5ecd584407dae0c39fb04414;p=thirdparty%2Fasterisk.git 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 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index a2647b3fcd..7703530b88 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -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()", + .syntax = "SIP_HEADER([,])", + .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, };