Commit 1ef36087 authored by Youness Alaoui's avatar Youness Alaoui

implement retransmissions and timeout for msn set-active-destination

parent d9f07fac
...@@ -248,8 +248,6 @@ NICEAPI_EXPORT gboolean ...@@ -248,8 +248,6 @@ NICEAPI_EXPORT gboolean
nice_udp_turn_socket_set_peer (NiceSocket *sock, NiceAddress *peer) nice_udp_turn_socket_set_peer (NiceSocket *sock, NiceAddress *peer)
{ {
turn_priv *priv = (turn_priv *) sock->priv; turn_priv *priv = (turn_priv *) sock->priv;
StunMessage msg;
uint8_t buffer[STUN_MAX_MESSAGE_SIZE];
size_t stun_len; size_t stun_len;
struct sockaddr_storage sa; struct sockaddr_storage sa;
...@@ -281,35 +279,46 @@ nice_udp_turn_socket_set_peer (NiceSocket *sock, NiceAddress *peer) ...@@ -281,35 +279,46 @@ nice_udp_turn_socket_set_peer (NiceSocket *sock, NiceAddress *peer)
} }
return FALSE; return FALSE;
} else if (priv->compatibility == NICE_UDP_TURN_SOCKET_COMPATIBILITY_MSN) { } else if (priv->compatibility == NICE_UDP_TURN_SOCKET_COMPATIBILITY_MSN) {
if (!stun_agent_init_request (&priv->agent, &msg, TURNMessage *msg = g_new0 (TURNMessage, 1);
buffer, sizeof(buffer), STUN_OLD_SET_ACTIVE_DST)) if (!stun_agent_init_request (&priv->agent, &msg->message,
msg->buffer, sizeof(msg->buffer), STUN_OLD_SET_ACTIVE_DST)) {
g_free (msg);
return FALSE; return FALSE;
}
if (stun_message_append32 (&msg, STUN_ATTRIBUTE_MAGIC_COOKIE, if (stun_message_append32 (&msg->message, STUN_ATTRIBUTE_MAGIC_COOKIE,
TURN_MAGIC_COOKIE) != 0) TURN_MAGIC_COOKIE) != 0) {
g_free (msg);
return FALSE; return FALSE;
}
if (priv->username != NULL && priv->username_len > 0) { if (priv->username != NULL && priv->username_len > 0) {
if (stun_message_append_bytes (&msg, STUN_ATTRIBUTE_USERNAME, if (stun_message_append_bytes (&msg->message, STUN_ATTRIBUTE_USERNAME,
priv->username, priv->username_len) != 0) priv->username, priv->username_len) != 0) {
g_free (msg);
return FALSE; return FALSE;
} }
}
if (stun_message_append_addr (&msg, STUN_ATTRIBUTE_DESTINATION_ADDRESS, if (stun_message_append_addr (&msg->message,
(struct sockaddr *)&sa, sizeof(sa)) != 0) STUN_ATTRIBUTE_DESTINATION_ADDRESS,
(struct sockaddr *)&sa, sizeof(sa)) != 0) {
g_free (msg);
return FALSE; return FALSE;
}
stun_len = stun_agent_finish_message (&priv->agent, &msg, stun_len = stun_agent_finish_message (&priv->agent, &msg->message,
priv->password, priv->password_len); priv->password, priv->password_len);
if (stun_len > 0) { if (stun_len > 0) {
priv->current_binding = g_new0 (ChannelBinding, 1); priv->current_binding = g_new0 (ChannelBinding, 1);
priv->current_binding->channel = 0; priv->current_binding->channel = 0;
priv->current_binding->peer = *peer; priv->current_binding->peer = *peer;
nice_socket_send (priv->base_socket, &priv->server_addr, priv_send_turn_message (priv, msg);
stun_len, (gchar *)buffer);
}
return TRUE; return TRUE;
}
g_free (msg);
return FALSE;
} else if (priv->compatibility == NICE_UDP_TURN_SOCKET_COMPATIBILITY_GOOGLE) { } else if (priv->compatibility == NICE_UDP_TURN_SOCKET_COMPATIBILITY_GOOGLE) {
priv->current_binding = g_new0 (ChannelBinding, 1); priv->current_binding = g_new0 (ChannelBinding, 1);
priv->current_binding->channel = 0; priv->current_binding->channel = 0;
...@@ -366,6 +375,8 @@ nice_udp_turn_socket_parse_recv ( ...@@ -366,6 +375,8 @@ nice_udp_turn_socket_parse_recv (
} }
return 0; return 0;
} else if (stun_message_get_method (&msg) == STUN_OLD_SET_ACTIVE_DST) { } else if (stun_message_get_method (&msg) == STUN_OLD_SET_ACTIVE_DST) {
g_free (priv->current_binding_msg);
priv->current_binding_msg = NULL;
if (stun_message_get_class (&msg) == STUN_RESPONSE && if (stun_message_get_class (&msg) == STUN_RESPONSE &&
priv->compatibility == NICE_UDP_TURN_SOCKET_COMPATIBILITY_MSN) priv->compatibility == NICE_UDP_TURN_SOCKET_COMPATIBILITY_MSN)
goto msn_google_lock; goto msn_google_lock;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment