Squashed 'third_party/rawrtc/rawrtc/' content from commit aa3ae4b24
Change-Id: I38a655a4259b62f591334e90a1315bd4e7e4d8ec
git-subtree-dir: third_party/rawrtc/rawrtc
git-subtree-split: aa3ae4b247275cc6e69c30613b3a4ba7fdc82d1b
diff --git a/src/ice_server/utils.c b/src/ice_server/utils.c
new file mode 100644
index 0000000..0b1ac90
--- /dev/null
+++ b/src/ice_server/utils.c
@@ -0,0 +1,103 @@
+#include "server.h"
+#include <rawrtc/ice_gather_options.h>
+#include <rawrtc/ice_server.h>
+#include <re.h>
+
+/*
+ * Get the corresponding name for an ICE server type.
+ */
+static char const* ice_server_type_to_name(enum rawrtc_ice_server_type const type) {
+ switch (type) {
+ case RAWRTC_ICE_SERVER_TYPE_STUN:
+ return "stun";
+ case RAWRTC_ICE_SERVER_TYPE_TURN:
+ return "turn";
+ default:
+ return "???";
+ }
+}
+
+/*
+ * Get the corresponding name for an ICE server transport.
+ */
+static char const* ice_server_transport_to_name(enum rawrtc_ice_server_transport const transport) {
+ switch (transport) {
+ case RAWRTC_ICE_SERVER_TRANSPORT_UDP:
+ return "udp";
+ case RAWRTC_ICE_SERVER_TRANSPORT_TCP:
+ return "tcp";
+ case RAWRTC_ICE_SERVER_TRANSPORT_DTLS:
+ return "dtls";
+ case RAWRTC_ICE_SERVER_TRANSPORT_TLS:
+ return "tls";
+ default:
+ return "???";
+ }
+}
+
+/*
+ * Get the corresponding name for an ICE credential type.
+ */
+static char const* ice_credential_type_to_name(enum rawrtc_ice_credential_type const type) {
+ switch (type) {
+ case RAWRTC_ICE_CREDENTIAL_TYPE_NONE:
+ return "n/a";
+ case RAWRTC_ICE_CREDENTIAL_TYPE_PASSWORD:
+ return "password";
+ case RAWRTC_ICE_CREDENTIAL_TYPE_TOKEN:
+ return "token";
+ default:
+ return "???";
+ }
+}
+
+/*
+ * Print debug information for an ICE server.
+ */
+int rawrtc_ice_server_debug(
+ struct re_printf* const pf, struct rawrtc_ice_server const* const server) {
+ int err = 0;
+ struct le* le;
+
+ // Check arguments
+ if (!server) {
+ return 0;
+ }
+
+ err |= re_hprintf(pf, " ICE Server <%p>:\n", server);
+
+ // Credential type
+ err |= re_hprintf(
+ pf, " credential_type=%s\n", ice_credential_type_to_name(server->credential_type));
+ if (server->credential_type != RAWRTC_ICE_CREDENTIAL_TYPE_NONE) {
+ // Username
+ err |= re_hprintf(pf, " username=");
+ if (server->username) {
+ err |= re_hprintf(pf, "\"%s\"\n", server->username);
+ } else {
+ err |= re_hprintf(pf, "n/a\n");
+ }
+
+ // Credential
+ err |= re_hprintf(pf, " credential=");
+ if (server->credential) {
+ err |= re_hprintf(pf, "\"%s\"\n", server->credential);
+ } else {
+ err |= re_hprintf(pf, "n/a\n");
+ }
+ }
+
+ // URLs
+ for (le = list_head(&server->urls); le != NULL; le = le->next) {
+ struct rawrtc_ice_server_url* const url = le->data;
+
+ // URL, STUN/TURN, transport, currently gathering?
+ err |= re_hprintf(
+ pf, " URL=\"%s\" type=%s transport=%s resolved=%s\n", url->url,
+ ice_server_type_to_name(url->type), ice_server_transport_to_name(url->transport),
+ sa_is_any(&url->resolved_address) ? "no" : "yes");
+ }
+
+ // Done
+ return err;
+}