Skip to content

Commit

Permalink
juice, feat: support unbind stun.
Browse files Browse the repository at this point in the history
  • Loading branch information
xicilion committed Jun 13, 2024
1 parent 7545db9 commit 9f14e6c
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 9 deletions.
1 change: 1 addition & 0 deletions juice/include/juice/juice.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ JUICE_EXPORT int juice_set_local_ice_attributes(juice_agent_t *agent, const char
JUICE_EXPORT const char *juice_state_to_string(juice_state_t state);

JUICE_EXPORT int juice_bind_stun(const char *bind_address, int local_port, juice_cb_stun_binding_t cb);
JUICE_EXPORT int juice_unbind_stun();

// ICE server

Expand Down
26 changes: 26 additions & 0 deletions juice/src/conn.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,8 +248,34 @@ int conn_get_addrs(juice_agent_t *agent, addr_record_t *records, size_t size) {
return get_mode_entry(agent)->get_addrs_func(agent, records, size);
}

int juice_unbind_stun() {
conn_mode_entry_t *entry = &mode_entries[JUICE_CONCURRENCY_MODE_MUX];

mutex_lock(&entry->mutex);

conn_registry_t *registry = entry->registry;
if (!registry) {
mutex_unlock(&entry->mutex);
return -1;
}

mutex_lock(&registry->mutex);

registry->cb_stun_binding = NULL;
conn_mux_interrupt_registry(registry);

release_registry(entry);

mutex_unlock(&entry->mutex);

return 0;
}

int juice_bind_stun(const char *bind_address, int local_port, juice_cb_stun_binding_t cb)
{
if (!cb)
return juice_unbind_stun();

conn_mode_entry_t *entry = &mode_entries[JUICE_CONCURRENCY_MODE_MUX];

udp_socket_config_t config;
Expand Down
22 changes: 13 additions & 9 deletions juice/src/conn_mux.c
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ static juice_agent_t *lookup_agent(conn_registry_t *registry, char *buf, size_t
binding_info.pwd = separator + 1;
binding_info.family = sa->sa_family;
binding_info.address = host;
binding_info.port = addr_get_port(src);
binding_info.port = addr_get_port((struct sockaddr *)src);

registry->cb_stun_binding(&binding_info);

Expand Down Expand Up @@ -508,14 +508,7 @@ void conn_mux_unlock(juice_agent_t *agent) {
mutex_unlock(&registry->mutex);
}

int conn_mux_interrupt(juice_agent_t *agent) {
conn_impl_t *conn_impl = agent->conn_impl;
conn_registry_t *registry = conn_impl->registry;

mutex_lock(&registry->mutex);
conn_impl->next_timestamp = current_timestamp();
mutex_unlock(&registry->mutex);

int conn_mux_interrupt_registry(conn_registry_t *registry) {
JLOG_VERBOSE("Interrupting connections thread");

registry_impl_t *registry_impl = registry->impl;
Expand All @@ -531,6 +524,17 @@ int conn_mux_interrupt(juice_agent_t *agent) {
return 0;
}

int conn_mux_interrupt(juice_agent_t *agent) {
conn_impl_t *conn_impl = agent->conn_impl;
conn_registry_t *registry = conn_impl->registry;

mutex_lock(&registry->mutex);
conn_impl->next_timestamp = current_timestamp();
mutex_unlock(&registry->mutex);

return conn_mux_interrupt_registry(registry);
}

int conn_mux_send(juice_agent_t *agent, const addr_record_t *dst, const char *data, size_t size,
int ds) {
conn_impl_t *conn_impl = agent->conn_impl;
Expand Down
1 change: 1 addition & 0 deletions juice/src/conn_mux.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ int conn_mux_init(juice_agent_t *agent, conn_registry_t *registry, udp_socket_co
void conn_mux_cleanup(juice_agent_t *agent);
void conn_mux_lock(juice_agent_t *agent);
void conn_mux_unlock(juice_agent_t *agent);
int conn_mux_interrupt_registry(conn_registry_t *registry);
int conn_mux_interrupt(juice_agent_t *agent);
int conn_mux_send(juice_agent_t *agent, const addr_record_t *dst, const char *data, size_t size,
int ds);
Expand Down

0 comments on commit 9f14e6c

Please sign in to comment.