mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
Version 0.1.1 from FTP
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@138 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
12
CHANGES
Executable file
12
CHANGES
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
* Asterisk 0.1.1
|
||||||
|
-- Revised translator, fixed some general race conditions throughout *
|
||||||
|
-- Made dialer somewhat more aware of incompatible voice channels
|
||||||
|
-- Added Voice Modem driver and A/Open Modem Driver stub
|
||||||
|
-- Added MP3 decoder channel
|
||||||
|
-- Added Microsoft WAV49 support
|
||||||
|
-- Revised License -- Pure GPL, nothing else
|
||||||
|
-- Modified Copyright statement since code is still currently owned by author
|
||||||
|
-- Added RAW GSM headerless data format
|
||||||
|
-- Innumerable bug fixes
|
||||||
|
* Asterisk 0.1.0
|
||||||
|
-- Initial Release
|
40
doc/channel.txt
Executable file
40
doc/channel.txt
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
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.
|
Reference in New Issue
Block a user