diff options
author | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-02-01 17:49:02 +0000 |
---|---|---|
committer | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-02-01 17:49:02 +0000 |
commit | 0c43a5ab3637e311a9232ae77ecd8e7f05c2f8cc (patch) | |
tree | 7232cd823d72b5a6ef890d323283b7974188da47 /doc/channels.txt | |
parent | fa9fd8ae706c13f63d7db560596ea10b44c8c69d (diff) |
- Removing the "README." from the name of the README files.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@9047 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'doc/channels.txt')
-rw-r--r-- | doc/channels.txt | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/doc/channels.txt b/doc/channels.txt new file mode 100644 index 000000000..b907a92aa --- /dev/null +++ b/doc/channels.txt @@ -0,0 +1,44 @@ +Implementing a Channel +====================== + +* What is a channel? + +A channel is a unit which brings in a call to the Asterisk PBX. A channel +could be connected to a real telephone (like the Internet Phone Jack) or +to a logical call (like an Internet phone call). Asterisk makes no +distinction between "FXO" and "FXS" style channels (that is, it doesn't +distinguish between telephone lines and telephones). + +Every call is placed or received on a distinct channel. Asterisk uses a +channel driver (typically named chan_xxx.so) to support each type of +hardware. + +* What do I need to create a channel? + +In order to support a new piece of hardware you need to write a channel +driver. The easiest way to do so is to look at an existing channel driver +and model your own code after it. + +* What's the general architecture? + +Typically, a channel reads a configuration file on startup which tells it +something about the hardware it's going to be servicing. Then, it +launches a thread which monitors all the idle channels (See the chan_modem +or the chan_ixj for an example of this). When a "RING" or equivalent is +detected, the monitoring thread should allocate a channel structure and +assign all the callbacks to it (see ixj_new, for example), and then call +ast_pbx_start on that channel. ast_pbx_start will launch a new thread to +handle the channel as long as the call is up, so once pbx_start has +successfully been run, the monitor should no longer monitor that channel. +The PBX thread will use the channel, reading, writing, calling, etc., and +multiplexing that channel with others using select() on the channel's +file descriptor (if your channel doesn't have an associated file +descriptor, you'll need to emulate one somehow, perhaps along the lines of +what the translator API does with its channel. + +When the PBX is finished with the line, it will hang up the line, at which +point it the hardware should again be monitored by the monitoring thread. + +--------------- +For more information, please consult the Asterisk Developer's Documentation +on http://www.asterisk.org |