mirror of https://github.com/asterisk/asterisk
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r58931 | russell | 2007-03-15 17:25:12 -0500 (Thu, 15 Mar 2007) | 13 lines Merge changes from svn/asterisk/team/russell/LaTeX_docs. * Convert most of the doc directory into a single LaTeX formatted document so that we can generate a PDF, HTML, or other formats from this information. * Add a CLI command to dump the application documentation into LaTeX format which will only be include if the configure script is run with --enable-dev-mode. * The PDF turned out to be close to 1 MB, so it is not included. However, you can simply run "make asterisk.pdf" to generate it yourself. We may include it in release tarballs or have automatically generated ones on the web site, but that has yet to be decided. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@58932 65c4cc65-6c06-0410-ace0-fbb531ad65f31.6.0
parent
4787adb4e9
commit
1cf3a12047
@ -1,74 +0,0 @@
|
||||
Files in the /doc directory:
|
||||
----------------------------
|
||||
In addition to these files, there is a lot of documentation of various
|
||||
configuration options in the sample configuration files, in the /configs
|
||||
directory of your source code
|
||||
|
||||
Start here
|
||||
----------
|
||||
security.txt IMPORTANT INFORMATION ABOUT ASTERISK SECURITY
|
||||
hardware.txt Hardware supported by Asterisk
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
configuration.txt Features in the configuration parser
|
||||
extensions.txt Basics about the dialplan
|
||||
extconfig.txt How to use databases for configuration of Asterisk (ARA)
|
||||
ip-tos.txt About the IP Type Of Service settings
|
||||
realtime.txt The Asterisk Realtime Architecture - database support
|
||||
freetds.txt Information about the FreeTDS support
|
||||
ael.txt Information about the Asterisk Extension Language
|
||||
|
||||
Misc
|
||||
----
|
||||
PEERING The General Peering Agreement for Dundi
|
||||
ajam.txt About the HTTP-based manager interface
|
||||
app_sms.txt How to configure the SMS application
|
||||
asterisk.conf.txt Documentation of various options in asterisk.conf
|
||||
callingpres.txt Settings for Caller ID presentation
|
||||
billing.txt Call Data Record information
|
||||
cliprompt.txt How to change the Asterisk CLI prompt
|
||||
dundi.txt Dundi - a discovery protocol
|
||||
enum.txt Enum support in Asterisk
|
||||
ices.txt Integrating ICEcast streaming in Asterisk
|
||||
jitterbuffer.txt About the IAX2 jitterbuffer implementation
|
||||
math.txt About the math() application
|
||||
mp3.txt About MP3 support in Asterisk
|
||||
musiconhold-fpm.txt Free Music On Hold music
|
||||
mysql.txt About MYSQL support in Asterisk
|
||||
odbcstorage.txt Voicemail storage of messages in UnixODBC
|
||||
privacy.txt Privacy enhancements in Asterisk
|
||||
queuelog.txt Agent and queue logging
|
||||
channelvariables.txt Channel variables
|
||||
cdrdrivers.txt About CDR storage in various databases (needs update)
|
||||
asterisk-mib.txt SNMP mib for Asterisk (net-snmp)
|
||||
digium-mib.txt SNMP mib for Asterisk (net-snmp)
|
||||
|
||||
Channel drivers
|
||||
---------------
|
||||
misdn.txt The mISDN channel driver for ISDN BRI cards
|
||||
h323.txt How to compile and configure the H.323 channel
|
||||
chaniax.txt About the IAX2 protocol support in Asterisk
|
||||
localchannel.txt The local channel is a "gosub" in the dialplan
|
||||
|
||||
Portability
|
||||
-----------
|
||||
cygwin.txt Compiling Asterisk on CygWin platforms (Windows)
|
||||
|
||||
For developers
|
||||
--------------
|
||||
See http://www.asterisk.org/developers for more information
|
||||
|
||||
manager.txt About the AMI - Asterisk Manager Interface
|
||||
for third party call control and PBX management
|
||||
backtrace.txt How to produce a backtrace when Asterisk crashes
|
||||
CODING-GUIDELINES Guidelines for developers
|
||||
channels.txt What is a channel?
|
||||
externalivr.txt Documentation of the protocol used in externalivr()
|
||||
linkedlists.txt How to develop linked lists in Asterisk (old)
|
||||
iax.txt About the IAX protocol
|
||||
apps.txt About application development
|
||||
model.txt About the call model in Asterisk (old)
|
||||
modules.txt How Asterisk modules work
|
||||
datastores.txt About channel data stores
|
||||
speechrec.txt The Generic Speech Recognition API
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +0,0 @@
|
||||
Asterisk applications register themselves with ast_application_register.
|
||||
They should have a short, unique name, and an exec function which takes
|
||||
as its arguments a channel and some data that might be useful for callback
|
||||
stuff. Remember to keep track of how many and which channels are using
|
||||
your application so that should the module need to be unloaded
|
||||
(particularly force unloaded), you will be able to ast_softhangup all the
|
||||
channels. An application should *never* call ast_hangup on the channel
|
||||
that it is running on (although it could conceivably hang up other
|
||||
channels that it allocates). See app_playback.c as an example of a simple
|
||||
application.
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,130 @@
|
||||
\subsubsection{Asterisk Main Configuration File}
|
||||
|
||||
Below is a sample of the main Asterisk configuration file,
|
||||
asterisk.conf. Note that this file is not provided in
|
||||
sample form, because the Makefile creates it when needed
|
||||
and does not touch it when it already exists.
|
||||
|
||||
\begin{verbatim}
|
||||
[directories]
|
||||
; Make sure these directories have the right permissions if not
|
||||
; running Asterisk as root
|
||||
|
||||
; Where the configuration files (except for this one) are located
|
||||
astetcdir => /etc/asterisk
|
||||
|
||||
; Where the Asterisk loadable modules are located
|
||||
astmoddir => /usr/lib/asterisk/modules
|
||||
|
||||
; Where additional 'library' elements (scripts, etc.) are located
|
||||
astvarlibdir => /var/lib/asterisk
|
||||
|
||||
; Where AGI scripts/programs are located
|
||||
astagidir => /var/lib/asterisk/agi-bin
|
||||
|
||||
; Where spool directories are located
|
||||
; Voicemail, monitor, dictation and other apps will create files here
|
||||
; and outgoing call files (used with pbx_spool) must be placed here
|
||||
astspooldir => /var/spool/asterisk
|
||||
|
||||
; Where the Asterisk process ID (pid) file should be created
|
||||
astrundir => /var/run/asterisk
|
||||
|
||||
; Where the Asterisk log files should be created
|
||||
astlogdir => /var/log/asterisk
|
||||
|
||||
|
||||
[options]
|
||||
;Under "options" you can enter configuration options
|
||||
;that you also can set with command line options
|
||||
|
||||
; Verbosity level for logging (-v)
|
||||
verbose = 0
|
||||
|
||||
; Debug: "No" or value (1-4)
|
||||
debug = 3
|
||||
|
||||
; Background execution disabled (-f)
|
||||
nofork=yes | no
|
||||
|
||||
; Always background, even with -v or -d (-F)
|
||||
alwaysfork=yes | no
|
||||
|
||||
; Console mode (-c)
|
||||
console= yes | no
|
||||
|
||||
; Execute with high priority (-p)
|
||||
highpriority = yes | no
|
||||
|
||||
; Initialize crypto at startup (-i)
|
||||
initcrypto = yes | no
|
||||
|
||||
; Disable ANSI colors (-n)
|
||||
nocolor = yes | no
|
||||
|
||||
; Dump core on failure (-g)
|
||||
dumpcore = yes | no
|
||||
|
||||
; Run quietly (-q)
|
||||
quiet = yes | no
|
||||
|
||||
; Force timestamping in CLI verbose output (-T)
|
||||
timestamp = yes | no
|
||||
|
||||
; User to run asterisk as (-U) NOTE: will require changes to
|
||||
; directory and device permissions
|
||||
runuser = asterisk
|
||||
|
||||
; Group to run asterisk as (-G)
|
||||
rungroup = asterisk
|
||||
|
||||
; Enable internal timing support (-I)
|
||||
internal_timing = yes | no
|
||||
|
||||
; These options have no command line equivalent
|
||||
|
||||
; Cache record() files in another directory until completion
|
||||
cache_record_files = yes | no
|
||||
record_cache_dir = <dir>
|
||||
|
||||
; Build transcode paths via SLINEAR
|
||||
transcode_via_sln = yes | no
|
||||
|
||||
; send SLINEAR silence while channel is being recorded
|
||||
transmit_silence_during_record = yes | no
|
||||
|
||||
; The maximum load average we accept calls for
|
||||
maxload = 1.0
|
||||
|
||||
; The maximum number of concurrent calls you want to allow
|
||||
maxcalls = 255
|
||||
|
||||
; Allow #exec entries in configuration files
|
||||
execincludes = yes | no
|
||||
|
||||
; Don't over-inform the Asterisk sysadm, he's a guru
|
||||
dontwarn = yes | no
|
||||
|
||||
; System name. Used to prefix CDR uniqueid and to fill \${SYSTEMNAME}
|
||||
systemname = <a_string>
|
||||
|
||||
; Should language code be last component of sound file name or first?
|
||||
; when off, sound files are searched as <path>/<lang>/<file>
|
||||
; when on, sound files are search as <lang>/<path>/<file>
|
||||
; (only affects relative paths for sound files)
|
||||
languageprefix = yes | no
|
||||
|
||||
|
||||
[files]
|
||||
; Changing the following lines may compromise your security
|
||||
; Asterisk.ctl is the pipe that is used to connect the remote CLI
|
||||
; (asterisk -r) to Asterisk. Changing these settings change the
|
||||
; permissions and ownership of this file.
|
||||
; The file is created when Asterisk starts, in the "astrundir" above.
|
||||
|
||||
;astctlpermissions = 0660
|
||||
;astctlowner = root
|
||||
;astctlgroup = asterisk
|
||||
;astctl = asterisk.ctl
|
||||
|
||||
\end{verbatim}
|
@ -1,85 +0,0 @@
|
||||
Asterisk Main Configuration File
|
||||
-----------------------------------------------------
|
||||
Below is a sample of the main Asterisk configuration file,
|
||||
asterisk.conf. Note that this file is _not_ provided in
|
||||
sample form, because the Makefile creates it when needed
|
||||
and does not touch it when it already exists.
|
||||
|
||||
---------------
|
||||
|
||||
[directories]
|
||||
; Make sure these directories have the right permissions if not
|
||||
; running Asterisk as root
|
||||
|
||||
; Where the configuration files (except for this one) are located
|
||||
astetcdir => /etc/asterisk
|
||||
|
||||
; Where the Asterisk loadable modules are located
|
||||
astmoddir => /usr/lib/asterisk/modules
|
||||
|
||||
; Where additional 'library' elements (scripts, etc.) are located
|
||||
astvarlibdir => /var/lib/asterisk
|
||||
|
||||
; Where AGI scripts/programs are located
|
||||
astagidir => /var/lib/asterisk/agi-bin
|
||||
|
||||
; Where spool directories are located
|
||||
; Voicemail, monitor, dictation and other apps will create files here
|
||||
; and outgoing call files (used with pbx_spool) must be placed here
|
||||
astspooldir => /var/spool/asterisk
|
||||
|
||||
; Where the Asterisk process ID (pid) file should be created
|
||||
astrundir => /var/run/asterisk
|
||||
|
||||
; Where the Asterisk log files should be created
|
||||
astlogdir => /var/log/asterisk
|
||||
|
||||
|
||||
[options]
|
||||
;Under "options" you can enter configuration options
|
||||
;that you also can set with command line options
|
||||
|
||||
verbose = 0 ; Verbosity level for logging (-v)
|
||||
debug = 3 ; Debug: "No" or value (1-4)
|
||||
nofork=yes | no ; Background execution disabled (-f)
|
||||
alwaysfork=yes | no ; Always background, even with -v or -d (-F)
|
||||
console= yes | no ; Console mode (-c)
|
||||
highpriority = yes | no ; Execute with high priority (-p)
|
||||
initcrypto = yes | no ; Initialize crypto at startup (-i)
|
||||
nocolor = yes | no ; Disable ANSI colors (-n)
|
||||
dumpcore = yes | no ; Dump core on failure (-g)
|
||||
quiet = yes | no ; Run quietly (-q)
|
||||
timestamp = yes | no ; Force timestamping in CLI verbose output (-T)
|
||||
runuser = asterisk ; User to run asterisk as (-U) NOTE: will require changes to
|
||||
; directory and device permissions
|
||||
rungroup = asterisk ; Group to run asterisk as (-G)
|
||||
internal_timing = yes | no ; Enable internal timing support (-I)
|
||||
|
||||
;These options have no command line equivalent
|
||||
cache_record_files = yes | no ; Cache record() files in another directory until completion
|
||||
record_cache_dir = <dir>
|
||||
transcode_via_sln = yes | no ; Build transcode paths via SLINEAR
|
||||
transmit_silence_during_record = yes | no ; send SLINEAR silence while channel is being recorded
|
||||
maxload = 1.0 ; The maximum load average we accept calls for
|
||||
maxcalls = 255 ; The maximum number of concurrent calls you want to allow
|
||||
execincludes = yes | no ; Allow #exec entries in configuration files
|
||||
dontwarn = yes | no ; Don't over-inform the Asterisk sysadm, he's a guru
|
||||
systemname = <a_string> ; System name. Used to prefix CDR uniqueid and to fill ${SYSTEMNAME}
|
||||
languageprefix = no | yes ; Should language code be last component of sound file name or first?
|
||||
; when off, sound files are searched as <path>/<lang>/<file>
|
||||
; when on, sound files are search as <lang>/<path>/<file>
|
||||
; (only affects relative paths for sound files)
|
||||
; NOTE: this option is deprecated, as the default value is now 'yes'
|
||||
maxlimit = <value> ; Maximum number open files for the Asterisk process
|
||||
|
||||
[files]
|
||||
; Changing the following lines may compromise your security
|
||||
; Asterisk.ctl is the pipe that is used to connect the remote CLI
|
||||
; (asterisk -r) to Asterisk. Changing these settings change the
|
||||
; permissions and ownership of this file.
|
||||
; The file is created when Asterisk starts, in the "astrundir" above.
|
||||
|
||||
;astctlpermissions = 0660
|
||||
;astctlowner = root
|
||||
;astctlgroup = asterisk
|
||||
;astctl = asterisk.ctl
|
@ -0,0 +1,132 @@
|
||||
% To generate a PDF from this, install the "rubber" tool, and the LaTeX
|
||||
% dependencies for it. Then, run:
|
||||
%
|
||||
% rubber asterisk.tex
|
||||
|
||||
\documentclass[12pt,a4]{report}
|
||||
\usepackage{hyperref}
|
||||
|
||||
\author{Asterisk Development Team \\ Asterisk.org}
|
||||
\title{Asterisk Reference Information}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\chapter{Introduction}
|
||||
|
||||
This document contains various pieces of information that are useful for
|
||||
reference purposes.
|
||||
|
||||
\section{License Information}
|
||||
\input{../LICENSE}
|
||||
\subsection{Hold Music}
|
||||
Digium has licensed the music included with
|
||||
the Asterisk distribution From FreePlayMusic
|
||||
for use and distribution with Asterisk. It
|
||||
is licensed ONLY for use as hold music within
|
||||
an Asterisk based PBX.
|
||||
\section{Security}
|
||||
\input{security.tex}
|
||||
\section{Hardware}
|
||||
\input{hardware.tex}
|
||||
|
||||
\chapter{Configuration}
|
||||
\section{General Configuration Information}
|
||||
\subsection{Configuration Parser}
|
||||
\input{configuration.tex}
|
||||
\subsection{Asterisk.conf}
|
||||
\input{asterisk-conf.tex}
|
||||
\subsection{CLI Prompt}
|
||||
\input{cliprompt.tex}
|
||||
\subsection{Extensions}
|
||||
\input{extensions.tex}
|
||||
\subsection{IP Type of Service}
|
||||
\input{ip-tos.tex}
|
||||
\subsection{MP3 Support}
|
||||
\input{mp3.tex}
|
||||
\subsection{ICES}
|
||||
\input{ices.tex}
|
||||
\section{Database Support}
|
||||
\subsection{Realtime Database Configuration}
|
||||
\input{realtime.tex}
|
||||
\subsection{FreeTDS}
|
||||
\input{freetds.tex}
|
||||
\section{Privacy}
|
||||
\input{privacy.tex}
|
||||
|
||||
\chapter{Channel Variables}
|
||||
\input{channelvariables.tex}
|
||||
|
||||
\chapter{AEL, Asterisk Extension Language}
|
||||
\input{ael.tex}
|
||||
|
||||
\chapter{SLA (Shared Line Appearances)}
|
||||
\input{sla.tex}
|
||||
|
||||
\chapter{Channel Drivers}
|
||||
\section{IAX2}
|
||||
\input{chaniax.tex}
|
||||
\subsection{IAX2 Jitterbuffer}
|
||||
\input{jitterbuffer.tex}
|
||||
\section{mISDN}
|
||||
\input{misdn.tex}
|
||||
\section{Local}
|
||||
\input{localchannel.tex}
|
||||
|
||||
\chapter{Distributed Universal Number Discovery (DUNDi)}
|
||||
\section{Introduction}
|
||||
\input{dundi.tex}
|
||||
\section{Peering Agreement}
|
||||
\input{PEERING}
|
||||
|
||||
\chapter{ENUM}
|
||||
\input{enum.tex}
|
||||
|
||||
\chapter{AMI: Asterisk Manager Interface}
|
||||
\input{manager.tex}
|
||||
\input{ajam.tex}
|
||||
|
||||
\chapter{CDR: Call Detail Records}
|
||||
\input{billing.tex}
|
||||
\input{cdrdriver.tex}
|
||||
|
||||
\chapter{Voicemail}
|
||||
\section{ODBC Storage}
|
||||
\input{odbcstorage.tex}
|
||||
\section{IMAP Storage}
|
||||
\input{imapstorage.tex}
|
||||
|
||||
\chapter{SMS}
|
||||
\input{app-sms.tex}
|
||||
|
||||
\chapter{Queues}
|
||||
\input{queues-with-callback-members.tex}
|
||||
\section{Queue Logs}
|
||||
\input{queuelog.tex}
|
||||
|
||||
% Generate this using the "core dumpappdocs" CLI command that is present
|
||||
% when Asterisk is built with dev-mode enabled.
|
||||
\chapter{Application Reference}
|
||||
\input{ast_appdocs.tex}
|
||||
|
||||
% This is a list of files not yet integrated into this document:
|
||||
%
|
||||
%Misc
|
||||
%----
|
||||
%asterisk-mib.txt SNMP mib for Asterisk (net-snmp)
|
||||
%digium-mib.txt SNMP mib for Asterisk (net-snmp)
|
||||
%
|
||||
%For developers
|
||||
%--------------
|
||||
%See http://www.asterisk.org/developers for more information
|
||||
%
|
||||
%backtrace.txt How to produce a backtrace when Asterisk crashes
|
||||
%CODING-GUIDELINES Guidelines for developers
|
||||
%externalivr.txt Documentation of the protocol used in externalivr()
|
||||
%modules.txt How Asterisk modules work
|
||||
%datastores.txt About channel data stores
|
||||
%speechrec.txt The Generic Speech Recognition API
|
||||
|
||||
\enddocument
|
@ -0,0 +1,87 @@
|
||||
\section{Applications}
|
||||
|
||||
\begin{itemize}
|
||||
\item SetAccount - Set account code for billing
|
||||
\item SetAMAFlags - Sets AMA flags
|
||||
\item NoCDR - Make sure no CDR is saved for a specific call
|
||||
\item ResetCDR - Reset CDR
|
||||
\item ForkCDR - Save current CDR and start a new CDR for this call
|
||||
\item Authenticate - Authenticates and sets the account code
|
||||
\item SetCDRUserField - Set CDR user field
|
||||
\item AppendCDRUserField - Append data to CDR User field
|
||||
\end{itemize}
|
||||
|
||||
For more information, use the "core show application <application>" command.
|
||||
You can set default account codes and AMA flags for devices in
|
||||
channel configuration files, like sip.conf, iax.conf etc.
|
||||
|
||||
|
||||
\section{Fields of the CDR in Asterisk}
|
||||
|
||||
\begin{itemize}
|
||||
\item accountcode: What account number to use, (string, 20 characters)
|
||||
\item src: Caller*ID number (string, 80 characters)
|
||||
\item dst: Destination extension (string, 80 characters)
|
||||
\item dcontext: Destination context (string, 80 characters)
|
||||
\item clid: Caller*ID with text (80 characters)
|
||||
\item channel: Channel used (80 characters)
|
||||
\item dstchannel: Destination channel if appropriate (80 characters)
|
||||
\item lastapp: Last application if appropriate (80 characters)
|
||||
\item lastdata: Last application data (arguments) (80 characters)
|
||||
\item start: Start of call (date/time)
|
||||
\item answer: Answer of call (date/time)
|
||||
\item end: End of call (date/time)
|
||||
\item duration: Total time in system, in seconds (integer), from dial to hangup
|
||||
\item billsec: Total time call is up, in seconds (integer), from answer to hangup
|
||||
\item disposition: What happened to the call: ANSWERED, NO ANSWER, BUSY
|
||||
\item amaflags: What flags to use: DOCUMENTATION, BILL, IGNORE etc,
|
||||
specified on a per channel basis like accountcode.
|
||||
\item user field: A user-defined field, maximum 255 characters
|
||||
\end{itemize}
|
||||
|
||||
In some cases, uniqueid is appended:
|
||||
|
||||
\begin{itemize}
|
||||
\item uniqueid: Unique Channel Identifier (32 characters)
|
||||
This needs to be enabled in the source code at compile time
|
||||
\end{itemize}
|
||||
|
||||
NOTE: If you use IAX2 channels for your calls, and allow 'full' transfers
|
||||
(not media-only transfers), then when the calls is transferred the server
|
||||
in the middle will no longer be involved in the signaling path, and thus
|
||||
will not generate accurate CDRs for that call. If you can, use media-only
|
||||
transfers with IAX2 to avoid this problem, or turn off transfers completely
|
||||
(although this can result in a media latency increase since the media packets
|
||||
have to traverse the middle server(s) in the call).
|
||||
|
||||
\section{CDR Variables}
|
||||
|
||||
If the channel has a cdr, that cdr record has its own set of variables which
|
||||
can be accessed just like channel variables. The following builtin variables
|
||||
are available.
|
||||
|
||||
\begin{verbatim}
|
||||
${CDR(clid)} Caller ID
|
||||
${CDR(src)} Source
|
||||
${CDR(dst)} Destination
|
||||
${CDR(dcontext)} Destination context
|
||||
${CDR(channel)} Channel name
|
||||
${CDR(dstchannel)} Destination channel
|
||||
${CDR(lastapp)} Last app executed
|
||||
${CDR(lastdata)} Last app's arguments
|
||||
${CDR(start)} Time the call started.
|
||||
${CDR(answer)} Time the call was answered.
|
||||
${CDR(end)} Time the call ended.
|
||||
${CDR(duration)} Duration of the call.
|
||||
${CDR(billsec)} Duration of the call once it was answered.
|
||||
${CDR(disposition)} ANSWERED, NO ANSWER, BUSY
|
||||
${CDR(amaflags)} DOCUMENTATION, BILL, IGNORE etc
|
||||
${CDR(accountcode)} The channel's account code.
|
||||
${CDR(uniqueid)} The channel's unique id.
|
||||
${CDR(userfield)} The channels uses specified field.
|
||||
\end{verbatim}
|
||||
|
||||
In addition, you can set your own extra variables by using Set(CDR(name)=value).
|
||||
These variables can be output into a text-format CDR by using the cdr\_custom
|
||||
CDR driver; see the cdr\_custom.conf.sample file in the configs directory for
|
||||
an example of how to do this.
|
@ -1,105 +0,0 @@
|
||||
Asterisk billing support - Call Detail Records
|
||||
----------------------------------------------
|
||||
Asterisk generates Call Detail Records in a database or in a comma
|
||||
separated text file.
|
||||
|
||||
* cdr_csv supports comma separated text file storage, this is the
|
||||
default driver
|
||||
* cdr_manager supports CDR information via the AMI, The Asterisk Manager
|
||||
interface
|
||||
* cdr_odbc supports UnixODBC databases, see http://www.unixodbc.org
|
||||
for an updated list of supported databases, from MySQL to MsSQL
|
||||
and text files.
|
||||
* cdr_tds supports FreeTDS databases (Among them MS SQL)
|
||||
NOTE: Please read doc/freetds.txt for information on possible
|
||||
problems with the FreeTDS driver
|
||||
* cdr_sqlite supports SQlite
|
||||
* cdr_pgsql supports PostgreSQL
|
||||
|
||||
In the asterisk-addons subversion repository, there's a cdr_mysql driver for
|
||||
MySQL.
|
||||
|
||||
Applications
|
||||
------------
|
||||
|
||||
* SetAccount Set account code for billing
|
||||
* SetAMAFlags Sets AMA flags
|
||||
* NoCDR Make sure no CDR is saved for a specific call
|
||||
* ResetCDR Reset CDR
|
||||
* ForkCDR Save current CDR and start a new CDR for this call
|
||||
* Authenticate Authenticates and sets the account code
|
||||
* SetCDRUserField Set CDR user field
|
||||
* AppendCDRUserField Append data to CDR User field
|
||||
|
||||
For more information, use the "show application" command.
|
||||
You can set default account codes and AMA flags for devices in
|
||||
channel configuration files, like sip.conf, iax.conf etc.
|
||||
|
||||
|
||||
Fields of the CDR in Asterisk
|
||||
-----------------------------
|
||||
|
||||
1. accountcode: What account number to use, (string, 20 characters)
|
||||
2. src: Caller*ID number (string, 80 characters)
|
||||
3. dst: Destination extension (string, 80 characters)
|
||||
4. dcontext: Destination context (string, 80 characters)
|
||||
5. clid: Caller*ID with text (80 characters)
|
||||
6. channel: Channel used (80 characters)
|
||||
7. dstchannel: Destination channel if appropriate (80 characters)
|
||||
8. lastapp: Last application if appropriate (80 characters)
|
||||
9. lastdata: Last application data (arguments) (80 characters)
|
||||
10. start: Start of call (date/time)
|
||||
11. answer: Answer of call (date/time)
|
||||
12. end: End of call (date/time)
|
||||
13. duration: Total time in system, in seconds (integer), from dial to hangup
|
||||
14. billsec: Total time call is up, in seconds (integer), from answer to hangup
|
||||
15. disposition: What happened to the call: ANSWERED, NO ANSWER, BUSY
|
||||
16. amaflags: What flags to use: DOCUMENTATION, BILL, IGNORE etc,
|
||||
specified on a per channel basis like accountcode.
|
||||
17. user field: A user-defined field, maximum 255 characters
|
||||
|
||||
In some cases, uniqueid is appended:
|
||||
|
||||
* uniqueid: Unique Channel Identifier (32 characters)
|
||||
This needs to be enabled in the source code at compile time
|
||||
|
||||
|
||||
NOTE: If you use IAX2 channels for your calls, and allow 'full' transfers
|
||||
(not media-only transfers), then when the calls is transferred the server
|
||||
in the middle will no longer be involved in the signaling path, and thus
|
||||
will not generate accurate CDRs for that call. If you can, use media-only
|
||||
transfers with IAX2 to avoid this problem, or turn off transfers completely
|
||||
(although this can result in a media latency increase since the media packets
|
||||
have to traverse the middle server(s) in the call).
|
||||
|
||||
____________________________________
|
||||
CDR Variables
|
||||
------------------------------------
|
||||
|
||||
If the channel has a cdr, that cdr record has its own set of variables which
|
||||
can be accessed just like channel variables. The following builtin variables
|
||||
are available.
|
||||
|
||||
${CDR(clid)} Caller ID
|
||||
${CDR(src)} Source
|
||||
${CDR(dst)} Destination
|
||||
${CDR(dcontext)} Destination context
|
||||
${CDR(channel)} Channel name
|
||||
${CDR(dstchannel)} Destination channel
|
||||
${CDR(lastapp)} Last app executed
|
||||
${CDR(lastdata)} Last app's arguments
|
||||
${CDR(start)} Time the call started.
|
||||
${CDR(answer)} Time the call was answered.
|
||||
${CDR(end)} Time the call ended.
|
||||
${CDR(duration)} Duration of the call.
|
||||
${CDR(billsec)} Duration of the call once it was answered.
|
||||
${CDR(disposition)} ANSWERED, NO ANSWER, BUSY
|
||||
${CDR(amaflags)} DOCUMENTATION, BILL, IGNORE etc
|
||||
${CDR(accountcode)} The channel's account code.
|
||||
${CDR(uniqueid)} The channel's unique id.
|
||||
${CDR(userfield)} The channels uses specified field.
|
||||
|
||||
In addition, you can set your own extra variables by using Set(CDR(name)=value).
|
||||
These variables can be output into a text-format CDR by using the cdr_custom
|
||||
CDR driver; see the cdr_custom.conf.sample file in the configs directory for
|
||||
an example of how to do this.
|
@ -1,18 +0,0 @@
|
||||
Caller ID presentation values
|
||||
-----------------------------
|
||||
|
||||
In some channels it is possible to set Caller ID presentation for a device. It is
|
||||
also possible to set the presentation for an active channel in the dial plan
|
||||
with the setcallerpres() application.
|
||||
|
||||
Valid values are:
|
||||
|
||||
allowed_not_screened : Presentation Allowed, Not Screened
|
||||
allowed_passed_screen : Presentation Allowed, Passed Screen
|
||||
allowed_failed_screen : Presentation Allowed, Failed Screen
|
||||
allowed : Presentation Allowed, Network Number
|
||||
prohib_not_screened : Presentation Prohibited, Not Screened
|
||||
prohib_passed_screen : Presentation Prohibited, Passed Screen
|
||||
prohib_failed_screen : Presentation Prohibited, Failed Screen
|
||||
prohib : Presentation Prohibited, Network Number
|
||||
unavailable : Number Unavailable
|
@ -0,0 +1,431 @@
|
||||
Call data records can be stored in many different databases or even CSV text.
|
||||
|
||||
\section{MSSQL}
|
||||
|
||||
Asterisk can currently store CDRs into an MSSQL database in
|
||||
two different ways: cdr\_odbc or cdr\_tds
|
||||
|
||||
Call Data Records can be stored using unixODBC (which requires
|
||||
the FreeTDS package) [cdr\_odbc] or directly by using just the
|
||||
FreeTDS package [cdr\_tds] The following provide some
|
||||
examples known to get asterisk working with mssql.
|
||||
|
||||
NOTE: Only choose one db connector.
|
||||
|
||||
\subsection{ODBC using cdr\_odbc}
|
||||
Compile, configure, and install the latest unixODBC package:
|
||||
\begin{verbatim}
|
||||
tar -zxvf unixODBC-2.2.9.tar.gz &&
|
||||
cd unixODBC-2.2.9 &&
|
||||
./configure --sysconfdir=/etc --prefix=/usr --disable-gui &&
|
||||
make &&
|
||||
make install
|
||||
\end{verbatim}
|
||||
|
||||
Compile, configure, and install the latest FreeTDS package:
|
||||
\begin{verbatim}
|
||||
tar -zxvf freetds-0.62.4.tar.gz &&
|
||||
cd freetds-0.62.4 &&
|
||||
./configure --prefix=/usr --with-tdsver=7.0 \
|
||||
--with-unixodbc=/usr/lib &&
|
||||
make && make install
|
||||
\end{verbatim}
|
||||
|
||||
Compile, or recompile, asterisk so that it will now add support
|
||||
for cdr\_odbc.
|
||||
\begin{verbatim}
|
||||
make clean && ./configure --with-odbc &&
|
||||
make update &&
|
||||
make &&
|
||||
make install
|
||||
\end{verbatim}
|
||||
|
||||
Setup odbc configuration files. These are working examples
|
||||
from my system. You will need to modify for your setup.
|
||||
You are not required to store usernames or passwords here.
|
||||
|
||||
\begin{verbatim}
|
||||
/etc/odbcinst.ini
|
||||
[FreeTDS]
|
||||
Description = FreeTDS ODBC driver for MSSQL
|
||||
Driver = /usr/lib/libtdsodbc.so
|
||||
Setup = /usr/lib/libtdsS.so
|
||||
FileUsage = 1
|
||||
|
||||
/etc/odbc.ini
|
||||
[MSSQL-asterisk]
|
||||
description = Asterisk ODBC for MSSQL
|
||||
driver = FreeTDS
|
||||
server = 192.168.1.25
|
||||
port = 1433
|
||||
database = voipdb
|
||||
tds_version = 7.0
|
||||
language = us_english
|
||||
\end{verbatim}
|
||||
|
||||
Only install one database connector. Do not confuse asterisk
|
||||
by using both ODBC (cdr\_odbc) and FreeTDS (cdr\_tds).
|
||||
This command will erase the contents of cdr\_tds.conf
|
||||
\begin{verbatim}
|
||||
[ -f /etc/asterisk/cdr_tds.conf ] > /etc/asterisk/cdr_tds.conf
|
||||
\end{verbatim}
|
||||
NOTE: unixODBC requires the freeTDS package, but asterisk does
|
||||
not call freeTDS directly.
|
||||
|
||||
Now set up cdr\_odbc configuration files. These are working samples
|
||||
from my system. You will need to modify for your setup. Define
|
||||
your usernames and passwords here, secure file as well.
|
||||
\begin{verbatim}
|
||||
/etc/asterisk/cdr_odbc.conf
|
||||
[global]
|
||||
dsn=MSSQL-asterisk
|
||||
username=voipdbuser
|
||||
password=voipdbpass
|
||||
loguniqueid=yes
|
||||
\end{verbatim}
|
||||
And finally, create the 'cdr' table in your mssql database.
|
||||
\begin{verbatim}
|
||||
CREATE TABLE cdr (
|
||||
[calldate] [datetime] NOT NULL ,
|
||||
[clid] [varchar] (80) NOT NULL ,
|
||||
[src] [varchar] (80) NOT NULL ,
|
||||
[dst] [varchar] (80) NOT NULL ,
|
||||
[dcontext] [varchar] (80) NOT NULL ,
|
||||
[channel] [varchar] (80) NOT NULL ,
|
||||
[dstchannel] [varchar] (80) NOT NULL ,
|
||||
[lastapp] [varchar] (80) NOT NULL ,
|
||||
[lastdata] [varchar] (80) NOT NULL ,
|
||||
[duration] [int] NOT NULL ,
|
||||
[billsec] [int] NOT NULL ,
|
||||
[disposition] [varchar] (45) NOT NULL ,
|
||||
[amaflags] [int] NOT NULL ,
|
||||
[accountcode] [varchar] (20) NOT NULL ,
|
||||
[uniqueid] [varchar] (32) NOT NULL ,
|
||||
[userfield] [varchar] (255) NOT NULL
|
||||
)
|
||||
\end{verbatim}
|
||||
Start asterisk in verbose mode, you should see that asterisk
|
||||
logs a connection to the database and will now record every
|
||||
call to the database when it's complete.
|
||||
|
||||
\subsection{TDS, using cdr\_tds}
|
||||
Compile, configure, and install the latest FreeTDS package:
|
||||
\begin{verbatim}
|
||||
tar -zxvf freetds-0.62.4.tar.gz &&
|
||||
cd freetds-0.62.4 &&
|
||||
./configure --prefix=/usr --with-tdsver=7.0
|
||||
make &&
|
||||
make install
|
||||
\end{verbatim}
|
||||
Compile, or recompile, asterisk so that it will now add support
|
||||
for cdr\_tds.
|
||||
\begin{verbatim}
|
||||
make clean && ./configure --with-tds &&
|
||||
make update &&
|
||||
make &&
|
||||
make install
|
||||
\end{verbatim}
|
||||
Only install one database connector. Do not confuse asterisk
|
||||
by using both ODBC (cdr\_odbc) and FreeTDS (cdr\_tds).
|
||||
This command will erase the contents of cdr\_odbc.conf
|
||||
\begin{verbatim}
|
||||
[ -f /etc/asterisk/cdr_odbc.conf ] > /etc/asterisk/cdr_odbc.conf
|
||||
\end{verbatim}
|
||||
Setup cdr\_tds configuration files. These are working samples
|
||||
from my system. You will need to modify for your setup. Define
|
||||
your usernames and passwords here, secure file as well.
|
||||
\begin{verbatim}
|
||||
/etc/asterisk/cdr_tds.conf
|
||||
[global]
|
||||
hostname=192.168.1.25
|
||||
port=1433
|
||||
dbname=voipdb
|
||||
user=voipdbuser
|
||||
password=voipdpass
|
||||
charset=BIG5
|
||||
\end{verbatim}
|
||||
And finally, create the 'cdr' table in your mssql database.
|
||||
\begin{verbatim}
|
||||
CREATE TABLE cdr (
|
||||
[accountcode] [varchar] (20) NULL ,
|
||||
[src] [varchar] (80) NULL ,
|
||||
[dst] [varchar] (80) NULL ,
|
||||
[dcontext] [varchar] (80) NULL ,
|
||||
[clid] [varchar] (80) NULL ,
|
||||
[channel] [varchar] (80) NULL ,
|
||||
[dstchannel] [varchar] (80) NULL ,
|
||||
[lastapp] [varchar] (80) NULL ,
|
||||
[lastdata] [varchar] (80) NULL ,
|
||||
[start] [datetime] NULL ,
|
||||
[answer] [datetime] NULL ,
|
||||
[end] [datetime] NULL ,
|
||||
[duration] [int] NULL ,
|
||||
[billsec] [int] NULL ,
|
||||
[disposition] [varchar] (20) NULL ,
|
||||
[amaflags] [varchar] (16) NULL ,
|
||||
[uniqueid] [varchar] (32) NULL
|
||||
)
|
||||
\end{verbatim}
|
||||
Start asterisk in verbose mode, you should see that asterisk
|
||||
logs a connection to the database and will now record every
|
||||
call to the database when it's complete.
|
||||
|
||||
|
||||
\section{MYSQL}
|
||||
|
||||
Using MySQL for CDR records is supported by using ODBC and the cdr\_odbc module.
|
||||
|
||||
\section{PGSQL}
|
||||
If you want to go directly to postgresql database, and have the cdr\_pgsql.so
|
||||
compiled you can use the following sample setup.
|
||||
On Debian, before compiling asterisk, just install libpqxx-dev.
|
||||
Other distros will likely have a similiar package.
|
||||
|
||||
Once you have the compile done,
|
||||
copy the sample cdr\_pgsql.conf file or create your own.
|
||||
|
||||
Here is a sample:
|
||||
\begin{verbatim}
|
||||
/etc/asterisk/cdr_pgsql.conf
|
||||
; Sample Asterisk config file for CDR logging to PostgresSQL
|
||||
[global]
|
||||
hostname=localhost
|
||||
port=5432
|
||||
dbname=asterisk
|
||||
password=password
|
||||
user=postgres
|
||||
table=cdr
|
||||
\end{verbatim}
|
||||
Now create a table in postgresql for your cdrs
|
||||
|
||||
\begin{verbatim}
|
||||
CREATE TABLE cdr (
|
||||
calldate time NOT NULL ,
|
||||
clid varchar (80) NOT NULL ,
|
||||
src varchar (80) NOT NULL ,
|
||||
dst varchar (80) NOT NULL ,
|
||||
dcontext varchar (80) NOT NULL ,
|
||||
channel varchar (80) NOT NULL ,
|
||||
dstchannel varchar (80) NOT NULL ,
|
||||
lastapp varchar (80) NOT NULL ,
|
||||
lastdata varchar (80) NOT NULL ,
|
||||
duration int NOT NULL ,
|
||||
billsec int NOT NULL ,
|
||||
disposition varchar (45) NOT NULL ,
|
||||
amaflags int NOT NULL ,
|
||||
accountcode varchar (20) NOT NULL ,
|
||||
uniqueid varchar (32) NOT NULL ,
|
||||
userfield varchar (255) NOT NULL
|
||||
);
|
||||
\end{verbatim}
|
||||
|
||||
\section{SQLLITE}
|
||||
|
||||
SQLite version 2 is supported in cdr\_sqlite.
|
||||
|
||||
\section{RADIUS}
|
||||
|
||||
\subsection{What is needed}
|
||||
|
||||
\begin{itemize}
|
||||
\item FreeRADIUS server
|
||||
\item Radiusclient-ng library
|
||||
\item Asterisk PBX
|
||||
\end{itemize}
|
||||
|
||||
\begin{verbatim}
|
||||
+--------------------+
|
||||
| Asterisk PBX |
|
||||
| |
|
||||
|********************|
|
||||
| | +---------------+
|
||||
| RADIUS client |------->| RADIUS server |
|
||||
| |<-------| (FreeRADIUS) |
|
||||
+--------------------+ +---------------+
|
||||
\end{verbatim}
|
||||
|
||||
|
||||
|
||||
\subsection{Steps to follow in order to have RADIUS support}
|
||||
|
||||
\subsubsection{Installation of the Radiusclient library}
|
||||
Installation:
|
||||
\begin{verbatim}
|
||||
Download the sources from:
|
||||
|
||||
http://developer.berlios.de/projects/radiusclient-ng/
|
||||
|
||||
Untar the source tarball.
|
||||
root@localhost:/usr/local/src# tar xvfz radiusclient-ng-0.5.2.tar.gz
|
||||
|
||||
Compile and install the library.
|
||||
root@localhost:/usr/local/src# cd radiusclient-ng-0.5.2
|
||||
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# ./configure
|
||||
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make
|
||||
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make install
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Configuration of the Radiusclient library}
|
||||
|
||||
By default all the configuration files of the radiusclient library will
|
||||
be in /usr/local/etc/radiusclient-ng directory.
|
||||
|
||||
File "radiusclient.conf"
|
||||
Open the file and find lines containing the following:
|
||||
|
||||
authserver localhost
|
||||
|
||||
This is the hostname or IP address of the RADIUS server used for
|
||||
authentication. You will have to change this unless the server is
|
||||
running on the same host as your Asterisk PBX.
|
||||
|
||||
acctserver localhost
|
||||
This is the hostname or IP address of the RADIUS server used for
|
||||
accounting. You will have to change this unless the server is running
|
||||
on the same host as your Asterisk PBX.
|
||||
|
||||
File "servers"
|
||||
|
||||
RADIUS protocol uses simple access control mechanism based on shared
|
||||
secrets that allows RADIUS servers to limit access from RADIUS clients.
|
||||
|
||||
A RADIUS server is configured with a secret string and only RADIUS
|
||||
clients that have the same secret will be accepted.
|
||||
|
||||
You need to configure a shared secret for each server you have
|
||||
configured in radiusclient.conf file in the previous step. The shared
|
||||
secrets are stored in /usr/local/etc/radiusclient-ng/servers file.
|
||||
|
||||
Each line contains hostname of a RADIUS server and shared secret
|
||||
used in communication with that server. The two values are separated
|
||||
by white spaces. Configure shared secrets for every RADIUS server you
|
||||
are going to use.
|
||||
|
||||
File "dictionary"
|
||||
|
||||
Asterisk uses some attributes that are not included in the
|
||||
dictionary of radiusclient library, therefore it is necessary to add
|
||||
them. A file called dictionary.digium (kept in the contrib dir)
|
||||
was created to list all new attributes used by Asterisk.
|
||||
Add to the end of the main dictionary file
|
||||
/usr/local/etc/radiusclient-ng/dictionary
|
||||
the line:
|
||||
\begin{verbatim}
|
||||
\$INCLUDE /path/to/dictionary.digium
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{Install FreeRADIUS Server (Version 1.1.1)}
|
||||
|
||||
Download sources tarball from:
|
||||
|
||||
http://freeradius.org/
|
||||
|
||||
Untar, configure, build, and install the server:
|
||||
|
||||
\begin{verbatim}
|
||||
root@localhost:/usr/local/src# tar xvfz freeradius-1.1.1.tar.gz
|
||||
root@localhost:/usr/local/src# cd freeradius-1.1.1
|
||||
root@localhost"/usr/local/src/freeradius-1.1.1# ./configure
|
||||
root@localhost"/usr/local/src/freeradius-1.1.1# make
|
||||
root@localhost"/usr/local/src/freeradius-1.1.1# make install
|
||||
\end{verbatim}
|
||||
|
||||
All the configuration files of FreeRADIUS server will be in
|
||||
/usr/local/etc/raddb directory.
|
||||
|
||||
|
||||
\subsubsection{Configuration of the FreeRADIUS Server}
|
||||
|
||||
There are several files that have to be modified to configure the
|
||||
RADIUS server. These are presented next.
|
||||
|
||||
File "clients.conf"
|
||||
|
||||
File /usr/local/etc/raddb/clients.conf contains description of
|
||||
RADIUS clients that are allowed to use the server. For each of the
|
||||
clients you need to specify its hostname or IP address and also a
|
||||
shared secret. The shared secret must be the same string you configured
|
||||
in radiusclient library.
|
||||
|
||||
Example:
|
||||
\begin{verbatim}
|
||||
client myhost {
|
||||
secret = mysecret
|
||||
shortname = foo
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
This fragment allows access from RADIUS clients on "myhost" if they use
|
||||
"mysecret" as the shared secret.
|
||||
The file already contains an entry for localhost (127.0.0.1), so if you
|
||||
are running the RADIUS server on the same host as your Asterisk server,
|
||||
then modify the existing entry instead, replacing the default password.
|
||||
|
||||
File "dictionary"
|
||||
|
||||
Note : as of version 1.1.2, the dictionary.digium file ships with FreeRADIUS.
|
||||
The following procedure brings the dictionary.digium file to previous versions
|
||||
of FreeRADIUS.
|
||||
|
||||
File /usr/local/etc/raddb/dictionary contains the dictionary of
|
||||
FreeRADIUS server. You have to add the same dictionary file
|
||||
(dictionary.digium), which you added to the dictionary of radiusclient-ng
|
||||
library. You can include it into the main file, adding the following line at the
|
||||
end of file '/usr/local/etc/raddb/dictionary':
|
||||
|
||||
\$INCLUDE /path/to/dictionary.digium
|
||||
|
||||
That will include the same new attribute definitions that are used
|
||||
in radiusclient-ng library so the client and server will understand each
|
||||
other.
|
||||
|
||||
|
||||
\subsubsection{Asterisk Accounting Configuration}
|
||||
|
||||
Compilation and installation:
|
||||
|
||||
The module will be compiled as long as the radiusclient-ng
|
||||
library has been detected on your system.
|
||||
|
||||
By default FreeRADIUS server will log all accounting requests into
|
||||
/usr/local/var/log/radius/radacct directory in form of plain text files.
|
||||
The server will create one file for each hostname in the directory. The
|
||||
following example shows how the log files look like.
|
||||
|
||||
Asterisk now generates Call Detail Records. See /include/asterisk/cdr.h
|
||||
for all the fields which are recorded. By default, records in comma
|
||||
separated values will be created in /var/log/asterisk/cdr-csv.
|
||||
|
||||
The configuration file for cdr\_radius.so module is :
|
||||
|
||||
/etc/asterisk/cdr.conf
|
||||
This is where you can set CDR related parameters as well as the path to
|
||||
the radiusclient-ng library configuration file.
|
||||
|
||||
|
||||
\section{Logged Values}
|
||||
\begin{verbatim}
|
||||
"Asterisk-Acc-Code", The account name of detail records
|
||||
"Asterisk-Src",
|
||||
"Asterisk-Dst",
|
||||
"Asterisk-Dst-Ctx", The destination context
|
||||
"Asterisk-Clid",
|
||||
"Asterisk-Chan", The channel
|
||||
"Asterisk-Dst-Chan", (if applicable)
|
||||
"Asterisk-Last-App", Last application run on the channel
|
||||
"Asterisk-Last-Data", Argument to the last channel
|
||||
"Asterisk-Start-Time",
|
||||
"Asterisk-Answer-Time",
|
||||
"Asterisk-End-Time",
|
||||
"Asterisk-Duration", Duration is the whole length that the entire
|
||||
call lasted. ie. call rx'd to hangup
|
||||
"end time" minus "start time"
|
||||
"Asterisk-Bill-Sec", The duration that a call was up after other
|
||||
end answered which will be <= to duration
|
||||
"end time" minus "answer time"
|
||||
"Asterisk-Disposition", ANSWERED, NO ANSWER, BUSY
|
||||
"Asterisk-AMA-Flags", DOCUMENTATION, BILL, IGNORE etc, specified on
|
||||
a per channel basis like accountcode.
|
||||
"Asterisk-Unique-ID", Unique call identifier
|
||||
"Asterisk-User-Field" User field set via SetCDRUserField
|
||||
\end{verbatim}
|
@ -1,215 +0,0 @@
|
||||
Call data records can be stored in many different databases or even CSV text.
|
||||
|
||||
MSSQL: Asterisk can currently store CDRs into an MSSQL database in
|
||||
two different ways: cdr_odbc.c or cdr_tds.c
|
||||
|
||||
Call Data Records can be stored using unixODBC (which requires
|
||||
the FreeTDS package) [cdr_odbc.c] or directly by using just the
|
||||
FreeTDS package [cdr_tds.c] The following provide some
|
||||
examples known to get asterisk working with mssql.
|
||||
NOTE: Only choose one db connector.
|
||||
|
||||
ODBC [cdr_odbc.c]:
|
||||
Compile, configure, and install the latest unixODBC package:
|
||||
tar -zxvf unixODBC-2.2.9.tar.gz &&
|
||||
cd unixODBC-2.2.9 &&
|
||||
./configure --sysconfdir=/etc --prefix=/usr --disable-gui &&
|
||||
make &&
|
||||
make install
|
||||
|
||||
Compile, configure, and install the latest FreeTDS package:
|
||||
tar -zxvf freetds-0.62.4.tar.gz &&
|
||||
cd freetds-0.62.4 &&
|
||||
./configure --prefix=/usr --with-tdsver=7.0 \
|
||||
--with-unixodbc=/usr/lib &&
|
||||
make &&
|
||||
make install
|
||||
|
||||
Compile, or recompile, asterisk so that it will now add support
|
||||
for cdr_odbc.c
|
||||
|
||||
make clean &&
|
||||
make update &&
|
||||
make &&
|
||||
make install
|
||||
|
||||
Setup odbc configuration files. These are working examples
|
||||
from my system. You will need to modify for your setup.
|
||||
You are not required to store usernames or passwords here.
|
||||
|
||||
/etc/odbcinst.ini
|
||||
[FreeTDS]
|
||||
Description = FreeTDS ODBC driver for MSSQL
|
||||
Driver = /usr/lib/libtdsodbc.so
|
||||
Setup = /usr/lib/libtdsS.so
|
||||
FileUsage = 1
|
||||
|
||||
/etc/odbc.ini
|
||||
[MSSQL-asterisk]
|
||||
description = Asterisk ODBC for MSSQL
|
||||
driver = FreeTDS
|
||||
server = 192.168.1.25
|
||||
port = 1433
|
||||
database = voipdb
|
||||
tds_version = 7.0
|
||||
language = us_english
|
||||
|
||||
Only install one database connector. Do not confuse asterisk
|
||||
by using both ODBC (cdr_odbc.c) and FreeTDS (cdr_tds.c).
|
||||
This command will erase the contents of cdr_tds.conf
|
||||
|
||||
[ -f /etc/asterisk/cdr_tds.conf ] > /etc/asterisk/cdr_tds.conf
|
||||
|
||||
NOTE: unixODBC requires the freeTDS package, but asterisk does
|
||||
not call freeTDS directly.
|
||||
|
||||
Setup cdr_odbc configuration files. These are working samples
|
||||
from my system. You will need to modify for your setup. Define
|
||||
your usernames and passwords here, secure file as well.
|
||||
|
||||
/etc/asterisk/cdr_odbc.conf
|
||||
[global]
|
||||
dsn=MSSQL-asterisk
|
||||
username=voipdbuser
|
||||
password=voipdbpass
|
||||
loguniqueid=yes
|
||||
|
||||
And finally, create the 'cdr' table in your mssql database.
|
||||
|
||||
CREATE TABLE cdr (
|
||||
[calldate] [datetime] NOT NULL ,
|
||||
[clid] [varchar] (80) NOT NULL ,
|
||||
[src] [varchar] (80) NOT NULL ,
|
||||
[dst] [varchar] (80) NOT NULL ,
|
||||
[dcontext] [varchar] (80) NOT NULL ,
|
||||
[channel] [varchar] (80) NOT NULL ,
|
||||
[dstchannel] [varchar] (80) NOT NULL ,
|
||||
[lastapp] [varchar] (80) NOT NULL ,
|
||||
[lastdata] [varchar] (80) NOT NULL ,
|
||||
[duration] [int] NOT NULL ,
|
||||
[billsec] [int] NOT NULL ,
|
||||
[disposition] [varchar] (45) NOT NULL ,
|
||||
[amaflags] [int] NOT NULL ,
|
||||
[accountcode] [varchar] (20) NOT NULL ,
|
||||
[uniqueid] [varchar] (32) NOT NULL ,
|
||||
[userfield] [varchar] (255) NOT NULL
|
||||
)
|
||||
|
||||
Start asterisk in verbose mode, you should see that asterisk
|
||||
logs a connection to the database and will now record every
|
||||
call to the database when it's complete.
|
||||
|
||||
TDS [cdr_tds.c]:
|
||||
Compile, configure, and install the latest FreeTDS package:
|
||||
tar -zxvf freetds-0.62.4.tar.gz &&
|
||||
cd freetds-0.62.4 &&
|
||||
./configure --prefix=/usr --with-tdsver=7.0
|
||||
make &&
|
||||
make install
|
||||
|
||||
Compile, or recompile, asterisk so that it will now add support
|
||||
for cdr_tds.c
|
||||
|
||||
make clean &&
|
||||
make update &&
|
||||
make &&
|
||||
make install
|
||||
|
||||
Only install one database connector. Do not confuse asterisk
|
||||
by using both ODBC (cdr_odbc.c) and FreeTDS (cdr_tds.c).
|
||||
This command will erase the contents of cdr_odbc.conf
|
||||
|
||||
[ -f /etc/asterisk/cdr_odbc.conf ] > /etc/asterisk/cdr_odbc.conf
|
||||
|
||||
Setup cdr_tds configuration files. These are working samples
|
||||
from my system. You will need to modify for your setup. Define
|
||||
your usernames and passwords here, secure file as well.
|
||||
|
||||
/etc/asterisk/cdr_tds.conf
|
||||
[global]
|
||||
hostname=192.168.1.25
|
||||
port=1433
|
||||
dbname=voipdb
|
||||
user=voipdbuser
|
||||
password=voipdpass
|
||||
charset=BIG5
|
||||
|
||||
And finally, create the 'cdr' table in your mssql database.
|
||||
|
||||
CREATE TABLE cdr (
|
||||
[accountcode] [varchar] (20) NULL ,
|
||||
[src] [varchar] (80) NULL ,
|
||||
[dst] [varchar] (80) NULL ,
|
||||
[dcontext] [varchar] (80) NULL ,
|
||||
[clid] [varchar] (80) NULL ,
|
||||
[channel] [varchar] (80) NULL ,
|
||||
[dstchannel] [varchar] (80) NULL ,
|
||||
[lastapp] [varchar] (80) NULL ,
|
||||
[lastdata] [varchar] (80) NULL ,
|
||||
[start] [datetime] NULL ,
|
||||
[answer] [datetime] NULL ,
|
||||
[end] [datetime] NULL ,
|
||||
[duration] [int] NULL ,
|
||||
[billsec] [int] NULL ,
|
||||
[disposition] [varchar] (20) NULL ,
|
||||
[amaflags] [varchar] (16) NULL ,
|
||||
[uniqueid] [varchar] (32) NULL
|
||||
)
|
||||
|
||||
Start asterisk in verbose mode, you should see that asterisk
|
||||
logs a connection to the database and will now record every
|
||||
call to the database when it's complete.
|
||||
|
||||
|
||||
MYSQL:
|
||||
|
||||
|
||||
PGSQL:
|
||||
If you want to go directly to postgresql database, and have the cdr_pgsql.so
|
||||
compiled you can use the following sample setup.
|
||||
On Debian, before compiling asterisk, just install libpqxx-dev.
|
||||
Other distros will likely have a similiar package.
|
||||
|
||||
Once you have the compile done,
|
||||
copy the sample cdr_pgsql.conf file or create your own.
|
||||
|
||||
Here is a sample:
|
||||
|
||||
/etc/asterisk/cdr_pgsql.conf
|
||||
; Sample Asterisk config file for CDR logging to PostgresSQL
|
||||
[global]
|
||||
hostname=localhost
|
||||
port=5432
|
||||
dbname=asterisk
|
||||
password=password
|
||||
user=postgres
|
||||
table=cdr
|
||||
|
||||
;Now create a table in postgresql for your cdrs
|
||||
|
||||
;SQL table where CDRs will be inserted
|
||||
;Copy and paste this into your postgresql prompt.
|
||||
CREATE TABLE cdr (
|
||||
calldate time NOT NULL ,
|
||||
clid varchar (80) NOT NULL ,
|
||||
src varchar (80) NOT NULL ,
|
||||
dst varchar (80) NOT NULL ,
|
||||
dcontext varchar (80) NOT NULL ,
|
||||
channel varchar (80) NOT NULL ,
|
||||
dstchannel varchar (80) NOT NULL ,
|
||||
lastapp varchar (80) NOT NULL ,
|
||||
lastdata varchar (80) NOT NULL ,
|
||||
duration int NOT NULL ,
|
||||
billsec int NOT NULL ,
|
||||
disposition varchar (45) NOT NULL ,
|
||||
amaflags int NOT NULL ,
|
||||
accountcode varchar (20) NOT NULL ,
|
||||
uniqueid varchar (32) NOT NULL ,
|
||||
userfield varchar (255) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
SQLLITE:
|
||||
|
||||
|
||||
RADIUS: See doc/radius.txt for more information on cdr_radius
|
@ -0,0 +1,84 @@
|
||||
\subsection{Introduction}
|
||||
|
||||
This section is intended as an introduction to the Inter-Asterisk
|
||||
eXchange v2 (or simply IAX2) protocol. It provides both a theoretical
|
||||
background and practical information on its use.
|
||||
|
||||
\subsection{Why IAX2?}
|
||||
|
||||
The first question most people are thinking at this point is "Why do you
|
||||
need another VoIP protocol? Why didn't you just use SIP or H.323?"
|
||||
|
||||
Well, the answer is a fairly complicated one, but in a nutshell it's like
|
||||
this... Asterisk is intended as a very flexible and powerful
|
||||
communications tool. As such, the primary feature we need from a VoIP
|
||||
protocol is the ability to meet our own goals with Asterisk, and one with
|
||||
enough flexibility that we could use it as a kind of laboratory for
|
||||
inventing and implementing new concepts in the field. Neither H.323 or
|
||||
SIP fit the roles we needed, so we developed our own protocol, which,
|
||||
while not standards based, provides a number of advantages over both SIP
|
||||
and H.323, some of which are:
|
||||
|
||||
\begin{itemize}
|
||||
\item Interoperability with NAT/PAT/Masquerade firewalls
|
||||
\begin{itemize}
|
||||
\item IAX seamlessly interoperates through all sorts of NAT and PAT
|
||||
and other firewalls, including the ability to place and
|
||||
receive calls, and transfer calls to other stations.
|
||||
\end{itemize}
|
||||
\item High performance, low overhead protocol
|
||||
\begin{itemize}
|
||||
\item When running on low-bandwidth connections, or when running
|
||||
large numbers of calls, optimized bandwidth utilization is
|
||||
imperative. IAX uses only 4 bytes of overhead
|
||||
\end{itemize}
|
||||
\item Internationalization support
|
||||
\begin{itemize}
|
||||
\item IAX transmits language information, so that remote PBX
|
||||
content can be delivered in the native language of the
|
||||
calling party.
|
||||
\end{itemize}
|
||||
\item Remote dialplan polling
|
||||
\begin{itemize}
|
||||
\item IAX allows a PBX or IP phone to poll the availability of a
|
||||
number from a remote server. This allows PBX dialplans to
|
||||
be centralized.
|
||||
\end{itemize}
|
||||
\item Flexible authentication
|
||||
\begin{itemize}
|
||||
\item IAX supports cleartext, md5, and RSA authentication,
|
||||
providing flexible security models for outgoing calls and
|
||||
registration services.
|
||||
\end{itemize}
|
||||
\item Multimedia protocol
|
||||
\begin{itemize}
|
||||
\item IAX supports the transmission of voice, video, images, text,
|
||||
HTML, DTMF, and URL's. Voice menus can be presented in both
|
||||
audibly and visually.
|
||||
\end{itemize}
|
||||
\item Call statistic gathering
|
||||
\begin{itemize}
|
||||
\item IAX gathers statistics about network performance (including
|
||||
latency and jitter, as well as providing end-to-end latency
|
||||
measurement.
|
||||
\end{itemize}
|
||||
\item Call parameter communication
|
||||
\begin{itemize}
|
||||
\item Caller*ID, requested extension, requested context, etc are
|
||||
all communicated through the call.
|
||||
\end{itemize}
|
||||
\item Single socket design
|
||||
\begin{itemize}
|
||||
\item IAX's single socket design allows up to 32768 calls to be
|
||||
multiplexed.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
While we value the importance of standards based (i.e. SIP) call handling,
|
||||
hopefully this will provide a reasonable explanation of why we developed
|
||||
IAX rather than starting with SIP.
|
||||
|
||||
\subsection{Configuration}
|
||||
|
||||
For examples of a configuration, please see the iax.conf.sample in
|
||||
your the /configs directory of you source code distribution.
|
@ -1,369 +0,0 @@
|
||||
Inter-Asterisk eXchange Protocol
|
||||
================================
|
||||
|
||||
INTRODUCTION
|
||||
------------
|
||||
|
||||
This document is intended as an introduction to the Inter-Asterisk
|
||||
eXchange (or simply IAX) protocol. It provides both a theoretical
|
||||
background and practical information on its use.
|
||||
|
||||
WHY IAX
|
||||
-------
|
||||
The first question most people are thinking at this point is "Why do you
|
||||
need another VoIP protocol? Why didn't you just use SIP or H.323?"
|
||||
|
||||
Well, the answer is a fairly complicated one, but in a nutshell it's like
|
||||
this... Asterisk is intended as a very flexible and powerful
|
||||
communications tool. As such, the primary feature we need from a VoIP
|
||||
protocol is the ability to meet our own goals with Asterisk, and one with
|
||||
enough flexibility that we could use it as a kind of laboratory for
|
||||
inventing and implementing new concepts in the field. Neither H.323 or
|
||||
SIP fit the roles we needed, so we developed our own protocol, which,
|
||||
while not standards based, provides a number of advantages over both SIP
|
||||
and H.323, some of which are:
|
||||
|
||||
* Interoperability with NAT/PAT/Masquerade firewalls
|
||||
IAX seamlessly interoperates through all sorts of NAT and PAT
|
||||
and other firewalls, including the ability to place and
|
||||
receive calls, and transfer calls to other stations.
|
||||
|
||||
* High performance, low overhead protocol
|
||||
When running on low-bandwidth connections, or when running
|
||||
large numbers of calls, optimized bandwidth utilization is
|
||||
imperative. IAX uses only 4 bytes of overhead
|
||||
|
||||
* Internationalization support
|
||||
IAX transmits language information, so that remote PBX
|
||||
content can be delivered in the native language of the
|
||||
calling party.
|
||||
|
||||
* Remote dialplan polling
|
||||
IAX allows a PBX or IP phone to poll the availability of a
|
||||
number from a remote server. This allows PBX dialplans to
|
||||
be centralized.
|
||||
|
||||
* Flexible authentication
|
||||
IAX supports cleartext, md5, and RSA authentication,
|
||||
providing flexible security models for outgoing calls and
|
||||
registration services.
|
||||
|
||||
* Multimedia protocol
|
||||
IAX supports the transmission of voice, video, images, text,
|
||||
HTML, DTMF, and URL's. Voice menus can be presented in both
|
||||
audibly and visually.
|
||||
|
||||
* Call statistic gathering
|
||||
IAX gathers statistics about network performance (including
|
||||
latency and jitter, as well as providing end-to-end latency
|
||||
measurement.
|
||||
|
||||
* Call parameter communication
|
||||
Caller*ID, requested extension, requested context, etc are
|
||||
all communicated through the call.
|
||||
|
||||
* Single socket design
|
||||
IAX's single socket design allows up to 32768 calls to be
|
||||
multiplexed.
|
||||
|
||||
While we value the importance of standards based (i.e. SIP) call handling,
|
||||
hopefully this will provide a reasonable explanation of why we developed
|
||||
IAX rather than starting with SIP.
|
||||
|
||||
CONFIG FILE CONVENTIONS
|
||||
-----------------------
|
||||
Lines beginning with '>' represent lines which might appear in an actual
|
||||
configuration file. The '>' is used to help separate them from the
|
||||
descriptive text and should not actually be included in the file itself.
|
||||
|
||||
Lines within []'s by themselves represent section labels within the
|
||||
configuration file. like this:
|
||||
|
||||
> [mysection]
|
||||
|
||||
Options are set using the "=" sign, for example
|
||||
|
||||
> myoption = value
|
||||
|
||||
Sometimes an option will have a number of discrete values which it can
|
||||
take. In that case, in the documentation, the options will be listed
|
||||
within square brackets (the "[" and "]" ones) separated by the pipe symbol
|
||||
("|"). For example:
|
||||
|
||||
> myoption = [value1|value2|value3]
|
||||
|
||||
means the option "myoption" can be assigned a value of "value1", "value2",
|
||||
or "value3".
|
||||
|
||||
Objects, or pseudo-objects are instantiated using the "=>" construct. For
|
||||
example:
|
||||
|
||||
> myobject => parameter
|
||||
|
||||
creates an object called "myobject" with some parameter whose definition
|
||||
would be specific to that object. Note that the config file parser
|
||||
considers "=>" and "=" to be equivalent and their use is purely to make
|
||||
configuration files more readable and easier to "humanly parse".
|
||||
|
||||
The comment character in Asterisk configuration files is the semicolon
|
||||
";". The reason it is not "#" is because the "#" symbol can be used as
|
||||
parts of extensions and it didn't seem like a good idea to have to escape
|
||||
it.
|
||||
|
||||
IAX CONFIGURATION IN ASTERISK
|
||||
-----------------------------
|
||||
|
||||
Like everything else in Asterisk, IAX's configuration lies in
|
||||
/etc/asterisk -- specifically /etc/asterisk/iax.conf
|
||||
|
||||
The IAX configuration file is a collection of sections, each of which
|
||||
(with the exception of the "general" section) represents an entity within
|
||||
the IAX scope.
|
||||
|
||||
------------
|
||||
|
||||
The first section is typically the "general" section. In this area,
|
||||
a number of parameters which affect the entire system are configured.
|
||||
Specifically, the default codecs, port and address, jitter behavior, TOS
|
||||
bits, and registrations.
|
||||
|
||||
The first line of the "general" section is always:
|
||||
|
||||
> [general]
|
||||
|
||||
Following the first line are a number of other possibilities:
|
||||
|
||||
> bindport = <portnum>
|
||||
|
||||
This sets the port that IAX will bind to. The default IAX version 1
|
||||
port number is 5036. For IAX version 2, that is now the default in
|
||||
Asterisk, the default port is 4569.
|
||||
It is recommended that this value not be altered in general.
|
||||
|
||||
> bindaddr = <ipaddr>
|
||||
|
||||
This allows you to bind IAX to a specific local IP address instead of
|
||||
binding to all addresses. This could be used to enhance security if, for
|
||||
example, you only wanted IAX to be available to users on your LAN.
|
||||
|
||||
> bandwidth = [low|medium|high]
|
||||
|
||||
The bandwidth selection initializes the codec selection to appropriate
|
||||
values for given bandwidths. The "high" selection enables all codecs and
|
||||
is recommended only for 10Mbps or higher connections. The "medium"
|
||||
bandwidth eliminates signed linear, Mu-law and A-law codecs, leaving only
|
||||
the codecs which are 32kbps and smaller (with MP3 as a special case). It
|
||||
can be used with broadband connections if desired. "low" eliminates ADPCM
|
||||
and MP3 formats, leaving only the G.723.1, GSM, and LPC10.
|
||||
|
||||
> allow = [gsm|lpc10|g723.1|adpcm|ulaw|alaw|mp3|slinear|all]
|
||||
> disallow = [gsm|lpc10|g723.1|adpcm|ulaw|alaw|mp3|slinear|all]
|
||||
|
||||
The "allow" and "disallow" allow you to fine tune the codec selection
|
||||
beyond the initial bandwidth selection on a codec-by-codec basis.
|
||||
|
||||
The recommended configuration is to select "low" bandwidth and then
|
||||
disallow the LPC10 codec just because it doesn't sound very good.
|
||||
|
||||
> jitterbuffer = [yes|no]
|
||||
> dropcount = <dropamount>
|
||||
> maxjitterbuffer = <max>
|
||||
> maxexcessbuffer = <max>
|
||||
|
||||
These parameters control the operation of the jitter buffer. The
|
||||
jitterbuffer should always be enabled unless you expect all your
|
||||
connections to be over a LAN.
|
||||
* drop count is the maximum number of voice packets to allow to drop
|
||||
(out of 100). Useful values are 3-10.
|
||||
* maxjitterbuffer is the maximum amount of jitter buffer to permit to be
|
||||
used.
|
||||
* maxexcessbuffer is the maximum amount of excess jitter buffer
|
||||
that is permitted before the jitter buffer is slowly shrunk to eliminate
|
||||
latency.
|
||||
* minexcessbuffer is the minimum amount of excess jitter buffer
|
||||
|
||||
> accountcode = <code>
|
||||
> amaflags = [default|omit|billing|documentation]
|
||||
|
||||
These parameters affect call detail record generation. The first sets the
|
||||
account code for records received with IAX. The account code can be
|
||||
overridden on a per-user basis for incoming calls (see below). The
|
||||
amaflags controls how the record is labeled ("omit" causes no record to be
|
||||
written. "billing" and "documentation" label the records as billing or
|
||||
documentation records respectively, and "default" selects the system
|
||||
default.
|
||||
|
||||
> tos = [lowdelay|throughput|reliability|mincost|none]
|
||||
|
||||
IAX can optionally set the TOS (Type of Service) bits to specified values
|
||||
to help improve performance in routing. The recommended value is
|
||||
"lowdelay", which many routers (including any Linux routers with 2.4
|
||||
kernels that have not been altered with ip tables) will give priority to
|
||||
these packets, improving voice quality.
|
||||
|
||||
> register => <name>[:<secret>]@<host>[:port]
|
||||
|
||||
Any number of registry entries may be instantiated in the general
|
||||
section. Registration allows Asterisk to notify a remote Asterisk server
|
||||
(with a fixed address) what our current address is. In order for
|
||||
registration to work, the remote Asterisk server will need to have a
|
||||
dynamic peer entry with the same name (and secret if provided).
|
||||
|
||||
The name is a required field, and is the remote peer name that we wish to
|
||||
identify ourselves as. A secret may be provided as well. The secret is
|
||||
generally a shared password between the local server and the remote
|
||||
server. However, if the secret is in square brackets ([]'s) then it is
|
||||
interpreted as the name of a RSA key to use. In that case, the local Asterisk
|
||||
server must have the *private* key (/var/lib/asterisk/keys/<name>.key) and
|
||||
the remote server will have to have the corresponding public key.
|
||||
|
||||
The "host" is a required field and is the hostname or IP address of the
|
||||
remote Asterisk server. The port specification is optional and is by
|
||||
default 4569 for iax2 if not specified.
|
||||
|
||||
> notransfer = yes | no
|
||||
|
||||
If an IAX phone calls another IAX phone by using a Asterisk server,
|
||||
Asterisk will transfer the call to go peer to peer. If you do not
|
||||
want this, turn on notransfer with a "yes". This is also settable
|
||||
for peers and users.
|
||||
|
||||
-------------
|
||||
|
||||
The following sections, after "general" define either users, peers or
|
||||
friends. A "user" is someone who connects to us. A "peer" is someone
|
||||
that we connect to. A "friend" is simply shorthand for creating a "user"
|
||||
and "peer" with identical parameters (i.e. someone who can contact us and
|
||||
who we contact).
|
||||
|
||||
> [identifier]
|
||||
|
||||
The section begins with the identifier in square brackets. The identifier
|
||||
should be an alphanumeric string.
|
||||
|
||||
> type = [user|peer|friend]
|
||||
|
||||
This line tells Asterisk how to interpret this entity. Users are things
|
||||
that connect to us, while peers are phones we connect to, and a friend is
|
||||
shorthand for creating a user and a peer with identical information
|
||||
|
||||
----------------
|
||||
User fields:
|
||||
|
||||
> context = <context>
|
||||
|
||||
One or more context lines may be specified in a user, thus giving the user
|
||||
access to place calls in the given contexts. Contexts are used by
|
||||
Asterisk to divide dialing plans into logical units each with the ability
|
||||
to have numbers interpreted differently, have their own security model,
|
||||
auxiliary switch handling, and include other contexts. Most users are
|
||||
given access to the default context. Trusted users could be given access
|
||||
to the local context for example.
|
||||
|
||||
> permit = <ipaddr>/<netmask>
|
||||
> deny = <ipaddr>/<netmask>
|
||||
|
||||
Permit and deny rules may be applied to users, allowing them to connect
|
||||
from certain IP addresses and not others. The permit and deny rules are
|
||||
interpreted in sequence and all are evaluated on a given IP address, with
|
||||
the final result being the decision. For example:
|
||||
|
||||
> permit = 0.0.0.0/0.0.0.0
|
||||
> deny = 192.168.0.0/255.255.255.0
|
||||
|
||||
would deny anyone in 192.168.0.0 with a netmask of 24 bits (class C),
|
||||
whereas:
|
||||
|
||||
> deny = 192.168.0.0/24
|
||||
> permit = 0.0.0.0/0
|
||||
|
||||
would not deny anyone since the final rule would permit anyone, thus
|
||||
overriding the denial.
|
||||
|
||||
If no permit/deny rules are listed, it is assumed that someone may connect
|
||||
from anywhere.
|
||||
|
||||
> callerid = <callerid>
|
||||
|
||||
You may override the Caller*ID information passed by a user to you (if
|
||||
they choose to send it) in order that it always be accurate from the
|
||||
perspective of your server.
|
||||
|
||||
> auth = [md5|plaintext|rsa]
|
||||
|
||||
You may select which authentication methods are permitted to be used by
|
||||
the user to authenticate to us. Multiple methods may be specified,
|
||||
separated by commas. If md5 or plaintext authentication is selected, a
|
||||
secret must be provided. If RSA authentication is specified, then one or
|
||||
more key names must be specified with "inkeys"
|
||||
|
||||
If no secret is specified and no authentication method is specified, then
|
||||
no authentication will be required.
|
||||
|
||||
> secret = <secret>
|
||||
|
||||
The "secret" line specifies the shared secret for md5 and plaintext
|
||||
authentication methods. It is never suggested to use plaintext except in
|
||||
some cases for debugging.
|
||||
|
||||
> inkeys = key1[:key2...]
|
||||
|
||||
The "inkeys" line specifies which keys we can use to authenticate the
|
||||
remote peer. If the peer's challenge passes with any of the given keys,
|
||||
then we accept its authentication. The key files live in
|
||||
/var/lib/asterisk/keys/<name>.pub and are *public keys*. Public keys are
|
||||
not typically DES3 encrypted and thus do not usually need initialization.
|
||||
|
||||
---------------
|
||||
Peer configuration
|
||||
|
||||
> allow = [gsm|lpc10|g723.1|adpcm|ulaw|alaw|mp3|slinear|all]
|
||||
> disallow = [gsm|lpc10|g723.1|adpcm|ulaw|alaw|mp3|slinear|all]
|
||||
|
||||
The "allow" and "disallow" may be used to enable or disable specific codec
|
||||
support on a per-peer basis.
|
||||
|
||||
> host = [<ipaddr>|dynamic]
|
||||
|
||||
The host line specifies the hostname or IP address of the remote host, or
|
||||
may be the word "dynamic" signifying that the host will register with us
|
||||
(see register => in the general section above).
|
||||
|
||||
> defaultip = <ipaddr>
|
||||
|
||||
If the host uses dynamic registration, Asterisk may still be given a
|
||||
default IP address to use when dynamic registration has not been performed
|
||||
or has timed out.
|
||||
|
||||
> peercontext = <context>
|
||||
|
||||
Specifies the context name to be passed to the peer for it to use when routing
|
||||
the call through its dial plan. This entry will be used only if a context
|
||||
is not included in the IAX2 channel name passed to the Dial command.
|
||||
|
||||
> qualify = [yes | no | <value>]
|
||||
|
||||
Qualify turns on checking of availability of the remote peer. If the
|
||||
peer becomes unavailable, no calls are placed to the peer until
|
||||
it is reachable again. This is also helpful in certain NAT situations.
|
||||
|
||||
> jitterbuffer = [yes | no]
|
||||
|
||||
Turns on or off the jitterbuffer for this peer
|
||||
|
||||
> mailbox = <mailbox>[@mailboxcontext]
|
||||
|
||||
Specifies a mailbox to check for voicemail notification.
|
||||
|
||||
> permit = <ipaddr>/<netmask>
|
||||
> deny = <ipaddr>/<netmask>
|
||||
|
||||
Permit and deny rules may be applied to users, allowing them to connect
|
||||
from certain IP addresses and not others. The permit and deny rules are
|
||||
interpreted in sequence and all are evaluated on a given IP address, with
|
||||
the final result being the decision. See the user section above
|
||||
for examples.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
For more examples of a configuration, please see the iax.conf.sample in
|
||||
your the /configs directory of you source code distribution
|
@ -1,44 +0,0 @@
|
||||
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
|
@ -1,9 +0,0 @@
|
||||
Cygwin support is completely experimental and unsupported at this time. The
|
||||
current state of cygwin support is that it will compile, and start the cli,
|
||||
but will not yet take calls properly.
|
||||
|
||||
To compile with cygwin, you will need at least a standard base cygwin install plus the following packages:
|
||||
|
||||
minires
|
||||
minires-devel
|
||||
|
@ -1,91 +0,0 @@
|
||||
Asterisk external configuration
|
||||
===============================
|
||||
|
||||
The Asterisk external configuration engine is the result of work by
|
||||
Anthony Minessale II, Mark Spencer and Constantine Filin.
|
||||
|
||||
It is designed to provide a flexible, seamless integration between
|
||||
Asterisk's internal configuration structure and external SQL other other
|
||||
databases (maybe even LDAP one day).
|
||||
|
||||
The external configuration engine is the basis for the ARA, the
|
||||
Asterisk Realtime Architecture (see doc/realtime.txt for more
|
||||
information).
|
||||
|
||||
* Configuration
|
||||
|
||||
External configuration is configured in /etc/asterisk/extconfig.conf
|
||||
allowing you to map any configuration file (static mappings) to
|
||||
be pulled from the database, or to map special runtime entries which
|
||||
permit the dynamic creation of objects, entities, peers, etc. without
|
||||
the necessity of a reload.
|
||||
|
||||
Generally speaking, the columns in your tables should line up with the
|
||||
fields you would specify in the given entity declaration. If an entry
|
||||
would appear more than once, in the column it should be separated by a
|
||||
semicolon. For example, an entity that looks like:
|
||||
|
||||
[foo]
|
||||
host=dynamic
|
||||
secret=bar
|
||||
context=default
|
||||
context=local
|
||||
|
||||
could be stored in a table like this:
|
||||
|
||||
+------+--------+-------+--------------+----------+-----+-----------+
|
||||
| name | host | secret| context | ipaddr | port| regseconds|
|
||||
+------+--------+-------+--------------+----------+-----+-----------+
|
||||
| foo | dynamic| bar | default;local| 127.0.0.1| 4569| 1096954152|
|
||||
+------+--------+-------+--------------+----------+-----+-----------+
|
||||
|
||||
Note that for use with IAX or SIP, the table will also need the "name",
|
||||
"ipaddr", "port", "regseconds" columns. If you wanted to be able to
|
||||
configure the callerid, you could just add a callerid column to the
|
||||
table, for example.
|
||||
|
||||
A SIP table would look more like this:
|
||||
|
||||
+------+--------+-------+----------+-----+------------+----------+
|
||||
| name | host | secret| ipaddr | port| regseconds | username |
|
||||
+------+--------+-------+----------+-----+------------+----------+
|
||||
| foo | dynamic| bar | 127.0.0.1| 4569| 1096954152 | 1234 |
|
||||
+------+--------+-------+----------+-----+------------+----------+
|
||||
|
||||
in order to store appropriate parameters required for SIP.
|
||||
|
||||
In addition to this, if you add a field named "regserver" to the
|
||||
SIP peers table and have the system name set in asterisk.conf,
|
||||
Asterisk will store the system name that the user registered on in
|
||||
the database. This can be used to direct calls to go through the server
|
||||
that holds the registration (for NAT traversal purposes).
|
||||
|
||||
A Voicemail table would look more like this:
|
||||
|
||||
+----------+---------+----------+----------+-----------+---------------+
|
||||
| uniqueid | mailbox | context | password |email | fullname |
|
||||
+----------+---------+----------+----------+-----------+---------------+
|
||||
| 1 | 1234 | default | 4242 | a@b.com | Joe Schmoe |
|
||||
+----------+---------+----------+----------+-----------+---------------+
|
||||
|
||||
The uniqueid should be unique to each voicemail user and can be
|
||||
autoincrement. It need not have any relation to the mailbox or context.
|
||||
|
||||
An extension table would look more like this:
|
||||
|
||||
+----------+---------+----------+-------+-----------+
|
||||
| context | exten | priority | app | appdata |
|
||||
+----------+---------+----------+-------+-----------+
|
||||
| default | 1234 | 1 | Dial | Zap/1 |
|
||||
+----------+---------+----------+-------+-----------+
|
||||
|
||||
In the dialplan you just use the Realtime switch:
|
||||
|
||||
[foo]
|
||||
switch => Realtime
|
||||
|
||||
or:
|
||||
|
||||
[bar]
|
||||
switch => Realtime/bar@extensions
|
||||
|
@ -1,12 +1,10 @@
|
||||
PLEASE NOTE
|
||||
The cdr\_tds module is NOT compatible with version 0.63 of FreeTDS.
|
||||
|
||||
The cdr_tds module is NOT compatible with version 0.63 of FreeTDS.
|
||||
|
||||
The cdr_tds module is known to work with FreeTDS version 0.62.1;
|
||||
The cdr\_tds module is known to work with FreeTDS version 0.62.1;
|
||||
it should also work with 0.62.2, 0.62.3 and 0.62.4, which are bug
|
||||
fix releases.
|
||||
|
||||
The cdr_tds module uses the raw "libtds" API of FreeTDS. It appears
|
||||
The cdr\_tds module uses the raw "libtds" API of FreeTDS. It appears
|
||||
that from 0.63 onwards, this is not considered a published API
|
||||
of FreeTDS and is subject to change without notice.
|
||||
|
@ -1,22 +0,0 @@
|
||||
The Asterisk PBX supports H.323 via two totally separate
|
||||
channel drivers.
|
||||
|
||||
You can find more information Asterisk's native H.323
|
||||
support in /path/to/asterisk/channels/h323/README or
|
||||
you can download a third party driver at
|
||||
http://www.inaccessnetworks.com/projects/asterisk-oh323
|
||||
|
||||
Asterisk's native H.323 is supported and maintained by
|
||||
Jeremy McNamara (JerJer in irc). Support for the third
|
||||
party H.323 driver is supplied by inAccessNetworks.
|
||||
|
||||
If you have trouble with either driver you should direct
|
||||
your debug and comments to the appropriate party, making
|
||||
sure to be specific in exactly which H.323 driver you are
|
||||
running.
|
||||
|
||||
Please, read all supplied documentation before contacting
|
||||
either party for support. Many issues can be quickly
|
||||
resolved by simply following the instructions that are
|
||||
provided.
|
||||
|
@ -0,0 +1,100 @@
|
||||
\subsection{Introduction}
|
||||
|
||||
A PBX is only really useful if you can get calls into it. Of course, you
|
||||
can use Asterisk with VoIP calls (SIP, H.323, IAX), but you can also talk
|
||||
to the real PSTN through various cards.
|
||||
|
||||
Supported Hardware is divided into two general groups: Zaptel devices and
|
||||
non-zaptel devices. The Zaptel compatible hardware supports pseudo-TDM
|
||||
conferencing and all call features through chan\_zap, whereas non-zaptel
|
||||
compatible hardware may have different features.
|
||||
|
||||
\subsection{Zaptel compatible hardware}
|
||||
|
||||
\begin{itemize}
|
||||
\item Digium, Inc. (Primary Developer of Asterisk)
|
||||
http://www.digium.com
|
||||
\begin{itemize}
|
||||
\item Analog Interfaces
|
||||
\begin{itemize}
|
||||
\item TDM400P - The TDM400P is a half-length PCI 2.2-compliant card that supports FXS and FXO station interfaces for connecting analog telephones and analog POTS lines through a PC.
|
||||
\item TDM800P - The TDM800P is a half-length PCI 2.2-compliant, 8 port card using Digium's VoiceBus technology that supports FXS and FXO station interfaces for connecting analog telephones and analog POTS lines through a PC.
|
||||
\item TDM2400P - The TDM2400P is a full-length PCI 2.2-compliant card for connecting analog telephones and analog POTS lines through a PC. It supports a combination of up to 6 FXS and/or FXO modules for a total of 24 lines.
|
||||
\end{itemize}
|
||||
\item Digital Interfaces
|
||||
\begin{itemize}
|
||||
\item TE412P - The TE412P offers an on-board DSP-based echo cancellation module. It supports E1, T1, and J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE410P - The TE410P improves performance and scalability through bus mastering architecture. It supports E1, T1, and J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE407P - The TE407P offers an on-board DSP-based echo cancellation module. It supports E1, T1, and J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE405P - The TE405P improves performance and scalability through bus mastering architecture. It supports both E1, T1, J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE212P - The TE212P offers an on-board DSP-based echo cancellation module. It supports E1, T1, and J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE210P - The TE210P improves performance and scalability through bus mastering architecture. It supports E1, T1, and J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE207P - The TE207P offers an on-board DSP-based echo cancellation module. It supports E1, T1, and J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE205P - The TE205P improves performance and scalability through bus mastering architecture. It supports both E1 and T1/J1 environments and is selectable on a per-card or per-port basis.
|
||||
\item TE120P - The TE120P is a single span, selectable T1, E1, or J1 card and utilizes Digium's VoiceBus™ technology. It supports both voice and data modes.
|
||||
\item TE110P - The TE110P brings a high-performance, cost-effective, and flexible single span togglable T1, E1, J1 interface to the Digium line-up of telephony interface devices.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Non-zaptel compatible hardware}
|
||||
|
||||
\begin{itemize}
|
||||
\item QuickNet, Inc.
|
||||
http://www.quicknet.net
|
||||
\begin{itemize}
|
||||
\item Internet PhoneJack - Single FXS interface. Supports Linux telephony
|
||||
interface. DSP compression built-in.
|
||||
|
||||
\item Internet LineJack - Single FXS or FXO interface. Supports Linux
|
||||
telephony interface.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{mISDN compatible hardware}
|
||||
|
||||
mISDN homepage: http://www.isdn4linux.de/mISDN/
|
||||
|
||||
Any adapter with an mISDN driver should be compatible with
|
||||
chan\_misdn. See the mISDN section for more information.
|
||||
|
||||
\begin{itemize}
|
||||
\item Digium, Inc. (Primary Developer of Asterisk)
|
||||
http://www.digium.com
|
||||
\begin{itemize}
|
||||
\item B410P - 4 Port BRI card (TE/NT)
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\begin{itemize}
|
||||
\item beroNet
|
||||
http://www.beronet.com
|
||||
\begin{itemize}
|
||||
\item BN4S0 - 4 Port BRI card (TE/NT)
|
||||
|
||||
\item BN8S0 - 8 Port BRI card (TE/NT)
|
||||
|
||||
\item Billion Card - Single Port BRI card (TE (/NT with crossed cable) )
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Miscellaneous other interfaces}
|
||||
|
||||
\begin{itemize}
|
||||
\item Digium, Inc. (Primary Developer of Asterisk)
|
||||
\begin{itemize}
|
||||
\item TC400B - The TC400B is a half-length, low-profile PCI 2.2-compliant card for transforming complex VoIP codecs (G.729) into simple codecs.
|
||||
\end{itemize}
|
||||
|
||||
\item ALSA
|
||||
http://www.alsa-project.org
|
||||
\begin{itemize}
|
||||
\item Any ALSA compatible full-duplex sound card
|
||||
\end{itemize}
|
||||
|
||||
\item OSS
|
||||
http://www.opensound.com
|
||||
\begin{itemize}
|
||||
\item Any OSS compatible full-duplex sound card
|
||||
\end{itemize}
|
||||
\end{itemize}
|
@ -1,74 +0,0 @@
|
||||
A PBX is only really useful if you can get calls into it. Of course, you
|
||||
can use Asterisk with VoIP calls (SIP, H.323, IAX), but you can also talk
|
||||
to the real PSTN through various cards.
|
||||
|
||||
Supported Hardware is divided into two general groups: Zaptel devices and
|
||||
non-zaptel devices. The Zaptel compatible hardware supports pseudo-TDM
|
||||
conferencing and all call features through chan_zap, whereas non-zaptel
|
||||
compatible hardware may have different features.
|
||||
|
||||
Zaptel compatible hardware
|
||||
==========================
|
||||
|
||||
-- Digium (Primary author of Asterisk)
|
||||
http://www.digium.com, http://store.digium.com
|
||||
|
||||
* Wildcard T400P (obsolete) - Quad T1 interface connects to four T1/PRI
|
||||
interfaces. Supports RBS and PRI voice and PPP, FR, and HDLC data.
|
||||
|
||||
* Wildcard E400P (obsolete)- Quad E1 interface connects to four E1/PRI
|
||||
(or PRA) interfaces. Supports PRA/PRI, EuroISDN voice and data.
|
||||
|
||||
* Wildcard T100P - Single T1 interface connects to a single T1/PRI
|
||||
interface. Supports RBS and PRI voice and PPP, FR, and HDLC data.
|
||||
|
||||
* Wildcard E100P - Single E1 interface connects to a single E1/PRI (or PRA)
|
||||
interface. Supports PRA/PRI, EuroISDN voice and PPP, FR, HDLC data.
|
||||
|
||||
* Wildcard TDM400P - Quad Modular FXS interface connects to standard
|
||||
analog telephones.
|
||||
|
||||
* Wildcard TE410P - Quad T1/E1 switchable interface. Supports PRI and
|
||||
RBS signalling, as well as PPP, FR, and HDLC data modes.
|
||||
|
||||
Non-zaptel compatible hardware
|
||||
==============================
|
||||
|
||||
-- QuickNet, Inc.
|
||||
http://www.quicknet.net
|
||||
|
||||
* Internet PhoneJack - Single FXS interface. Supports Linux telephony
|
||||
interface. DSP compression built-in.
|
||||
|
||||
* Internet LineJack - Single FXS or FXO interface. Supports Linux
|
||||
telephony interface.
|
||||
|
||||
mISDN compatible hardware
|
||||
=========================
|
||||
mISDN homepage: http://www.isdn4linux.de/mISDN/
|
||||
|
||||
Any adapter with an mISDN driver should be compatible with
|
||||
chan_misdn. See misdn.txt for information.
|
||||
|
||||
-- beroNet
|
||||
http://www.beronet.com
|
||||
|
||||
* BN4S0 - 4 Port BRI card (TE/NT)
|
||||
|
||||
* BN8S0 - 8 Port BRI card (TE/NT)
|
||||
|
||||
* Billion Card - Single Port BRI card (TE (/NT with crossed cable) )
|
||||
|
||||
|
||||
Miscellaneous other interfaces
|
||||
==============================
|
||||
|
||||
-- ALSA
|
||||
http://www.alsa-project.org
|
||||
|
||||
* Any ALSA compatible full-duplex sound card
|
||||
|
||||
-- OSS
|
||||
http://www.opensound.com
|
||||
|
||||
* Any OSS compatible full-duplex sound card
|
@ -1,67 +0,0 @@
|
||||
Inter-Asterisk eXchange Protocol
|
||||
================================
|
||||
|
||||
Usage:
|
||||
======
|
||||
The format for the dialing string on Asterisk is:
|
||||
IAX/[user@]peer[:exten[@context]]
|
||||
|
||||
(Note, []'s denote optional fields). The peer is either an IP address
|
||||
or a peer as specified in the /etc/asterisk/iax.conf file. Exten is
|
||||
an optional requested extension (otherwise "s" will be used), and
|
||||
"context" is an optional context to request. The user is an optional
|
||||
username specified in the peer's iax.conf. If the user is not specified,
|
||||
the peer will select one.
|
||||
|
||||
The peer uses a score to determine the best user entry to match against if
|
||||
one is not specified:
|
||||
|
||||
1. User entry last specified in iax.conf (this is the baseline).
|
||||
2. User entry with secret specified and ACL specified.
|
||||
3. User entry with no secret specified and no ACL specified.
|
||||
4. User entry with no secret specified and ACL specified.
|
||||
5. User entry matched via username.
|
||||
|
||||
The higher the score the better it is with 5 being an exact match and the maximum
|
||||
score possible.
|
||||
|
||||
Protocol and rationale:
|
||||
=======================
|
||||
IAX is a simple, low overhead and low bandwidth VoIP protocol designed to
|
||||
allow multiple Asterisk PBX's to communicate with one another without
|
||||
the overhead of more complex protocols like H.323. Payload is sent with
|
||||
a header overhead of only 4 octets. Control functions (and one payload packet
|
||||
per minute or so) is sent with a more complex header of 12 octets.
|
||||
|
||||
IAX is slightly stateful.
|
||||
|
||||
IAX contains two kinds of packets: The full header packet type, which
|
||||
contains much information about the frame, in addition to its contents,
|
||||
and the mini header type, which is used only for non-reliable voice
|
||||
packet delivery.
|
||||
|
||||
All packets are immediately transmitted. Packets are received, but not
|
||||
delivered to the actual channels until a given time quantum has passed, in
|
||||
order to try to eliminate jitter.
|
||||
|
||||
All full header packets must be ackd (except, obviously for the ACK packets
|
||||
themselves and not so obviously for hangup packets). The "timestamp" field of
|
||||
ack packets is not the normal offset, but rather a quote of the timestamp as
|
||||
included with the original packet that you're acking, and likewise the
|
||||
seqno field is the seqno of the packet you're acking, not your own seqno,
|
||||
and you do not increment your own sequence number. ACKing is based on the
|
||||
sequence number.
|
||||
|
||||
See iax.h for a description of the frame formats.
|
||||
|
||||
IAX internal frames use the AST_FRAME_IAX type. The subclass of these
|
||||
frames is the IAX control number, as seen in iax.h. The first frame sent
|
||||
must be an AST_FRAME_IAX with the control AST_IAX_CONTROL_NEW.
|
||||
|
||||
The AST_IAX_CONTROL_NEW establishes a new connection.
|
||||
|
||||
The first frame sent MUST be an AST_CONTROL_NEW to start a connection.
|
||||
|
||||
IAX connnections may require authentication using either simple plaintext
|
||||
passwords or an md5 challenge/response pair.
|
||||
|
@ -1,12 +1,7 @@
|
||||
Icecast + Asterisk
|
||||
==================
|
||||
The advent of icecast into Asterisk allows you to do neat things like have
|
||||
a caller stream right into an ice-cast stream as well as using chan_local
|
||||
a caller stream right into an ice-cast stream as well as using chan\_local
|
||||
to place things like conferences, music on hold, etc. into the stream.
|
||||
|
||||
You'll need to specify a config file for the ices encoder. An example is
|
||||
included in contrib/asterisk-ices.xml
|
||||
included in contrib/asterisk-ices.xml.
|
||||
|
||||
Anyway hope you like it.
|
||||
|
||||
Mark
|
@ -1,69 +0,0 @@
|
||||
|
||||
Mathematical dialplan function
|
||||
|
||||
Yeah, I thought it was a little insane too..
|
||||
|
||||
adds:
|
||||
|
||||
Sum, Multiply, Divide, Subtract, Modulus, GT, LT, GTE, LTE, EQ functions to Asterisk
|
||||
|
||||
All functions follow the same basic pattern for parameters:
|
||||
|
||||
parameter 1 = the math expression
|
||||
parameter 2 = the type of result
|
||||
|
||||
Perform calculation on number 1 to number 2. Valid ops are:
|
||||
+,-,/,*,%,<,>,>=,<=,==
|
||||
and behave as their C equivalents.
|
||||
|
||||
<type_of_result> - wanted type of result:
|
||||
f, float - float(default)
|
||||
i, int - integer,
|
||||
h, hex - hex,
|
||||
c, char - char
|
||||
|
||||
Each math expression is performed as
|
||||
|
||||
Action param1 on param2
|
||||
|
||||
eg:
|
||||
|
||||
Action = Divide
|
||||
Param1 = 10
|
||||
Param2 = 2
|
||||
|
||||
Results in
|
||||
|
||||
Divide 10 by 2
|
||||
|
||||
|
||||
Example dialplan:
|
||||
|
||||
exten => 11099,1,Set(RV=${MATH(1+20)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(10*2)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(10*2)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(10-2)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(2%10)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(10/0)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(10-200)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(1-20)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(1<20)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(1>=20)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(101>20)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(1==20)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(20<=20)})
|
||||
exten => 11099,n,NOOP(${RV})
|
||||
exten => 11099,n,Set(RV=${MATH(123%16,int)})
|
||||
exten => 11099,n,NOOP(${RV})
|
@ -1,15 +0,0 @@
|
||||
Description of call model:
|
||||
|
||||
Incoming Call:
|
||||
|
||||
Channel backend waits for a RING or equivalent on some sort of
|
||||
interface. Typically this is done in its own thread. When a RING is
|
||||
detected, the backend should create a channel structure and then call
|
||||
ast_pbx_start() on that channel, which will create a thread to monitor
|
||||
that interface. At this point, the PBX and/or applications it launches
|
||||
will manage the interface, and it need not be monitored by the
|
||||
aforementioned thread. When the applications are finished, the requisite
|
||||
hangup function will be called, at which the channel can be considered to
|
||||
be no longer valid, and the thread that controls it will imminently be
|
||||
terminated.
|
||||
|
@ -1,9 +1,8 @@
|
||||
* Asterisk MP3 Support
|
||||
======================
|
||||
\subsubsection{MP3 Music On Hold}
|
||||
|
||||
* MP3 Music On Hold
|
||||
Use of the mpg123 for your music on hold is no longer supported. You should
|
||||
now use one of the native formats for your music on hold selections.
|
||||
Use of the mpg123 for your music on hold is no longer recommended and is now
|
||||
officially deprecated. You should now use one of the native formats for your
|
||||
music on hold selections.
|
||||
|
||||
However, if you still need to use mp3 as your music on hold format, a format
|
||||
driver for reading MP3 audio files is available in the asterisk-addons SVN
|
@ -1,8 +0,0 @@
|
||||
About Hold Music
|
||||
================
|
||||
Digium has licensed the music included with
|
||||
the Asterisk distribution From FreePlayMusic
|
||||
for use and distribution with Asterisk. It
|
||||
is licensed ONLY for use as hold music within
|
||||
an Asterisk based PBX.
|
||||
|
@ -1,15 +0,0 @@
|
||||
MYSQL LICENSING UPDATE
|
||||
======================
|
||||
We were recently contacted by MySQL and informed that the MySQL client
|
||||
libraries are now under GPL license and not LGPL license as before.
|
||||
|
||||
Since Asterisk does allow exceptions to GPL, we are removing MySQL support
|
||||
from standard Asterisk. We will, where appropriate, make it available via
|
||||
a separate package which will only be usable when Asterisk is used completely
|
||||
within GPL (i.e. not in conjunction with G.729, OpenH.323, etc). We
|
||||
apologize for the confusion.
|
||||
|
||||
You may find this in the new "asterisk-addons" package.
|
||||
|
||||
Mark Spencer
|
||||
Digium
|
@ -1,203 +0,0 @@
|
||||
Call Detail Recording to RADIUS Server
|
||||
======================================
|
||||
|
||||
|
||||
Configuration of Asterisk to send CDRs to (Free)RADIUS servers.
|
||||
|
||||
|
||||
A. What is needed :
|
||||
* FreeRADIUS server
|
||||
* Radiusclient-ng library
|
||||
* Asterisk PBX
|
||||
|
||||
|
||||
+--------------------+
|
||||
| Asterisk PBX |
|
||||
| |
|
||||
|********************|
|
||||
| | +---------------+
|
||||
| RADIUS client |------->| RADIUS server |
|
||||
| |<-------| (FreeRADIUS) |
|
||||
+--------------------+ +---------------+
|
||||
|
||||
|
||||
|
||||
|
||||
B. Steps to follow in order to have RADIUS support:
|
||||
|
||||
1.Radiusclient library
|
||||
1.a Installation
|
||||
|
||||
Download the sources from:
|
||||
|
||||
http://developer.berlios.de/projects/radiusclient-ng/
|
||||
|
||||
Untar the source tarball.
|
||||
root@localhost:/usr/local/src# tar xvfz radiusclient-ng-0.5.2.tar.gz
|
||||
|
||||
Compile and install the library.
|
||||
root@localhost:/usr/local/src# cd radiusclient-ng-0.5.2
|
||||
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# ./configure
|
||||
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make
|
||||
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make install
|
||||
|
||||
1.b Configuration
|
||||
|
||||
By default all the configuration files of the radiusclient library will
|
||||
be in /usr/local/etc/radiusclient-ng directory.
|
||||
|
||||
File "radiusclient.conf"
|
||||
Open the file and find lines containing the following:
|
||||
|
||||
authserver localhost
|
||||
|
||||
This is the hostname or IP address of the RADIUS server used for
|
||||
authentication. You will have to change this unless the server is
|
||||
running on the same host as your Asterisk PBX.
|
||||
|
||||
acctserver localhost
|
||||
|
||||
This is the hostname or IP address of the RADIUS server used for
|
||||
accounting. You will have to change this unless the server is running
|
||||
on the same host as your Asterisk PBX.
|
||||
|
||||
File "servers"
|
||||
|
||||
RADIUS protocol uses simple access control mechanism based on shared
|
||||
secrets that allows RADIUS servers to limit access from RADIUS clients.
|
||||
|
||||
A RADIUS server is configured with a secret string and only RADIUS
|
||||
clients that have the same secret will be accepted.
|
||||
|
||||
You need to configure a shared secret for each server you have
|
||||
configured in radiusclient.conf file in the previous step. The shared
|
||||
secrets are stored in /usr/local/etc/radiusclient-ng/servers file.
|
||||
|
||||
Each line contains hostname of a RADIUS server and shared secret
|
||||
used in communication with that server. The two values are separated
|
||||
by white spaces. Configure shared secrets for every RADIUS server you
|
||||
are going to use.
|
||||
|
||||
File "dictionary"
|
||||
|
||||
Asterisk uses some attributes that are not included in the
|
||||
dictionary of radiusclient library, therefore it is necessary to add
|
||||
them. A file called dictionary.digium (kept in the contrib dir)
|
||||
was created to list all new attributes used by Asterisk.
|
||||
Add to the end of the main dictionary file
|
||||
/usr/local/etc/radiusclient-ng/dictionary
|
||||
the line:
|
||||
|
||||
$INCLUDE /path/to/dictionary.digium
|
||||
|
||||
2.FreeRADIUS Server (Version 1.1.1)
|
||||
2.a Installation
|
||||
|
||||
Download sources tarball from:
|
||||
|
||||
http://freeradius.org/
|
||||
|
||||
Untar, configure, build, and install the server:
|
||||
|
||||
root@localhost:/usr/local/src# tar xvfz freeradius-1.1.1.tar.gz
|
||||
root@localhost:/usr/local/src# cd freeradius-1.1.1
|
||||
root@localhost"/usr/local/src/freeradius-1.1.1# ./configure
|
||||
root@localhost"/usr/local/src/freeradius-1.1.1# make
|
||||
root@localhost"/usr/local/src/freeradius-1.1.1# make install
|
||||
|
||||
All the configuration files of FreeRADIUS server will be in
|
||||
/usr/local/etc/raddb directory.
|
||||
|
||||
|
||||
2.b Configuration
|
||||
|
||||
There are several file that have to be modified to configure the
|
||||
RADIUS server. These are presented next.
|
||||
|
||||
File "clients.conf"
|
||||
|
||||
File /usr/local/etc/raddb/clients.conf contains description of
|
||||
RADIUS clients that are allowed to use the server. For each of the
|
||||
clients you need to specify its hostname or IP address and also a
|
||||
shared secret. The shared secret must be the same string you configured
|
||||
in radiusclient library.
|
||||
|
||||
Example:
|
||||
client myhost {
|
||||
secret = mysecret
|
||||
shortname = foo
|
||||
}
|
||||
|
||||
This fragment allows access from RADIUS clients on "myhost" if they use
|
||||
"mysecret" as the shared secret.
|
||||
The file already contains an entry for localhost (127.0.0.1), so if you
|
||||
are running the RADIUS server on the same host as your Asterisk server,
|
||||
then modify the existing entry instead, replacing the default password.
|
||||
|
||||
File "dictionary"
|
||||
|
||||
Note : as of version 1.1.2, the dictionary.digium file ships with FreeRADIUS.
|
||||
The following procedure brings the dictionary.digium file to previous versions
|
||||
of FreeRADIUS.
|
||||
|
||||
File /usr/local/etc/raddb/dictionary contains the dictionary of
|
||||
FreeRADIUS server. You have to add the same dictionary file
|
||||
(dictionary.digium), which you added to the dictionary of radiusclient-ng
|
||||
library. You can include it into the main file, adding the following line at the
|
||||
end of file '/usr/local/etc/raddb/dictionary':
|
||||
|
||||
$INCLUDE /path/to/dictionary.digium
|
||||
|
||||
That will include the same new attribute definitions that are used
|
||||
in radiusclient-ng library so the client and server will understand each
|
||||
other.
|
||||
|
||||
|
||||
3. Asterisk Accounting Configuration
|
||||
|
||||
Compilation and installation:
|
||||
The module will be compiled as long as the radiusclient-ng
|
||||
library has been detected on your system.
|
||||
|
||||
By default FreeRADIUS server will log all accounting requests into
|
||||
/usr/local/var/log/radius/radacct directory in form of plain text files.
|
||||
The server will create one file for each hostname in the directory. The
|
||||
following example shows how the log files look like.
|
||||
|
||||
Asterisk now generates Call Detail Records. See /include/asterisk/cdr.h
|
||||
for all the fields which are recorded. By default, records in comma
|
||||
separated values will be created in /var/log/asterisk/cdr-csv.
|
||||
|
||||
The configuration file for cdr_radius.so module is :
|
||||
|
||||
/etc/asterisk/cdr.conf
|
||||
This is where you can set CDR related parameters as well as the path to
|
||||
the radiusclient-ng library configuration file.
|
||||
|
||||
|
||||
4. Logged Values
|
||||
|
||||
"Asterisk-Acc-Code", The account name of detail records
|
||||
"Asterisk-Src",
|
||||
"Asterisk-Dst",
|
||||
"Asterisk-Dst-Ctx", The destination context
|
||||
"Asterisk-Clid",
|
||||
"Asterisk-Chan", The channel
|
||||
"Asterisk-Dst-Chan", (if applicable)
|
||||
"Asterisk-Last-App", Last application run on the channel
|
||||
"Asterisk-Last-Data", Argument to the last channel
|
||||
"Asterisk-Start-Time",
|
||||
"Asterisk-Answer-Time",
|
||||
"Asterisk-End-Time",
|
||||
"Asterisk-Duration", Duration is the whole length that the entire
|
||||
call lasted. ie. call rx'd to hangup
|
||||
"end time" minus "start time"
|
||||
"Asterisk-Bill-Sec", The duration that a call was up after other
|
||||
end answered which will be <= to duration
|
||||
"end time" minus "answer time"
|
||||
"Asterisk-Disposition", ANSWERED, NO ANSWER, BUSY
|
||||
"Asterisk-AMA-Flags", DOCUMENTATION, BILL, IGNORE etc, specified on
|
||||
a per channel basis like accountcode.
|
||||
"Asterisk-Unique-ID", Unique call identifier
|
||||
"Asterisk-User-Field" User field set via SetCDRUserField
|
||||
|
Binary file not shown.
Loading…
Reference in new issue