diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-01-16 15:51:43 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-01-16 15:51:43 +0000 |
commit | 52acc4c45786fc04da9536c2801eb2b483cc2009 (patch) | |
tree | 3e0b68760b7b6d49c72de4fd5b747ed4d5726ad3 /include/asterisk/smdi.h | |
parent | 5d9d64e584ec5220835eb10a124b555d449fa3d3 (diff) | |
parent | caebf8461f9849f484eb5bbd649880e457c20e31 (diff) |
Creating tag for the release of asterisk-1.4.23-rc4
git-svn-id: http://svn.digium.com/svn/asterisk/tags/1.4.23-rc4@168755 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include/asterisk/smdi.h')
-rw-r--r-- | include/asterisk/smdi.h | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/include/asterisk/smdi.h b/include/asterisk/smdi.h new file mode 100644 index 000000000..6c79b2bc8 --- /dev/null +++ b/include/asterisk/smdi.h @@ -0,0 +1,195 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * Copyright (C) 2005-2008, Digium, Inc. + * + * Matthew A. Nicholson <mnicholson@digium.com> + * Russell Bryant <russell@digium.com> + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! + * \file + * \brief SMDI support for Asterisk. + * \author Matthew A. Nicholson <mnicholson@digium.com> + * \author Russell Bryant <russell@digium.com> + */ + + +/* C is simply a ego booster for those who want to do objects the hard way. */ + + +#ifndef ASTERISK_SMDI_H +#define ASTERISK_SMDI_H + +#include <termios.h> +#include <time.h> + +#include "asterisk/config.h" +#include "asterisk/module.h" +#include "asterisk/astobj.h" + +#define SMDI_MESG_DESK_NUM_LEN 3 +#define SMDI_MESG_DESK_TERM_LEN 4 +#define SMDI_MWI_FAIL_CAUSE_LEN 3 +#define SMDI_MAX_STATION_NUM_LEN 10 +#define SMDI_MAX_FILENAME_LEN 256 + +/*! + * \brief An SMDI message waiting indicator message. + * + * The ast_smdi_mwi_message structure contains the parsed out parts of an smdi + * message. Each ast_smdi_interface structure has a message queue consisting + * ast_smdi_mwi_message structures. + */ +struct ast_smdi_mwi_message { + ASTOBJ_COMPONENTS(struct ast_smdi_mwi_message); + char fwd_st[SMDI_MAX_STATION_NUM_LEN + 1]; /* forwarding station number */ + char cause[SMDI_MWI_FAIL_CAUSE_LEN + 1]; /* the type of failure */ + struct timeval timestamp; /* a timestamp for the message */ +}; + +/*! + * \brief An SMDI message desk message. + * + * The ast_smdi_md_message structure contains the parsed out parts of an smdi + * message. Each ast_smdi_interface structure has a message queue consisting + * ast_smdi_md_message structures. + */ +struct ast_smdi_md_message { + ASTOBJ_COMPONENTS(struct ast_smdi_md_message); + char mesg_desk_num[SMDI_MESG_DESK_NUM_LEN + 1]; /* message desk number */ + char mesg_desk_term[SMDI_MESG_DESK_TERM_LEN + 1]; /* message desk terminal */ + char fwd_st[SMDI_MAX_STATION_NUM_LEN + 1]; /* forwarding station number */ + char calling_st[SMDI_MAX_STATION_NUM_LEN + 1]; /* calling station number */ + char type; /* the type of the call */ + struct timeval timestamp; /* a timestamp for the message */ +}; + +/*! + * \brief SMDI interface structure. + * + * The ast_smdi_interface structure holds information on a serial port that + * should be monitored for SMDI activity. The structure contains a message + * queue of messages that have been recieved on the interface. + */ +struct ast_smdi_interface; + +void ast_smdi_interface_unref(struct ast_smdi_interface *iface); + +/*! + * \brief Get the next SMDI message from the queue. + * \param iface a pointer to the interface to use. + * + * This function pulls the first unexpired message from the SMDI message queue + * on the specified interface. It will purge all expired SMDI messages before + * returning. + * + * \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); + +/*! + * \brief Get the next SMDI message from the queue. + * \param iface a pointer to the interface to use. + * \param timeout the time to wait before returning in milliseconds. + * + * This function pulls a message from the SMDI message queue on the specified + * interface. If no message is available this function will wait the specified + * amount of time before returning. + * + * \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); + +/*! + * \brief Put an SMDI message back in the front of the queue. + * \param iface a pointer to the interface to use. + * \param md_msg a pointer to the message to use. + * + * This function puts a message back in the front of the specified queue. It + * 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); + +/*! + * \brief Get the next SMDI message from the queue. + * \param iface a pointer to the interface to use. + * + * This function pulls the first unexpired message from the SMDI message queue + * on the specified interface. It will purge all expired SMDI messages before + * returning. + * + * \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); + +/*! + * \brief Get the next SMDI message from the queue. + * \param iface a pointer to the interface to use. + * \param timeout the time to wait before returning in milliseconds. + * + * This function pulls a message from the SMDI message queue on the specified + * interface. If no message is available this function will wait the specified + * amount of time before returning. + * + * \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); + +/*! + * \brief Put an SMDI message back in the front of the queue. + * \param iface a pointer to the interface to use. + * \param mwi_msg a pointer to the message to use. + * + * This function puts a message back in the front of the specified queue. It + * 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); + +/*! + * \brief Find an SMDI interface with the specified name. + * \param iface_name the name/port of the interface to search for. + * + * \return a pointer to the interface located or NULL if none was found. This + * 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); + +/*! + * \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); + +/*! + * \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); + +/*! \brief ast_smdi_md_message destructor. */ +void ast_smdi_md_message_destroy(struct ast_smdi_md_message *msg); + +/*! \brief ast_smdi_mwi_message destructor. */ +void ast_smdi_mwi_message_destroy(struct ast_smdi_mwi_message *msg); + +#endif /* !ASTERISK_SMDI_H */ |