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 {
#define _ASTERISK_MONITOR_H
#include "asterisk/channel.h"
+#include "asterisk/optional_api.h"
enum AST_MONITORING_STATE {
AST_MONITOR_RUNNING,
};
/* 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);
+AST_OPTIONAL_API(int, ast_monitor_start, (struct ast_channel *chan, const char
+ *format_spec, const char *fname_base, int need_lock, int stream_action),
+ { return -1; });
/* Stop monitoring a channel */
-int ast_monitor_stop(struct ast_channel *chan, int need_lock);
+AST_OPTIONAL_API(int, ast_monitor_stop, (struct ast_channel *chan, int
+ need_lock), { return -1; });
/* Change monitoring filename of a channel */
-int ast_monitor_change_fname(struct ast_channel *chan,
- const char *fname_base, int need_lock);
+AST_OPTIONAL_API(int, ast_monitor_change_fname, (struct ast_channel *chan,
+ const char *fname_base, int need_lock), { return -1; });
-void ast_monitor_setjoinfiles(struct ast_channel *chan, int turnon);
+AST_OPTIONAL_API(void, ast_monitor_setjoinfiles, (struct ast_channel *chan,
+ int turnon), { return; });
/* Pause monitoring of a channel */
-int ast_monitor_pause(struct ast_channel *chan);
+AST_OPTIONAL_API(int, ast_monitor_pause, (struct ast_channel *chan),
+ { return -1; });
/* Unpause monitoring of a channel */
-int ast_monitor_unpause(struct ast_channel *chan);
+AST_OPTIONAL_API(int, ast_monitor_unpause, (struct ast_channel *chan),
+ { return -1; });
#endif /* _ASTERISK_MONITOR_H */
#include "asterisk/config.h"
#include "asterisk/module.h"
#include "asterisk/astobj.h"
+#include "asterisk/optional_api.h"
#define SMDI_MESG_DESK_NUM_LEN 3
#define SMDI_MESG_DESK_TERM_LEN 4
*/
struct ast_smdi_interface;
-void ast_smdi_interface_unref(struct ast_smdi_interface *iface);
+AST_OPTIONAL_API(void, ast_smdi_interface_unref, (struct ast_smdi_interface
+ *iface), { return; });
/*!
* \brief Get the next SMDI message from the queue.
*
* \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);
+AST_OPTIONAL_API(struct ast_smdi_md_message *, ast_smdi_md_message_pop, (struct
+ ast_smdi_interface *iface), { return NULL; });
/*!
* \brief Get the next SMDI message from the queue.
* \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);
+AST_OPTIONAL_API(struct ast_smdi_md_message *, ast_smdi_md_message_wait,
+ (struct ast_smdi_interface *iface, int timeout), { return NULL; });
/*!
* \brief Put an SMDI message back in the front of the queue.
* 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);
+AST_OPTIONAL_API(void, ast_smdi_md_message_putback, (struct ast_smdi_interface
+ *iface, struct ast_smdi_md_message *msg), { return; });
/*!
* \brief Get the next SMDI message from the queue.
*
* \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);
+AST_OPTIONAL_API(struct ast_smdi_mwi_message *, ast_smdi_mwi_message_pop,
+ (struct ast_smdi_interface *iface), { return NULL; });
/*!
* \brief Get the next SMDI message from the queue.
* \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_station(struct ast_smdi_interface *iface,
- int timeout, const char *station);
+AST_OPTIONAL_API(struct ast_smdi_mwi_message *, ast_smdi_mwi_message_wait,
+ (struct ast_smdi_interface *iface, int timeout), { return NULL; });
+AST_OPTIONAL_API(struct ast_smdi_mwi_message *,
+ ast_smdi_mwi_message_wait_station, (struct ast_smdi_interface *iface, int
+ timeout, const char *station), { return NULL; });
/*!
* \brief Put an SMDI message back in the front of the queue.
* 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);
+AST_OPTIONAL_API(void, ast_smdi_mwi_message_putback, (struct ast_smdi_interface
+ *iface, struct ast_smdi_mwi_message *msg), { return; });
/*!
* \brief Find an SMDI interface with the specified name.
* 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);
+AST_OPTIONAL_API(struct ast_smdi_interface *, ast_smdi_interface_find,
+ (const char *iface_name), { return NULL; });
/*!
* \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);
+AST_OPTIONAL_API(int, ast_smdi_mwi_set, (struct ast_smdi_interface *iface,
+ const char *mailbox), { return -1; });
/*!
* \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);
+AST_OPTIONAL_API(int, ast_smdi_mwi_unset, (struct ast_smdi_interface *iface,
+ const char *mailbox), { return -1; });
/*! \brief ast_smdi_md_message destructor. */
-void ast_smdi_md_message_destroy(struct ast_smdi_md_message *msg);
+AST_OPTIONAL_API(void, ast_smdi_md_message_destroy,
+ (struct ast_smdi_md_message *msg), { return; });
/*! \brief ast_smdi_mwi_message destructor. */
-void ast_smdi_mwi_message_destroy(struct ast_smdi_mwi_message *msg);
+AST_OPTIONAL_API(void, ast_smdi_mwi_message_destroy, (struct
+ ast_smdi_mwi_message *msg), { return; });
#endif /* !ASTERISK_SMDI_H */