diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-05-18 20:54:29 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-05-18 20:54:29 +0000 |
commit | 27fd622049ee72ba07365c9dc51d33707141e9ee (patch) | |
tree | ba7f701ff6e3b049a3e18c1c43188b877e057579 | |
parent | b27d6650b2749846f4564ad40d543f4ef6d216e1 (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.c | 20 | ||||
-rw-r--r-- | apps/app_voicemail.c | 4 | ||||
-rw-r--r-- | include/asterisk/monitor.h | 12 | ||||
-rw-r--r-- | include/asterisk/smdi.h | 26 | ||||
-rw-r--r-- | res/res_smdi.c | 4 |
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; } |