Version 0.3.0 from FTP
[asterisk/asterisk.git] / include / asterisk / channel_pvt.h
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Private channel definitions for channel implementations only.
5  * 
6  * Copyright (C) 1999, Mark Spencer
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #ifndef _ASTERISK_CHANNEL_PVT_H
15 #define _ASTERISK_CHANNEL_PVT_H
16
17 #include <asterisk/channel.h>
18
19 #if defined(__cplusplus) || defined(c_plusplus)
20 extern "C" {
21 #endif
22
23
24 struct ast_channel_pvt {
25         /*! Private data used by channel backend */
26         void *pvt;
27         struct ast_frame *readq;
28         int alertpipe[2];
29         /*! Write translation path */
30         struct ast_trans_pvt *writetrans;
31         /*! Read translation path */
32         struct ast_trans_pvt *readtrans;
33         /*! Raw read format */
34         int rawreadformat;
35         /*! Raw write format */
36         int rawwriteformat;
37         /*! Send a literal DTMF digit */
38         int (*send_digit)(struct ast_channel *chan, char digit);
39         /*! Call a given phone number (address, etc), but don't
40            take longer than timeout seconds to do so.  */
41         int (*call)(struct ast_channel *chan, char *addr, int timeout);
42         /*! Hangup (and possibly destroy) the channel */
43         int (*hangup)(struct ast_channel *chan);
44         /*! Answer the line */
45         int (*answer)(struct ast_channel *chan);
46         /*! Read a frame, in standard format */
47         struct ast_frame * (*read)(struct ast_channel *chan);
48         /*! Write a frame, in standard format */
49         int (*write)(struct ast_channel *chan, struct ast_frame *frame);
50         /*! Display or transmit text */
51         int (*send_text)(struct ast_channel *chan, char *text);
52         /*! Display or send an image */
53         int (*send_image)(struct ast_channel *chan, struct ast_frame *frame);
54         /*! Send HTML data */
55         int (*send_html)(struct ast_channel *chan, int subclass, char *data, int len);
56         /*! Handle an exception, reading a frame */
57         struct ast_frame * (*exception)(struct ast_channel *chan);
58         /*! Bridge two channels of the same type together */
59         int (*bridge)(struct ast_channel *c0, struct ast_channel *c1, int flags, struct ast_frame **fo, struct ast_channel **rc);
60         /*! Indicate a particular condition (e.g. AST_CONTROL_BUSY or AST_CONTROL_RINGING or AST_CONTROL_CONGESTION */
61         int (*indicate)(struct ast_channel *c, int condition);
62         /*! Fix up a channel:  If a channel is consumed, this is called.  Basically update any ->owner links */
63         int (*fixup)(struct ast_channel *oldchan, struct ast_channel *newchan);
64         /*! Set a given option */
65         int (*setoption)(struct ast_channel *chan, int option, void *data, int datalen);
66         /*! Query a given option */
67         int (*queryoption)(struct ast_channel *chan, int option, void *data, int *datalen);
68 };
69
70 //! Create a channel structure
71 /*! Returns NULL on failure to allocate */
72 struct ast_channel *ast_channel_alloc(int needalertpipe);
73
74 /*! Queue an outgoing frame, locking if necessary */
75 int ast_queue_frame(struct ast_channel *chan, struct ast_frame *f, int lock);
76
77 int ast_queue_hangup(struct ast_channel *chan, int lock);
78
79 int ast_queue_control(struct ast_channel *chan, int control, int lock);
80
81 /*! Change the state of a channel */
82 int ast_setstate(struct ast_channel *chan, int state);
83
84 void ast_change_name(struct ast_channel *chan, char *newname);
85
86 //! Free a channel structure
87 void  ast_channel_free(struct ast_channel *);
88
89 #if defined(__cplusplus) || defined(c_plusplus)
90 }
91 #endif
92
93
94 #endif