[asterisk-commits] rmudgett: branch dvossel/generic_aoc r258302 - in /team/dvossel/generic_aoc: ...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Apr 21 10:19:24 CDT 2010
Author: rmudgett
Date: Wed Apr 21 10:19:22 2010
New Revision: 258302
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=258302
Log:
Merged revisions 257834,257909,257944,257971,258010,258087,258131,258172,258212,258250,258301 via svnmerge from
https://origsvn.digium.com/svn/asterisk/team/rmudgett/aoc_event
................
r257834 | root | 2010-04-19 13:22:35 -0500 (Mon, 19 Apr 2010) | 19 lines
Merged revisions 257813 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r257813 | root | 2010-04-19 13:17:32 -0500 (Mon, 19 Apr 2010) | 12 lines
Merged revisions 257810 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r257810 | twilson | 2010-04-19 12:57:41 -0500 (Mon, 19 Apr 2010) | 5 lines
Fix incomplete CDR merge from r195881
Because res/res_features.c was removed and main/cdr.c added, these changes
didn't make it to trunk and the 1.6.x branches
........
................
................
r257909 | root | 2010-04-19 14:29:49 -0500 (Mon, 19 Apr 2010) | 35 lines
Merged revisions 257860 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r257860 | root | 2010-04-19 14:17:57 -0500 (Mon, 19 Apr 2010) | 28 lines
Merged revisions 257851,257857 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
................
r257851 | mmichelson | 2010-04-19 13:42:31 -0500 (Mon, 19 Apr 2010) | 12 lines
Commit compromise I suggested on review 608.
This allows for multiple SRV queries to be done
from the dialplan for the same service on a single call while
still allowing one to bypass the call to SRVQUERY if they so
please.
Taking action since no comments had been left for a while.
This can easily be reverted if needed. External tests
still pass.
................
r257857 | jpeeler | 2010-04-19 14:10:18 -0500 (Mon, 19 Apr 2010) | 8 lines
Blocked revisions 257856 via svnmerge
........
r257856 | jpeeler | 2010-04-19 14:09:46 -0500 (Mon, 19 Apr 2010) | 1 line
make app_voicemail compile with IMAP_STORAGE
........
................
................
................
r257944 | root | 2010-04-19 15:21:38 -0500 (Mon, 19 Apr 2010) | 16 lines
Merged revisions 257930 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r257930 | root | 2010-04-19 15:17:46 -0500 (Mon, 19 Apr 2010) | 9 lines
Merged revisions 257883 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r257883 | tilghman | 2010-04-19 14:23:41 -0500 (Mon, 19 Apr 2010) | 2 lines
Bad merge fix
........
................
................
r257971 | root | 2010-04-19 17:22:44 -0500 (Mon, 19 Apr 2010) | 24 lines
Merged revisions 257952 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r257952 | root | 2010-04-19 17:17:47 -0500 (Mon, 19 Apr 2010) | 17 lines
Merged revisions 257947,257949 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r257947 | qwell | 2010-04-19 16:49:30 -0500 (Mon, 19 Apr 2010) | 6 lines
Don't consider a missing indications.conf to be a critical error.
There were many changes in revision 176627 which would avoid the error that a
missing config would have caused. Other than this, there are no other config
files (including asterisk.conf, surprisingly) that are required.
........
r257949 | qwell | 2010-04-19 16:57:56 -0500 (Mon, 19 Apr 2010) | 1 line
Change log message to match severity.
........
................
................
r258010 | root | 2010-04-20 08:23:11 -0500 (Tue, 20 Apr 2010) | 19 lines
Merged revisions 257990 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r257990 | root | 2010-04-20 08:17:44 -0500 (Tue, 20 Apr 2010) | 12 lines
Merged revisions 257988 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r257988 | lmadsen | 2010-04-20 07:38:47 -0500 (Tue, 20 Apr 2010) | 4 lines
Update supported file extensions in doxygen.
Updated the doxygen \arg line after looking at the file for some other Asterisk documentation
and noticing they weren't up to date. Thanks to seanbright for looking at the code for me :)
........
................
................
r258087 | root | 2010-04-20 12:23:06 -0500 (Tue, 20 Apr 2010) | 31 lines
Merged revisions 258067 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r258067 | root | 2010-04-20 12:17:48 -0500 (Tue, 20 Apr 2010) | 24 lines
Merged revisions 258065 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
................
r258065 | jpeeler | 2010-04-20 12:06:19 -0500 (Tue, 20 Apr 2010) | 17 lines
Merged revisions 258029 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r258029 | jpeeler | 2010-04-20 11:16:33 -0500 (Tue, 20 Apr 2010) | 11 lines
Play correct prompt when voicemail store failure occurs after attempted forward.
If a user's mailbox was full and a message was attempted to be forwarded to
said box, warnings on the console would indicate failure. However, the played
prompt was that of success (vm-msgsaved). Now storage failure is taken into
account and the correct prompt (vm-mailboxfull) is played when appropriate.
ABE-2123
SWP-1262
........
................
................
................
r258131 | root | 2010-04-20 13:23:20 -0500 (Tue, 20 Apr 2010) | 22 lines
Merged revisions 258110 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r258110 | root | 2010-04-20 13:17:46 -0500 (Tue, 20 Apr 2010) | 15 lines
Merged revisions 258106 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r258106 | lmadsen | 2010-04-20 13:01:28 -0500 (Tue, 20 Apr 2010) | 7 lines
Add missing 'useragent' field to sip-friends.sql file.
(closes issue #17171)
Reported by: thehar
Patches:
sip-friends.patch uploaded by thehar (license 831)
Tested by: pabelanger, thehar
........
................
................
r258172 | root | 2010-04-20 14:22:58 -0500 (Tue, 20 Apr 2010) | 27 lines
Merged revisions 258152 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r258152 | root | 2010-04-20 14:17:46 -0500 (Tue, 20 Apr 2010) | 20 lines
Merged revisions 258147,258149 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r258147 | lmadsen | 2010-04-20 13:38:39 -0500 (Tue, 20 Apr 2010) | 8 lines
Add example dialplan for dialing ISN numbers (http://www.freenum.org).
Minor tweaks and documentation added by me.
(closes issue #17058)
Reported by: pprindeville
Patches:
freenum.patch#5 uploaded by pprindeville (license 347)
Tested by: lmadsen
........
r258149 | lmadsen | 2010-04-20 14:02:49 -0500 (Tue, 20 Apr 2010) | 1 line
Add 'soft hangup' alias per Steve Johnson on asterisk-users.
........
................
................
r258212 | root | 2010-04-21 07:23:11 -0500 (Wed, 21 Apr 2010) | 16 lines
Merged revisions 258192 via svnmerge from
file:///srv/subversion/repos/asterisk/team/group/CCSS
................
r258192 | root | 2010-04-21 07:17:47 -0500 (Wed, 21 Apr 2010) | 9 lines
Merged revisions 258190 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r258190 | jmls | 2010-04-21 06:27:27 -0500 (Wed, 21 Apr 2010) | 2 lines
Added a new feature to audiohooks so that you can mute either read / write or both types of frames - this allows for MixMonitor to mute either side of the conversation without affecting the conversation itself.
........
................
................
r258250 | root | 2010-04-21 08:23:04 -0500 (Wed, 21 Apr 2010) | 1 line
automerge cancel
................
r258301 | rmudgett | 2010-04-21 09:56:39 -0500 (Wed, 21 Apr 2010) | 36 lines
Merged revisions 258230,258268 via svnmerge from
https://origsvn.digium.com/svn/asterisk/team/group/CCSS
................
r258230 | root | 2010-04-21 08:17:45 -0500 (Wed, 21 Apr 2010) | 14 lines
Merged revisions 258227-258228 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r258227 | jmls | 2010-04-21 07:48:32 -0500 (Wed, 21 Apr 2010) | 1 line
Added CHANGES entry for new MixMonitorMute AMI command.
........
r258228 | jmls | 2010-04-21 08:08:44 -0500 (Wed, 21 Apr 2010) | 2 lines
Added NEW ACTIONS entry for new MixMonitorMute AMI command.
Added State and Direction variables for new MixMonitorMute AMI command.
........
................
r258268 | root | 2010-04-21 09:17:44 -0500 (Wed, 21 Apr 2010) | 13 lines
Merged revisions 258256,258265 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r258256 | jmls | 2010-04-21 08:24:28 -0500 (Wed, 21 Apr 2010) | 1 line
fix whitespace issue
........
r258265 | lmadsen | 2010-04-21 08:26:28 -0500 (Wed, 21 Apr 2010) | 1 line
Fix the \brief description in the res_calendar_*.c files.
........
................
................
Modified:
team/dvossel/generic_aoc/ (props changed)
team/dvossel/generic_aoc/CHANGES
team/dvossel/generic_aoc/apps/app_mixmonitor.c
team/dvossel/generic_aoc/apps/app_voicemail.c
team/dvossel/generic_aoc/configs/cli_aliases.conf.sample
team/dvossel/generic_aoc/configs/extensions.conf.sample
team/dvossel/generic_aoc/contrib/scripts/sip-friends.sql
team/dvossel/generic_aoc/doc/manager_1_1.txt
team/dvossel/generic_aoc/doc/tex/manager.tex
team/dvossel/generic_aoc/formats/format_pcm.c
team/dvossel/generic_aoc/include/asterisk/audiohook.h
team/dvossel/generic_aoc/include/asterisk/frame.h
team/dvossel/generic_aoc/main/audiohook.c
team/dvossel/generic_aoc/main/frame.c
team/dvossel/generic_aoc/main/indications.c
team/dvossel/generic_aoc/res/res_calendar_caldav.c
team/dvossel/generic_aoc/res/res_calendar_exchange.c
team/dvossel/generic_aoc/res/res_calendar_icalendar.c
team/dvossel/generic_aoc/res/res_mutestream.c
Propchange: team/dvossel/generic_aoc/
------------------------------------------------------------------------------
--- aoc_event-integrated (original)
+++ aoc_event-integrated Wed Apr 21 10:19:22 2010
@@ -1,1 +1,1 @@
-/team/group/CCSS:1-257792
+/team/group/CCSS:1-258300
Propchange: team/dvossel/generic_aoc/
------------------------------------------------------------------------------
Binary property 'branch-1.4-blocked' - no diff available.
Propchange: team/dvossel/generic_aoc/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Propchange: team/dvossel/generic_aoc/
------------------------------------------------------------------------------
--- generic_aoc-integrated (original)
+++ generic_aoc-integrated Wed Apr 21 10:19:22 2010
@@ -1,1 +1,1 @@
-/team/rmudgett/aoc_event:1-257808
+/team/rmudgett/aoc_event:1-258301
Modified: team/dvossel/generic_aoc/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/CHANGES?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/CHANGES (original)
+++ team/dvossel/generic_aoc/CHANGES Wed Apr 21 10:19:22 2010
@@ -357,6 +357,8 @@
location than the first.
* Added new event "JabberStatus" in the Jabber module to monitor buddies
status.
+ * Added a "MixMonitorMute" AMI action for muting inbound and/or outbound audio
+ in a MixMonitor recording.
* Added Advice-Of-Charge events (AOC-S, AOC-D, and AOC-E) in the new
aoc event class.
Modified: team/dvossel/generic_aoc/apps/app_mixmonitor.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/apps/app_mixmonitor.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/apps/app_mixmonitor.c (original)
+++ team/dvossel/generic_aoc/apps/app_mixmonitor.c Wed Apr 21 10:19:22 2010
@@ -46,6 +46,7 @@
#include "asterisk/app.h"
#include "asterisk/channel.h"
#include "asterisk/autochan.h"
+#include "asterisk/manager.h"
/*** DOCUMENTATION
<application name="MixMonitor" language="en_US">
@@ -124,7 +125,27 @@
<ref type="application">MixMonitor</ref>
</see-also>
</application>
-
+ <manager name="MixMonitorMute" language="en_US">
+ <synopsis>
+ Mute / unMute a Mixmonitor recording.
+ </synopsis>
+ <syntax>
+ <xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
+ <parameter name="Channel" required="true">
+ <para>Used to specify the channel to mute.</para>
+ </parameter>
+ <parameter name="Direction">
+ <para>Which part of the recording to mute: read, write or both (from channel, to channel or both channels).</para>
+ </parameter>
+ <parameter name="State">
+ <para>Turn mute on or off : 1 to turn on, 0 to turn off.</para>
+ </parameter>
+ </syntax>
+ <description>
+ <para>This action may be used to mute a MixMonitor recording.</para>
+ </description>
+ </manager>
+
***/
#define get_volfactor(x) x ? ((x > 0) ? (1 << x) : ((1 << abs(x)) * -1)) : 0
@@ -606,6 +627,73 @@
return CLI_SUCCESS;
}
+/*! \brief Mute / unmute a MixMonitor channel */
+static int manager_mute_mixmonitor(struct mansession *s, const struct message *m)
+{
+ struct ast_channel *c = NULL;
+
+ const char *name = astman_get_header(m, "Channel");
+ const char *id = astman_get_header(m, "ActionID");
+ const char *state = astman_get_header(m, "State");
+ const char *direction = astman_get_header(m,"Direction");
+
+ int clearmute = 1;
+
+ enum ast_audiohook_flags flag;
+
+ if (ast_strlen_zero(direction)) {
+ astman_send_error(s, m, "No direction specified. Must be read, write or both");
+ return AMI_SUCCESS;
+ }
+
+ if (!strcasecmp(direction, "read")) {
+ flag = AST_AUDIOHOOK_MUTE_READ;
+ } else if (!strcasecmp(direction, "write")) {
+ flag = AST_AUDIOHOOK_MUTE_WRITE;
+ } else if (!strcasecmp(direction, "both")) {
+ flag = AST_AUDIOHOOK_MUTE_READ | AST_AUDIOHOOK_MUTE_WRITE;
+ } else {
+ astman_send_error(s, m, "Invalid direction specified. Must be read, write or both");
+ return AMI_SUCCESS;
+ }
+
+ if (ast_strlen_zero(name)) {
+ astman_send_error(s, m, "No channel specified");
+ return AMI_SUCCESS;
+ }
+
+ if (ast_strlen_zero(state)) {
+ astman_send_error(s, m, "No state specified");
+ return AMI_SUCCESS;
+ }
+
+ clearmute = ast_false(state);
+ c = ast_channel_get_by_name(name);
+
+ if (!c) {
+ astman_send_error(s, m, "No such channel");
+ return AMI_SUCCESS;
+ }
+
+ if (ast_audiohook_set_mute(c, mixmonitor_spy_type, flag, clearmute)) {
+ c = ast_channel_unref(c);
+ astman_send_error(s, m, "Cannot set mute flag");
+ return AMI_SUCCESS;
+ }
+
+ astman_append(s, "Response: Success\r\n");
+
+ if (!ast_strlen_zero(id)) {
+ astman_append(s, "ActionID: %s\r\n", id);
+ }
+
+ astman_append(s, "\r\n");
+
+ c = ast_channel_unref(c);
+
+ return AMI_SUCCESS;
+}
+
static struct ast_cli_entry cli_mixmonitor[] = {
AST_CLI_DEFINE(handle_cli_mixmonitor, "Execute a MixMonitor command")
};
@@ -617,6 +705,7 @@
ast_cli_unregister_multiple(cli_mixmonitor, ARRAY_LEN(cli_mixmonitor));
res = ast_unregister_application(stop_app);
res |= ast_unregister_application(app);
+ res |= ast_manager_unregister("MixMonitorMute");
return res;
}
@@ -628,6 +717,7 @@
ast_cli_register_multiple(cli_mixmonitor, ARRAY_LEN(cli_mixmonitor));
res = ast_register_application_xml(app, mixmonitor_exec);
res |= ast_register_application_xml(stop_app, stop_mixmonitor_exec);
+ res |= ast_manager_register_xml("MixMonitorMute", 0, manager_mute_mixmonitor);
return res;
}
Modified: team/dvossel/generic_aoc/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/apps/app_voicemail.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/apps/app_voicemail.c (original)
+++ team/dvossel/generic_aoc/apps/app_voicemail.c Wed Apr 21 10:19:22 2010
@@ -2053,6 +2053,26 @@
return 0;
}
+static int imap_check_limits(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu, int msgnum)
+{
+ /* Check if mailbox is full */
+ check_quota(vms, vmu->imapfolder);
+ if (vms->quota_limit && vms->quota_usage >= vms->quota_limit) {
+ ast_debug(1, "*** QUOTA EXCEEDED!! %u >= %u\n", vms->quota_usage, vms->quota_limit);
+ ast_play_and_wait(chan, "vm-mailboxfull");
+ return -1;
+ }
+
+ /* Check if we have exceeded maxmsg */
+ if (msgnum >= vmu->maxmsg - inprocess_count(vmu->mailbox, vmu->context, 0)) {
+ ast_log(AST_LOG_WARNING, "Unable to leave message since we will exceed the maximum number of messages allowed (%u > %u)\n", msgnum, vmu->maxmsg);
+ ast_play_and_wait(chan, "vm-mailboxfull");
+ return -1;
+ }
+
+ return 0;
+}
+
/*!
* \brief Gets the number of messages that exist in a mailbox folder.
* \param context
@@ -2086,11 +2106,16 @@
STRING str;
int ret; /* for better error checking */
char *imap_flags = NIL;
+ int msgcount = (messagecount(vmu->context, vmu->mailbox, "INBOX") + messagecount(vmu->context, vmu->mailbox, "Old"));
/* Back out early if this is a greeting and we don't want to store greetings in IMAP */
if (msgnum < 0 && !imapgreetings) {
return 0;
}
+
+ if (imap_check_limits(chan, vms, vmu, msgcount)) {
+ return -1;
+ }
/* Set urgent flag for IMAP message */
if (!ast_strlen_zero(flag) && !strcmp(flag, "Urgent")) {
@@ -4483,7 +4508,7 @@
#ifdef IMAP_STORAGE
{
/* Convert body to native line terminators for IMAP backend */
- char *line = passdata, *next;
+ char *line = ast_str_buffer(str1), *next;
do {
/* Terminate line before outputting it to the file */
if ((next = strchr(line, '\n'))) {
@@ -5084,6 +5109,7 @@
char fromdir[PATH_MAX], todir[PATH_MAX], frompath[PATH_MAX], topath[PATH_MAX];
const char *frombox = mbox(vmu, imbox);
int recipmsgnum;
+ int res = 0;
ast_log(AST_LOG_NOTICE, "Copying message from %s@%s to %s@%s\n", vmu->mailbox, vmu->context, recip->mailbox, recip->context);
@@ -5121,11 +5147,12 @@
}
} else {
ast_log(AST_LOG_ERROR, "Recipient mailbox %s@%s is full\n", recip->mailbox, recip->context);
+ res = -1;
}
ast_unlock_path(todir);
notify_new_message(chan, recip, NULL, recipmsgnum, duration, fmt, S_OR(chan->cid.cid_num, NULL), S_OR(chan->cid.cid_name, NULL), flag);
- return 0;
+ return res;
}
#endif
#if !(defined(IMAP_STORAGE) || defined(ODBC_STORAGE))
@@ -5620,21 +5647,8 @@
/* set variable for compatibility */
pbx_builtin_setvar_helper(chan, "VM_MESSAGEFILE", "IMAP_STORAGE");
- /* Check if mailbox is full */
- check_quota(vms, vmu->imapfolder);
- if (vms->quota_limit && vms->quota_usage >= vms->quota_limit) {
- ast_debug(1, "*** QUOTA EXCEEDED!! %u >= %u\n", vms->quota_usage, vms->quota_limit);
- ast_play_and_wait(chan, "vm-mailboxfull");
- ast_free(tmp);
- return -1;
- }
-
- /* Check if we have exceeded maxmsg */
- if (msgnum >= vmu->maxmsg - inprocess_count(vmu->mailbox, vmu->context, 0)) {
- ast_log(AST_LOG_WARNING, "Unable to leave message since we will exceed the maximum number of messages allowed (%u > %u)\n", msgnum, vmu->maxmsg);
- ast_play_and_wait(chan, "vm-mailboxfull");
- ast_free(tmp);
- return -1;
+ if ((res = imap_check_limits(chan, vms, vmu, msgnum))) {
+ goto leave_vm_out;
}
#else
if (count_messages(vmu, dir) >= vmu->maxmsg - inprocess_count(vmu->mailbox, vmu->context, +1)) {
@@ -6959,6 +6973,7 @@
/* Forward VoiceMail */
long duration = 0;
struct vm_state vmstmp;
+ int copy_msg_result = 0;
memcpy(&vmstmp, vms, sizeof(vmstmp));
RETRIEVE(dir, curmsg, sender->mailbox, sender->context);
@@ -6980,7 +6995,7 @@
if (!dstvms->mailstream) {
ast_log(AST_LOG_ERROR, "IMAP mailstream for %s is NULL\n", vmtmp->mailbox);
} else {
- STORE(vmstmp.curdir, vmtmp->mailbox, vmtmp->context, dstvms->curmsg, chan, vmtmp, fmt, duration, dstvms, urgent_str);
+ copy_msg_result = STORE(vmstmp.curdir, vmtmp->mailbox, vmtmp->context, dstvms->curmsg, chan, vmtmp, fmt, duration, dstvms, urgent_str);
run_externnotify(vmtmp->context, vmtmp->mailbox, urgent_str);
}
} else {
@@ -6992,7 +7007,7 @@
/* NULL category for IMAP storage */
sendmail(myserveremail, vmtmp, todircount, vmtmp->context, vmtmp->mailbox, dstvms->curbox, S_OR(chan->cid.cid_num, NULL), S_OR(chan->cid.cid_name, NULL), vmstmp.fn, vmstmp.introfn, fmt, duration, attach_user_voicemail, chan, NULL, urgent_str);
#else
- copy_message(chan, sender, 0, curmsg, duration, vmtmp, fmt, dir, urgent_str);
+ copy_msg_result = copy_message(chan, sender, 0, curmsg, duration, vmtmp, fmt, dir, urgent_str);
#endif
saved_messages++;
AST_LIST_REMOVE_CURRENT(list);
@@ -7001,7 +7016,7 @@
break;
}
AST_LIST_TRAVERSE_SAFE_END;
- if (saved_messages > 0) {
+ if (saved_messages > 0 && !copy_msg_result) {
/* give confirmation that the message was saved */
/* commented out since we can't forward batches yet
if (saved_messages == 1)
@@ -7015,8 +7030,12 @@
if (ast_strlen_zero(vmstmp.introfn))
#endif
res = ast_play_and_wait(chan, "vm-msgsaved");
- }
+ }
#ifndef IMAP_STORAGE
+ else {
+ /* with IMAP, mailbox full warning played by imap_check_limits */
+ res = ast_play_and_wait(chan, "vm-mailboxfull");
+ }
/* Restore original message without prepended message if backup exists */
make_file(msgfile, sizeof(msgfile), dir, curmsg);
strcpy(textfile, msgfile);
Modified: team/dvossel/generic_aoc/configs/cli_aliases.conf.sample
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/configs/cli_aliases.conf.sample?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/configs/cli_aliases.conf.sample (original)
+++ team/dvossel/generic_aoc/configs/cli_aliases.conf.sample Wed Apr 21 10:19:22 2010
@@ -153,6 +153,7 @@
show version files=core show file version
show profile=core show profile
clear profile=core clear profile
+soft hangup=channel request hangup
[asterisk12](asterisk12_tpl)
; add any additional custom commands you want below here, for example:
@@ -181,6 +182,7 @@
restart now=core restart now
restart gracefully=core restart gracefully
restart when convenient=core restart when convenient
+soft hangup=channel request hangup
[asterisk14](asterisk14_tpl)
; add any additional custom commands you want below here.
Modified: team/dvossel/generic_aoc/configs/extensions.conf.sample
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/configs/extensions.conf.sample?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/configs/extensions.conf.sample (original)
+++ team/dvossel/generic_aoc/configs/extensions.conf.sample Wed Apr 21 10:19:22 2010
@@ -150,6 +150,11 @@
;
TRUNKMSD=1 ; MSD digits to strip (usually 1 or 0)
;TRUNK=IAX2/user:pass at provider
+
+;FREENUMDOMAIN=mydomain.com ; domain to send on outbound
+ ; freenum calls (uses outbound-freenum
+ ; context)
+
;
; WARNING WARNING WARNING WARNING
; If you load any other extension configuration engine, such as pbx_ael.so,
@@ -390,6 +395,45 @@
; being passed to the switch routine.
;
; eswitch => IAX2/context@${CURSERVER}
+
+; The following two contexts are a template to enable the ability to dial
+; ISN numbers. For more information about what an ISN number is, please see
+; http://www.freenum.org.
+;
+; This is the dialing hook. use:
+; include => outbound-freenum
+
+[outbound-freenum]
+; We'll add more digits as needed. The purpose is to dial things
+; like extension numbers at domains (ITAD number) so we're matching
+; on lengths of 1 through 6 prior to the separator (the asterisk [*])
+;
+exten => _X*X!,1,Goto(outbound-freenum2,${EXTEN},1)
+exten => _XX*X!,1,Goto(outbound-freenum2,${EXTEN},1)
+exten => _XXX*X!,1,Goto(outbound-freenum2,${EXTEN},1)
+exten => _XXXX*X!,1,Goto(outbound-freenum2,${EXTEN},1)
+exten => _XXXXX*X!,1,Goto(outbound-freenum2,${EXTEN},1)
+exten => _XXXXXX*X!,1,Goto(outbound-freenum2,${EXTEN},1)
+
+[outbound-freenum2]
+; This is the handler which performs the dialing logic. It is called
+; from the [outbound-freenum] context
+;
+exten => _X!,1,Verbose(2,Performing ISN lookup for ${EXTEN})
+same => n,Set(SUFFIX=${CUT(EXTEN,*,2-)}) ; make sure the suffix is all digits as well
+same => n,GotoIf($["${FILTER(0-9,${SUFFIX})}" != "${SUFFIX}"]?i:) ; filter out bad characters per the README-SERIOUSLY.best-practices.txt document
+same => n,Set(TIMEOUT(absolute)=10800)
+same => n,Set(isnresult=${ENUMLOOKUP(${EXTEN},sip,,1,freenum.org)}) ; perform our lookup with freenum.org
+same => n,GotoIf($["${isnresult}" != ""]?:notfound)
+same => n,GotoIf($["${GLOBAL(FREENUMDOMAIN)}" == ""]?dial:) ; check if we set the FREENUMDOMAIN global variable in [global]
+same => n,Set(SIPFROMDOMAIN=${GLOBAL(FREENUMDOMAIN)}) ; if we did set it, then we'll use it for our outbound dialing domain
+same => n(dial),Dial(SIP/${isnresult},40)
+same => n,Goto(fn-${DIALSTATUS})
+
+exten => fn-BUSY,1,Busy()
+
+exten => _fn-.,1,NoOp(ISN: ${DIALSTATUS})
+same => n,Congestion()
[macro-trunkdial]
;
Modified: team/dvossel/generic_aoc/contrib/scripts/sip-friends.sql
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/contrib/scripts/sip-friends.sql?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/contrib/scripts/sip-friends.sql (original)
+++ team/dvossel/generic_aoc/contrib/scripts/sip-friends.sql Wed Apr 21 10:19:22 2010
@@ -49,6 +49,7 @@
`rtpkeepalive` varchar(15),
`lastms` int(11) NOT NULL default '-1',
`setvar` varchar(200),
+ `useragent` varchar(50),
PRIMARY KEY (`name`),
INDEX host (host, port),
INDEX ipaddr (ipaddr, port)
Modified: team/dvossel/generic_aoc/doc/manager_1_1.txt
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/doc/manager_1_1.txt?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/doc/manager_1_1.txt (original)
+++ team/dvossel/generic_aoc/doc/manager_1_1.txt Wed Apr 21 10:19:22 2010
@@ -290,7 +290,17 @@
CoreReloadTime: 22:35:17
CoreCurrentCalls: 20
-
+- Action: MixMonitorMute
+ Modules: app_mixmonitor.c
+ Purpose:
+ Mute / unMute a Mixmonitor recording.
+ Variables:
+ ActionId: <id> Action ID for this transaction. Will be returned.
+ Channel: the channel MixMonitor is running on
+ Direction: Which part of the recording to mute: read, write or both (from
+ channel, to channel or both channels).
+ State: Turn mute on or off : 1 to turn on, 0 to turn off.
+
* NEW EVENTS
------------
Modified: team/dvossel/generic_aoc/doc/tex/manager.tex
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/doc/tex/manager.tex?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/doc/tex/manager.tex (original)
+++ team/dvossel/generic_aoc/doc/tex/manager.tex Wed Apr 21 10:19:22 2010
@@ -163,6 +163,7 @@
DestinationContext: -- Destination context (cdr_manager)
DestinationChannel: -- Destination channel (cdr_manager)
DestUniqueID: -- UniqueID of destination (dial event)
+ Direction: <type> -- Audio to mute (read | write | both)
Disposition: -- Call disposition (CDR manager)
Domain: <domain> -- DNS domain
Duration: <secs> -- Duration of call (cdr_manager)
@@ -231,6 +232,7 @@
SrcUniqueID: -- UniqueID of source (dial event)
StartTime: -- Start time of call (cdr_manager)
State: -- Channel state
+ State: <1 | 0> -- Mute flag
Status: -- Registration status (Registry events SIP)
Status: -- Extension status (Extensionstate)
Status: -- Peer status (if monitored) ** Will change name **
Modified: team/dvossel/generic_aoc/formats/format_pcm.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/formats/format_pcm.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/formats/format_pcm.c (original)
+++ team/dvossel/generic_aoc/formats/format_pcm.c Wed Apr 21 10:19:22 2010
@@ -19,7 +19,7 @@
/*! \file
*
* \brief Flat, binary, ulaw PCM file format.
- * \arg File name extension: pcm, ulaw, ul, mu
+ * \arg File name extension: alaw, al, alw, pcm, ulaw, ul, mu, ulw, g722, au
*
* \ingroup formats
*/
Modified: team/dvossel/generic_aoc/include/asterisk/audiohook.h
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/include/asterisk/audiohook.h?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/include/asterisk/audiohook.h (original)
+++ team/dvossel/generic_aoc/include/asterisk/audiohook.h Wed Apr 21 10:19:22 2010
@@ -62,6 +62,8 @@
* slinfactories. We will flush the factories if they contain too many samples.
*/
AST_AUDIOHOOK_SMALL_QUEUE = (1 << 3),
+ AST_AUDIOHOOK_MUTE_READ = (1 << 4), /*!< audiohook should be mute frames read */
+ AST_AUDIOHOOK_MUTE_WRITE = (1 << 5), /*!< audiohook should be mute frames written */
};
#define AST_AUDIOHOOK_SYNC_TOLERANCE 100 /*< Tolerance in milliseconds for audiohooks synchronization */
@@ -277,6 +279,16 @@
*/
int ast_audiohook_volume_adjust(struct ast_channel *chan, enum ast_audiohook_direction direction, int volume);
+/*! \brief Mute frames read from or written to a channel
+ * \param chan Channel to muck with
+ * \param source Type of audiohook
+ * \param flag which direction to set / clear
+ * \param clear set or clear muted frames on direction based on flag parameter
+ * \retval 0 success
+ * \retval -1 failure
+ */
+int ast_audiohook_set_mute(struct ast_channel *chan, const char *source, enum ast_audiohook_flags flag, int clear);
+
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
Modified: team/dvossel/generic_aoc/include/asterisk/frame.h
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/include/asterisk/frame.h?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/include/asterisk/frame.h (original)
+++ team/dvossel/generic_aoc/include/asterisk/frame.h Wed Apr 21 10:19:22 2010
@@ -729,6 +729,11 @@
}
}
+/*!
+ * \brief Clear all audio samples from an ast_frame. The frame must be AST_FRAME_VOICE and AST_FORMAT_SLINEAR
+ */
+int ast_frame_clear(struct ast_frame *frame);
+
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
Modified: team/dvossel/generic_aoc/main/audiohook.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/main/audiohook.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/main/audiohook.c (original)
+++ team/dvossel/generic_aoc/main/audiohook.c Wed Apr 21 10:19:22 2010
@@ -127,6 +127,7 @@
int our_factory_ms;
int other_factory_samples;
int other_factory_ms;
+ int muteme = 0;
/* Update last feeding time to be current */
*rwtime = ast_tvnow();
@@ -149,6 +150,17 @@
}
ast_slinfactory_flush(factory);
ast_slinfactory_flush(other_factory);
+ }
+
+ /* swap frame data for zeros if mute is required */
+ if ((ast_test_flag(audiohook, AST_AUDIOHOOK_MUTE_READ) && (direction == AST_AUDIOHOOK_DIRECTION_READ)) ||
+ (ast_test_flag(audiohook, AST_AUDIOHOOK_MUTE_WRITE) && (direction == AST_AUDIOHOOK_DIRECTION_WRITE)) ||
+ (ast_test_flag(audiohook, AST_AUDIOHOOK_MUTE_READ | AST_AUDIOHOOK_MUTE_WRITE) == (AST_AUDIOHOOK_MUTE_READ | AST_AUDIOHOOK_MUTE_WRITE))) {
+ muteme = 1;
+ }
+
+ if (muteme && frame->datalen > 0) {
+ ast_frame_clear(frame);
}
/* Write frame out to respective factory */
@@ -1001,3 +1013,37 @@
return 0;
}
+
+/*! \brief Mute frames read from or written to a channel
+ * \param chan Channel to muck with
+ * \param source Type of audiohook
+ * \param flag which flag to set / clear
+ * \param clear set or clear
+ * \return Returns 0 on success, -1 on failure
+ */
+int ast_audiohook_set_mute(struct ast_channel *chan, const char *source, enum ast_audiohook_flags flag, int clear)
+{
+ struct ast_audiohook *audiohook = NULL;
+
+ ast_channel_lock(chan);
+
+ /* Ensure the channel has audiohooks on it */
+ if (!chan->audiohooks) {
+ ast_channel_unlock(chan);
+ return -1;
+ }
+
+ audiohook = find_audiohook_by_source(chan->audiohooks, source);
+
+ if (audiohook) {
+ if (clear) {
+ ast_clear_flag(audiohook, flag);
+ } else {
+ ast_set_flag(audiohook, flag);
+ }
+ }
+
+ ast_channel_unlock(chan);
+
+ return (audiohook ? 0 : -1);
+}
Modified: team/dvossel/generic_aoc/main/frame.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/main/frame.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/main/frame.c (original)
+++ team/dvossel/generic_aoc/main/frame.c Wed Apr 21 10:19:22 2010
@@ -1587,3 +1587,15 @@
return 0;
}
+
+int ast_frame_clear(struct ast_frame *frame)
+{
+ struct ast_frame *next;
+
+ for (next = AST_LIST_NEXT(frame, frame_list);
+ frame;
+ frame = next, next = frame ? AST_LIST_NEXT(frame, frame_list) : NULL) {
+ memset(frame->data.ptr, 0, frame->datalen);
+ }
+ return 0;
+}
Modified: team/dvossel/generic_aoc/main/indications.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/main/indications.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/main/indications.c (original)
+++ team/dvossel/generic_aoc/main/indications.c Wed Apr 21 10:19:22 2010
@@ -1038,8 +1038,8 @@
cfg = ast_config_load2(config, "indications", config_flags);
if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {
- ast_log(LOG_ERROR, "Can't find indications config file %s.\n", config);
- return -1;
+ ast_log(LOG_WARNING, "Can't find indications config file %s.\n", config);
+ return 0;
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED) {
return 0;
}
Modified: team/dvossel/generic_aoc/res/res_calendar_caldav.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/res/res_calendar_caldav.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/res/res_calendar_caldav.c (original)
+++ team/dvossel/generic_aoc/res/res_calendar_caldav.c Wed Apr 21 10:19:22 2010
@@ -17,7 +17,7 @@
*/
/*! \file
- * \brief Resource for handling iCalnedar calendars
+ * \brief Resource for handling CalDAV calendars
*/
/*** MODULEINFO
Modified: team/dvossel/generic_aoc/res/res_calendar_exchange.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/res/res_calendar_exchange.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/res/res_calendar_exchange.c (original)
+++ team/dvossel/generic_aoc/res/res_calendar_exchange.c Wed Apr 21 10:19:22 2010
@@ -17,7 +17,7 @@
*/
/*! \file
- * \brief Resource for handling iCalnedar calendars
+ * \brief Resource for handling MS Exchange calendars
*/
/*** MODULEINFO
Modified: team/dvossel/generic_aoc/res/res_calendar_icalendar.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/res/res_calendar_icalendar.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/res/res_calendar_icalendar.c (original)
+++ team/dvossel/generic_aoc/res/res_calendar_icalendar.c Wed Apr 21 10:19:22 2010
@@ -17,7 +17,7 @@
*/
/*! \file
- * \brief Resource for handling iCalnedar calendars
+ * \brief Resource for handling iCalendar calendars
*/
/*** MODULEINFO
Modified: team/dvossel/generic_aoc/res/res_mutestream.c
URL: http://svnview.digium.com/svn/asterisk/team/dvossel/generic_aoc/res/res_mutestream.c?view=diff&rev=258302&r1=258301&r2=258302
==============================================================================
--- team/dvossel/generic_aoc/res/res_mutestream.c (original)
+++ team/dvossel/generic_aoc/res/res_mutestream.c Wed Apr 21 10:19:22 2010
@@ -116,19 +116,6 @@
.destroy = destroy_callback
};
-/*! \brief Wipe out all audio samples from an ast_frame. Clean it. */
-static void ast_frame_clear(struct ast_frame *frame)
-{
- struct ast_frame *next;
-
- for (next = AST_LIST_NEXT(frame, frame_list);
- frame;
- frame = next, next = frame ? AST_LIST_NEXT(frame, frame_list) : NULL) {
- memset(frame->data.ptr, 0, frame->datalen);
- }
-}
-
-
/*! \brief The callback from the audiohook subsystem. We basically get a frame to have fun with */
static int mute_callback(struct ast_audiohook *audiohook, struct ast_channel *chan, struct ast_frame *frame, enum ast_audiohook_direction direction)
{
More information about the asterisk-commits
mailing list