blob: e36cffb218230e4d49412182173c14e560d89162 [file] [log] [blame]
James Kuszmaul4a42b182021-01-17 11:32:46 -08001#include "parameters.h"
2#include <rawrtc/ice_parameters.h>
3#include <rawrtcc/code.h>
4#include <rawrtcc/utils.h>
5#include <re.h>
6
7/*
8 * Destructor for an existing ICE parameters instance.
9 */
10static void rawrtc_ice_parameters_destroy(void* arg) {
11 struct rawrtc_ice_parameters* const parameters = arg;
12
13 // Un-reference
14 mem_deref(parameters->username_fragment);
15 mem_deref(parameters->password);
16}
17
18/*
19 * Create a new ICE parameters instance.
20 * `*parametersp` must be unreferenced.
21 */
22enum rawrtc_code rawrtc_ice_parameters_create(
23 struct rawrtc_ice_parameters** const parametersp, // de-referenced
24 char* const username_fragment, // copied
25 char* const password, // copied
26 bool const ice_lite) {
27 struct rawrtc_ice_parameters* parameters;
28 enum rawrtc_code error;
29
30 // Check arguments
31 if (!parametersp || !username_fragment || !password) {
32 return RAWRTC_CODE_INVALID_ARGUMENT;
33 }
34
35 // Allocate
36 parameters = mem_zalloc(sizeof(*parameters), rawrtc_ice_parameters_destroy);
37 if (!parameters) {
38 return RAWRTC_CODE_NO_MEMORY;
39 }
40
41 // Set fields/copy
42 error = rawrtc_strdup(&parameters->username_fragment, username_fragment);
43 if (error) {
44 goto out;
45 }
46 error = rawrtc_strdup(&parameters->password, password);
47 if (error) {
48 goto out;
49 }
50 parameters->ice_lite = ice_lite;
51
52out:
53 if (error) {
54 mem_deref(parameters);
55 } else {
56 // Set pointer
57 *parametersp = parameters;
58 }
59 return error;
60}