bridge_features: Support One touch Monitor/MixMonitor
[asterisk/asterisk.git] / include / asterisk / mixmonitor.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2013, Digium, Inc.
5  *
6  * Jonathan Rose <jrose@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 /*! \file
20  *
21  * \brief loadable MixMonitor functionality
22  *
23  * \author Jonathan Rose <jrose@digium.com>
24  */
25
26 /*!
27  * \brief Start a mixmonitor on a channel.
28  * \since 12.0.0
29  *
30  * \param chan Which channel to put the MixMonitor on
31  * \param filename What the name of the file should be
32  * \param options What options should be used for the mixmonitor
33  *
34  * \retval 0 on success
35  * \retval non-zero on failure
36  */
37 typedef int (*ast_mixmonitor_start_fn)(struct ast_channel *chan, const char *filename, const char *options);
38
39 /*!
40  * \brief Stop a mixmonitor on a channel.
41  * \since 12.0.0
42  *
43  * \param chan Which channel to stop a MixMonitor on
44  * \param mixmon_id Stop the MixMonitor with this mixmonid if it is on the channel (may be NULL)
45  *
46  * \retval 0 on success
47  * \retval non-zero on failure
48  */
49 typedef int (*ast_mixmonitor_stop_fn)(struct ast_channel *chan, const char *mixmon_id);
50
51 /*!
52  * \brief MixMonitor virtual methods table definition
53  * \since 12.0.0
54  */
55 struct ast_mixmonitor_methods {
56         ast_mixmonitor_start_fn start;
57         ast_mixmonitor_stop_fn stop;
58 };
59
60 /*!
61  * \brief Setup MixMonitor virtual methods table. Use this to provide the MixMonitor functionality from a loadable module.
62  * \since 12.0.0
63  *
64  * \param vmethod_table pointer to vmethod table providing mixmonitor functions
65  *
66  * \retval 0 if successful
67  * \retval non-zero on failure
68  */
69 int ast_set_mixmonitor_methods(struct ast_mixmonitor_methods *vmethod_table);
70
71 /*!
72  * \brief Clear the MixMonitor virtual methods table. Use this to cleanup function pointers provided by a module that set.
73  * \since 12.0.0
74  *
75  * \retval 0 if successful
76  * \retval non-zero on failure (occurs when methods aren't loaded)
77  */
78 int ast_clear_mixmonitor_methods(void);
79
80 /*!
81  * \brief Start a mixmonitor on a channel with the given parameters
82  * \since 12.0.0
83  *
84  * \param chan Which channel to apply the MixMonitor to
85  * \param filename filename to use for the recording
86  * \param options Optional arguments to be interpreted by the MixMonitor start function
87  *
88  * \retval 0 if successful
89  * \retval non-zero on failure
90  *
91  * \note This function will always fail is nothing has set the mixmonitor methods
92  */
93 int ast_start_mixmonitor(struct ast_channel *chan, const char *filename, const char *options);
94
95 /*!
96  * \brief Stop a mixmonitor on a channel with the given parameters
97  * \since 12.0.0
98  *
99  * \param chan Which channel to stop a MixMonitor on (may be NULL if mixmon_id is provided)
100  * \param mixmon_id Which mixmon_id should be stopped (may be NULL if chan is provided)
101  *
102  * \retval 0 if successful
103  * \retval non-zero on failure
104  */
105 int ast_stop_mixmonitor(struct ast_channel *chan, const char *mixmon_id);