diff options
author | George Joseph <george.joseph@fairview5.com> | 2014-06-19 20:13:20 +0000 |
---|---|---|
committer | George Joseph <george.joseph@fairview5.com> | 2014-06-19 20:13:20 +0000 |
commit | d87f8c429e6852d11f7a3bddf6981e2f754c1ea8 (patch) | |
tree | 1ad84131a2d570ce903a00ac292e46ce18b6e493 /main/netsock2.c | |
parent | bd36288efa8fdb4cda14c1ff99862911aaa70b53 (diff) |
pjsip cli: Change Identify to show CIDR notation instead of netmasks.
* Added ast_sockaddr_cidr_bits() to count the 1 bits in an ast_sockaddr.
* Added ast_ha_join_cidr() which uses ast_sockaddr_cidr_bits() for the netmask
instead of ast_sockaddr_stringify_addr.
* Changed res_pjsip_endpoint_identifier_ip to call ast_ha_join_cidr() instead
of ast_ha_join() for the CLI output.
This is a CLI change only. AMI was not affected.
Tested by: George Joseph
Review: https://reviewboard.asterisk.org/r/3652/
........
Merged revisions 416737 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@416738 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/netsock2.c')
-rw-r--r-- | main/netsock2.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/main/netsock2.c b/main/netsock2.c index bd682b17d..0e83f27cf 100644 --- a/main/netsock2.c +++ b/main/netsock2.c @@ -129,6 +129,40 @@ char *ast_sockaddr_stringify_fmt(const struct ast_sockaddr *sa, int format) return ast_str_buffer(str); } +int ast_sockaddr_cidr_bits(const struct ast_sockaddr *sa) +{ + struct ast_sockaddr sa_ipv4; + const struct ast_sockaddr *sa_tmp; + int bits = 0; + int bytes; + int i; + int j; + char *addr; + + if (ast_sockaddr_isnull(sa)) { + return 0; + } + + if (ast_sockaddr_ipv4_mapped(sa, &sa_ipv4)) { + sa_tmp = &sa_ipv4; + } else { + sa_tmp = sa; + } + + bytes = sa_tmp->len; + addr = ((struct sockaddr *)&sa_tmp->ss)->sa_data; + + for (i = 0; i < bytes ; ++i) { + for (j = 0; j < 8; ++j) { + if ((addr[i] >> j) & 1) { + bits++; + } + } + } + + return bits; +} + int ast_sockaddr_split_hostport(char *str, char **host, char **port, int flags) { char *s = str; |