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_parameters/parameters.c b/src/ice_parameters/parameters.c
new file mode 100644
index 0000000..e36cffb
--- /dev/null
+++ b/src/ice_parameters/parameters.c
@@ -0,0 +1,60 @@
+#include "parameters.h"
+#include <rawrtc/ice_parameters.h>
+#include <rawrtcc/code.h>
+#include <rawrtcc/utils.h>
+#include <re.h>
+
+/*
+ * Destructor for an existing ICE parameters instance.
+ */
+static void rawrtc_ice_parameters_destroy(void* arg) {
+ struct rawrtc_ice_parameters* const parameters = arg;
+
+ // Un-reference
+ mem_deref(parameters->username_fragment);
+ mem_deref(parameters->password);
+}
+
+/*
+ * Create a new ICE parameters instance.
+ * `*parametersp` must be unreferenced.
+ */
+enum rawrtc_code rawrtc_ice_parameters_create(
+ struct rawrtc_ice_parameters** const parametersp, // de-referenced
+ char* const username_fragment, // copied
+ char* const password, // copied
+ bool const ice_lite) {
+ struct rawrtc_ice_parameters* parameters;
+ enum rawrtc_code error;
+
+ // Check arguments
+ if (!parametersp || !username_fragment || !password) {
+ return RAWRTC_CODE_INVALID_ARGUMENT;
+ }
+
+ // Allocate
+ parameters = mem_zalloc(sizeof(*parameters), rawrtc_ice_parameters_destroy);
+ if (!parameters) {
+ return RAWRTC_CODE_NO_MEMORY;
+ }
+
+ // Set fields/copy
+ error = rawrtc_strdup(¶meters->username_fragment, username_fragment);
+ if (error) {
+ goto out;
+ }
+ error = rawrtc_strdup(¶meters->password, password);
+ if (error) {
+ goto out;
+ }
+ parameters->ice_lite = ice_lite;
+
+out:
+ if (error) {
+ mem_deref(parameters);
+ } else {
+ // Set pointer
+ *parametersp = parameters;
+ }
+ return error;
+}