Asterisk - The Open Source Telephony Project  18.5.0
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 = "30ef0c93b36035ec78c9cfd712d36d9b" , .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 understands 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 238 of file res_mutestream.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 238 of file res_mutestream.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module* AST_MODULE_SELF_SYM ( void  )

Definition at line 238 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 154 of file res_mutestream.c.

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

155 {
156  if (!chan) {
157  ast_log(LOG_WARNING, "No channel was provided to %s function.\n", cmd);
158  return -1;
159  }
160 
161  return mute_channel(chan, data, ast_true(value));
162 }
#define LOG_WARNING
Definition: logger.h:274
int value
Definition: syslog.c:37
#define ast_log
Definition: astobj2.c:42
int attribute_pure ast_true(const char *val)
Make sure something is true. Determine if a string containing a boolean value is "true". This function checks to see whether a string passed to it is an indication of an "true" value. It checks to see if the string is "yes", "true", "y", "t", "on" or "1".
Definition: main/utils.c:1951
static int mute_channel(struct ast_channel *chan, const char *direction, int mute)

◆ load_module()

static int load_module ( void  )
static

Definition at line 219 of file res_mutestream.c.

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

220 {
221  int res;
222 
225 
227 }
#define EVENT_FLAG_SYSTEM
Definition: manager.h:71
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78
static struct ast_custom_function mute_function
#define ast_manager_register_xml(action, authority, func)
Register a manager callback using XML documentation to describe the manager.
Definition: manager.h:186
#define ast_custom_function_register(acf)
Register a custom function.
Definition: pbx.h:1508
static int manager_mutestream(struct mansession *s, const struct message *m)

◆ manager_mutestream()

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

Definition at line 170 of file res_mutestream.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().

171 {
172  const char *channel = astman_get_header(m, "Channel");
173  const char *id = astman_get_header(m,"ActionID");
174  const char *state = astman_get_header(m,"State");
175  const char *direction = astman_get_header(m,"Direction");
176  char id_text[256];
177  struct ast_channel *c = NULL;
178 
179  if (ast_strlen_zero(channel)) {
180  astman_send_error(s, m, "Channel not specified");
181  return 0;
182  }
183  if (ast_strlen_zero(state)) {
184  astman_send_error(s, m, "State not specified");
185  return 0;
186  }
187  if (ast_strlen_zero(direction)) {
188  astman_send_error(s, m, "Direction not specified");
189  return 0;
190  }
191  /* Ok, we have everything */
192 
193  c = ast_channel_get_by_name(channel);
194  if (!c) {
195  astman_send_error(s, m, "No such channel");
196  return 0;
197  }
198 
199  if (mute_channel(c, direction, ast_true(state))) {
200  astman_send_error(s, m, "Failed to mute/unmute stream");
202  return 0;
203  }
204 
206 
207  if (!ast_strlen_zero(id)) {
208  snprintf(id_text, sizeof(id_text), "ActionID: %s\r\n", id);
209  } else {
210  id_text[0] = '\0';
211  }
212  astman_append(s, "Response: Success\r\n"
213  "%s"
214  "\r\n", id_text);
215  return 0;
216 }
Main Channel structure associated with a channel.
void astman_append(struct mansession *s, const char *fmt,...)
Definition: manager.c:3080
#define ast_channel_unref(c)
Decrease channel reference count.
Definition: channel.h:2981
static struct test_val c
Definition: muted.c:95
#define NULL
Definition: resample.c:96
const char * astman_get_header(const struct message *m, char *var)
Get header from mananger transaction.
Definition: manager.c:2820
#define ast_strlen_zero(foo)
Definition: strings.h:52
int attribute_pure ast_true(const char *val)
Make sure something is true. Determine if a string containing a boolean value is "true". This function checks to see whether a string passed to it is an indication of an "true" value. It checks to see if the string is "yes", "true", "y", "t", "on" or "1".
Definition: main/utils.c:1951
static int mute_channel(struct ast_channel *chan, const char *direction, int mute)
direction
struct ast_channel * ast_channel_get_by_name(const char *name)
Find a channel by name.
Definition: channel.c:1454
void astman_send_error(struct mansession *s, const struct message *m, char *error)
Send error in manager transaction.
Definition: manager.c:3159

◆ mute_channel()

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

Definition at line 124 of file res_mutestream.c.

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().

125 {
126  unsigned int mute_direction = 0;
127  enum ast_frame_type frametype = AST_FRAME_VOICE;
128  int ret = 0;
129 
130  if (!strcmp(direction, "in")) {
131  mute_direction = AST_MUTE_DIRECTION_READ;
132  } else if (!strcmp(direction, "out")) {
133  mute_direction = AST_MUTE_DIRECTION_WRITE;
134  } else if (!strcmp(direction, "all")) {
136  } else {
137  return -1;
138  }
139 
140  ast_channel_lock(chan);
141 
142  if (mute) {
143  ret = ast_channel_suppress(chan, mute_direction, frametype);
144  } else {
145  ret = ast_channel_unsuppress(chan, mute_direction, frametype);
146  }
147 
148  ast_channel_unlock(chan);
149 
150  return ret;
151 }
#define ast_channel_lock(chan)
Definition: channel.h:2945
#define AST_MUTE_DIRECTION_WRITE
Definition: channel.h:4938
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:10978
static int mute
Definition: chan_alsa.c:144
#define AST_MUTE_DIRECTION_READ
Definition: channel.h:4937
ast_frame_type
Frame types.
#define ast_channel_unlock(chan)
Definition: channel.h:2946
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:11040
direction

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 229 of file res_mutestream.c.

References ast_custom_function_unregister(), and ast_manager_unregister().

230 {
232  /* Unregister AMI actions */
233  ast_manager_unregister("MuteAudio");
234 
235  return 0;
236 }
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.
int ast_manager_unregister(const char *action)
Unregister a registered manager command.
Definition: manager.c:7258
static struct ast_custom_function 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 = "30ef0c93b36035ec78c9cfd712d36d9b" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
static

Definition at line 238 of file res_mutestream.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 238 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 165 of file res_mutestream.c.