aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authortwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-10 19:25:08 +0000
committertwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-10 19:25:08 +0000
commit2d7639134c53e53ef345904913933b3eead99694 (patch)
tree26999f806d1bba5e9f5df58d7485d0ba25e77974 /include
parent6368131c6cbe811d9348bf387b9f62ae40b9fb37 (diff)
Inherit CHANNEL() writes to both sides of a Local channel
Having Local (/n) channels as queue members and setting the language in the extension with Set(CHANNEL(language)=fr) sets the language on the Local/...,2 channel. Hold time report playbacks happen on the Local/...,1 channel and therefor do not play in the specified language. This patch modifies func_channel_write to call the setoption callback and pass the CHANNEL() write info to the callback. chan_local uses this information to look up the other side of the channel and apply the same changes to it. (closes issue #17673) Reported by: Guggemand Review: https://reviewboard.asterisk.org/r/903/ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@286059 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include')
-rw-r--r--include/asterisk/channel.h18
-rw-r--r--include/asterisk/frame.h7
-rw-r--r--include/asterisk/pbx.h4
3 files changed, 27 insertions, 2 deletions
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index 33f1c73a4..750f56690 100644
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -194,6 +194,24 @@ struct ast_callerid {
int cid_tns; /*!< Callerid Transit Network Select */
};
+/*! \brief Typedef for a custom read function */
+typedef int (*ast_acf_read_fn_t)(struct ast_channel *, char *, char *, char *, size_t);
+
+/*! \brief Typedef for a custom write function */
+typedef int (*ast_acf_write_fn_t)(struct ast_channel *, char *, char *, const char *);
+
+/*! \brief Structure to handle passing func_channel_write info to channels via setoption */
+typedef struct {
+ /*! \brief ast_chan_write_info_t version. Must be incremented if structure is changed */
+ #define AST_CHAN_WRITE_INFO_T_VERSION 1
+ uint32_t version;
+ ast_acf_write_fn_t write_fn;
+ struct ast_channel *chan;
+ char *function;
+ char *data;
+ const char *value;
+} ast_chan_write_info_t;
+
/*! \brief
Structure to describe a channel "technology", ie a channel driver
See for examples:
diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h
index 7f45d91f0..6fc933a74 100644
--- a/include/asterisk/frame.h
+++ b/include/asterisk/frame.h
@@ -340,6 +340,13 @@ enum ast_control_frame_type {
/*! Explicitly enable or disable echo cancelation for the given channel */
#define AST_OPTION_ECHOCAN 8
+/*! \brief Handle channel write data
+ * If a channel needs to process the data from a func_channel write operation
+ * after func_channel_write executes, it can define the setoption callback
+ * and process this option. A pointer to an ast_chan_write_info_t will be passed.
+ * */
+#define AST_OPTION_CHANNEL_WRITE 9
+
struct oprmode {
struct ast_channel *peer;
int mode;
diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h
index 16c02f7fb..29a0535b8 100644
--- a/include/asterisk/pbx.h
+++ b/include/asterisk/pbx.h
@@ -71,8 +71,8 @@ struct ast_custom_function {
const char *synopsis; /*!< Short description for "show functions" */
const char *desc; /*!< Help text that explains it all */
const char *syntax; /*!< Syntax description */
- int (*read)(struct ast_channel *, char *, char *, char *, size_t); /*!< Read function, if read is supported */
- int (*write)(struct ast_channel *, char *, char *, const char *); /*!< Write function, if write is supported */
+ ast_acf_read_fn_t read; /*!< Read function, if read is supported */
+ ast_acf_write_fn_t write; /*!< Write function, if write is supported */
AST_LIST_ENTRY(ast_custom_function) acflist;
};