aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-18 20:54:29 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-18 20:54:29 +0000
commit27fd622049ee72ba07365c9dc51d33707141e9ee (patch)
treeba7f701ff6e3b049a3e18c1c43188b877e057579
parentb27d6650b2749846f4564ad40d543f4ef6d216e1 (diff)
Recorded merge of revisions 195370 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r195370 | tilghman | 2009-05-18 15:52:33 -0500 (Mon, 18 May 2009) | 15 lines Recorded merge of revisions 195366 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r195366 | tilghman | 2009-05-18 15:24:13 -0500 (Mon, 18 May 2009) | 8 lines Add a similar dependency on SMDI for voicemail as already exists for ADSI. (closes issue #14846) Reported by: pj Patches: 20090413__bug14846__1.4.diff.txt uploaded by tilghman (license 14) 20090507__issue14846__1.6.0.diff.txt uploaded by tilghman (license 14) 20090507__issue14846__1.6.1.diff.txt uploaded by tilghman (license 14) ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@195372 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_queue.c20
-rw-r--r--apps/app_voicemail.c4
-rw-r--r--include/asterisk/monitor.h12
-rw-r--r--include/asterisk/smdi.h26
-rw-r--r--res/res_smdi.c4
5 files changed, 36 insertions, 30 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 479f8eca1..024aad08e 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -3756,16 +3756,18 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
else
which = peer;
ast_channel_unlock(qe->chan);
- if (monitorfilename)
- ast_monitor_start(which, qe->parent->monfmt, monitorfilename, 1, X_REC_IN | X_REC_OUT);
- else if (qe->chan->cdr)
- ast_monitor_start(which, qe->parent->monfmt, qe->chan->cdr->uniqueid, 1, X_REC_IN | X_REC_OUT);
- else {
- /* Last ditch effort -- no CDR, make up something */
- snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
- ast_monitor_start(which, qe->parent->monfmt, tmpid, 1, X_REC_IN | X_REC_OUT);
+ if (ast_monitor_start) {
+ if (monitorfilename) {
+ ast_monitor_start(which, qe->parent->monfmt, monitorfilename, 1, X_REC_IN | X_REC_OUT);
+ } else if (qe->chan->cdr && ast_monitor_start) {
+ ast_monitor_start(which, qe->parent->monfmt, qe->chan->cdr->uniqueid, 1, X_REC_IN | X_REC_OUT);
+ } else if (ast_monitor_start) {
+ /* Last ditch effort -- no CDR, make up something */
+ snprintf(tmpid, sizeof(tmpid), "chan-%lx", ast_random());
+ ast_monitor_start(which, qe->parent->monfmt, tmpid, 1, X_REC_IN | X_REC_OUT);
+ }
}
- if (!ast_strlen_zero(monexec)) {
+ if (!ast_strlen_zero(monexec) && ast_monitor_setjoinfiles) {
ast_monitor_setjoinfiles(which, 1);
}
} else {
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 286530a06..f30d802c5 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -10503,10 +10503,10 @@ static int load_config(int reload)
if ((val = ast_variable_retrieve(cfg, "general", "smdienable")) && ast_true(val)) {
ast_debug(1, "Enabled SMDI voicemail notification\n");
if ((val = ast_variable_retrieve(cfg, "general", "smdiport"))) {
- smdi_iface = ast_smdi_interface_find(val);
+ smdi_iface = ast_smdi_interface_find ? ast_smdi_interface_find(val) : NULL;
} else {
ast_debug(1, "No SMDI interface set, trying default (/dev/ttyS0)\n");
- smdi_iface = ast_smdi_interface_find("/dev/ttyS0");
+ smdi_iface = ast_smdi_interface_find ? ast_smdi_interface_find("/dev/ttyS0") : NULL;
}
if (!smdi_iface) {
ast_log(AST_LOG_ERROR, "No valid SMDI interface specfied, disabling SMDI voicemail notification\n");
diff --git a/include/asterisk/monitor.h b/include/asterisk/monitor.h
index 7f32b6994..84d369617 100644
--- a/include/asterisk/monitor.h
+++ b/include/asterisk/monitor.h
@@ -51,21 +51,21 @@ struct ast_channel_monitor {
/* Start monitoring a channel */
int ast_monitor_start(struct ast_channel *chan, const char *format_spec,
- const char *fname_base, int need_lock, int stream_action);
+ const char *fname_base, int need_lock, int stream_action) attribute_weak;
/* Stop monitoring a channel */
-int ast_monitor_stop(struct ast_channel *chan, int need_lock);
+int ast_monitor_stop(struct ast_channel *chan, int need_lock) attribute_weak;
/* Change monitoring filename of a channel */
int ast_monitor_change_fname(struct ast_channel *chan,
- const char *fname_base, int need_lock);
+ const char *fname_base, int need_lock) attribute_weak;
-void ast_monitor_setjoinfiles(struct ast_channel *chan, int turnon);
+void ast_monitor_setjoinfiles(struct ast_channel *chan, int turnon) attribute_weak;
/* Pause monitoring of a channel */
-int ast_monitor_pause(struct ast_channel *chan);
+int ast_monitor_pause(struct ast_channel *chan) attribute_weak;
/* Unpause monitoring of a channel */
-int ast_monitor_unpause(struct ast_channel *chan);
+int ast_monitor_unpause(struct ast_channel *chan) attribute_weak;
#endif /* _ASTERISK_MONITOR_H */
diff --git a/include/asterisk/smdi.h b/include/asterisk/smdi.h
index 8f098abdd..1351226af 100644
--- a/include/asterisk/smdi.h
+++ b/include/asterisk/smdi.h
@@ -84,7 +84,7 @@ struct ast_smdi_md_message {
*/
struct ast_smdi_interface;
-void ast_smdi_interface_unref(struct ast_smdi_interface *iface);
+void ast_smdi_interface_unref(struct ast_smdi_interface *iface) attribute_weak;
/*!
* \brief Get the next SMDI message from the queue.
@@ -96,7 +96,7 @@ void ast_smdi_interface_unref(struct ast_smdi_interface *iface);
*
* \return the next SMDI message, or NULL if there were no pending messages.
*/
-struct ast_smdi_md_message *ast_smdi_md_message_pop(struct ast_smdi_interface *iface);
+struct ast_smdi_md_message *ast_smdi_md_message_pop(struct ast_smdi_interface *iface) attribute_weak;
/*!
* \brief Get the next SMDI message from the queue.
@@ -110,7 +110,7 @@ struct ast_smdi_md_message *ast_smdi_md_message_pop(struct ast_smdi_interface *i
* \return the next SMDI message, or NULL if there were no pending messages and
* the timeout has expired.
*/
-struct ast_smdi_md_message *ast_smdi_md_message_wait(struct ast_smdi_interface *iface, int timeout);
+struct ast_smdi_md_message *ast_smdi_md_message_wait(struct ast_smdi_interface *iface, int timeout) attribute_weak;
/*!
* \brief Put an SMDI message back in the front of the queue.
@@ -121,7 +121,7 @@ struct ast_smdi_md_message *ast_smdi_md_message_wait(struct ast_smdi_interface *
* should be used if a message was popped but is not going to be processed for
* some reason, and the message needs to be returned to the queue.
*/
-void ast_smdi_md_message_putback(struct ast_smdi_interface *iface, struct ast_smdi_md_message *msg);
+void ast_smdi_md_message_putback(struct ast_smdi_interface *iface, struct ast_smdi_md_message *msg) attribute_weak;
/*!
* \brief Get the next SMDI message from the queue.
@@ -133,7 +133,7 @@ void ast_smdi_md_message_putback(struct ast_smdi_interface *iface, struct ast_sm
*
* \return the next SMDI message, or NULL if there were no pending messages.
*/
-struct ast_smdi_mwi_message *ast_smdi_mwi_message_pop(struct ast_smdi_interface *iface);
+struct ast_smdi_mwi_message *ast_smdi_mwi_message_pop(struct ast_smdi_interface *iface) attribute_weak;
/*!
* \brief Get the next SMDI message from the queue.
@@ -147,9 +147,9 @@ struct ast_smdi_mwi_message *ast_smdi_mwi_message_pop(struct ast_smdi_interface
* \return the next SMDI message, or NULL if there were no pending messages and
* the timeout has expired.
*/
-struct ast_smdi_mwi_message *ast_smdi_mwi_message_wait(struct ast_smdi_interface *iface, int timeout);
+struct ast_smdi_mwi_message *ast_smdi_mwi_message_wait(struct ast_smdi_interface *iface, int timeout) attribute_weak;
struct ast_smdi_mwi_message *ast_smdi_mwi_message_wait_station(struct ast_smdi_interface *iface,
- int timeout, const char *station);
+ int timeout, const char *station) attribute_weak;
/*!
* \brief Put an SMDI message back in the front of the queue.
@@ -160,7 +160,7 @@ struct ast_smdi_mwi_message *ast_smdi_mwi_message_wait_station(struct ast_smdi_i
* should be used if a message was popped but is not going to be processed for
* some reason, and the message needs to be returned to the queue.
*/
-void ast_smdi_mwi_message_putback(struct ast_smdi_interface *iface, struct ast_smdi_mwi_message *msg);
+void ast_smdi_mwi_message_putback(struct ast_smdi_interface *iface, struct ast_smdi_mwi_message *msg) attribute_weak;
/*!
* \brief Find an SMDI interface with the specified name.
@@ -170,26 +170,26 @@ void ast_smdi_mwi_message_putback(struct ast_smdi_interface *iface, struct ast_s
* actually returns an ASTOBJ reference and should be released using
* #ASTOBJ_UNREF(iface, ast_smdi_interface_destroy).
*/
-struct ast_smdi_interface *ast_smdi_interface_find(const char *iface_name);
+struct ast_smdi_interface *ast_smdi_interface_find(const char *iface_name) attribute_weak;
/*!
* \brief Set the MWI indicator for a mailbox.
* \param iface the interface to use.
* \param mailbox the mailbox to use.
*/
-int ast_smdi_mwi_set(struct ast_smdi_interface *iface, const char *mailbox);
+int ast_smdi_mwi_set(struct ast_smdi_interface *iface, const char *mailbox) attribute_weak;
/*!
* \brief Unset the MWI indicator for a mailbox.
* \param iface the interface to use.
* \param mailbox the mailbox to use.
*/
-int ast_smdi_mwi_unset(struct ast_smdi_interface *iface, const char *mailbox);
+int ast_smdi_mwi_unset(struct ast_smdi_interface *iface, const char *mailbox) attribute_weak;
/*! \brief ast_smdi_md_message destructor. */
-void ast_smdi_md_message_destroy(struct ast_smdi_md_message *msg);
+void ast_smdi_md_message_destroy(struct ast_smdi_md_message *msg) attribute_weak;
/*! \brief ast_smdi_mwi_message destructor. */
-void ast_smdi_mwi_message_destroy(struct ast_smdi_mwi_message *msg);
+void ast_smdi_mwi_message_destroy(struct ast_smdi_mwi_message *msg) attribute_weak;
#endif /* !ASTERISK_SMDI_H */
diff --git a/res/res_smdi.c b/res/res_smdi.c
index 76f61fc5b..53f174b3c 100644
--- a/res/res_smdi.c
+++ b/res/res_smdi.c
@@ -1332,6 +1332,8 @@ static struct ast_custom_function smdi_msg_function = {
.read = smdi_msg_read,
};
+static int unload_module(void);
+
static int load_module(void)
{
int res;
@@ -1349,8 +1351,10 @@ static int load_module(void)
/* load the config and start the listener threads*/
res = smdi_load(0);
if (res < 0) {
+ unload_module();
return res;
} else if (res == 1) {
+ unload_module();
ast_log(LOG_NOTICE, "No SMDI interfaces are available to listen on, not starting SMDI listener.\n");
return AST_MODULE_LOAD_DECLINE;
}