[asterisk-commits] file: trunk r40781 - /trunk/channels/chan_sip.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Mon Aug 21 12:33:43 MST 2006


Author: file
Date: Mon Aug 21 14:33:42 2006
New Revision: 40781

URL: http://svn.digium.com/view/asterisk?rev=40781&view=rev
Log:
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)

Modified:
    trunk/channels/chan_sip.c

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?rev=40781&r1=40780&r2=40781&view=diff
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Mon Aug 21 14:33:42 2006
@@ -10857,9 +10857,14 @@
 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 @@
 		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 @@
 		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 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,
 };
 



More information about the asterisk-commits mailing list