use an enum for control frame types
authorKevin P. Fleming <kpfleming@digium.com>
Tue, 9 May 2006 14:25:57 +0000 (14:25 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Tue, 9 May 2006 14:25:57 +0000 (14:25 +0000)
support sending control frames with payload

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@26093 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channel.c
include/asterisk/channel.h
include/asterisk/frame.h

index 1d278b6..cbedf3f 100644 (file)
--- 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);
 }
 
index 1fdec4e..73f1e17 100644 (file)
@@ -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);
index b70b7bc..09d8674 100644 (file)
@@ -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)