Add initial SDP options.
[asterisk/asterisk.git] / main / sdp_options.c
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2017, Digium, Inc.
5  *
6  * Mark Michelson <mmichelson@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 #include "asterisk.h"
20
21 #include "asterisk/utils.h"
22 #include "asterisk/sdp_options.h"
23
24 struct ast_sdp_options {
25         enum ast_sdp_options_ice ice;
26         int telephone_event;
27         enum ast_sdp_options_repr repr;
28         enum ast_sdp_options_encryption encryption;
29 };
30
31 #define DEFAULT_ICE AST_SDP_ICE_DISABLED
32 #define DEFAULT_TELEPHONE_EVENT 0
33 #define DEFAULT_REPR AST_SDP_REPR_STRING
34 #define DEFAULT_ENCRYPTION AST_SDP_ENCRYPTION_DISABLED
35
36 static void set_defaults(struct ast_sdp_options *options)
37 {
38         options->ice = DEFAULT_ICE;
39         options->telephone_event = DEFAULT_TELEPHONE_EVENT;
40         options->repr = DEFAULT_REPR;
41         options->encryption = DEFAULT_ENCRYPTION;
42 }
43
44 struct ast_sdp_options *ast_sdp_options_alloc(void)
45 {
46         struct ast_sdp_options *options;
47
48         options = ast_calloc(1, sizeof(*options));
49         if (!options) {
50                 return NULL;
51         }
52         set_defaults(options);
53         return options;
54 }
55
56 void ast_sdp_options_free(struct ast_sdp_options *options)
57 {
58         ast_free(options);
59 }
60
61 int ast_sdp_options_set_ice(struct ast_sdp_options *options, enum ast_sdp_options_ice ice_setting)
62 {
63         ast_assert(options != NULL);
64
65         options->ice = ice_setting;
66         return 0;
67 }
68
69 enum ast_sdp_options_ice ast_sdp_options_get_ice(const struct ast_sdp_options *options)
70 {
71         ast_assert(options != NULL);
72
73         return options->ice;
74 }
75
76 int ast_sdp_options_set_telephone_event(struct ast_sdp_options *options, int telephone_event_enabled)
77 {
78         ast_assert(options != NULL);
79
80         options->telephone_event = telephone_event_enabled;
81         return 0;
82 }
83
84 int ast_sdp_options_get_telephone_event(const struct ast_sdp_options *options)
85 {
86         ast_assert(options != NULL);
87
88         return options->telephone_event;
89 }
90
91 int ast_sdp_options_set_repr(struct ast_sdp_options *options, enum ast_sdp_options_repr repr)
92 {
93         ast_assert(options != NULL);
94
95         options->repr = repr;
96         return 0;
97 }
98
99 enum ast_sdp_options_repr ast_sdp_options_get_repr(const struct ast_sdp_options *options)
100 {
101         ast_assert(options != NULL);
102
103         return options->repr;
104 }
105
106 int ast_sdp_options_set_encryption(struct ast_sdp_options *options,
107         enum ast_sdp_options_encryption encryption)
108 {
109         ast_assert(options != NULL);
110
111         options->encryption = encryption;
112         return 0;
113 }
114
115 enum ast_sdp_options_encryption ast_sdp_options_get_encryption(const struct ast_sdp_options *options)
116 {
117         ast_assert(options != NULL);
118
119         return options->encryption;
120 }