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
0fdd03c4
Commit
0fdd03c4
authored
Mar 10, 2015
by
Philip Withnall
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
agent: Add missing preconditions to public API
Makes things a little bit safer to abuse.
parent
6a5ae86a
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
104 additions
and
6 deletions
+104
-6
agent/agent.c
agent/agent.c
+104
-6
No files found.
agent/agent.c
View file @
0fdd03c4
...
@@ -2357,6 +2357,9 @@ nice_agent_add_stream (
...
@@ -2357,6 +2357,9 @@ nice_agent_add_stream (
guint
ret
=
0
;
guint
ret
=
0
;
guint
i
;
guint
i
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
0
);
g_return_val_if_fail
(
n_components
>=
1
,
0
);
agent_lock
();
agent_lock
();
stream
=
stream_new
(
n_components
,
agent
);
stream
=
stream_new
(
n_components
,
agent
);
...
@@ -2397,6 +2400,9 @@ nice_agent_set_relay_info(NiceAgent *agent,
...
@@ -2397,6 +2400,9 @@ nice_agent_set_relay_info(NiceAgent *agent,
gboolean
ret
=
TRUE
;
gboolean
ret
=
TRUE
;
TurnServer
*
turn
;
TurnServer
*
turn
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
>=
1
,
FALSE
);
g_return_val_if_fail
(
component_id
>=
1
,
FALSE
);
g_return_val_if_fail
(
server_ip
,
FALSE
);
g_return_val_if_fail
(
server_ip
,
FALSE
);
g_return_val_if_fail
(
server_port
,
FALSE
);
g_return_val_if_fail
(
server_port
,
FALSE
);
g_return_val_if_fail
(
username
,
FALSE
);
g_return_val_if_fail
(
username
,
FALSE
);
...
@@ -2611,6 +2617,9 @@ nice_agent_gather_candidates (
...
@@ -2611,6 +2617,9 @@ nice_agent_gather_candidates (
GSList
*
local_addresses
=
NULL
;
GSList
*
local_addresses
=
NULL
;
gboolean
ret
=
TRUE
;
gboolean
ret
=
TRUE
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
>=
1
,
FALSE
);
agent_lock
();
agent_lock
();
stream
=
agent_find_stream
(
agent
,
stream_id
);
stream
=
agent_find_stream
(
agent
,
stream_id
);
...
@@ -2931,6 +2940,9 @@ nice_agent_remove_stream (
...
@@ -2931,6 +2940,9 @@ nice_agent_remove_stream (
Stream
*
stream
;
Stream
*
stream
;
g_return_if_fail
(
NICE_IS_AGENT
(
agent
));
g_return_if_fail
(
stream_id
>=
1
);
agent_lock
();
agent_lock
();
stream
=
agent_find_stream
(
agent
,
stream_id
);
stream
=
agent_find_stream
(
agent
,
stream_id
);
...
@@ -2971,6 +2983,10 @@ nice_agent_set_port_range (NiceAgent *agent, guint stream_id, guint component_id
...
@@ -2971,6 +2983,10 @@ nice_agent_set_port_range (NiceAgent *agent, guint stream_id, guint component_id
Stream
*
stream
;
Stream
*
stream
;
Component
*
component
;
Component
*
component
;
g_return_if_fail
(
NICE_IS_AGENT
(
agent
));
g_return_if_fail
(
stream_id
>=
1
);
g_return_if_fail
(
component_id
>=
1
);
agent_lock
();
agent_lock
();
if
(
agent_find_component
(
agent
,
stream_id
,
component_id
,
&
stream
,
if
(
agent_find_component
(
agent
,
stream_id
,
component_id
,
&
stream
,
...
@@ -2991,6 +3007,9 @@ nice_agent_add_local_address (NiceAgent *agent, NiceAddress *addr)
...
@@ -2991,6 +3007,9 @@ nice_agent_add_local_address (NiceAgent *agent, NiceAddress *addr)
{
{
NiceAddress
*
dupaddr
;
NiceAddress
*
dupaddr
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
addr
!=
NULL
,
FALSE
);
agent_lock
();
agent_lock
();
dupaddr
=
nice_address_dup
(
addr
);
dupaddr
=
nice_address_dup
(
addr
);
...
@@ -3120,6 +3139,9 @@ nice_agent_set_remote_credentials (
...
@@ -3120,6 +3139,9 @@ nice_agent_set_remote_credentials (
Stream
*
stream
;
Stream
*
stream
;
gboolean
ret
=
FALSE
;
gboolean
ret
=
FALSE
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
>=
1
,
FALSE
);
agent_lock
();
agent_lock
();
stream
=
agent_find_stream
(
agent
,
stream_id
);
stream
=
agent_find_stream
(
agent
,
stream_id
);
...
@@ -3148,6 +3170,9 @@ nice_agent_get_local_credentials (
...
@@ -3148,6 +3170,9 @@ nice_agent_get_local_credentials (
Stream
*
stream
;
Stream
*
stream
;
gboolean
ret
=
TRUE
;
gboolean
ret
=
TRUE
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
>=
1
,
FALSE
);
agent_lock
();
agent_lock
();
stream
=
agent_find_stream
(
agent
,
stream_id
);
stream
=
agent_find_stream
(
agent
,
stream_id
);
...
@@ -3216,6 +3241,10 @@ nice_agent_set_remote_candidates (NiceAgent *agent, guint stream_id, guint compo
...
@@ -3216,6 +3241,10 @@ nice_agent_set_remote_candidates (NiceAgent *agent, guint stream_id, guint compo
Stream
*
stream
;
Stream
*
stream
;
Component
*
component
;
Component
*
component
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
0
);
g_return_val_if_fail
(
stream_id
>=
1
,
0
);
g_return_val_if_fail
(
component_id
>=
1
,
0
);
nice_debug
(
"Agent %p: set_remote_candidates %d %d"
,
agent
,
stream_id
,
component_id
);
nice_debug
(
"Agent %p: set_remote_candidates %d %d"
,
agent
,
stream_id
,
component_id
);
agent_lock
();
agent_lock
();
...
@@ -4171,6 +4200,13 @@ nice_agent_recv (NiceAgent *agent, guint stream_id, guint component_id,
...
@@ -4171,6 +4200,13 @@ nice_agent_recv (NiceAgent *agent, guint stream_id, guint component_id,
GInputVector
local_bufs
=
{
buf
,
buf_len
};
GInputVector
local_bufs
=
{
buf
,
buf_len
};
NiceInputMessage
local_messages
=
{
&
local_bufs
,
1
,
NULL
,
0
};
NiceInputMessage
local_messages
=
{
&
local_bufs
,
1
,
NULL
,
0
};
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
-
1
);
g_return_val_if_fail
(
stream_id
>=
1
,
-
1
);
g_return_val_if_fail
(
component_id
>=
1
,
-
1
);
g_return_val_if_fail
(
buf
!=
NULL
||
buf_len
==
0
,
-
1
);
g_return_val_if_fail
(
cancellable
==
NULL
||
G_IS_CANCELLABLE
(
cancellable
),
-
1
);
g_return_val_if_fail
(
error
==
NULL
||
*
error
==
NULL
,
-
1
);
if
(
buf_len
>
G_MAXSSIZE
)
{
if
(
buf_len
>
G_MAXSSIZE
)
{
g_set_error
(
error
,
G_IO_ERROR
,
G_IO_ERROR_INVALID_ARGUMENT
,
g_set_error
(
error
,
G_IO_ERROR
,
G_IO_ERROR_INVALID_ARGUMENT
,
"The buffer length can't exceed G_MAXSSIZE: %"
G_GSSIZE_FORMAT
,
"The buffer length can't exceed G_MAXSSIZE: %"
G_GSSIZE_FORMAT
,
...
@@ -4205,6 +4241,13 @@ nice_agent_recv_nonblocking (NiceAgent *agent, guint stream_id,
...
@@ -4205,6 +4241,13 @@ nice_agent_recv_nonblocking (NiceAgent *agent, guint stream_id,
GInputVector
local_bufs
=
{
buf
,
buf_len
};
GInputVector
local_bufs
=
{
buf
,
buf_len
};
NiceInputMessage
local_messages
=
{
&
local_bufs
,
1
,
NULL
,
0
};
NiceInputMessage
local_messages
=
{
&
local_bufs
,
1
,
NULL
,
0
};
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
-
1
);
g_return_val_if_fail
(
stream_id
>=
1
,
-
1
);
g_return_val_if_fail
(
component_id
>=
1
,
-
1
);
g_return_val_if_fail
(
buf
!=
NULL
||
buf_len
==
0
,
-
1
);
g_return_val_if_fail
(
cancellable
==
NULL
||
G_IS_CANCELLABLE
(
cancellable
),
-
1
);
g_return_val_if_fail
(
error
==
NULL
||
*
error
==
NULL
,
-
1
);
if
(
buf_len
>
G_MAXSSIZE
)
{
if
(
buf_len
>
G_MAXSSIZE
)
{
g_set_error
(
error
,
G_IO_ERROR
,
G_IO_ERROR_INVALID_ARGUMENT
,
g_set_error
(
error
,
G_IO_ERROR
,
G_IO_ERROR_INVALID_ARGUMENT
,
"The buffer length can't exceed G_MAXSSIZE: %"
G_GSSIZE_FORMAT
,
"The buffer length can't exceed G_MAXSSIZE: %"
G_GSSIZE_FORMAT
,
...
@@ -4488,6 +4531,10 @@ nice_agent_get_local_candidates (
...
@@ -4488,6 +4531,10 @@ nice_agent_get_local_candidates (
GSList
*
ret
=
NULL
;
GSList
*
ret
=
NULL
;
GSList
*
item
=
NULL
;
GSList
*
item
=
NULL
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
stream_id
>=
1
,
NULL
);
g_return_val_if_fail
(
component_id
>=
1
,
NULL
);
agent_lock
();
agent_lock
();
if
(
!
agent_find_component
(
agent
,
stream_id
,
component_id
,
NULL
,
&
component
))
{
if
(
!
agent_find_component
(
agent
,
stream_id
,
component_id
,
NULL
,
&
component
))
{
...
@@ -4512,6 +4559,10 @@ nice_agent_get_remote_candidates (
...
@@ -4512,6 +4559,10 @@ nice_agent_get_remote_candidates (
Component
*
component
;
Component
*
component
;
GSList
*
ret
=
NULL
,
*
item
=
NULL
;
GSList
*
ret
=
NULL
,
*
item
=
NULL
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
stream_id
>=
1
,
NULL
);
g_return_val_if_fail
(
component_id
>=
1
,
NULL
);
agent_lock
();
agent_lock
();
if
(
!
agent_find_component
(
agent
,
stream_id
,
component_id
,
NULL
,
&
component
))
if
(
!
agent_find_component
(
agent
,
stream_id
,
component_id
,
NULL
,
&
component
))
{
{
...
@@ -4881,6 +4932,10 @@ nice_agent_attach_recv (
...
@@ -4881,6 +4932,10 @@ nice_agent_attach_recv (
Stream
*
stream
=
NULL
;
Stream
*
stream
=
NULL
;
gboolean
ret
=
FALSE
;
gboolean
ret
=
FALSE
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
>=
1
,
FALSE
);
g_return_val_if_fail
(
component_id
>=
1
,
FALSE
);
agent_lock
();
agent_lock
();
/* attach candidates */
/* attach candidates */
...
@@ -4930,6 +4985,12 @@ nice_agent_set_selected_pair (
...
@@ -4930,6 +4985,12 @@ nice_agent_set_selected_pair (
CandidatePair
pair
;
CandidatePair
pair
;
gboolean
ret
=
FALSE
;
gboolean
ret
=
FALSE
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
>=
1
,
FALSE
);
g_return_val_if_fail
(
component_id
>=
1
,
FALSE
);
g_return_val_if_fail
(
lfoundation
,
FALSE
);
g_return_val_if_fail
(
rfoundation
,
FALSE
);
agent_lock
();
agent_lock
();
/* step: check that params specify an existing pair */
/* step: check that params specify an existing pair */
...
@@ -4975,6 +5036,12 @@ nice_agent_get_selected_pair (NiceAgent *agent, guint stream_id,
...
@@ -4975,6 +5036,12 @@ nice_agent_get_selected_pair (NiceAgent *agent, guint stream_id,
Stream
*
stream
;
Stream
*
stream
;
gboolean
ret
=
FALSE
;
gboolean
ret
=
FALSE
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
>=
1
,
FALSE
);
g_return_val_if_fail
(
component_id
>=
1
,
FALSE
);
g_return_val_if_fail
(
local
!=
NULL
,
FALSE
);
g_return_val_if_fail
(
remote
!=
NULL
,
FALSE
);
agent_lock
();
agent_lock
();
/* step: check that params specify an existing pair */
/* step: check that params specify an existing pair */
...
@@ -5003,6 +5070,10 @@ nice_agent_get_selected_socket (NiceAgent *agent, guint stream_id,
...
@@ -5003,6 +5070,10 @@ nice_agent_get_selected_socket (NiceAgent *agent, guint stream_id,
NiceSocket
*
nice_socket
;
NiceSocket
*
nice_socket
;
GSocket
*
g_socket
=
NULL
;
GSocket
*
g_socket
=
NULL
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
stream_id
>=
1
,
NULL
);
g_return_val_if_fail
(
component_id
>=
1
,
NULL
);
agent_lock
();
agent_lock
();
/* Reliable streams are pseudotcp or MUST use RFC 4571 framing */
/* Reliable streams are pseudotcp or MUST use RFC 4571 framing */
...
@@ -5086,11 +5157,6 @@ nice_agent_set_selected_remote_candidate (
...
@@ -5086,11 +5157,6 @@ nice_agent_set_selected_remote_candidate (
g_return_val_if_fail
(
component_id
!=
0
,
FALSE
);
g_return_val_if_fail
(
component_id
!=
0
,
FALSE
);
g_return_val_if_fail
(
candidate
!=
NULL
,
FALSE
);
g_return_val_if_fail
(
candidate
!=
NULL
,
FALSE
);
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
!=
0
,
FALSE
);
g_return_val_if_fail
(
component_id
!=
0
,
FALSE
);
g_return_val_if_fail
(
candidate
!=
NULL
,
FALSE
);
agent_lock
();
agent_lock
();
/* step: check if the component exists*/
/* step: check if the component exists*/
...
@@ -5166,6 +5232,9 @@ nice_agent_set_stream_tos (NiceAgent *agent,
...
@@ -5166,6 +5232,9 @@ nice_agent_set_stream_tos (NiceAgent *agent,
GSList
*
i
,
*
j
;
GSList
*
i
,
*
j
;
Stream
*
stream
;
Stream
*
stream
;
g_return_if_fail
(
NICE_IS_AGENT
(
agent
));
g_return_if_fail
(
stream_id
>=
1
);
agent_lock
();
agent_lock
();
stream
=
agent_find_stream
(
agent
,
stream_id
);
stream
=
agent_find_stream
(
agent
,
stream_id
);
...
@@ -5190,6 +5259,8 @@ nice_agent_set_stream_tos (NiceAgent *agent,
...
@@ -5190,6 +5259,8 @@ nice_agent_set_stream_tos (NiceAgent *agent,
NICEAPI_EXPORT
void
NICEAPI_EXPORT
void
nice_agent_set_software
(
NiceAgent
*
agent
,
const
gchar
*
software
)
nice_agent_set_software
(
NiceAgent
*
agent
,
const
gchar
*
software
)
{
{
g_return_if_fail
(
NICE_IS_AGENT
(
agent
));
agent_lock
();
agent_lock
();
g_free
(
agent
->
software_attribute
);
g_free
(
agent
->
software_attribute
);
...
@@ -5210,6 +5281,9 @@ nice_agent_set_stream_name (NiceAgent *agent, guint stream_id,
...
@@ -5210,6 +5281,9 @@ nice_agent_set_stream_name (NiceAgent *agent, guint stream_id,
GSList
*
i
;
GSList
*
i
;
gboolean
ret
=
FALSE
;
gboolean
ret
=
FALSE
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
FALSE
);
g_return_val_if_fail
(
stream_id
>=
1
,
FALSE
);
agent_lock
();
agent_lock
();
if
(
name
!=
NULL
)
{
if
(
name
!=
NULL
)
{
...
@@ -5244,6 +5318,9 @@ nice_agent_get_stream_name (NiceAgent *agent, guint stream_id)
...
@@ -5244,6 +5318,9 @@ nice_agent_get_stream_name (NiceAgent *agent, guint stream_id)
Stream
*
stream
;
Stream
*
stream
;
gchar
*
name
=
NULL
;
gchar
*
name
=
NULL
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
stream_id
>=
1
,
NULL
);
agent_lock
();
agent_lock
();
stream
=
agent_find_stream
(
agent
,
stream_id
);
stream
=
agent_find_stream
(
agent
,
stream_id
);
...
@@ -5310,6 +5387,10 @@ nice_agent_get_default_local_candidate (NiceAgent *agent,
...
@@ -5310,6 +5387,10 @@ nice_agent_get_default_local_candidate (NiceAgent *agent,
Component
*
component
=
NULL
;
Component
*
component
=
NULL
;
NiceCandidate
*
default_candidate
=
NULL
;
NiceCandidate
*
default_candidate
=
NULL
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
stream_id
>=
1
,
NULL
);
g_return_val_if_fail
(
component_id
>=
1
,
NULL
);
agent_lock
();
agent_lock
();
/* step: check if the component exists*/
/* step: check if the component exists*/
...
@@ -5464,6 +5545,8 @@ nice_agent_generate_local_sdp (NiceAgent *agent)
...
@@ -5464,6 +5545,8 @@ nice_agent_generate_local_sdp (NiceAgent *agent)
GString
*
sdp
=
g_string_new
(
NULL
);
GString
*
sdp
=
g_string_new
(
NULL
);
GSList
*
i
;
GSList
*
i
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
agent_lock
();
agent_lock
();
for
(
i
=
agent
->
streams
;
i
;
i
=
i
->
next
)
{
for
(
i
=
agent
->
streams
;
i
;
i
=
i
->
next
)
{
...
@@ -5485,6 +5568,9 @@ nice_agent_generate_local_stream_sdp (NiceAgent *agent, guint stream_id,
...
@@ -5485,6 +5568,9 @@ nice_agent_generate_local_stream_sdp (NiceAgent *agent, guint stream_id,
gchar
*
ret
=
NULL
;
gchar
*
ret
=
NULL
;
Stream
*
stream
;
Stream
*
stream
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
stream_id
>=
1
,
NULL
);
agent_lock
();
agent_lock
();
stream
=
agent_find_stream
(
agent
,
stream_id
);
stream
=
agent_find_stream
(
agent
,
stream_id
);
...
@@ -5507,7 +5593,8 @@ nice_agent_generate_local_candidate_sdp (NiceAgent *agent,
...
@@ -5507,7 +5593,8 @@ nice_agent_generate_local_candidate_sdp (NiceAgent *agent,
{
{
GString
*
sdp
=
NULL
;
GString
*
sdp
=
NULL
;
g_return_val_if_fail
(
candidate
,
NULL
);
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
candidate
!=
NULL
,
NULL
);
agent_lock
();
agent_lock
();
...
@@ -5528,6 +5615,9 @@ nice_agent_parse_remote_sdp (NiceAgent *agent, const gchar *sdp)
...
@@ -5528,6 +5615,9 @@ nice_agent_parse_remote_sdp (NiceAgent *agent, const gchar *sdp)
gint
i
;
gint
i
;
gint
ret
=
0
;
gint
ret
=
0
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
-
1
);
g_return_val_if_fail
(
sdp
!=
NULL
,
-
1
);
agent_lock
();
agent_lock
();
for
(
l
=
agent
->
streams
;
l
;
l
=
l
->
next
)
{
for
(
l
=
agent
->
streams
;
l
;
l
=
l
->
next
)
{
...
@@ -5622,6 +5712,10 @@ nice_agent_parse_remote_stream_sdp (NiceAgent *agent, guint stream_id,
...
@@ -5622,6 +5712,10 @@ nice_agent_parse_remote_stream_sdp (NiceAgent *agent, guint stream_id,
GSList
*
candidates
=
NULL
;
GSList
*
candidates
=
NULL
;
gint
i
;
gint
i
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
stream_id
>=
1
,
NULL
);
g_return_val_if_fail
(
sdp
!=
NULL
,
NULL
);
agent_lock
();
agent_lock
();
stream
=
agent_find_stream
(
agent
,
stream_id
);
stream
=
agent_find_stream
(
agent
,
stream_id
);
...
@@ -5679,6 +5773,10 @@ nice_agent_parse_remote_candidate_sdp (NiceAgent *agent, guint stream_id,
...
@@ -5679,6 +5773,10 @@ nice_agent_parse_remote_candidate_sdp (NiceAgent *agent, guint stream_id,
NiceCandidateTransport
ctransport
;
NiceCandidateTransport
ctransport
;
guint
i
;
guint
i
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
NULL
);
g_return_val_if_fail
(
stream_id
>=
1
,
NULL
);
g_return_val_if_fail
(
sdp
!=
NULL
,
NULL
);
if
(
!
g_str_has_prefix
(
sdp
,
"a=candidate:"
))
if
(
!
g_str_has_prefix
(
sdp
,
"a=candidate:"
))
goto
done
;
goto
done
;
...
...
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