aboutsummaryrefslogtreecommitdiffstats
path: root/include/asterisk/channel.h
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2008-02-18 23:47:01 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2008-02-18 23:47:01 +0000
commitd9d1ed38227d0646eed979a8f12139ae517e5b5f (patch)
treeb5f0bd047d53611a89ec0394a3c4efec497c9365 /include/asterisk/channel.h
parent8ed70c9fdef986fdc7ff63cc03df87aa1ade4cc1 (diff)
Add a non-invasive API for application level manipulation of T38 on a channel. This uses control frames (so they can even pass across IAX2) to negotiate T38 and provided a way of getting the current status of T38 using queryoption. This should by no means cause any issues and if it does I will take responsibility for it.
(closes issue #11873) Reported by: dimas Patches: v4-t38-api.patch uploaded by dimas (license 88) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@103799 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include/asterisk/channel.h')
-rw-r--r--include/asterisk/channel.h27
1 files changed, 25 insertions, 2 deletions
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index 0faddb870..e5fd5ba81 100644
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -389,6 +389,17 @@ enum ast_channel_state {
AST_STATE_MUTE = (1 << 16), /*!< Do not transmit voice data */
};
+/*!
+ * \brief Possible T38 states on channels
+ */
+enum ast_t38_state {
+ T38_STATE_UNAVAILABLE, /*!< T38 is unavailable on this channel or disabled by configuration */
+ T38_STATE_UNKNOWN, /*!< The channel supports T38 but the current status is unknown */
+ T38_STATE_NEGOTIATING, /*!< T38 is being negotiated */
+ T38_STATE_REJECTED, /*!< Remote side has rejected our offer */
+ T38_STATE_NEGOTIATED, /*!< T38 established */
+};
+
/*! \brief Main Channel structure associated with a channel.
* This is the side of it mostly used by the pbx and call management.
*
@@ -1300,10 +1311,10 @@ int ast_best_codec(int fmts);
/*! Checks the value of an option */
/*!
- * Query the value of an option, optionally blocking until a reply is received
+ * Query the value of an option
* Works similarly to setoption except only reads the options.
*/
-struct ast_frame *ast_channel_queryoption(struct ast_channel *channel, int option, void *data, int *datalen, int block);
+int ast_channel_queryoption(struct ast_channel *channel, int option, void *data, int *datalen, int block);
/*! Checks for HTML support on a channel */
/*! Returns 0 if channel does not support HTML or non-zero if it does */
@@ -1557,6 +1568,18 @@ static inline int ast_select(int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds,
#endif
}
+/*! \brief Retrieves the current T38 state of a channel */
+static inline enum ast_t38_state ast_channel_get_t38_state(struct ast_channel *chan)
+{
+ enum ast_t38_state state = T38_STATE_UNAVAILABLE;
+ int datalen = sizeof(state);
+
+ ast_channel_queryoption(chan, AST_OPTION_T38_STATE, &state, &datalen, 0);
+
+ return state;
+}
+
+
#ifdef DO_CRASH
#define CRASH do { fprintf(stderr, "!! Forcing immediate crash a-la abort !!\n"); *((int *)0) = 0; } while(0)
#else