Use sourcecode for libjuice

This commit is contained in:
dijunkun
2023-07-13 16:58:20 +08:00
parent ef6a04dc97
commit 8cd87a2646
76 changed files with 14877 additions and 179 deletions

207
thirdparty/libjuice/src/juice.c vendored Normal file
View File

@@ -0,0 +1,207 @@
/**
* Copyright (c) 2020 Paul-Louis Ageneau
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "juice.h"
#include "addr.h"
#include "agent.h"
#include "ice.h"
#ifndef NO_SERVER
#include "server.h"
#endif
#include <stdio.h>
JUICE_EXPORT juice_agent_t *juice_create(const juice_config_t *config) {
if (!config)
return NULL;
return agent_create(config);
}
JUICE_EXPORT void juice_destroy(juice_agent_t *agent) {
if (agent)
agent_destroy(agent);
}
JUICE_EXPORT int juice_gather_candidates(juice_agent_t *agent) {
if (!agent)
return JUICE_ERR_INVALID;
if (agent_gather_candidates(agent) < 0)
return JUICE_ERR_FAILED;
return JUICE_ERR_SUCCESS;
}
JUICE_EXPORT int juice_get_local_description(juice_agent_t *agent, char *buffer, size_t size) {
if (!agent || (!buffer && size))
return JUICE_ERR_INVALID;
if (agent_get_local_description(agent, buffer, size) < 0)
return JUICE_ERR_FAILED;
return JUICE_ERR_SUCCESS;
}
JUICE_EXPORT int juice_set_remote_description(juice_agent_t *agent, const char *sdp) {
if (!agent || !sdp)
return JUICE_ERR_INVALID;
if (agent_set_remote_description(agent, sdp) < 0)
return JUICE_ERR_FAILED;
return JUICE_ERR_SUCCESS;
}
JUICE_EXPORT int juice_add_remote_candidate(juice_agent_t *agent, const char *sdp) {
if (!agent || !sdp)
return JUICE_ERR_INVALID;
if (agent_add_remote_candidate(agent, sdp) < 0)
return JUICE_ERR_FAILED;
return JUICE_ERR_SUCCESS;
}
JUICE_EXPORT int juice_set_remote_gathering_done(juice_agent_t *agent) {
if (!agent)
return JUICE_ERR_INVALID;
if (agent_set_remote_gathering_done(agent) < 0)
return JUICE_ERR_FAILED;
return JUICE_ERR_SUCCESS;
}
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;
}
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;
}
JUICE_EXPORT juice_state_t juice_get_state(juice_agent_t *agent) { return agent_get_state(agent); }
JUICE_EXPORT int juice_get_selected_candidates(juice_agent_t *agent, char *local, size_t local_size,
char *remote, size_t remote_size) {
if (!agent || (!local && local_size) || (!remote && remote_size))
return JUICE_ERR_INVALID;
ice_candidate_t local_cand, remote_cand;
if (agent_get_selected_candidate_pair(agent, &local_cand, &remote_cand))
return JUICE_ERR_NOT_AVAIL;
if (local_size && ice_generate_candidate_sdp(&local_cand, local, local_size) < 0)
return JUICE_ERR_FAILED;
if (remote_size && ice_generate_candidate_sdp(&remote_cand, remote, remote_size) < 0)
return JUICE_ERR_FAILED;
return JUICE_ERR_SUCCESS;
}
JUICE_EXPORT int juice_get_selected_addresses(juice_agent_t *agent, char *local, size_t local_size,
char *remote, size_t remote_size) {
if (!agent || (!local && local_size) || (!remote && remote_size))
return JUICE_ERR_INVALID;
ice_candidate_t local_cand, remote_cand;
if (agent_get_selected_candidate_pair(agent, &local_cand, &remote_cand))
return JUICE_ERR_NOT_AVAIL;
if (local_size && addr_record_to_string(&local_cand.resolved, local, local_size) < 0)
return JUICE_ERR_FAILED;
if (remote_size && addr_record_to_string(&remote_cand.resolved, remote, remote_size) < 0)
return JUICE_ERR_FAILED;
return JUICE_ERR_SUCCESS;
}
JUICE_EXPORT const char *juice_state_to_string(juice_state_t state) {
switch (state) {
case JUICE_STATE_DISCONNECTED:
return "disconnected";
case JUICE_STATE_GATHERING:
return "gathering";
case JUICE_STATE_CONNECTING:
return "connecting";
case JUICE_STATE_CONNECTED:
return "connected";
case JUICE_STATE_COMPLETED:
return "completed";
case JUICE_STATE_FAILED:
return "failed";
default:
return "unknown";
}
}
JUICE_EXPORT juice_server_t *juice_server_create(const juice_server_config_t *config) {
#ifndef NO_SERVER
if (!config)
return NULL;
return server_create(config);
#else
(void)config;
JLOG_FATAL("The library was compiled without server support");
return NULL;
#endif
}
JUICE_EXPORT void juice_server_destroy(juice_server_t *server) {
#ifndef NO_SERVER
if (server)
server_destroy(server);
#else
(void)server;
#endif
}
JUICE_EXPORT uint16_t juice_server_get_port(juice_server_t *server) {
#ifndef NO_SERVER
return server ? server_get_port(server) : 0;
#else
(void)server;
return 0;
#endif
}
JUICE_EXPORT int juice_server_add_credentials(juice_server_t *server,
const juice_server_credentials_t *credentials,
unsigned long lifetime_ms) {
#ifndef NO_SERVER
if (!server || !credentials)
return JUICE_ERR_INVALID;
if (server_add_credentials(server, credentials, (timediff_t)lifetime_ms) < 0)
return JUICE_ERR_FAILED;
return JUICE_ERR_SUCCESS;
#else
(void)server;
(void)credentials;
(void)lifetime_ms;
return JUICE_ERR_INVALID;
#endif
}