Asterisk - The Open Source Telephony Project GIT-master-f36a736
Functions | Variables
mixmonitor.c File Reference

loadable MixMonitor functionality More...

#include "asterisk.h"
#include "asterisk/lock.h"
#include "asterisk/logger.h"
#include "asterisk/mixmonitor.h"
#include "asterisk/utils.h"
#include "asterisk/channel.h"
Include dependency graph for mixmonitor.c:

Go to the source code of this file.

Functions

int ast_clear_mixmonitor_methods (void)
 Clear the MixMonitor virtual methods table. Use this to cleanup function pointers provided by a module that set. More...
 
int ast_set_mixmonitor_methods (struct ast_mixmonitor_methods *method_table)
 Setup MixMonitor virtual methods table. Use this to provide the MixMonitor functionality from a loadable module. More...
 
int ast_start_mixmonitor (struct ast_channel *chan, const char *filename, const char *options)
 Start a mixmonitor on a channel with the given parameters. More...
 
int ast_stop_mixmonitor (struct ast_channel *chan, const char *mixmon_id)
 Stop a mixmonitor on a channel with the given parameters. More...
 

Variables

static ast_rwlock_t mixmonitor_lock = { PTHREAD_RWLOCK_INITIALIZER , NULL, {1, 0} }
 
static struct ast_mixmonitor_methods mixmonitor_methods
 
static int table_loaded = 0
 

Detailed Description

loadable MixMonitor functionality

Author
Jonathan Rose jrose.nosp@m.@dig.nosp@m.ium.c.nosp@m.om

Definition in file mixmonitor.c.

Function Documentation

◆ ast_clear_mixmonitor_methods()

int ast_clear_mixmonitor_methods ( void  )

Clear the MixMonitor virtual methods table. Use this to cleanup function pointers provided by a module that set.

Since
12.0.0
Return values
0if successful
non-zeroon failure (occurs when methods aren't loaded)

Definition at line 59 of file mixmonitor.c.

60{
62
63 if (!table_loaded) {
64 ast_log(LOG_ERROR, "Tried to clear mixmonitor methods, but none are currently loaded.\n");
65 return -1;
66 }
67
68 memset(&mixmonitor_methods, 0, sizeof(mixmonitor_methods));
69
70 table_loaded = 0;
71 return 0;
72}
ast_mutex_t lock
Definition: app_sla.c:331
#define ast_log
Definition: astobj2.c:42
#define LOG_ERROR
#define SCOPED_WRLOCK(varname, lock)
scoped lock specialization for write locks
Definition: lock.h:599
static int table_loaded
Definition: mixmonitor.c:41
static ast_rwlock_t mixmonitor_lock
Definition: mixmonitor.c:38
static struct ast_mixmonitor_methods mixmonitor_methods
Definition: mixmonitor.c:40

References ast_log, lock, LOG_ERROR, mixmonitor_lock, mixmonitor_methods, SCOPED_WRLOCK, and table_loaded.

Referenced by clear_mixmonitor_methods().

◆ ast_set_mixmonitor_methods()

int ast_set_mixmonitor_methods ( struct ast_mixmonitor_methods vmethod_table)

Setup MixMonitor virtual methods table. Use this to provide the MixMonitor functionality from a loadable module.

Since
12.0.0
Parameters
vmethod_tablepointer to vmethod table providing mixmonitor functions
Return values
0if successful
non-zeroon failure

Definition at line 43 of file mixmonitor.c.

44{
46
47 if (table_loaded) {
48 /* If mixmonitor methods have already been provided, reject the new set */
49 ast_log(LOG_ERROR, "Tried to set mixmonitor methods, but something else has already provided them.\n");
50 return -1;
51 }
52
53 mixmonitor_methods = *method_table;
54
55 table_loaded = 1;
56 return 0;
57}

References ast_log, lock, LOG_ERROR, mixmonitor_lock, mixmonitor_methods, SCOPED_WRLOCK, and table_loaded.

Referenced by set_mixmonitor_methods().

◆ ast_start_mixmonitor()

int ast_start_mixmonitor ( struct ast_channel chan,
const char *  filename,
const char *  options 
)

Start a mixmonitor on a channel with the given parameters.

Since
12.0.0
Parameters
chanWhich channel to apply the MixMonitor to
filenamefilename to use for the recording
optionsOptional arguments to be interpreted by the MixMonitor start function
Return values
0if successful
non-zeroon failure
Note
This function will always fail is nothing has set the mixmonitor methods

Definition at line 74 of file mixmonitor.c.

75{
77
79 ast_log(LOG_ERROR, "No loaded module currently provides MixMonitor starting functionality.\n");
80 return -1;
81 }
82
83 return mixmonitor_methods.start(chan, filename, options);
84}
#define SCOPED_RDLOCK(varname, lock)
scoped lock specialization for read locks
Definition: lock.h:594
ast_mixmonitor_start_fn start
Definition: mixmonitor.h:59
static struct test_options options

References ast_log, lock, LOG_ERROR, mixmonitor_lock, mixmonitor_methods, options, SCOPED_RDLOCK, and ast_mixmonitor_methods::start.

Referenced by setup_mixmonitor(), and start_automixmonitor().

◆ ast_stop_mixmonitor()

int ast_stop_mixmonitor ( struct ast_channel chan,
const char *  mixmon_id 
)

Stop a mixmonitor on a channel with the given parameters.

Since
12.0.0
Parameters
chanWhich channel to stop a MixMonitor on (may be NULL if mixmon_id is provided)
mixmon_idWhich mixmon_id should be stopped (may be NULL if chan is provided)
Return values
0if successful
non-zeroon failure

Definition at line 86 of file mixmonitor.c.

87{
89
91 ast_log(LOG_ERROR, "No loaded module currently provides MixMonitor stopping functionality.\n");
92 return -1;
93 }
94
95 return mixmonitor_methods.stop(chan, mixmon_id);
96}
ast_mixmonitor_stop_fn stop
Definition: mixmonitor.h:60

References ast_log, lock, LOG_ERROR, mixmonitor_lock, mixmonitor_methods, SCOPED_RDLOCK, and ast_mixmonitor_methods::stop.

Referenced by stop_automixmonitor().

Variable Documentation

◆ mixmonitor_lock

ast_rwlock_t mixmonitor_lock = { PTHREAD_RWLOCK_INITIALIZER , NULL, {1, 0} }
static

◆ mixmonitor_methods

struct ast_mixmonitor_methods mixmonitor_methods
static

◆ table_loaded

int table_loaded = 0
static

Definition at line 41 of file mixmonitor.c.

Referenced by ast_clear_mixmonitor_methods(), and ast_set_mixmonitor_methods().