blob: 32969d8f2ce4c3ccb3d702705617b3356d8102eb [file] [log] [blame]
James Kuszmaul4a42b182021-01-17 11:32:46 -08001#include "transport.h"
2#include <rawrtc/ice_transport.h>
3#include <rawrtcc/code.h>
4#include <re.h>
5#include <rew.h>
6
7/*
8 * Get the corresponding name for an ICE transport state.
9 */
10char const* rawrtc_ice_transport_state_to_name(enum rawrtc_ice_transport_state const state) {
11 switch (state) {
12 case RAWRTC_ICE_TRANSPORT_STATE_NEW:
13 return "new";
14 case RAWRTC_ICE_TRANSPORT_STATE_CHECKING:
15 return "checking";
16 case RAWRTC_ICE_TRANSPORT_STATE_CONNECTED:
17 return "connected";
18 case RAWRTC_ICE_TRANSPORT_STATE_COMPLETED:
19 return "completed";
20 case RAWRTC_ICE_TRANSPORT_STATE_DISCONNECTED:
21 return "disconnected";
22 case RAWRTC_ICE_TRANSPORT_STATE_FAILED:
23 return "failed";
24 case RAWRTC_ICE_TRANSPORT_STATE_CLOSED:
25 return "closed";
26 default:
27 return "???";
28 }
29}
30
31static enum rawrtc_ice_role const map_enum_ice_role[] = {
32 RAWRTC_ICE_ROLE_CONTROLLING,
33 RAWRTC_ICE_ROLE_CONTROLLED,
34};
35
36static char const* const map_str_ice_role[] = {
37 "controlling",
38 "controlled",
39};
40
41static size_t const map_ice_role_length = ARRAY_SIZE(map_enum_ice_role);
42
43/*
44 * Translate an ICE role to str.
45 */
46char const* rawrtc_ice_role_to_str(enum rawrtc_ice_role const role) {
47 size_t i;
48
49 for (i = 0; i < map_ice_role_length; ++i) {
50 if (map_enum_ice_role[i] == role) {
51 return map_str_ice_role[i];
52 }
53 }
54
55 return "???";
56}
57
58/*
59 * Translate a str to an ICE role (case-insensitive).
60 */
61enum rawrtc_code rawrtc_str_to_ice_role(
62 enum rawrtc_ice_role* const rolep, // de-referenced
63 char const* const str) {
64 size_t i;
65
66 // Check arguments
67 if (!rolep || !str) {
68 return RAWRTC_CODE_INVALID_ARGUMENT;
69 }
70
71 for (i = 0; i < map_ice_role_length; ++i) {
72 if (str_casecmp(map_str_ice_role[i], str) == 0) {
73 *rolep = map_enum_ice_role[i];
74 return RAWRTC_CODE_SUCCESS;
75 }
76 }
77
78 return RAWRTC_CODE_NO_VALUE;
79}
80
81/*
82 * Translate an ICE role to the corresponding re type.
83 */
84enum ice_role rawrtc_ice_role_to_re_ice_role(enum rawrtc_ice_role const role) {
85 // No conversion needed
86 return (enum ice_role) role;
87}
88
89/*
90 * Translate a re ICE role to the corresponding rawrtc role.
91 */
92enum rawrtc_code rawrtc_re_ice_role_to_ice_role(
93 enum rawrtc_ice_role* const rolep, // de-referenced
94 enum ice_role const re_role) {
95 // Check arguments
96 if (!rolep) {
97 return RAWRTC_CODE_INVALID_ARGUMENT;
98 }
99
100 // Translate role
101 switch (re_role) {
102 case ICE_ROLE_CONTROLLING:
103 *rolep = RAWRTC_ICE_ROLE_CONTROLLING;
104 return RAWRTC_CODE_SUCCESS;
105 case ICE_ROLE_CONTROLLED:
106 *rolep = RAWRTC_ICE_ROLE_CONTROLLED;
107 return RAWRTC_CODE_SUCCESS;
108 case ICE_ROLE_UNKNOWN:
109 *rolep = RAWRTC_ICE_ROLE_UNKNOWN;
110 return RAWRTC_CODE_SUCCESS;
111 default:
112 return RAWRTC_CODE_INVALID_ARGUMENT;
113 }
114}