Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
libnice
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
libnice
Commits
358a999f
Commit
358a999f
authored
Jul 20, 2010
by
Youness Alaoui
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote branch 'tester/ipv6' into nice-kakaroto
parents
7b221116
e2a118f7
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
71 additions
and
34 deletions
+71
-34
agent/interfaces.c
agent/interfaces.c
+53
-28
socket/tcp-bsd.c
socket/tcp-bsd.c
+12
-6
socket/udp-bsd.c
socket/udp-bsd.c
+6
-0
No files found.
agent/interfaces.c
View file @
358a999f
...
@@ -68,11 +68,13 @@ nice_interfaces_get_local_interfaces (void)
...
@@ -68,11 +68,13 @@ nice_interfaces_get_local_interfaces (void)
if
((
ifa
->
ifa_flags
&
IFF_UP
)
==
0
)
if
((
ifa
->
ifa_flags
&
IFF_UP
)
==
0
)
continue
;
continue
;
if
(
ifa
->
ifa_addr
==
NULL
||
ifa
->
ifa_addr
->
sa_family
!=
AF_INET
)
if
(
ifa
->
ifa_addr
==
NULL
)
continue
;
continue
;
nice_debug
(
"Found interface : %s"
,
ifa
->
ifa_name
);
if
(
ifa
->
ifa_addr
->
sa_family
==
AF_INET
||
ifa
->
ifa_addr
->
sa_family
==
AF_INET6
)
{
interfaces
=
g_list_prepend
(
interfaces
,
g_strdup
(
ifa
->
ifa_name
));
nice_debug
(
"Found interface : %s"
,
ifa
->
ifa_name
);
interfaces
=
g_list_prepend
(
interfaces
,
g_strdup
(
ifa
->
ifa_name
));
}
}
}
freeifaddrs
(
results
);
freeifaddrs
(
results
);
...
@@ -137,24 +139,28 @@ nice_interfaces_get_local_interfaces (void)
...
@@ -137,24 +139,28 @@ nice_interfaces_get_local_interfaces (void)
static
gboolean
static
gboolean
nice_interfaces_is_private_ip
(
const
struct
in_addr
in
)
nice_interfaces_is_private_ip
(
const
struct
sockaddr
*
sa
)
{
{
/* 10.x.x.x/8 */
if
(
sa
->
sa_family
==
AF_INET
)
{
if
(
in
.
s_addr
>>
24
==
0x0A
)
struct
sockaddr_in
*
sa4
=
(
struct
sockaddr_in
*
)
sa
;
return
TRUE
;
/* 172.16.0.0 - 172.31.255.255 = 172.16.0.0/10
*/
/* 10.x.x.x/8
*/
if
(
in
.
s_addr
>>
20
==
0xAC1
)
if
(
sa4
->
sin_addr
.
s_addr
>>
24
==
0x0A
)
return
TRUE
;
return
TRUE
;
/* 192.168.x.x/16
*/
/* 172.16.0.0 - 172.31.255.255 = 172.16.0.0/10
*/
if
(
in
.
s_addr
>>
16
==
0xC0A8
)
if
(
sa4
->
sin_addr
.
s_addr
>>
20
==
0xAC1
)
return
TRUE
;
return
TRUE
;
/* 169.254.x.x/16 (for APIPA)
*/
/* 192.168.x.x/16
*/
if
(
in
.
s_addr
>>
16
==
0xA9FE
)
if
(
sa4
->
sin_addr
.
s_addr
>>
16
==
0xC0A8
)
return
TRUE
;
return
TRUE
;
/* 169.254.x.x/16 (for APIPA) */
if
(
sa4
->
sin_addr
.
s_addr
>>
16
==
0xA9FE
)
return
TRUE
;
}
return
FALSE
;
return
FALSE
;
}
}
...
@@ -164,9 +170,8 @@ GList *
...
@@ -164,9 +170,8 @@ GList *
nice_interfaces_get_local_ips
(
gboolean
include_loopback
)
nice_interfaces_get_local_ips
(
gboolean
include_loopback
)
{
{
GList
*
ips
=
NULL
;
GList
*
ips
=
NULL
;
struct
sockaddr_in
*
sa
;
struct
ifaddrs
*
ifa
,
*
results
;
struct
ifaddrs
*
ifa
,
*
results
;
gchar
*
loopback
=
NULL
;
GList
*
loopbacks
=
NULL
;
if
(
getifaddrs
(
&
results
)
<
0
)
if
(
getifaddrs
(
&
results
)
<
0
)
...
@@ -174,34 +179,54 @@ nice_interfaces_get_local_ips (gboolean include_loopback)
...
@@ -174,34 +179,54 @@ nice_interfaces_get_local_ips (gboolean include_loopback)
/* Loop through the interface list and get the IP address of each IF */
/* Loop through the interface list and get the IP address of each IF */
for
(
ifa
=
results
;
ifa
;
ifa
=
ifa
->
ifa_next
)
{
for
(
ifa
=
results
;
ifa
;
ifa
=
ifa
->
ifa_next
)
{
char
addr_as_string
[
INET6_ADDRSTRLEN
+
1
];
int
ret
;
/* no ip address from interface that is down */
/* no ip address from interface that is down */
if
((
ifa
->
ifa_flags
&
IFF_UP
)
==
0
)
if
((
ifa
->
ifa_flags
&
IFF_UP
)
==
0
)
continue
;
continue
;
if
(
ifa
->
ifa_addr
==
NULL
||
ifa
->
ifa_addr
->
sa_family
!=
AF_INET
)
if
(
ifa
->
ifa_addr
==
NULL
)
{
continue
;
}
else
if
(
ifa
->
ifa_addr
->
sa_family
==
AF_INET
)
{
struct
sockaddr_in
*
sa4
=
(
struct
sockaddr_in
*
)
ifa
->
ifa_addr
;
if
(
inet_ntop
(
AF_INET
,
&
sa4
->
sin_addr
,
addr_as_string
,
INET6_ADDRSTRLEN
)
==
NULL
)
continue
;
}
else
if
(
ifa
->
ifa_addr
->
sa_family
==
AF_INET6
)
{
struct
sockaddr_in6
*
sa6
=
(
struct
sockaddr_in6
*
)
ifa
->
ifa_addr
;
/* Skip link-local addresses, they require a scope */
if
(
IN6_IS_ADDR_LINKLOCAL
(
sa6
->
sin6_addr
.
s6_addr
))
continue
;
if
(
inet_ntop
(
AF_INET6
,
&
sa6
->
sin6_addr
,
addr_as_string
,
INET6_ADDRSTRLEN
)
==
NULL
)
continue
;
}
else
continue
;
continue
;
sa
=
(
struct
sockaddr_in
*
)
ifa
->
ifa_addr
;
nice_debug
(
"Interface: %s"
,
ifa
->
ifa_name
);
nice_debug
(
"Interface: %s"
,
ifa
->
ifa_name
);
nice_debug
(
"IP Address: %s"
,
inet_ntoa
(
sa
->
sin_addr
)
);
nice_debug
(
"IP Address: %s"
,
addr_as_string
);
if
((
ifa
->
ifa_flags
&
IFF_LOOPBACK
)
==
IFF_LOOPBACK
)
{
if
((
ifa
->
ifa_flags
&
IFF_LOOPBACK
)
==
IFF_LOOPBACK
)
{
if
(
include_loopback
)
if
(
include_loopback
)
loopback
=
g_strdup
(
inet_ntoa
(
sa
->
sin_addr
));
loopback
s
=
g_list_append
(
loopbacks
,
g_strdup
(
addr_as_string
));
else
else
nice_debug
(
"Ignoring loopback interface"
);
nice_debug
(
"Ignoring loopback interface"
);
}
else
{
}
else
{
if
(
nice_interfaces_is_private_ip
(
sa
->
sin
_addr
))
if
(
nice_interfaces_is_private_ip
(
ifa
->
ifa
_addr
))
ips
=
g_list_append
(
ips
,
g_strdup
(
inet_ntoa
(
sa
->
sin_addr
)
));
ips
=
g_list_append
(
ips
,
g_strdup
(
addr_as_string
));
else
else
ips
=
g_list_prepend
(
ips
,
g_strdup
(
inet_ntoa
(
sa
->
sin_addr
)
));
ips
=
g_list_prepend
(
ips
,
g_strdup
(
addr_as_string
));
}
}
}
}
freeifaddrs
(
results
);
freeifaddrs
(
results
);
if
(
loopback
)
if
(
loopback
s
)
ips
=
g_list_
append
(
ips
,
loopback
);
ips
=
g_list_
concat
(
ips
,
loopbacks
);
return
ips
;
return
ips
;
}
}
...
@@ -267,7 +292,7 @@ nice_interfaces_get_local_ips (gboolean include_loopback)
...
@@ -267,7 +292,7 @@ nice_interfaces_get_local_ips (gboolean include_loopback)
else
else
nice_debug
(
"Ignoring loopback interface"
);
nice_debug
(
"Ignoring loopback interface"
);
}
else
{
}
else
{
if
(
nice_interfaces_is_private_ip
(
sa
->
sin_addr
))
{
if
(
nice_interfaces_is_private_ip
(
sa
))
{
ips
=
g_list_append
(
ips
,
g_strdup
(
inet_ntoa
(
sa
->
sin_addr
)));
ips
=
g_list_append
(
ips
,
g_strdup
(
inet_ntoa
(
sa
->
sin_addr
)));
}
else
{
}
else
{
ips
=
g_list_prepend
(
ips
,
g_strdup
(
inet_ntoa
(
sa
->
sin_addr
)));
ips
=
g_list_prepend
(
ips
,
g_strdup
(
inet_ntoa
(
sa
->
sin_addr
)));
...
...
socket/tcp-bsd.c
View file @
358a999f
...
@@ -101,14 +101,20 @@ nice_tcp_bsd_socket_new (NiceAgent *agent, GMainContext *ctx, NiceAddress *addr)
...
@@ -101,14 +101,20 @@ nice_tcp_bsd_socket_new (NiceAgent *agent, GMainContext *ctx, NiceAddress *addr)
nice_address_copy_to_sockaddr
(
addr
,
(
struct
sockaddr
*
)
&
name
);
nice_address_copy_to_sockaddr
(
addr
,
(
struct
sockaddr
*
)
&
name
);
if
((
sockfd
==
-
1
)
&&
if
(
sockfd
==
-
1
)
{
((
name
.
ss_family
==
AF_UNSPEC
)
||
if
(
name
.
ss_family
==
AF_UNSPEC
||
name
.
ss_family
==
AF_INET
)
{
(
name
.
ss_family
==
AF_INET
)))
{
sockfd
=
socket
(
PF_INET
,
SOCK_STREAM
,
0
);
sockfd
=
socket
(
PF_INET
,
SOCK_STREAM
,
0
);
name
.
ss_family
=
AF_INET
;
name
.
ss_family
=
AF_INET
;
#ifdef HAVE_SA_LEN
name
.
ss_len
=
sizeof
(
struct
sockaddr_in
);
#endif
}
else
if
(
name
.
ss_family
==
AF_INET6
)
{
sockfd
=
socket
(
PF_INET6
,
SOCK_STREAM
,
0
);
name
.
ss_family
=
AF_INET6
;
#ifdef HAVE_SA_LEN
#ifdef HAVE_SA_LEN
name
.
ss_len
=
sizeof
(
struct
sockaddr_in
);
name
.
ss_len
=
sizeof
(
struct
sockaddr_in6
);
#endif
#endif
}
}
}
if
(
sockfd
==
-
1
)
{
if
(
sockfd
==
-
1
)
{
...
...
socket/udp-bsd.c
View file @
358a999f
...
@@ -89,6 +89,12 @@ nice_udp_bsd_socket_new (NiceAddress *addr)
...
@@ -89,6 +89,12 @@ nice_udp_bsd_socket_new (NiceAddress *addr)
name
.
ss_family
=
AF_INET
;
name
.
ss_family
=
AF_INET
;
#ifdef HAVE_SA_LEN
#ifdef HAVE_SA_LEN
name
.
ss_len
=
sizeof
(
struct
sockaddr_in
);
name
.
ss_len
=
sizeof
(
struct
sockaddr_in
);
#endif
}
else
if
(
name
.
ss_family
==
AF_INET6
)
{
sockfd
=
socket
(
PF_INET6
,
SOCK_DGRAM
,
IPPROTO_UDP
);
name
.
ss_family
=
AF_INET6
;
#ifdef HAVE_SA_LEN
name
.
ss_len
=
sizeof
(
struct
sockaddr_in6
);
#endif
#endif
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment