SDP: Make SDP translation to/from internal representation more const.
[asterisk/asterisk.git] / include / asterisk / sdp_translator.h
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 #ifndef _ASTERISK_SDP_TRANSLATOR_H
20 #define _ASTERISK_SDP_TRANSLATOR_H
21
22 #include "asterisk/sdp_options.h"
23
24 struct sdp;
25
26 /*!
27  * \brief SDP translator operations
28  */
29 struct ast_sdp_translator_ops {
30         /*! The SDP representation on which this translator operates */
31         enum ast_sdp_options_impl repr;
32         /*! Allocate new translator private data for a translator */
33         void *(*translator_new)(void);
34         /*! Free translator private data */
35         void (*translator_free)(void *translator_priv);
36         /*! Convert the channel-native SDP into an internal Asterisk SDP */
37         struct ast_sdp *(*to_sdp)(const void *repr_sdp, void *translator_priv);
38         /*! Convert an internal Asterisk SDP into a channel-native SDP */
39         const void *(*from_sdp)(const struct ast_sdp *sdp, void *translator_priv);
40 };
41
42 /*!
43  * \brief An SDP translator
44  *
45  * An SDP translator is responsible for converting between Asterisk's internal
46  * representation of an SDP and the representation that is native to the channel
47  * driver. Translators are allocated per-use.
48  */
49 struct ast_sdp_translator {
50         /*! The operations this translator uses */
51         struct ast_sdp_translator_ops *ops;
52         /*! Private data this translator uses */
53         void *translator_priv;
54 };
55
56 /*!
57  * \brief Register an SDP translator
58  * \param ops The SDP operations defined by this translator
59  * \retval 0 Success
60  * \retval -1 FAIL
61  */
62 int ast_sdp_register_translator(struct ast_sdp_translator_ops *ops);
63
64 /*!
65  * \brief Unregister an SDP translator
66  */
67 void ast_sdp_unregister_translator(struct ast_sdp_translator_ops *ops);
68
69 /*!
70  * \brief Allocate a new SDP translator
71  * \param Representation corresponding to the translator_ops to use
72  * \retval NULL FAIL
73  * \retval non-NULL New SDP translator
74  */
75 struct ast_sdp_translator *ast_sdp_translator_new(enum ast_sdp_options_impl repr);
76
77 /*!
78  * \brief Free an SDP translator
79  */
80 void ast_sdp_translator_free(struct ast_sdp_translator *translator);
81
82 /*!
83  * \brief Translate a native SDP to internal Asterisk SDP
84  *
85  * \param translator The translator to use when translating
86  * \param native_sdp The SDP from the channel driver
87  * \retval NULL FAIL
88  * \retval Non-NULL The translated SDP
89  */
90 struct ast_sdp *ast_sdp_translator_to_sdp(struct ast_sdp_translator *translator, const void *native_sdp);
91
92 /*!
93  * \brief Translate an internal Asterisk SDP to a native SDP
94  *
95  * \param translator The translator to use when translating
96  * \param ast_sdp The Asterisk SDP to translate
97  * \retval NULL FAIL
98  * \retval non-NULL The translated SDP
99  */
100 const void *ast_sdp_translator_from_sdp(struct ast_sdp_translator *translator,
101         const struct ast_sdp *ast_sdp);
102
103 #endif /* _ASTERISK_SDP_TRANSLATOR_H */