NiceSocket *new_socket;
nice_address_set_port (&addr, 0);
- new_socket = nice_udp_bsd_socket_new (&addr);
+ new_socket = nice_udp_bsd_socket_new (&addr, NULL);
if (new_socket) {
_priv_set_socket_tos (agent, new_socket, stream->tos);
nice_component_attach_socket (component, new_socket);
#endif
+static const gchar *
+priv_host_candidate_result_to_string (HostCandidateResult result)
+{
+ switch (result) {
+ case HOST_CANDIDATE_SUCCESS:
+ return "success";
+ case HOST_CANDIDATE_FAILED:
+ return "failed";
+ case HOST_CANDIDATE_CANT_CREATE_SOCKET:
+ return "can't create socket";
+ case HOST_CANDIDATE_REDUNDANT:
+ return "redundant";
+ case HOST_CANDIDATE_DUPLICATE_PORT:
+ return "duplicate port";
+ default:
+ g_assert_not_reached ();
+ }
+}
+
NICEAPI_EXPORT gboolean
nice_agent_gather_candidates (
NiceAgent *agent,
host_candidate = NULL;
while (res == HOST_CANDIDATE_CANT_CREATE_SOCKET ||
res == HOST_CANDIDATE_DUPLICATE_PORT) {
- nice_debug ("Agent %p: Trying to create %s host candidate on port %d", agent,
- nice_candidate_transport_to_string (transport), current_port);
nice_address_set_port (addr, current_port);
res = discovery_add_local_host_candidate (agent, stream->id, cid,
addr, transport, accept_duplicate, &host_candidate);
+ if (nice_debug_is_enabled ()) {
+ gchar ip[NICE_ADDRESS_STRING_LEN];
+ nice_address_to_string (addr, ip);
+ nice_debug ("Agent %p: s%d/c%d: creation of host candidate "
+ "%s:[%s]:%u: %s%s", agent, stream->id, cid,
+ nice_candidate_transport_to_string (transport), ip,
+ transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE ?
+ 0 : current_port,
+ priv_host_candidate_result_to_string (res),
+ accept_duplicate ? " (accept duplicate)" : "");
+ }
if (current_port > 0)
current_port++;
if (current_port > component->max_port)
break;
}
- if (res == HOST_CANDIDATE_REDUNDANT) {
- nice_debug ("Agent %p: Ignoring local candidate, it's redundant",
- agent);
- continue;
- } else if (res == HOST_CANDIDATE_FAILED) {
- nice_debug ("Agent %p: Could not retrieve component %d/%d", agent,
- stream->id, cid);
- continue;
- } else if (res == HOST_CANDIDATE_CANT_CREATE_SOCKET) {
- if (nice_debug_is_enabled ()) {
- gchar ip[NICE_ADDRESS_STRING_LEN];
-
- nice_address_to_string (addr, ip);
- nice_debug ("Agent %p: Unable to add local host %s candidate %s"
- " for s%d:%d. Invalid interface?", agent,
- nice_candidate_transport_to_string (transport), ip,
- stream->id, component->id);
- }
+ if (res == HOST_CANDIDATE_REDUNDANT ||
+ res == HOST_CANDIDATE_FAILED ||
+ res == HOST_CANDIDATE_CANT_CREATE_SOCKET)
continue;
- } else if (res == HOST_CANDIDATE_DUPLICATE_PORT) {
- if (nice_debug_is_enabled ()) {
- gchar ip[NICE_ADDRESS_STRING_LEN];
-
- nice_address_to_string (addr, ip);
- nice_debug ("Agent %p: Unable to add local host %s candidate %s"
- " for"
- " s%d:%d. Every port is duplicated", agent, ip,
- nice_candidate_transport_to_string (transport), stream->id,
- component->id);
- }
- ret = FALSE;
- goto error;
+ else if (res == HOST_CANDIDATE_DUPLICATE_PORT) {
+ ret = FALSE;
+ goto error;
}
found_local_address = TRUE;
nice_address_to_string (&candidate->addr, ip);
nice_address_to_string (&c->addr, ip2);
- nice_debug ("Agent %p: Local host %s candidate %s"
- " for s%d:%d will use the same port %d as %s .", agent, ip,
+ nice_debug ("Agent %p: s%d/c%d: host candidate %s:[%s]:%u "
+ " will use the same port as %s:[%s]:%u", agent,
+ stream->id, component->id,
+ nice_candidate_transport_to_string (candidate->transport),
+ ip, nice_address_get_port (&candidate->addr),
nice_candidate_transport_to_string (c->transport),
- stream->id, component->id, nice_address_get_port (&c->addr),
- ip2);
+ ip2, nice_address_get_port (&c->addr));
return FALSE;
}
+ {
+ gchar ip[NICE_ADDRESS_STRING_LEN];
+ gchar ip2[NICE_ADDRESS_STRING_LEN];
+
+ nice_address_to_string (&candidate->addr, ip);
+ nice_address_to_string (&c->addr, ip2);
+ nice_debug ("Agent %p: s%d/c%d: host candidate %s:[%s]:%u "
+ " has the same port as %s:[%s]:%u from s%d/c%d", agent,
+ candidate->stream_id, candidate->component_id,
+ nice_candidate_transport_to_string (candidate->transport),
+ ip, nice_address_get_port (&candidate->addr),
+ nice_candidate_transport_to_string (c->transport),
+ ip2, nice_address_get_port (&c->addr),
+ stream->id, component->id);
+ }
return TRUE;
}
/* note: candidate username and password are left NULL as stream
level ufrag/password are used */
if (transport == NICE_CANDIDATE_TRANSPORT_UDP) {
- nicesock = nice_udp_bsd_socket_new (address);
+ nicesock = nice_udp_bsd_socket_new (address, &error);
} else if (transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE) {
nicesock = nice_tcp_active_socket_new (agent->main_context, address);
} else if (transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE) {
};
NiceSocket *
-nice_udp_bsd_socket_new (NiceAddress *addr)
+nice_udp_bsd_socket_new (NiceAddress *addr, GError **error)
{
union {
struct sockaddr_storage storage;
if (name.storage.ss_family == AF_UNSPEC || name.storage.ss_family == AF_INET) {
gsock = g_socket_new (G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_DATAGRAM,
- G_SOCKET_PROTOCOL_UDP, NULL);
+ G_SOCKET_PROTOCOL_UDP, error);
name.storage.ss_family = AF_INET;
#ifdef HAVE_SA_LEN
name.storage.ss_len = sizeof (struct sockaddr_in);
g_socket_set_blocking (gsock, false);
gaddr = g_socket_address_new_from_native (&name.addr, sizeof (name));
if (gaddr != NULL) {
- gret = g_socket_bind (gsock, gaddr, FALSE, NULL);
+ gret = g_socket_bind (gsock, gaddr, FALSE, error);
g_object_unref (gaddr);
}
G_BEGIN_DECLS
NiceSocket *
-nice_udp_bsd_socket_new (NiceAddress *addr);
+nice_udp_bsd_socket_new (NiceAddress *addr, GError **error);
G_END_DECLS
test_socket_initial_properties (void)
{
NiceSocket *sock;
+ GError *error = NULL;
- sock = nice_udp_bsd_socket_new (NULL);
+ sock = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (sock != NULL);
// not bound to a particular interface
{
NiceSocket *sock;
NiceAddress tmp;
+ GError *error = NULL;
- sock = nice_udp_bsd_socket_new (NULL);
+ sock = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (sock != NULL);
g_assert (nice_address_set_from_string (&tmp, "127.0.0.1"));
NiceSocket *client;
NiceAddress tmp;
gchar buf[5];
+ GError *error = NULL;
- server = nice_udp_bsd_socket_new (NULL);
+ server = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (server != NULL);
- client = nice_udp_bsd_socket_new (NULL);
+ client = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (client != NULL);
g_assert (nice_address_set_from_string (&tmp, "127.0.0.1"));
gchar buf[5];
NiceOutputMessage local_out_message;
NiceInputMessage local_in_message;
+ GError *error = NULL;
- sock = nice_udp_bsd_socket_new (NULL);
+ sock = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (sock != NULL);
g_assert (nice_address_set_from_string (&tmp, "127.0.0.1"));
NiceAddress tmp;
guint8 buf[20];
guint8 dummy_buf[9];
+ GError *error = NULL;
- server = nice_udp_bsd_socket_new (NULL);
+ server = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (server != NULL);
- client = nice_udp_bsd_socket_new (NULL);
+ client = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (client != NULL);
g_assert (nice_address_set_from_string (&tmp, "127.0.0.1"));
NiceSocket *server;
NiceSocket *client;
NiceAddress tmp;
+ GError *error = NULL;
- server = nice_udp_bsd_socket_new (NULL);
+ server = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (server != NULL);
- client = nice_udp_bsd_socket_new (NULL);
+ client = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
g_assert (client != NULL);
g_assert (nice_address_set_from_string (&tmp, "127.0.0.1"));
NiceCandidate *local_cand = NULL;
NiceCandidate *remote_cand = NULL;
NiceSocket *tmpsock;
+ GError *error = NULL;
g_assert (nice_agent_get_selected_pair (lagent, ls_id, 1, &local_cand,
&remote_cand));
g_assert (local_cand);
g_assert (remote_cand);
- tmpsock = nice_udp_bsd_socket_new (NULL);
+ tmpsock = nice_udp_bsd_socket_new (NULL, &error);
+ g_assert_no_error (error);
nice_socket_send (tmpsock, &remote_cand->addr, 4, "ABCD");
nice_socket_send (tmpsock, &local_cand->addr, 5, "ABCDE");
nice_socket_free (tmpsock);
GMainLoop *mainloop = NULL;
NiceAddress addr;
+ GError *error = NULL;
g_networking_init ();
nice_address_set_from_string (&addr, "127.0.0.1");
/* Standalone socket */
- udp_bsd = nice_udp_bsd_socket_new (&addr);
+ udp_bsd = nice_udp_bsd_socket_new (&addr, &error);
+ g_assert_no_error (error);
/* tcp_passive -> pseudossl -> udp_turn_over_tcp */
tcp_active = nice_tcp_active_socket_new (g_main_loop_get_context (mainloop),