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
83bb8d9a
Commit
83bb8d9a
authored
Nov 13, 2009
by
Youness Alaoui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replace all sockaddr instances with sockaddr_storage to be ipv6 safe
parent
35b4e5be
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
24 deletions
+35
-24
agent/conncheck.c
agent/conncheck.c
+35
-24
No files found.
agent/conncheck.c
View file @
83bb8d9a
...
@@ -568,10 +568,11 @@ static gboolean priv_conn_keepalive_tick_unlocked (NiceAgent *agent)
...
@@ -568,10 +568,11 @@ static gboolean priv_conn_keepalive_tick_unlocked (NiceAgent *agent)
Component
*
component
=
j
->
data
;
Component
*
component
=
j
->
data
;
if
(
component
->
selected_pair
.
local
!=
NULL
)
{
if
(
component
->
selected_pair
.
local
!=
NULL
)
{
CandidatePair
*
p
=
&
component
->
selected_pair
;
CandidatePair
*
p
=
&
component
->
selected_pair
;
struct
sockaddr
sockaddr
;
struct
sockaddr
_storage
sockaddr
;
memset
(
&
sockaddr
,
0
,
sizeof
(
sockaddr
));
memset
(
&
sockaddr
,
0
,
sizeof
(
sockaddr
));
nice_address_copy_to_sockaddr
(
&
p
->
remote
->
addr
,
&
sockaddr
);
nice_address_copy_to_sockaddr
(
&
p
->
remote
->
addr
,
(
struct
sockaddr
*
)
&
sockaddr
);
if
(
agent
->
compatibility
==
NICE_COMPATIBILITY_GOOGLE
)
{
if
(
agent
->
compatibility
==
NICE_COMPATIBILITY_GOOGLE
)
{
guint32
priority
=
nice_candidate_ice_priority_full
(
guint32
priority
=
nice_candidate_ice_priority_full
(
...
@@ -1639,7 +1640,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
...
@@ -1639,7 +1640,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
bool
cand_use
=
controlling
;
bool
cand_use
=
controlling
;
size_t
buffer_len
;
size_t
buffer_len
;
struct
sockaddr
sockaddr
;
struct
sockaddr
_storage
sockaddr
;
unsigned
int
timeout
;
unsigned
int
timeout
;
if
(
agent
->
compatibility
==
NICE_COMPATIBILITY_MSN
)
{
if
(
agent
->
compatibility
==
NICE_COMPATIBILITY_MSN
)
{
...
@@ -1648,7 +1649,8 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
...
@@ -1648,7 +1649,8 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
memset
(
&
sockaddr
,
0
,
sizeof
(
sockaddr
));
memset
(
&
sockaddr
,
0
,
sizeof
(
sockaddr
));
nice_address_copy_to_sockaddr
(
&
pair
->
remote
->
addr
,
&
sockaddr
);
nice_address_copy_to_sockaddr
(
&
pair
->
remote
->
addr
,
(
struct
sockaddr
*
)
&
sockaddr
);
{
{
gchar
tmpbuf
[
INET6_ADDRSTRLEN
];
gchar
tmpbuf
[
INET6_ADDRSTRLEN
];
...
@@ -2065,7 +2067,7 @@ static CandidateCheckPair *priv_process_response_check_for_peer_reflexive(NiceAg
...
@@ -2065,7 +2067,7 @@ static CandidateCheckPair *priv_process_response_check_for_peer_reflexive(NiceAg
*/
*/
static
gboolean
priv_map_reply_to_conn_check_request
(
NiceAgent
*
agent
,
Stream
*
stream
,
Component
*
component
,
NiceSocket
*
sockptr
,
const
NiceAddress
*
from
,
NiceCandidate
*
local_candidate
,
NiceCandidate
*
remote_candidate
,
StunMessage
*
resp
)
static
gboolean
priv_map_reply_to_conn_check_request
(
NiceAgent
*
agent
,
Stream
*
stream
,
Component
*
component
,
NiceSocket
*
sockptr
,
const
NiceAddress
*
from
,
NiceCandidate
*
local_candidate
,
NiceCandidate
*
remote_candidate
,
StunMessage
*
resp
)
{
{
struct
sockaddr
sockaddr
;
struct
sockaddr
_storage
sockaddr
;
socklen_t
socklen
=
sizeof
(
sockaddr
);
socklen_t
socklen
=
sizeof
(
sockaddr
);
GSList
*
i
;
GSList
*
i
;
StunUsageIceReturn
res
;
StunUsageIceReturn
res
;
...
@@ -2081,7 +2083,8 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, Stream *
...
@@ -2081,7 +2083,8 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, Stream *
stun_message_id
(
&
p
->
stun_message
,
discovery_id
);
stun_message_id
(
&
p
->
stun_message
,
discovery_id
);
if
(
memcmp
(
discovery_id
,
response_id
,
sizeof
(
StunTransactionId
))
==
0
)
{
if
(
memcmp
(
discovery_id
,
response_id
,
sizeof
(
StunTransactionId
))
==
0
)
{
res
=
stun_usage_ice_conncheck_process
(
resp
,
&
sockaddr
,
&
socklen
,
res
=
stun_usage_ice_conncheck_process
(
resp
,
(
struct
sockaddr
*
)
&
sockaddr
,
&
socklen
,
agent_to_ice_compatibility
(
agent
));
agent_to_ice_compatibility
(
agent
));
nice_debug
(
"Agent %p : stun_bind_process/conncheck for %p res %d "
nice_debug
(
"Agent %p : stun_bind_process/conncheck for %p res %d "
"(controlling=%d)."
,
agent
,
p
,
(
int
)
res
,
agent
->
controlling_mode
);
"(controlling=%d)."
,
agent
,
p
,
(
int
)
res
,
agent
->
controlling_mode
);
...
@@ -2132,7 +2135,7 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, Stream *
...
@@ -2132,7 +2135,7 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, Stream *
priv_conn_check_unfreeze_related
(
agent
,
stream
,
p
);
priv_conn_check_unfreeze_related
(
agent
,
stream
,
p
);
}
else
{
}
else
{
ok_pair
=
priv_process_response_check_for_peer_reflexive
(
agent
,
ok_pair
=
priv_process_response_check_for_peer_reflexive
(
agent
,
stream
,
component
,
p
,
sockptr
,
&
sockaddr
,
stream
,
component
,
p
,
sockptr
,
(
struct
sockaddr
*
)
&
sockaddr
,
local_candidate
,
remote_candidate
);
local_candidate
,
remote_candidate
);
}
}
...
@@ -2194,9 +2197,9 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, Stream *
...
@@ -2194,9 +2197,9 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, Stream *
*/
*/
static
gboolean
priv_map_reply_to_discovery_request
(
NiceAgent
*
agent
,
StunMessage
*
resp
)
static
gboolean
priv_map_reply_to_discovery_request
(
NiceAgent
*
agent
,
StunMessage
*
resp
)
{
{
struct
sockaddr
sockaddr
;
struct
sockaddr
_storage
sockaddr
;
socklen_t
socklen
=
sizeof
(
sockaddr
);
socklen_t
socklen
=
sizeof
(
sockaddr
);
struct
sockaddr
alternate
;
struct
sockaddr
_storage
alternate
;
socklen_t
alternatelen
=
sizeof
(
sockaddr
);
socklen_t
alternatelen
=
sizeof
(
sockaddr
);
GSList
*
i
;
GSList
*
i
;
StunUsageBindReturn
res
;
StunUsageBindReturn
res
;
...
@@ -2213,22 +2216,24 @@ static gboolean priv_map_reply_to_discovery_request (NiceAgent *agent, StunMessa
...
@@ -2213,22 +2216,24 @@ static gboolean priv_map_reply_to_discovery_request (NiceAgent *agent, StunMessa
stun_message_id
(
&
d
->
stun_message
,
discovery_id
);
stun_message_id
(
&
d
->
stun_message
,
discovery_id
);
if
(
memcmp
(
discovery_id
,
response_id
,
sizeof
(
StunTransactionId
))
==
0
)
{
if
(
memcmp
(
discovery_id
,
response_id
,
sizeof
(
StunTransactionId
))
==
0
)
{
res
=
stun_usage_bind_process
(
resp
,
&
sockaddr
,
&
socklen
,
res
=
stun_usage_bind_process
(
resp
,
(
struct
sockaddr
*
)
&
sockaddr
,
&
alternate
,
&
alternatelen
);
&
socklen
,
(
struct
sockaddr
*
)
&
alternate
,
&
alternatelen
);
nice_debug
(
"Agent %p : stun_bind_process/disc for %p res %d."
,
nice_debug
(
"Agent %p : stun_bind_process/disc for %p res %d."
,
agent
,
d
,
(
int
)
res
);
agent
,
d
,
(
int
)
res
);
if
(
res
==
STUN_USAGE_BIND_RETURN_ALTERNATE_SERVER
)
{
if
(
res
==
STUN_USAGE_BIND_RETURN_ALTERNATE_SERVER
)
{
/* handle alternate server */
/* handle alternate server */
NiceAddress
niceaddr
;
NiceAddress
niceaddr
;
nice_address_set_from_sockaddr
(
&
niceaddr
,
&
alternate
);
nice_address_set_from_sockaddr
(
&
niceaddr
,
(
struct
sockaddr
*
)
&
alternate
);
d
->
server
=
niceaddr
;
d
->
server
=
niceaddr
;
d
->
pending
=
FALSE
;
d
->
pending
=
FALSE
;
}
else
if
(
res
==
STUN_USAGE_BIND_RETURN_SUCCESS
)
{
}
else
if
(
res
==
STUN_USAGE_BIND_RETURN_SUCCESS
)
{
/* case: succesful binding discovery, create a new local candidate */
/* case: succesful binding discovery, create a new local candidate */
NiceAddress
niceaddr
;
NiceAddress
niceaddr
;
nice_address_set_from_sockaddr
(
&
niceaddr
,
&
sockaddr
);
nice_address_set_from_sockaddr
(
&
niceaddr
,
(
struct
sockaddr
*
)
&
sockaddr
);
discovery_add_server_reflexive_candidate
(
discovery_add_server_reflexive_candidate
(
d
->
agent
,
d
->
agent
,
...
@@ -2302,11 +2307,11 @@ priv_add_new_turn_refresh (CandidateDiscovery *cdisco, NiceCandidate *relay_cand
...
@@ -2302,11 +2307,11 @@ priv_add_new_turn_refresh (CandidateDiscovery *cdisco, NiceCandidate *relay_cand
*/
*/
static
gboolean
priv_map_reply_to_relay_request
(
NiceAgent
*
agent
,
StunMessage
*
resp
)
static
gboolean
priv_map_reply_to_relay_request
(
NiceAgent
*
agent
,
StunMessage
*
resp
)
{
{
struct
sockaddr
sockaddr
;
struct
sockaddr
_storage
sockaddr
;
socklen_t
socklen
=
sizeof
(
sockaddr
);
socklen_t
socklen
=
sizeof
(
sockaddr
);
struct
sockaddr
alternate
;
struct
sockaddr
_storage
alternate
;
socklen_t
alternatelen
=
sizeof
(
alternate
);
socklen_t
alternatelen
=
sizeof
(
alternate
);
struct
sockaddr
relayaddr
;
struct
sockaddr
_storage
relayaddr
;
socklen_t
relayaddrlen
=
sizeof
(
relayaddr
);
socklen_t
relayaddrlen
=
sizeof
(
relayaddr
);
uint32_t
lifetime
;
uint32_t
lifetime
;
uint32_t
bandwidth
;
uint32_t
bandwidth
;
...
@@ -2326,15 +2331,19 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
...
@@ -2326,15 +2331,19 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
if
(
memcmp
(
discovery_id
,
response_id
,
sizeof
(
StunTransactionId
))
==
0
)
{
if
(
memcmp
(
discovery_id
,
response_id
,
sizeof
(
StunTransactionId
))
==
0
)
{
res
=
stun_usage_turn_process
(
resp
,
res
=
stun_usage_turn_process
(
resp
,
&
relayaddr
,
&
relayaddrlen
,
&
sockaddr
,
&
socklen
,
&
alternate
,
&
alternatelen
,
(
struct
sockaddr
*
)
&
relayaddr
,
&
relayaddrlen
,
(
struct
sockaddr
*
)
&
sockaddr
,
&
socklen
,
(
struct
sockaddr
*
)
&
alternate
,
&
alternatelen
,
&
bandwidth
,
&
lifetime
,
agent_to_turn_compatibility
(
agent
));
&
bandwidth
,
&
lifetime
,
agent_to_turn_compatibility
(
agent
));
nice_debug
(
"Agent %p : stun_turn_process/disc for %p res %d."
,
nice_debug
(
"Agent %p : stun_turn_process/disc for %p res %d."
,
agent
,
d
,
(
int
)
res
);
agent
,
d
,
(
int
)
res
);
if
(
res
==
STUN_USAGE_TURN_RETURN_ALTERNATE_SERVER
)
{
if
(
res
==
STUN_USAGE_TURN_RETURN_ALTERNATE_SERVER
)
{
/* handle alternate server */
/* handle alternate server */
nice_address_set_from_sockaddr
(
&
d
->
server
,
&
alternate
);
nice_address_set_from_sockaddr
(
&
d
->
server
,
nice_address_set_from_sockaddr
(
&
d
->
turn
->
server
,
&
alternate
);
(
struct
sockaddr
*
)
&
alternate
);
nice_address_set_from_sockaddr
(
&
d
->
turn
->
server
,
(
struct
sockaddr
*
)
&
alternate
);
d
->
pending
=
FALSE
;
d
->
pending
=
FALSE
;
}
else
if
(
res
==
STUN_USAGE_TURN_RETURN_RELAY_SUCCESS
||
}
else
if
(
res
==
STUN_USAGE_TURN_RETURN_RELAY_SUCCESS
||
...
@@ -2345,7 +2354,8 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
...
@@ -2345,7 +2354,8 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
/* We also received our mapped address */
/* We also received our mapped address */
if
(
res
==
STUN_USAGE_TURN_RETURN_MAPPED_SUCCESS
)
{
if
(
res
==
STUN_USAGE_TURN_RETURN_MAPPED_SUCCESS
)
{
nice_address_set_from_sockaddr
(
&
niceaddr
,
&
sockaddr
);
nice_address_set_from_sockaddr
(
&
niceaddr
,
(
struct
sockaddr
*
)
&
sockaddr
);
discovery_add_server_reflexive_candidate
(
discovery_add_server_reflexive_candidate
(
d
->
agent
,
d
->
agent
,
...
@@ -2355,7 +2365,8 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
...
@@ -2355,7 +2365,8 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
d
->
nicesock
);
d
->
nicesock
);
}
}
nice_address_set_from_sockaddr
(
&
niceaddr
,
&
relayaddr
);
nice_address_set_from_sockaddr
(
&
niceaddr
,
(
struct
sockaddr
*
)
&
relayaddr
);
relay_cand
=
discovery_add_relay_candidate
(
relay_cand
=
discovery_add_relay_candidate
(
d
->
agent
,
d
->
agent
,
d
->
stream
->
id
,
d
->
stream
->
id
,
...
@@ -2626,7 +2637,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, Stream *stream,
...
@@ -2626,7 +2637,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, Stream *stream,
Component
*
component
,
NiceSocket
*
socket
,
const
NiceAddress
*
from
,
Component
*
component
,
NiceSocket
*
socket
,
const
NiceAddress
*
from
,
gchar
*
buf
,
guint
len
)
gchar
*
buf
,
guint
len
)
{
{
struct
sockaddr
sockaddr
;
struct
sockaddr
_storage
sockaddr
;
uint8_t
rbuf
[
MAX_STUN_DATAGRAM_PAYLOAD
];
uint8_t
rbuf
[
MAX_STUN_DATAGRAM_PAYLOAD
];
ssize_t
res
;
ssize_t
res
;
size_t
rbuf_len
=
sizeof
(
rbuf
);
size_t
rbuf_len
=
sizeof
(
rbuf
);
...
@@ -2645,7 +2656,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, Stream *stream,
...
@@ -2645,7 +2656,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, Stream *stream,
NiceCandidate
*
local_candidate
=
NULL
;
NiceCandidate
*
local_candidate
=
NULL
;
gboolean
discovery_msg
=
FALSE
;
gboolean
discovery_msg
=
FALSE
;
nice_address_copy_to_sockaddr
(
from
,
&
sockaddr
);
nice_address_copy_to_sockaddr
(
from
,
(
struct
sockaddr
*
)
&
sockaddr
);
/* note: contents of 'buf' already validated, so it is
/* note: contents of 'buf' already validated, so it is
* a valid and fully received STUN message */
* a valid and fully received STUN message */
...
@@ -2843,7 +2854,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, Stream *stream,
...
@@ -2843,7 +2854,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, Stream *stream,
rbuf_len
=
sizeof
(
rbuf
);
rbuf_len
=
sizeof
(
rbuf
);
res
=
stun_usage_ice_conncheck_create_reply
(
&
agent
->
stun_agent
,
&
req
,
res
=
stun_usage_ice_conncheck_create_reply
(
&
agent
->
stun_agent
,
&
req
,
&
msg
,
rbuf
,
&
rbuf_len
,
&
sockaddr
,
sizeof
(
sockaddr
),
&
msg
,
rbuf
,
&
rbuf_len
,
(
struct
sockaddr
*
)
&
sockaddr
,
sizeof
(
sockaddr
),
&
control
,
agent
->
tie_breaker
,
&
control
,
agent
->
tie_breaker
,
agent_to_ice_compatibility
(
agent
));
agent_to_ice_compatibility
(
agent
));
...
...
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