blob: 36956f0d296211ce7873fb377ea47264a214da73 [file] [log] [blame]
James Kuszmaul4a42b182021-01-17 11:32:46 -08001#include "transport.h"
2#include "../ice_gatherer/gatherer.h"
3#include <rawrtc/ice_transport.h>
4#include <rawrtcc/code.h>
5#include <re.h>
6#include <rew.h>
7
8/*
9 * Get the current ICE role of the ICE transport.
10 * Return `RAWRTC_CODE_NO_VALUE` code in case the ICE role has not been
11 * determined yet.
12 */
13enum rawrtc_code rawrtc_ice_transport_get_role(
14 enum rawrtc_ice_role* const rolep, // de-referenced
15 struct rawrtc_ice_transport* const transport) {
16 enum ice_role re_role;
17 enum rawrtc_code error;
18 enum rawrtc_ice_role role;
19
20 // Check arguments
21 if (!rolep || !transport) {
22 return RAWRTC_CODE_INVALID_ARGUMENT;
23 }
24
25 // Get libre role from ICE instance
26 re_role = trice_local_role(transport->gatherer->ice);
27
28 // Translate role
29 error = rawrtc_re_ice_role_to_ice_role(&role, re_role);
30 if (error) {
31 return error;
32 }
33
34 // Unknown?
35 if (re_role == ICE_ROLE_UNKNOWN) {
36 return RAWRTC_CODE_NO_VALUE;
37 } else {
38 // Set pointer
39 *rolep = role;
40 return RAWRTC_CODE_SUCCESS;
41 }
42}
43
44/*
45 * Get the current state of the ICE transport.
46 */
47enum rawrtc_code rawrtc_ice_transport_get_state(
48 enum rawrtc_ice_transport_state* const statep, // de-referenced
49 struct rawrtc_ice_transport* const transport) {
50 // Check arguments
51 if (!statep || !transport) {
52 return RAWRTC_CODE_INVALID_ARGUMENT;
53 }
54
55 // Set state & done
56 *statep = transport->state;
57 return RAWRTC_CODE_SUCCESS;
58}