[asterisk-commits] oej: branch oej/mutestream-trunk r215034 - /team/oej/mutestream-trunk/res/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Aug 31 13:22:48 CDT 2009
Author: oej
Date: Mon Aug 31 13:22:44 2009
New Revision: 215034
URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=215034
Log:
Addressing most of Russell's good feedback in reviewboard. XML docs missing
Modified:
team/oej/mutestream-trunk/res/res_mutestream.c
Modified: team/oej/mutestream-trunk/res/res_mutestream.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/oej/mutestream-trunk/res/res_mutestream.c?view=diff&rev=215034&r1=215033&r2=215034
==============================================================================
--- team/oej/mutestream-trunk/res/res_mutestream.c (original)
+++ team/oej/mutestream-trunk/res/res_mutestream.c Mon Aug 31 13:22:44 2009
@@ -1,7 +1,7 @@
/*
* Asterisk -- An open source telephony toolkit.
*
- * Copyright (C) 1999 - 2005, Digium, Inc.
+ * Copyright (C) 2009, Olle E. Johansson
*
* Olle E. Johansson <oej at edvina.net>
*
@@ -18,7 +18,7 @@
/*! \file
*
- * \brief MUTE audiohooks
+ * \brief MUTESTREAM audiohooks
*
* \author Olle E. Johansson <oej at edvina.net>
*
@@ -33,7 +33,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include <math.h>
#include <errno.h>
#include "asterisk/options.h"
@@ -50,7 +49,7 @@
-/* Our own datastore */
+/*! Our own datastore */
struct mute_information {
struct ast_audiohook audiohook;
int mute_write;
@@ -68,7 +67,7 @@
/* Destroy the audiohook, and destroy ourselves */
ast_audiohook_destroy(&mute->audiohook);
- free(mute);
+ ast_free(mute);
ast_module_unref(ast_module_info->self);
return;
@@ -108,8 +107,7 @@
ast_channel_lock(chan);
/* Grab datastore which contains our mute information */
if (!(datastore = ast_channel_datastore_find(chan, &mute_datastore, NULL))) {
- if (option_debug > 1)
- ast_log(LOG_DEBUG, " *** Can't find any datastore to use. Bad. \n");
+ ast_debug(2, " *** Can't find any datastore to use. Bad. \n");
return 0;
}
@@ -118,8 +116,7 @@
/* If this is audio then allow them to increase/decrease the gains */
if (frame->frametype == AST_FRAME_VOICE) {
- if (option_debug > 3)
- ast_log(LOG_DEBUG, "Audio frame - direction %s mute READ %s WRITE %s\n", direction == AST_AUDIOHOOK_DIRECTION_READ ? "read" : "write", mute->mute_read ? "on" : "off", mute->mute_write ? "on" : "off");
+ ast_debug(2, "Audio frame - direction %s mute READ %s WRITE %s\n", direction == AST_AUDIOHOOK_DIRECTION_READ ? "read" : "write", mute->mute_read ? "on" : "off", mute->mute_write ? "on" : "off");
/* Based on direction of frame grab the gain, and confirm it is applicable */
if ((direction == AST_AUDIOHOOK_DIRECTION_READ && mute->mute_read) || (direction == AST_AUDIOHOOK_DIRECTION_WRITE && mute->mute_write)) {
@@ -132,14 +129,15 @@
return 0;
}
-/*! \brief Initialize mute hook on channel, but don't activate it */
+/*! \brief Initialize mute hook on channel, but don't activate it
+ Assumes that the channel is locked
+*/
static struct ast_datastore *initialize_mutehook(struct ast_channel *chan)
{
struct ast_datastore *datastore = NULL;
struct mute_information *mute = NULL;
- if (option_debug > 2 )
- ast_log(LOG_DEBUG, "Initializing new Mute Audiohook \n");
+ ast_debug(2, "Initializing new Mute Audiohook \n");
/* Allocate a new datastore to hold the reference to this mute_datastore and audiohook information */
if (!(datastore = ast_datastore_alloc(&mute_datastore, NULL))) {
@@ -156,20 +154,20 @@
return datastore;
}
-/*! \brief Add or activate mute audiohook on channel */
+/*! \brief Add or activate mute audiohook on channel
+ Assumes channel is locked
+*/
static int mute_add_audiohook(struct ast_channel *chan, struct mute_information *mute, struct ast_datastore *datastore)
{
- /* Activate the settings */
- ast_channel_datastore_add(chan, datastore);
- if(ast_audiohook_attach(chan, &mute->audiohook)) {
- ast_log(LOG_ERROR, "Failed to attach audiohook for muting channel %s\n", chan->name);
- return -1;
- }
- ast_module_ref(ast_module_info->self);
- if (option_debug) {
- ast_log(LOG_DEBUG, "*** Initialized audiohook on channel %s\n", chan->name);
- }
- return 0;
+ /* Activate the settings */
+ ast_channel_datastore_add(chan, datastore);
+ if (ast_audiohook_attach(chan, &mute->audiohook)) {
+ ast_log(LOG_ERROR, "Failed to attach audiohook for muting channel %s\n", chan->name);
+ return -1;
+ }
+ ast_module_ref(ast_module_info->self);
+ ast_debug(2, "*** Initialized audiohook on channel %s\n", chan->name);
+ return 0;
}
/*! \brief Mute dialplan function */
@@ -180,7 +178,9 @@
int is_new = 0;
if (!(datastore = ast_channel_datastore_find(chan, &mute_datastore, NULL))) {
+ ast_channel_lock(chan);
if (!(datastore = initialize_mutehook(chan))) {
+ ast_channel_unlock(chan);
return 0;
}
is_new = 1;
@@ -190,14 +190,10 @@
if (!strcasecmp(data, "out")) {
mute->mute_write = ast_true(value);
- if (option_debug > 1) {
- ast_log(LOG_DEBUG, "%s channel - outbound *** \n", ast_true(value) ? "Muting" : "Unmuting");
- }
+ ast_debug(1, "%s channel - outbound *** \n", ast_true(value) ? "Muting" : "Unmuting");
} else if (!strcasecmp(data, "in")) {
mute->mute_read = ast_true(value);
- if (option_debug > 1) {
- ast_log(LOG_DEBUG, "%s channel - inbound *** \n", ast_true(value) ? "Muting" : "Unmuting");
- }
+ ast_debug(1, "%s channel - inbound *** \n", ast_true(value) ? "Muting" : "Unmuting");
} else if (!strcasecmp(data,"all")) {
mute->mute_write = mute->mute_read = ast_true(value);
}
@@ -205,6 +201,7 @@
if (is_new) {
mute_add_audiohook(chan, mute, datastore);
}
+ ast_channel_unlock(chan);
return 0;
}
@@ -255,8 +252,11 @@
return 0;
}
+ ast_channel_lock(c);
+
if (!(datastore = ast_channel_datastore_find(c, &mute_datastore, NULL))) {
if (!(datastore = initialize_mutehook(c))) {
+ ast_channel_unref(c);
return 0;
}
is_new = 1;
@@ -275,6 +275,8 @@
if (is_new) {
mute_add_audiohook(c, mute, datastore);
}
+ ast_channel_unref(c);
+ ast_channel_unlock(c);
astman_append(s, "Response: Success\r\n"
"%s"
@@ -303,7 +305,7 @@
ast_manager_register2("MuteStream", EVENT_FLAG_SYSTEM, manager_mutestream,
"Mute an audio stream", mandescr_mutestream);
- return 0;
+ return AST_MODULE_LOAD_SUCCESS;
}
static int unload_module(void)
More information about the asterisk-commits
mailing list