summaryrefslogtreecommitdiff
path: root/main/sdp_options.c
diff options
context:
space:
mode:
authorGeorge Joseph <gjoseph@digium.com>2017-03-02 16:11:06 -0700
committerGeorge Joseph <gjoseph@digium.com>2017-03-14 12:26:32 -0600
commit8470c2bdea89f1ed89d8a773d775de96ededf3fb (patch)
tree82c15910f51fa05dca89ed75d3528b9e063b0805 /main/sdp_options.c
parent018e01543dd7392fd99873090b1781c05362b3cf (diff)
RFC sdp: Initial SDP creation
* Added additional fields to ast_sdp_options. * Re-organized ast_sdp. * Updated field names to correspond to RFC4566 terminology. * Created allocs/frees for SDP children. * Created getters/setters for SDP children where appropriate. * Added ast_sdp_create_from_state. * Refactored res_sdp_translator_pjmedia for changes. Change-Id: Iefbd877af7f5a4d3c74deead1bff8802661b0d48
Diffstat (limited to 'main/sdp_options.c')
-rw-r--r--main/sdp_options.c124
1 files changed, 55 insertions, 69 deletions
diff --git a/main/sdp_options.c b/main/sdp_options.c
index e18dfa55a..ca076ac7b 100644
--- a/main/sdp_options.c
+++ b/main/sdp_options.c
@@ -21,23 +21,63 @@
#include "asterisk/utils.h"
#include "asterisk/sdp_options.h"
-struct ast_sdp_options {
- enum ast_sdp_options_ice ice;
- int telephone_event;
- enum ast_sdp_options_repr repr;
- enum ast_sdp_options_encryption encryption;
-};
+#include "sdp_private.h"
#define DEFAULT_ICE AST_SDP_ICE_DISABLED
#define DEFAULT_TELEPHONE_EVENT 0
-#define DEFAULT_REPR AST_SDP_REPR_STRING
+#define DEFAULT_IMPL AST_SDP_IMPL_STRING
#define DEFAULT_ENCRYPTION AST_SDP_ENCRYPTION_DISABLED
+#define DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(field, assert_on_null) \
+void ast_sdp_options_set_##field(struct ast_sdp_options *options, const char *value) \
+{ \
+ ast_assert(options != NULL); \
+ if ((assert_on_null)) ast_assert(!ast_strlen_zero(value)); \
+ if (!strcmp(value, options->field)) return; \
+ ast_string_field_set(options, field, value); \
+} \
+const char *ast_sdp_options_get_##field(struct ast_sdp_options *options) \
+{ \
+ ast_assert(options != NULL); \
+ return options->field; \
+} \
+
+#define DEFINE_GETTERS_SETTERS_FOR(type, field) \
+void ast_sdp_options_set_##field(struct ast_sdp_options *options, type value) \
+{ \
+ ast_assert(options != NULL); \
+ options->field = value; \
+} \
+type ast_sdp_options_get_##field(struct ast_sdp_options *options) \
+{ \
+ ast_assert(options != NULL); \
+ return options->field; \
+} \
+
+DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(media_address, 0);
+DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(sdpowner, 0);
+DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(sdpsession, 0);
+DEFINE_STRINGFIELD_GETTERS_SETTERS_FOR(rtp_engine, 0);
+
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, bind_rtp_to_media_address);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, rtp_symmetric);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, telephone_event);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, rtp_ipv6);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, g726_non_standard);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, locally_held);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, tos_audio);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, cos_audio);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, tos_video);
+DEFINE_GETTERS_SETTERS_FOR(unsigned int, cos_video);
+DEFINE_GETTERS_SETTERS_FOR(enum ast_sdp_options_ice, ice);
+DEFINE_GETTERS_SETTERS_FOR(enum ast_sdp_options_impl, impl);
+DEFINE_GETTERS_SETTERS_FOR(enum ast_sdp_options_encryption, encryption);
+
static void set_defaults(struct ast_sdp_options *options)
{
options->ice = DEFAULT_ICE;
options->telephone_event = DEFAULT_TELEPHONE_EVENT;
- options->repr = DEFAULT_REPR;
+ options->impl = DEFAULT_IMPL;
options->encryption = DEFAULT_ENCRYPTION;
}
@@ -49,72 +89,18 @@ struct ast_sdp_options *ast_sdp_options_alloc(void)
if (!options) {
return NULL;
}
+
+ if (ast_string_field_init(options, 256)) {
+ ast_free(options);
+ return NULL;
+ }
+
set_defaults(options);
return options;
}
void ast_sdp_options_free(struct ast_sdp_options *options)
{
+ ast_string_field_free_memory(options);
ast_free(options);
}
-
-int ast_sdp_options_set_ice(struct ast_sdp_options *options, enum ast_sdp_options_ice ice_setting)
-{
- ast_assert(options != NULL);
-
- options->ice = ice_setting;
- return 0;
-}
-
-enum ast_sdp_options_ice ast_sdp_options_get_ice(const struct ast_sdp_options *options)
-{
- ast_assert(options != NULL);
-
- return options->ice;
-}
-
-int ast_sdp_options_set_telephone_event(struct ast_sdp_options *options, int telephone_event_enabled)
-{
- ast_assert(options != NULL);
-
- options->telephone_event = telephone_event_enabled;
- return 0;
-}
-
-int ast_sdp_options_get_telephone_event(const struct ast_sdp_options *options)
-{
- ast_assert(options != NULL);
-
- return options->telephone_event;
-}
-
-int ast_sdp_options_set_repr(struct ast_sdp_options *options, enum ast_sdp_options_repr repr)
-{
- ast_assert(options != NULL);
-
- options->repr = repr;
- return 0;
-}
-
-enum ast_sdp_options_repr ast_sdp_options_get_repr(const struct ast_sdp_options *options)
-{
- ast_assert(options != NULL);
-
- return options->repr;
-}
-
-int ast_sdp_options_set_encryption(struct ast_sdp_options *options,
- enum ast_sdp_options_encryption encryption)
-{
- ast_assert(options != NULL);
-
- options->encryption = encryption;
- return 0;
-}
-
-enum ast_sdp_options_encryption ast_sdp_options_get_encryption(const struct ast_sdp_options *options)
-{
- ast_assert(options != NULL);
-
- return options->encryption;
-}