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

MUTESTREAM audiohooks. More...

#include "asterisk.h"
#include "asterisk/options.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/module.h"
#include "asterisk/config.h"
#include "asterisk/file.h"
#include "asterisk/pbx.h"
#include "asterisk/frame.h"
#include "asterisk/utils.h"
#include "asterisk/audiohook.h"
#include "asterisk/manager.h"
Include dependency graph for res_mutestream.c:

Go to the source code of this file.

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int func_mute_write (struct ast_channel *chan, const char *cmd, char *data, const char *value)
 Mute dialplan function. More...
 
static int load_module (void)
 
static int manager_mutestream (struct mansession *s, const struct message *m)
 
static int mute_channel (struct ast_channel *chan, const char *direction, int mute)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Mute audio stream resources" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct ast_custom_function mute_function
 

Detailed Description

MUTESTREAM audiohooks.

Author
Olle E. Johansson oej@e.nosp@m.dvin.nosp@m.a.net
Note
This module only handles audio streams today, but can easily be appended to also zero out text streams if there's an application for it. When we know and understand what happens if we zero out video, we can do that too.

Definition in file res_mutestream.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 235 of file res_mutestream.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 235 of file res_mutestream.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 235 of file res_mutestream.c.

◆ func_mute_write()

static int func_mute_write ( struct ast_channel chan,
const char *  cmd,
char *  data,
const char *  value 
)
static

Mute dialplan function.

Definition at line 151 of file res_mutestream.c.

152{
153 if (!chan) {
154 ast_log(LOG_WARNING, "No channel was provided to %s function.\n", cmd);
155 return -1;
156 }
157
158 return mute_channel(chan, data, ast_true(value));
159}
#define ast_log
Definition: astobj2.c:42
#define LOG_WARNING
static int mute_channel(struct ast_channel *chan, const char *direction, int mute)
int attribute_pure ast_true(const char *val)
Make sure something is true. Determine if a string containing a boolean value is "true"....
Definition: utils.c:2199
int value
Definition: syslog.c:37

References ast_log, ast_true(), LOG_WARNING, mute_channel(), and value.

◆ load_module()

static int load_module ( void  )
static

Definition at line 216 of file res_mutestream.c.

217{
218 int res;
219
222
224}
#define EVENT_FLAG_SYSTEM
Definition: manager.h:75
#define ast_manager_register_xml(action, authority, func)
Register a manager callback using XML documentation to describe the manager.
Definition: manager.h:191
@ AST_MODULE_LOAD_SUCCESS
Definition: module.h:70
@ AST_MODULE_LOAD_DECLINE
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78
#define ast_custom_function_register(acf)
Register a custom function.
Definition: pbx.h:1558
static struct ast_custom_function mute_function
static int manager_mutestream(struct mansession *s, const struct message *m)

References ast_custom_function_register, ast_manager_register_xml, AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, EVENT_FLAG_SYSTEM, manager_mutestream(), and mute_function.

◆ manager_mutestream()

static int manager_mutestream ( struct mansession s,
const struct message m 
)
static

Definition at line 167 of file res_mutestream.c.

168{
169 const char *channel = astman_get_header(m, "Channel");
170 const char *id = astman_get_header(m,"ActionID");
171 const char *state = astman_get_header(m,"State");
172 const char *direction = astman_get_header(m,"Direction");
173 char id_text[256];
174 struct ast_channel *c = NULL;
175
176 if (ast_strlen_zero(channel)) {
177 astman_send_error(s, m, "Channel not specified");
178 return 0;
179 }
180 if (ast_strlen_zero(state)) {
181 astman_send_error(s, m, "State not specified");
182 return 0;
183 }
185 astman_send_error(s, m, "Direction not specified");
186 return 0;
187 }
188 /* Ok, we have everything */
189
190 c = ast_channel_get_by_name(channel);
191 if (!c) {
192 astman_send_error(s, m, "No such channel");
193 return 0;
194 }
195
197 astman_send_error(s, m, "Failed to mute/unmute stream");
199 return 0;
200 }
201
203
204 if (!ast_strlen_zero(id)) {
205 snprintf(id_text, sizeof(id_text), "ActionID: %s\r\n", id);
206 } else {
207 id_text[0] = '\0';
208 }
209 astman_append(s, "Response: Success\r\n"
210 "%s"
211 "\r\n", id_text);
212 return 0;
213}
#define ast_channel_unref(c)
Decrease channel reference count.
Definition: channel.h:2958
struct ast_channel * ast_channel_get_by_name(const char *name)
Find a channel by name.
Definition: channel.c:1454
direction
void astman_send_error(struct mansession *s, const struct message *m, char *error)
Send error in manager transaction.
Definition: manager.c:3381
const char * astman_get_header(const struct message *m, char *var)
Get header from manager transaction.
Definition: manager.c:3042
void astman_append(struct mansession *s, const char *fmt,...)
Definition: manager.c:3302
#define NULL
Definition: resample.c:96
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
Main Channel structure associated with a channel.
static struct test_val c

References ast_channel_get_by_name(), ast_channel_unref, ast_strlen_zero(), ast_true(), astman_append(), astman_get_header(), astman_send_error(), c, mute_channel(), and NULL.

Referenced by load_module().

◆ mute_channel()

static int mute_channel ( struct ast_channel chan,
const char *  direction,
int  mute 
)
static

Definition at line 121 of file res_mutestream.c.

122{
123 unsigned int mute_direction = 0;
124 enum ast_frame_type frametype = AST_FRAME_VOICE;
125 int ret = 0;
126
127 if (!strcmp(direction, "in")) {
128 mute_direction = AST_MUTE_DIRECTION_READ;
129 } else if (!strcmp(direction, "out")) {
130 mute_direction = AST_MUTE_DIRECTION_WRITE;
131 } else if (!strcmp(direction, "all")) {
133 } else {
134 return -1;
135 }
136
137 ast_channel_lock(chan);
138
139 if (mute) {
140 ret = ast_channel_suppress(chan, mute_direction, frametype);
141 } else {
142 ret = ast_channel_unsuppress(chan, mute_direction, frametype);
143 }
144
145 ast_channel_unlock(chan);
146
147 return ret;
148}
#define ast_channel_lock(chan)
Definition: channel.h:2922
#define AST_MUTE_DIRECTION_READ
Definition: channel.h:4712
int ast_channel_suppress(struct ast_channel *chan, unsigned int direction, enum ast_frame_type frametype)
Suppress passing of a frame type on a channel.
Definition: channel.c:10777
int ast_channel_unsuppress(struct ast_channel *chan, unsigned int direction, enum ast_frame_type frametype)
Stop suppressing of a frame type on a channel.
Definition: channel.c:10839
#define AST_MUTE_DIRECTION_WRITE
Definition: channel.h:4713
#define ast_channel_unlock(chan)
Definition: channel.h:2923
ast_frame_type
Frame types.
@ AST_FRAME_VOICE

References ast_channel_lock, ast_channel_suppress(), ast_channel_unlock, ast_channel_unsuppress(), AST_FRAME_VOICE, AST_MUTE_DIRECTION_READ, and AST_MUTE_DIRECTION_WRITE.

Referenced by func_mute_write(), and manager_mutestream().

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 226 of file res_mutestream.c.

227{
229 /* Unregister AMI actions */
230 ast_manager_unregister("MuteAudio");
231
232 return 0;
233}
int ast_manager_unregister(const char *action)
Unregister a registered manager command.
Definition: manager.c:8041
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.

References ast_custom_function_unregister(), ast_manager_unregister(), and mute_function.

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Mute audio stream resources" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
static

Definition at line 235 of file res_mutestream.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 235 of file res_mutestream.c.

◆ mute_function

struct ast_custom_function mute_function
static
Initial value:
= {
.name = "MUTEAUDIO",
.write = func_mute_write,
}
static int func_mute_write(struct ast_channel *chan, const char *cmd, char *data, const char *value)
Mute dialplan function.

Definition at line 162 of file res_mutestream.c.

Referenced by load_module(), and unload_module().