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
26129cf6
Commit
26129cf6
authored
Feb 20, 2014
by
Olivier Crête
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
agent: Use locally allocated memory if the application buffer is not big enough for one STUN packet
parent
b80c112d
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
0 deletions
+55
-0
agent/agent.c
agent/agent.c
+55
-0
No files found.
agent/agent.c
View file @
26129cf6
...
@@ -2895,6 +2895,22 @@ output_message_get_size (const NiceOutputMessage *message)
...
@@ -2895,6 +2895,22 @@ output_message_get_size (const NiceOutputMessage *message)
return
message_len
;
return
message_len
;
}
}
static
gsize
input_message_get_size
(
const
NiceInputMessage
*
message
)
{
guint
i
;
gsize
message_len
=
0
;
/* Find the total size of the message */
for
(
i
=
0
;
(
message
->
n_buffers
>=
0
&&
i
<
(
guint
)
message
->
n_buffers
)
||
(
message
->
n_buffers
<
0
&&
message
->
buffers
[
i
].
buffer
!=
NULL
);
i
++
)
message_len
+=
message
->
buffers
[
i
].
size
;
return
message_len
;
}
/*
/*
* nice_input_message_iter_reset:
* nice_input_message_iter_reset:
* @iter: a #NiceInputMessageIter
* @iter: a #NiceInputMessageIter
...
@@ -3047,6 +3063,8 @@ nice_agent_recv_messages_blocking_or_nonblocking (NiceAgent *agent,
...
@@ -3047,6 +3063,8 @@ nice_agent_recv_messages_blocking_or_nonblocking (NiceAgent *agent,
gboolean
received_enough
=
FALSE
,
error_reported
=
FALSE
;
gboolean
received_enough
=
FALSE
,
error_reported
=
FALSE
;
gboolean
all_sockets_would_block
=
FALSE
;
gboolean
all_sockets_would_block
=
FALSE
;
GError
*
child_error
=
NULL
;
GError
*
child_error
=
NULL
;
NiceInputMessage
*
messages_orig
=
NULL
;
guint
i
;
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
-
1
);
g_return_val_if_fail
(
NICE_IS_AGENT
(
agent
),
-
1
);
g_return_val_if_fail
(
stream_id
>=
1
,
-
1
);
g_return_val_if_fail
(
stream_id
>=
1
,
-
1
);
...
@@ -3059,6 +3077,24 @@ nice_agent_recv_messages_blocking_or_nonblocking (NiceAgent *agent,
...
@@ -3059,6 +3077,24 @@ nice_agent_recv_messages_blocking_or_nonblocking (NiceAgent *agent,
if
(
n_messages
==
0
)
if
(
n_messages
==
0
)
return
0
;
return
0
;
/* Receive buffer size must be at least 1280 for STUN */
if
(
!
agent
->
reliable
)
{
for
(
i
=
0
;
i
<
n_messages
;
i
++
)
{
if
(
input_message_get_size
(
&
messages
[
i
])
<
1280
)
{
GInputVector
*
vec
;
if
(
messages_orig
==
NULL
)
messages_orig
=
g_memdup
(
messages
,
sizeof
(
NiceInputMessage
)
*
n_messages
);
vec
=
g_slice_new
(
GInputVector
);
vec
->
buffer
=
g_slice_alloc
(
1280
);
vec
->
size
=
1280
;
messages
[
i
].
buffers
=
vec
;
messages
[
i
].
n_buffers
=
1
;
}
}
}
agent_lock
();
agent_lock
();
if
(
!
agent_find_component
(
agent
,
stream_id
,
component_id
,
if
(
!
agent_find_component
(
agent
,
stream_id
,
component_id
,
...
@@ -3185,6 +3221,25 @@ done:
...
@@ -3185,6 +3221,25 @@ done:
agent_unlock
();
agent_unlock
();
if
(
messages_orig
)
{
for
(
i
=
0
;
i
<
n_messages
;
i
++
)
{
if
(
messages
[
i
].
buffers
!=
messages_orig
[
i
].
buffers
)
{
g_assert_cmpint
(
messages
[
i
].
n_buffers
,
==
,
1
);
memcpy_buffer_to_input_message
(
&
messages_orig
[
i
],
messages
[
i
].
buffers
[
0
].
buffer
,
messages
[
i
].
length
);
g_slice_free1
(
1280
,
messages
[
i
].
buffers
[
0
].
buffer
);
g_slice_free
(
GInputVector
,
messages
[
i
].
buffers
);
messages
[
i
].
buffers
=
messages_orig
[
i
].
buffers
;
messages
[
i
].
n_buffers
=
messages_orig
[
i
].
n_buffers
;
messages
[
i
].
length
=
messages_orig
[
i
].
length
;
}
}
g_free
(
messages_orig
);
}
return
n_valid_messages
;
return
n_valid_messages
;
}
}
...
...
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