diff --git a/include/juice/juice.h b/include/juice/juice.h index b0a8eabf..9e85d800 100644 --- a/include/juice/juice.h +++ b/include/juice/juice.h @@ -41,6 +41,8 @@ extern "C" { #define JUICE_ERR_FAILED -2 // runtime error #define JUICE_ERR_NOT_AVAIL -3 // element not available #define JUICE_ERR_IGNORED -4 // ignored +#define JUICE_ERR_AGAIN -5 // buffer full +#define JUICE_ERR_TOO_LARGE -6 // datagram too large // ICE Agent diff --git a/src/agent.c b/src/agent.c index 099a86eb..13be4f47 100644 --- a/src/agent.c +++ b/src/agent.c @@ -1684,7 +1684,7 @@ int agent_send_stun_binding(juice_agent_t *agent, agent_stun_entry_t *entry, stu // Direct send int ret = agent_direct_send(agent, &entry->record, buffer, size, 0); if (ret < 0) { - if (ret == SENETUNREACH) + if (ret == -SENETUNREACH) JLOG_INFO("STUN binding failed: Network unreachable"); else JLOG_WARN("STUN message send failed"); diff --git a/src/conn_mux.c b/src/conn_mux.c index fb921aea..ca8baca1 100644 --- a/src/conn_mux.c +++ b/src/conn_mux.c @@ -522,6 +522,7 @@ int conn_mux_send(juice_agent_t *agent, const addr_record_t *dst, const char *da int ret = udp_sendto(registry_impl->sock, data, size, dst); if (ret < 0) { + ret = -sockerrno; if (sockerrno == SEAGAIN || sockerrno == SEWOULDBLOCK) JLOG_INFO("Send failed, buffer is full"); else if (sockerrno == SEMSGSIZE) diff --git a/src/conn_poll.c b/src/conn_poll.c index 3410ed2a..a8462c00 100644 --- a/src/conn_poll.c +++ b/src/conn_poll.c @@ -412,6 +412,7 @@ int conn_poll_send(juice_agent_t *agent, const addr_record_t *dst, const char *d int ret = udp_sendto(conn_impl->sock, data, size, dst); if (ret < 0) { + ret = -sockerrno; if (sockerrno == SEAGAIN || sockerrno == SEWOULDBLOCK) JLOG_INFO("Send failed, buffer is full"); else if (sockerrno == SEMSGSIZE) diff --git a/src/conn_thread.c b/src/conn_thread.c index 01074c17..1b054580 100644 --- a/src/conn_thread.c +++ b/src/conn_thread.c @@ -260,6 +260,7 @@ int conn_thread_send(juice_agent_t *agent, const addr_record_t *dst, const char int ret = udp_sendto(conn_impl->sock, data, size, dst); if (ret < 0) { + ret = -sockerrno; if (sockerrno == SEAGAIN || sockerrno == SEWOULDBLOCK) JLOG_INFO("Send failed, buffer is full"); else if (sockerrno == SEMSGSIZE) diff --git a/src/juice.c b/src/juice.c index 8ebb0fd2..70be6446 100644 --- a/src/juice.c +++ b/src/juice.c @@ -85,23 +85,21 @@ JUICE_EXPORT int juice_set_remote_gathering_done(juice_agent_t *agent) { } JUICE_EXPORT int juice_send(juice_agent_t *agent, const char *data, size_t size) { - if (!agent || (!data && size)) - return JUICE_ERR_INVALID; - - if (agent_send(agent, data, size, 0) < 0) - return JUICE_ERR_FAILED; - - return JUICE_ERR_SUCCESS; + return juice_send_diffserv(agent, data, size, 0); } JUICE_EXPORT int juice_send_diffserv(juice_agent_t *agent, const char *data, size_t size, int ds) { if (!agent || (!data && size)) return JUICE_ERR_INVALID; - if (agent_send(agent, data, size, ds) < 0) - return JUICE_ERR_FAILED; - - return JUICE_ERR_SUCCESS; + int ret = agent_send(agent, data, size, ds); + if(ret >= 0) + return JUICE_ERR_SUCCESS; + if(ret == -SEAGAIN || ret == -SEWOULDBLOCK) + return JUICE_ERR_AGAIN; + if(ret == -SEMSGSIZE) + return JUICE_ERR_TOO_LARGE; + return JUICE_ERR_FAILED; } JUICE_EXPORT juice_state_t juice_get_state(juice_agent_t *agent) { return agent_get_state(agent); }