dect
/
asterisk
Archived
13
0
Fork 0

Merged revisions 79904 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

(closes issue #10430)
........
r79904 | qwell | 2007-08-17 14:12:19 -0500 (Fri, 17 Aug 2007) | 11 lines

Don't send a semicolon over the wire in sip notify messages.
Caused by fix for issue 9938.

I basically took the code that existed before 9938 was fixed, and
 copied it into a new function - ast_unescape_semicolon

There should be very few places this will be needed (pbx_config
 does NOT need this (see issue 9938 for details))

Issue 10430, patch by me, with help/ideas from murf (thanks murf).

........


git-svn-id: http://svn.digium.com/svn/asterisk/trunk@79905 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
qwell 2007-08-17 19:13:25 +00:00
parent 75e0fdb010
commit 3a9bc6fc81
3 changed files with 23 additions and 1 deletions

View File

@ -12310,7 +12310,7 @@ static int sip_notify(int fd, int argc, char *argv[])
initreqprep(&req, p, SIP_NOTIFY);
for (var = varlist; var; var = var->next)
add_header(&req, var->name, var->value);
add_header(&req, var->name, ast_unescape_semicolon(var->value));
/* Recalculate our side, and recalculate Call ID */
ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip);

View File

@ -146,6 +146,13 @@ char *ast_strip(char *s),
*/
char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes);
/*!
\brief Strip backslash for "escaped" semicolons.
\brief s The string to be stripped (will be modified).
\return The stripped string.
*/
char *ast_unescape_semicolon(char *s);
/*!
\brief Size-limited null-terminating string copy.
\arg dst The destination buffer.

View File

@ -935,6 +935,21 @@ char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
return s;
}
char *ast_unescape_semicolon(char *s)
{
char *e;
char *work = s;
while ((e = strchr(work, ';'))) {
if ((e > work) && (*(e-1) == '\\')) {
memmove(e - 1, e, strlen(e) + 1);
work = e;
}
}
return s;
}
int ast_build_string_va(char **buffer, size_t *space, const char *fmt, va_list ap)
{
int result;