aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-05-09 14:25:57 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2006-05-09 14:25:57 +0000
commit7670b6ca640512806ad6fda2807b090cd4f34c41 (patch)
tree16161d604b4e14781b023303263f3e9471645a3f
parentf6339f372684efd389bf84a24fcb706ca778ea9d (diff)
use an enum for control frame types
support sending control frames with payload git-svn-id: http://svn.digium.com/svn/asterisk/trunk@26093 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channel.c17
-rw-r--r--include/asterisk/channel.h23
-rw-r--r--include/asterisk/frame.h57
3 files changed, 57 insertions, 40 deletions
diff --git a/channel.c b/channel.c
index 1d278b648..cbedf3fec 100644
--- a/channel.c
+++ b/channel.c
@@ -738,10 +738,25 @@ int ast_queue_hangup(struct ast_channel *chan)
}
/*! \brief Queue a control frame */
-int ast_queue_control(struct ast_channel *chan, int control)
+int ast_queue_control(struct ast_channel *chan, enum ast_control_frame_type control)
{
struct ast_frame f = { AST_FRAME_CONTROL, };
+
+ f.subclass = control;
+
+ return ast_queue_frame(chan, &f);
+}
+
+/*! \brief Queue a control frame with payload */
+int ast_queue_control_data(struct ast_channel *chan, enum ast_control_frame_type control,
+ const void *data, size_t datalen)
+{
+ struct ast_frame f = { AST_FRAME_CONTROL, };
+
f.subclass = control;
+ f.data = (void *) data;
+ f.datalen = datalen;
+
return ast_queue_frame(chan, &f);
}
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index 1fdec4ed3..73f1e17a7 100644
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -605,9 +605,28 @@ int ast_queue_frame(struct ast_channel *chan, struct ast_frame *f);
/*! \brief Queue a hangup frame */
int ast_queue_hangup(struct ast_channel *chan);
-/*! \brief Queue a control frame */
-int ast_queue_control(struct ast_channel *chan, int control);
+/*!
+ \brief Queue a control frame with payload
+ \param chan channel to queue frame onto
+ \param control type of control frame
+ \return zero on success, non-zero on failure
+*/
+int ast_queue_control(struct ast_channel *chan, enum ast_control_frame_type control);
+/*!
+ \brief Queue a control frame with payload
+ \param chan channel to queue frame onto
+ \param control type of control frame
+ \param data pointer to payload data to be included in frame
+ \param datalen number of bytes of payload data
+ \return zero on success, non-zero on failure
+
+ The supplied payload data is copied into the frame, so the caller's copy
+ is not modified nor freed, and the resulting frame will retain a copy of
+ the data even if the caller frees their local copy.
+*/
+int ast_queue_control_data(struct ast_channel *chan, enum ast_control_frame_type control,
+ const void *data, size_t datalen);
/*! \brief Change channel name */
void ast_change_name(struct ast_channel *chan, char *newname);
diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h
index b70b7bcd2..09d8674b2 100644
--- a/include/asterisk/frame.h
+++ b/include/asterisk/frame.h
@@ -240,43 +240,26 @@ extern struct ast_frame ast_null_frame;
#define AST_FORMAT_MAX_VIDEO (1 << 24)
#define AST_FORMAT_VIDEO_MASK (((1 << 25)-1) & ~(AST_FORMAT_AUDIO_MASK))
-/* Control frame types */
-/*! Other end has hungup */
-#define AST_CONTROL_HANGUP 1
-/*! Local ring */
-#define AST_CONTROL_RING 2
-/*! Remote end is ringing */
-#define AST_CONTROL_RINGING 3
-/*! Remote end has answered */
-#define AST_CONTROL_ANSWER 4
-/*! Remote end is busy */
-#define AST_CONTROL_BUSY 5
-/*! Make it go off hook */
-#define AST_CONTROL_TAKEOFFHOOK 6
-/*! Line is off hook */
-#define AST_CONTROL_OFFHOOK 7
-/*! Congestion (circuits busy) */
-#define AST_CONTROL_CONGESTION 8
-/*! Flash hook */
-#define AST_CONTROL_FLASH 9
-/*! Wink */
-#define AST_CONTROL_WINK 10
-/*! Set a low-level option */
-#define AST_CONTROL_OPTION 11
-/*! Key Radio */
-#define AST_CONTROL_RADIO_KEY 12
-/*! Un-Key Radio */
-#define AST_CONTROL_RADIO_UNKEY 13
-/*! Indicate PROGRESS */
-#define AST_CONTROL_PROGRESS 14
-/*! Indicate CALL PROCEEDING */
-#define AST_CONTROL_PROCEEDING 15
-/*! Indicate call is placed on hold */
-#define AST_CONTROL_HOLD 16
-/*! Indicate call is left from hold */
-#define AST_CONTROL_UNHOLD 17
-/*! Indicate video frame update */
-#define AST_CONTROL_VIDUPDATE 18
+enum ast_control_frame_type {
+ AST_CONTROL_HANGUP = 1, /*! Other end has hungup */
+ AST_CONTROL_RING = 2, /*! Local ring */
+ AST_CONTROL_RINGING = 3, /*! Remote end is ringing */
+ AST_CONTROL_ANSWER = 4, /*! Remote end has answered */
+ AST_CONTROL_BUSY = 5, /*! Remote end is busy */
+ AST_CONTROL_TAKEOFFHOOK = 6, /*! Make it go off hook */
+ AST_CONTROL_OFFHOOK = 7, /*! Line is off hook */
+ AST_CONTROL_CONGESTION = 8, /*! Congestion (circuits busy) */
+ AST_CONTROL_FLASH = 9, /*! Flash hook */
+ AST_CONTROL_WINK = 10, /*! Wink */
+ AST_CONTROL_OPTION = 11, /*! Set a low-level option */
+ AST_CONTROL_RADIO_KEY = 12, /*! Key Radio */
+ AST_CONTROL_RADIO_UNKEY = 13, /*! Un-Key Radio */
+ AST_CONTROL_PROGRESS = 14, /*! Indicate PROGRESS */
+ AST_CONTROL_PROCEEDING = 15, /*! Indicate CALL PROCEEDING */
+ AST_CONTROL_HOLD = 16, /*! Indicate call is placed on hold */
+ AST_CONTROL_UNHOLD = 17, /*! Indicate call is left from hold */
+ AST_CONTROL_VIDUPDATE = 18, /*! Indicate video frame update */
+};
#define AST_SMOOTHER_FLAG_G729 (1 << 0)