diff options
author | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2011-06-22 19:12:24 +0000 |
---|---|---|
committer | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2011-06-22 19:12:24 +0000 |
commit | a475c6be815db27db330ce5f5dd942d91ed64b17 (patch) | |
tree | 7a6ec853f73b606503c37503da65c5f3c106c647 /include/asterisk/netsock2.h | |
parent | 7d3d6f4674630531f2d7d12ec55812215b41c79c (diff) |
Merged revisions 324484 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
........
r324484 | twilson | 2011-06-22 13:52:04 -0500 (Wed, 22 Jun 2011) | 20 lines
Stop sending IPv6 link-local scope-ids in SIP messages
The idea behind the patch listed below was used, but in a more targeted manner.
There are now address stringification functions for addresses that are meant to
be sent to a remote party. Link-local scope-ids only make sense on the machine
from which they originate and so are stripped in the new functions.
There is also a host sanitization function added to chan_sip which is used
for when peer and dialog tohost fields or sip_registry hostnames are used to
craft a SIP message.
Also added are some basic unit tests for netsock2 address parsing.
(closes issue ASTERISK-17711)
Reported by: ch_djalel
Patches:
asterisk-1.8.3.2-ipv6_ll_scope.patch uploaded by ch_djalel (license 1251)
Review: https://reviewboard.asterisk.org/r/1278/
........
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@324487 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include/asterisk/netsock2.h')
-rw-r--r-- | include/asterisk/netsock2.h | 75 |
1 files changed, 73 insertions, 2 deletions
diff --git a/include/asterisk/netsock2.h b/include/asterisk/netsock2.h index c5c08cf73..afb1ea90f 100644 --- a/include/asterisk/netsock2.h +++ b/include/asterisk/netsock2.h @@ -152,8 +152,13 @@ int ast_sockaddr_cmp_addr(const struct ast_sockaddr *a, const struct ast_sockadd #define AST_SOCKADDR_STR_ADDR (1 << 0) #define AST_SOCKADDR_STR_PORT (1 << 1) #define AST_SOCKADDR_STR_BRACKETS (1 << 2) -#define AST_SOCKADDR_STR_HOST AST_SOCKADDR_STR_ADDR | AST_SOCKADDR_STR_BRACKETS -#define AST_SOCKADDR_STR_DEFAULT AST_SOCKADDR_STR_ADDR | AST_SOCKADDR_STR_PORT +#define AST_SOCKADDR_STR_REMOTE (1 << 3) +#define AST_SOCKADDR_STR_HOST (AST_SOCKADDR_STR_ADDR | AST_SOCKADDR_STR_BRACKETS) +#define AST_SOCKADDR_STR_DEFAULT (AST_SOCKADDR_STR_ADDR | AST_SOCKADDR_STR_PORT) +#define AST_SOCKADDR_STR_ADDR_REMOTE (AST_SOCKADDR_STR_ADDR | AST_SOCKADDR_STR_REMOTE) +#define AST_SOCKADDR_STR_HOST_REMOTE (AST_SOCKADDR_STR_HOST | AST_SOCKADDR_STR_REMOTE) +#define AST_SOCKADDR_STR_DEFAULT_REMOTE (AST_SOCKADDR_STR_DEFAULT | AST_SOCKADDR_STR_REMOTE) +#define AST_SOCKADDR_STR_FORMAT_MASK (AST_SOCKADDR_STR_ADDR | AST_SOCKADDR_STR_PORT | AST_SOCKADDR_STR_BRACKETS) /*! * \since 1.8 @@ -203,6 +208,23 @@ static inline char *ast_sockaddr_stringify(const struct ast_sockaddr *addr) * \since 1.8 * * \brief + * Wrapper around ast_sockaddr_stringify_fmt() with default format + * + * \note This address will be suitable for passing to a remote machine via the + * application layer. For example, the scope-id on a link-local IPv6 address + * will be stripped. + * + * \return same as ast_sockaddr_stringify_fmt() + */ +static inline char *ast_sockaddr_stringify_remote(const struct ast_sockaddr *addr) +{ + return ast_sockaddr_stringify_fmt(addr, AST_SOCKADDR_STR_DEFAULT_REMOTE); +} + +/*! + * \since 1.8 + * + * \brief * Wrapper around ast_sockaddr_stringify_fmt() to return an address only * * \return same as ast_sockaddr_stringify_fmt() @@ -216,6 +238,23 @@ static inline char *ast_sockaddr_stringify_addr(const struct ast_sockaddr *addr) * \since 1.8 * * \brief + * Wrapper around ast_sockaddr_stringify_fmt() to return an address only + * + * \note This address will be suitable for passing to a remote machine via the + * application layer. For example, the scope-id on a link-local IPv6 address + * will be stripped. + * + * \return same as ast_sockaddr_stringify_fmt() + */ +static inline char *ast_sockaddr_stringify_addr_remote(const struct ast_sockaddr *addr) +{ + return ast_sockaddr_stringify_fmt(addr, AST_SOCKADDR_STR_ADDR_REMOTE); +} + +/*! + * \since 1.8 + * + * \brief * Wrapper around ast_sockaddr_stringify_fmt() to return an address only, * suitable for a URL (with brackets for IPv6). * @@ -230,6 +269,24 @@ static inline char *ast_sockaddr_stringify_host(const struct ast_sockaddr *addr) * \since 1.8 * * \brief + * Wrapper around ast_sockaddr_stringify_fmt() to return an address only, + * suitable for a URL (with brackets for IPv6). + * + * \note This address will be suitable for passing to a remote machine via the + * application layer. For example, the scope-id on a link-local IPv6 address + * will be stripped. + * + * \return same as ast_sockaddr_stringify_fmt() + */ +static inline char *ast_sockaddr_stringify_host_remote(const struct ast_sockaddr *addr) +{ + return ast_sockaddr_stringify_fmt(addr, AST_SOCKADDR_STR_HOST_REMOTE); +} + +/*! + * \since 1.8 + * + * \brief * Wrapper around ast_sockaddr_stringify_fmt() to return a port only * * \return same as ast_sockaddr_stringify_fmt() @@ -413,6 +470,20 @@ int ast_sockaddr_is_ipv4_multicast(const struct ast_sockaddr *addr); * \since 1.8 * * \brief + * Determine if this is a link-local IPv6 address + * + * \warning You should rarely need this function. Only use if you know what + * you're doing. + * + * \retval 1 This is a link-local IPv6 address. + * \retval 0 This is link-local IPv6 address. + */ +int ast_sockaddr_is_ipv6_link_local(const struct ast_sockaddr *addr); + +/*! + * \since 1.8 + * + * \brief * Determine if this is an IPv6 address * * \warning You should rarely need this function. Only use if you know what |