|
|
@ -1,6 +1,6 @@
|
|
|
|
Asterisk OSP Module User Guide
|
|
|
|
OSP User Guide for Asterisk V1.6
|
|
|
|
|
|
|
|
|
|
|
|
June 16, 2006
|
|
|
|
4 January 2007
|
|
|
|
|
|
|
|
|
|
|
|
Table of Contents
|
|
|
|
Table of Contents
|
|
|
|
1 Introduction
|
|
|
|
1 Introduction
|
|
|
@ -13,70 +13,73 @@ Table of Contents
|
|
|
|
2.1.5 Building the Enrollment Utility
|
|
|
|
2.1.5 Building the Enrollment Utility
|
|
|
|
2.2 Obtain Crypto Files
|
|
|
|
2.2 Obtain Crypto Files
|
|
|
|
3 Asterisk
|
|
|
|
3 Asterisk
|
|
|
|
3.1 OSP Support Implementation
|
|
|
|
3.1 Configure for OSP Support
|
|
|
|
3.1.1 OSPAuth
|
|
|
|
3.1.1 Build Asterisk with OSP Toolkit
|
|
|
|
3.1.2 OSPLookup
|
|
|
|
3.1.2 osp.conf
|
|
|
|
3.1.3 OSPNext
|
|
|
|
3.1.3 extensions.conf
|
|
|
|
3.1.4 OSPFinish
|
|
|
|
3.1.4 zapata/sip/iax/h323/ooh323.conf
|
|
|
|
3.2 Build with OSP Support
|
|
|
|
3.2 OSP Dial Plan Functions
|
|
|
|
3.3 Configure with OSP Support
|
|
|
|
3.2.1 OSPAuth
|
|
|
|
3.3.1 osp.conf
|
|
|
|
3.2.2 OSPLookup
|
|
|
|
3.3.2 zapata/sip/iax.conf
|
|
|
|
3.2.3 OSPNext
|
|
|
|
3.3.3 extensions.conf
|
|
|
|
3.2.4 OSPFinish
|
|
|
|
|
|
|
|
3.3 extensions.conf Examples
|
|
|
|
|
|
|
|
3.3.1 Source Gateway
|
|
|
|
|
|
|
|
3.3.2 Destination Gateway
|
|
|
|
|
|
|
|
3.3.3 Proxy
|
|
|
|
|
|
|
|
|
|
|
|
Asterisk is a trademark of Digium, Inc.
|
|
|
|
Asterisk is a trademark of Digium, Inc.
|
|
|
|
TransNexus and OSP Secured are trademarks of TransNexus, Inc.
|
|
|
|
TransNexus and OSP Secures are trademarks of TransNexus, Inc.
|
|
|
|
|
|
|
|
|
|
|
|
1 Introduction
|
|
|
|
1 Introduction
|
|
|
|
This document provides instructions on how to build and configure Asterisk
|
|
|
|
This document provides instructions on how to build and configure Asterisk
|
|
|
|
V1.4 with the OSP Toolkit to enable secure, multi-lateral peering. The OSP
|
|
|
|
V1.6 with the OSP Toolkit to enable secure, multi-lateral peering. This
|
|
|
|
Toolkit is an open source implementation of the OSP peering protocol and is
|
|
|
|
document is also available in the Asterisk source package as doc/osp.txt.
|
|
|
|
freely available from www.sipfoundry.org. The OSP standard defined by the
|
|
|
|
The OSP Toolkit is an open source implementation of the OSP peering protocol
|
|
|
|
European Telecommunications Standards Institute (ETSI TS 101 321)
|
|
|
|
and is freely available from www.sipfoundry.org. The OSP standard defined by
|
|
|
|
|
|
|
|
the European Telecommunications Standards Institute (ETSI TS 101 321)
|
|
|
|
www.esti.org. If you have questions or need help, building Asterisk with the
|
|
|
|
www.esti.org. If you have questions or need help, building Asterisk with the
|
|
|
|
OSP Toolkit, please post your question on the OSP mailing list at
|
|
|
|
OSP Toolkit, please post your question on the OSP mailing list at
|
|
|
|
https://list.sipfoundry.org/mailman/listinfo/osp.
|
|
|
|
https://list.sipfoundry.org/mailman/listinfo/osp.
|
|
|
|
|
|
|
|
|
|
|
|
2 OSP Toolkit
|
|
|
|
2 OSP Toolkit
|
|
|
|
Please reference the OSP Toolkit document "How to Build and Test the OSP
|
|
|
|
Please reference the OSP Toolkit document "How to Build and Test the OSP
|
|
|
|
Toolkit" available from www.sipfoundry.org/OSP/OSPclient .
|
|
|
|
Toolkit" available from https://www.sipfoundry.org/OSPclient.
|
|
|
|
|
|
|
|
|
|
|
|
2.1 Build OSP Toolkit
|
|
|
|
2.1 Build OSP Toolkit
|
|
|
|
The software listed below is required ti build and use the OSP Toolkit:
|
|
|
|
The software listed below is required to build and use the OSP Toolkit:
|
|
|
|
* OpenSSL (required for building) - Open Source SSL protocol and
|
|
|
|
* OpenSSL (required for building) - Open Source SSL protocol and Cryptographic
|
|
|
|
Cryptographic Algorithms (version 0.9.7g recommended) from www.openssl.org.
|
|
|
|
Algorithms (version 0.9.7g recommended) from www.openssl.org. Pre-compiled
|
|
|
|
Pre-compiled OpenSSL binary packages are not recommended because of the
|
|
|
|
OpenSSL binary packages are not recommended because of the binary
|
|
|
|
binary compatibility issue.
|
|
|
|
compatibility issue.
|
|
|
|
* Perl (required for building) - A programming language used by OpenSSL for
|
|
|
|
* Perl (required for building) - A programming language used by OpenSSL for
|
|
|
|
compilation. Any version of Perl should work. One version of Perl is
|
|
|
|
compilation. Any version of Perl should work. One version of Perl is
|
|
|
|
available from www.activestate.com/ActivePerl. If pre-compiled OpenSSL
|
|
|
|
available from www.activestate.com/Products/ActivePer. If pre-compiled
|
|
|
|
packages are used, Perl package is not required.
|
|
|
|
OpenSSL packages are used, Perl package is not required.
|
|
|
|
* C compiler (required for building) - Any C compiler should work. The GNU
|
|
|
|
* C compiler (required for building) - Any C compiler should work. The GNU
|
|
|
|
Compiler Collection from www.gnu.org is routinely used for building the OSP
|
|
|
|
Compiler Collection from www.gnu.org is routinely used for building the OSP
|
|
|
|
Toolkit for testing.
|
|
|
|
Toolkit for testing.
|
|
|
|
* OSP Server (required for testing) - Access to any OSP server should work.
|
|
|
|
* OSP Server (required for testing) - Access to any OSP server should work.
|
|
|
|
Open source OSP servers are available from www.sipfoundry.org/osp, a free
|
|
|
|
Open source OSP servers are available from https://www.sipfoundry.org/OSP,
|
|
|
|
commercial OSP server may be downloaded from www.transnexus.com and an OSP
|
|
|
|
or go to http://www.transnexus.com/OSP%20Toolkit/Peering_Server/VoIP_Peering_Server.htm
|
|
|
|
server osptestserver.transnexus.com is freely available on the internet for
|
|
|
|
to download a free commercial OSP server.
|
|
|
|
testing for testing. Please contact support@transnexus.com for testing access
|
|
|
|
|
|
|
|
to osptestserver.transnexus.com.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.1.1 Unpacking the Toolkit
|
|
|
|
2.1.1 Unpacking the Toolkit
|
|
|
|
After downloading the OSP Toolkit (version 3.3.4 or later release) from
|
|
|
|
After downloading the OSP Toolkit (version 3.3.6 or later release) from
|
|
|
|
www.sipfoundry.org, perform the following steps in order:
|
|
|
|
www.sipfoundry.org, perform the following steps in order:
|
|
|
|
1) Copy the OSP Toolkit distribution into the directory where it will reside,
|
|
|
|
1) Copy the OSP Toolkit distribution into the directory where it will reside.
|
|
|
|
say /usr/src.
|
|
|
|
The default directory for the OSP Toolkit is /usr/src.
|
|
|
|
2) Un-package the distribution file by executing the following command:
|
|
|
|
2) Un-package the distribution file by executing the following command:
|
|
|
|
gunzip -c OSPToolkit-###.tar.gz | tar xvf -
|
|
|
|
gunzip -c OSPToolkit-###.tar.gz | tar xvf -
|
|
|
|
Where ### is the version number separated by underlines. For example, if
|
|
|
|
Where ### is the version number separated by underlines. For example, if
|
|
|
|
the version is 3.3.4, then the above command would be:
|
|
|
|
the version is 3.3.6, then the above command would be:
|
|
|
|
gunzip -c OSPToolkit-3_3_4.tar.gz | tar xvf -
|
|
|
|
gunzip -c OSPToolkit-3_3_6.tar.gz | tar xvf -
|
|
|
|
A new directory (TK-3_3_4-20051103) will be created within the same directory
|
|
|
|
A new directory (TK-3_3_6-20060303) will be created within the same
|
|
|
|
as the tar file.
|
|
|
|
directory as the tar file.
|
|
|
|
3) Go to the TK-3_3_4-20051103 directory by running this command:
|
|
|
|
3) Go to the TK-3_3_6-20060303 directory by running this command:
|
|
|
|
cd TK-3_3_4-20051103
|
|
|
|
cd TK-3_3_6-20060303
|
|
|
|
Within this directory, you will find directories and files similar to what is
|
|
|
|
Within this directory, you will find directories and files similar to what
|
|
|
|
listed below if the command "ls -F" is executed):
|
|
|
|
is listed below if the command "ls -F" is executed):
|
|
|
|
ls -F
|
|
|
|
ls -F
|
|
|
|
enroll/
|
|
|
|
enroll/
|
|
|
|
RelNotes.txt lib/
|
|
|
|
RelNotes.txt lib/
|
|
|
@ -95,18 +98,17 @@ TransNexus and OSP Secured are trademarks of TransNexus, Inc.
|
|
|
|
6) Copy the OpenSSL library files (libcrypto.a and libssl.a) into the lib
|
|
|
|
6) Copy the OpenSSL library files (libcrypto.a and libssl.a) into the lib
|
|
|
|
directory within the osptoolkit directory. The OpenSSL library files are
|
|
|
|
directory within the osptoolkit directory. The OpenSSL library files are
|
|
|
|
located under the openssl directory.
|
|
|
|
located under the openssl directory.
|
|
|
|
Note: Since the Asterisk requires the OpenSSL package. If the OpenSSL package
|
|
|
|
Note: Since the Asterisk requires the OpenSSL package. If the OpenSSL
|
|
|
|
has been installed, 4~6 are not necessary.
|
|
|
|
package has been installed, steps 4 through 6 are not necessary.
|
|
|
|
|
|
|
|
|
|
|
|
2.1.3 Building the OSP Toolkit
|
|
|
|
|
|
|
|
7) Optionally, change the install directory of the OSP Toolkit. Open the
|
|
|
|
7) Optionally, change the install directory of the OSP Toolkit. Open the
|
|
|
|
Makefile in the /usr/src/TK-3_3_4-20051103/src directory, look for the
|
|
|
|
Makefile in the /usr/src/TK-3_3_6-20060303/src directory, look for the
|
|
|
|
install path variable - INSTALL_PATH, and edit it to be anywhere you want
|
|
|
|
install path variable - INSTALL_PATH, and edit it to be anywhere you want
|
|
|
|
(defaults /usr/local).
|
|
|
|
(defaults /usr/local).
|
|
|
|
Note: Please change the install path variable only if you are familiar with
|
|
|
|
Note: Please change the install path variable only if you are familiar
|
|
|
|
both the OSP Toolkit and the Asterisk. Otherwise, it may case that the
|
|
|
|
with both the OSP Toolkit and the Asterisk.
|
|
|
|
Asterisk does not support the OSP protocol.
|
|
|
|
|
|
|
|
8) From within the OSP Toolkit directory (/usr/src/TK-3_3_4-20051103), start
|
|
|
|
2.1.3 Building the OSP Toolkit
|
|
|
|
|
|
|
|
8) From within the OSP Toolkit directory (/usr/src/TK-3_3_6-20060303), start
|
|
|
|
the compilation script by executing the following commands:
|
|
|
|
the compilation script by executing the following commands:
|
|
|
|
cd src
|
|
|
|
cd src
|
|
|
|
make clean; make build
|
|
|
|
make clean; make build
|
|
|
@ -114,63 +116,55 @@ TransNexus and OSP Secured are trademarks of TransNexus, Inc.
|
|
|
|
2.1.4 Installing the OSP Toolkit
|
|
|
|
2.1.4 Installing the OSP Toolkit
|
|
|
|
The header files and the library of the OSP Toolkit should be installed.
|
|
|
|
The header files and the library of the OSP Toolkit should be installed.
|
|
|
|
Otherwise, you must specify the OSP Toolkit path for the Asterisk.
|
|
|
|
Otherwise, you must specify the OSP Toolkit path for the Asterisk.
|
|
|
|
9) Use the same script to install the Toolkit.
|
|
|
|
9) Use the make script to install the Toolkit.
|
|
|
|
make install
|
|
|
|
make install
|
|
|
|
The make script is also used to install the OSP Toolkit header files and the
|
|
|
|
The make script is also used to install the OSP Toolkit header files and
|
|
|
|
library into the INSTALL_PATH specified in the Makefile.
|
|
|
|
the library into the INSTALL_PATH specified in the Makefile.
|
|
|
|
Note: Please make sure you have the rights to access the INSTALL_PATH
|
|
|
|
Note: Please make sure you have the rights to access the INSTALL_PATH
|
|
|
|
directory. For example, in order to access /usr/local directory, normally,
|
|
|
|
directory. For example, in order to access /usr/local directory,
|
|
|
|
you should be root.
|
|
|
|
root privileges are required.
|
|
|
|
By default, the OSP Toolkit is compiled in the production mode. The following
|
|
|
|
|
|
|
|
table identifies which default features are activated with each compile
|
|
|
|
|
|
|
|
option:
|
|
|
|
|
|
|
|
Default Feature Production Development
|
|
|
|
|
|
|
|
Debug Information Displayed No Yes
|
|
|
|
|
|
|
|
The "Development" option is recommended for a first time build. The CFLAGS
|
|
|
|
|
|
|
|
definition in the Makefile must be modified to build in development mode.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.1.5 Building the Enrollment Utility
|
|
|
|
2.1.5 Building the Enrollment Utility
|
|
|
|
Device enrollment is the process of establishing a trusted cryptographic
|
|
|
|
Device enrollment is the process of establishing a trusted cryptographic
|
|
|
|
relationship between the VoIP device and the OSP Server. The Enroll program
|
|
|
|
relationship between the VoIP device and the OSP Server. The Enroll program is
|
|
|
|
is a utility application for establishing a trusted relationship between and
|
|
|
|
a utility application for establishing a trusted relationship between an OSP
|
|
|
|
OSP client and an OSP server. Please see the document "Device Enrollment" at
|
|
|
|
client and an OSP server. Please see the document "Device Enrollment" at
|
|
|
|
www.sipfoundry.org/OSP/OSPclient for more information about the enroll
|
|
|
|
https://www.sipfoundry.org/OSPclient for more information about the enroll
|
|
|
|
application.
|
|
|
|
application.
|
|
|
|
10) From within the OSP Toolkit directory (/usr/src/TK-3_3_4-20051103),
|
|
|
|
10) From within the OSP Toolkit directory (example:
|
|
|
|
execute the following commands at the command prompt:
|
|
|
|
/usr/src/TK-3_3_6-20060303), execute the following commands at the command
|
|
|
|
|
|
|
|
prompt:
|
|
|
|
cd enroll
|
|
|
|
cd enroll
|
|
|
|
make clean; make linux
|
|
|
|
make clean; make linux
|
|
|
|
Compilation is successful if there are no errors anywhere in the compiler
|
|
|
|
Compilation is successful if there are no errors in the compiler output.
|
|
|
|
output. The enroll program is now located in the
|
|
|
|
The enroll program is now located in the OSP Toolkit/bin directory
|
|
|
|
/usr/src/TK-3_3_4-20051103/bin directory. By this point, a fully functioning
|
|
|
|
(example: /usr/src/ TK-3_3_6-20060303/bin).
|
|
|
|
OSP Toolkit should have been successfully built.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.2 Obtain Crypto Files
|
|
|
|
2.2 Obtain Crypto Files
|
|
|
|
The OSP module in Asterisk requires three crypto files containing local
|
|
|
|
The OSP module in Asterisk requires three crypto files containing a local
|
|
|
|
certificate (localcert.pem), private key (pkey.pem), and CA certificate
|
|
|
|
certificate (localcert.pem), private key (pkey.pem), and CA certificate
|
|
|
|
(cacert_0.pem). Asterisk will try to load the files from the Asterisk
|
|
|
|
(cacert_0.pem). Asterisk will try to load the files from the Asterisk
|
|
|
|
public/private key directory - /var/lib/asterisk/key. If the files are not
|
|
|
|
public/private key directory - /var/lib/asterisk/keys. If the files are not
|
|
|
|
present, the OSP module will not start and the Asterisk will not support the
|
|
|
|
present, the OSP module will not start and the Asterisk will not support the
|
|
|
|
OSP protocol. Use the enroll.sh script from the toolkit distribution to
|
|
|
|
OSP protocol. Use the enroll.sh script from the toolkit distribution to
|
|
|
|
enroll the Asterisk OSP module with an OSP server to obtain the crypto files.
|
|
|
|
enroll Asterisk with an OSP server and obtain the crypto files. Documentation
|
|
|
|
Documentation explaining how to use the enroll.sh script (Device Enrollment)
|
|
|
|
explaining how to use the enroll.sh script (Device Enrollment) to enroll with
|
|
|
|
to enroll with an OSP server is available at
|
|
|
|
an OSP server is available at https://www.sipfoundry.org/OSPclient. Copy the
|
|
|
|
www.sipfoundry.org/OSP/ospclient. Copy the files file generated by the
|
|
|
|
files generated by the enrollment process to the Asterisk
|
|
|
|
enrollment process to the Asterisk configuration directory.
|
|
|
|
/var/lib/asterisk/keys directory.
|
|
|
|
Note: The osptestserver.transnexus.com is configured only for sending and
|
|
|
|
Note: The osptestserver.transnexus.com is configured only for sending and
|
|
|
|
receiving non-SSL messages, and issuing signed tokens. If you need help, post
|
|
|
|
receiving non-SSL messages, and issuing signed tokens. If you need help,
|
|
|
|
a message on the OSP mailing list of www.sipfoundry.org or send an e-mail to
|
|
|
|
post a message on the OSP mailing list of www.sipfoundry.org or send an
|
|
|
|
support@transnexus.com.
|
|
|
|
e-mail to support@transnexus.com.
|
|
|
|
The enroll.sh script takes the domain name or IP addresses of the OSP servers
|
|
|
|
The enroll.sh script takes the domain name or IP addresses of the OSP servers
|
|
|
|
that the OSP Toolkit needs to enroll with as arguments, and then generates
|
|
|
|
that the OSP Toolkit needs to enroll with as arguments, and then generates pem
|
|
|
|
pem files - cacert_#.pem, certreq.pem, localcert.pem, and pkey.pem. The '#'
|
|
|
|
files - cacert_#.pem, certreq.pem, localcert.pem, and pkey.pem. The "#" in the
|
|
|
|
in the cacert file name is used to differentiate the ca certificate file
|
|
|
|
cacert file name is used to differentiate the ca certificate file names for
|
|
|
|
names for the various SP's (OSP servers). If only one address is provided at
|
|
|
|
the various SP's (OSP servers). If only one address is provided at the command
|
|
|
|
the command line, cacert_0.pem will be generated. If 2 addresses are provided
|
|
|
|
line, cacert_0.pem will be generated. If 2 addresses are provided at the
|
|
|
|
at the command line, 2 files will be generated - cacert_0.pem and
|
|
|
|
command line, 2 files will be generated - cacert_0.pem and cacert_1.pem, one
|
|
|
|
cacert_1.pem, one for each SP. The example below shows the usage when the
|
|
|
|
for each SP (OSP server). The example below shows the usage when the client
|
|
|
|
client is registering with osptestserver.transnexus.com. If all goes well,
|
|
|
|
is registering with osptestserver.transnexus.com.
|
|
|
|
the following text will be displayed. The gray boxes indicate required input.
|
|
|
|
|
|
|
|
./enroll.sh osptestserver.transnexus.com
|
|
|
|
./enroll.sh osptestserver.transnexus.com
|
|
|
|
Generating a 512 bit RSA private key
|
|
|
|
Generating a 512 bit RSA private key
|
|
|
|
........................++++++++++++
|
|
|
|
........................++++++++++++
|
|
|
@ -213,69 +207,359 @@ TransNexus and OSP Secured are trademarks of TransNexus, Inc.
|
|
|
|
verify return:1
|
|
|
|
verify return:1
|
|
|
|
The certificate request was successful.
|
|
|
|
The certificate request was successful.
|
|
|
|
Error Code returned from localcert command : 0
|
|
|
|
Error Code returned from localcert command : 0
|
|
|
|
The files generated should be copied to the /var/lib/asterisk/key
|
|
|
|
The files generated should be copied to the /var/lib/asterisk/keys directory.
|
|
|
|
directory.
|
|
|
|
|
|
|
|
Note: The script enroll.sh requires AT&T korn shell (ksh) or any of its
|
|
|
|
Note: The script enroll.sh requires AT&T korn shell (ksh) or any of its
|
|
|
|
compatible variants. The /usr/src/TK-3_3_4-20051103/bin directory should be
|
|
|
|
compatible variants. The /usr/src/TK-3_3_6-20060303/bin directory should
|
|
|
|
in the PATH variable. Otherwise, enroll.sh cannot find the enroll file.
|
|
|
|
be in the PATH variable. Otherwise, enroll.sh cannot find the enroll
|
|
|
|
|
|
|
|
file.
|
|
|
|
|
|
|
|
|
|
|
|
3 Asterisk
|
|
|
|
3 Asterisk
|
|
|
|
|
|
|
|
In Asterisk, all OSP support is implemented as dial plan functions. In
|
|
|
|
|
|
|
|
Asterisk V1.6, all combinations of routing between OSP and non-OSP enabled
|
|
|
|
|
|
|
|
networks using any combination of SIP, H.323 and IAX protocols are fully
|
|
|
|
|
|
|
|
supported. Section 3.1 describes the three easy steps to add OSP support to
|
|
|
|
|
|
|
|
Asterisk:
|
|
|
|
|
|
|
|
1. Build Asterisk with OSP Toolkit
|
|
|
|
|
|
|
|
2. Configure osp.conf file
|
|
|
|
|
|
|
|
3. Cut and paste to extensions.conf
|
|
|
|
|
|
|
|
Sections 3.2 and 3.3 provide a detailed explanation of OSP dial plan functions
|
|
|
|
|
|
|
|
and configuration examples. The detailed information provided in Sections 3.2
|
|
|
|
|
|
|
|
and 3.3 is not required for operating Asterisk with OSP, but may be helpful to
|
|
|
|
|
|
|
|
developers who want to customize their Asterisk OSP implementation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.1 Configure for OSP Support
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.1.1 Build Asterisk with OSP Toolkit
|
|
|
|
|
|
|
|
The first step is to build Asterisk with the OSP Toolkit. If the OSP Toolkit
|
|
|
|
|
|
|
|
is installed in the default install directory, /usr/local, no additional
|
|
|
|
|
|
|
|
configuration is required. Compile Asterisk according to the instructions
|
|
|
|
|
|
|
|
provided with the Asterisk distribution.
|
|
|
|
|
|
|
|
If the OSP Toolkit is installed in another directory, such as /myosp, Asterisk
|
|
|
|
|
|
|
|
must be configured with the location of the OSP Toolkit. See the example
|
|
|
|
|
|
|
|
below.
|
|
|
|
|
|
|
|
--with-osptk=/myosp
|
|
|
|
|
|
|
|
Note: Please change the install path only if you familiar with both the OSP
|
|
|
|
|
|
|
|
Toolkit and the Asterisk. Otherwise, the change may result in Asterisk
|
|
|
|
|
|
|
|
not supporting the OSP protocol.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.1.2 osp.conf
|
|
|
|
|
|
|
|
The /etc/asterisk/osp.conf file, shown below, contains configuration
|
|
|
|
|
|
|
|
parameters for using OSP. Two parameters, servicepoint and source must be
|
|
|
|
|
|
|
|
configured. The default values for all other parameters will work well for
|
|
|
|
|
|
|
|
standard OSP implementations.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Open Settlement Protocol Sample Configuration File
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; This file contains configuration of OSP server providers that
|
|
|
|
|
|
|
|
; are used by the Asterisk OSP module. The section "general" is
|
|
|
|
|
|
|
|
; reserved for global options. All other sections describe specific
|
|
|
|
|
|
|
|
; OSP Providers. The provider "default" is used when no provider is
|
|
|
|
|
|
|
|
; otherwise specified.
|
|
|
|
|
|
|
|
:
|
|
|
|
|
|
|
|
: The "servicepoint" and "source" parameters must be configured. For
|
|
|
|
|
|
|
|
; most implementations the other parameters in this file can be left
|
|
|
|
|
|
|
|
; unchanged.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
[general]
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Enable cryptographic acceleration hardware.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
accelerate=no
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Defines the status of tokens that Asterisk will validate.
|
|
|
|
|
|
|
|
; 0 - signed tokens only
|
|
|
|
|
|
|
|
; 1 - unsigned tokens only
|
|
|
|
|
|
|
|
; 2 - both signed and unsigned
|
|
|
|
|
|
|
|
; The default value is 0, i.e. the Asterisk will only validate signed
|
|
|
|
|
|
|
|
; tokens.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
tokenformat=0
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
[default]
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; List all service points (OSP servers) for this provider. Use
|
|
|
|
|
|
|
|
; either domain name or IP address. Most OSP servers use port 1080.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
;servicepoint=http://osptestserver.transnexus.com:1080/osp
|
|
|
|
|
|
|
|
servicepoint=http://OSP server IP:1080/osp
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Define the "source" device for requesting OSP authorization.
|
|
|
|
|
|
|
|
: This value is usually the domain name or IP address of the
|
|
|
|
|
|
|
|
: the Asterisk server.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
;source=domain name or [IP address in brackets]
|
|
|
|
|
|
|
|
source=[host IP]
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Define path and file name of crypto files.
|
|
|
|
|
|
|
|
; The default path for crypto file is /var/lib/asterisk/keys. If no
|
|
|
|
|
|
|
|
; path is defined, crypto files should be in
|
|
|
|
|
|
|
|
; /var/lib/asterisk/keys directory.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Specify the private key file name.
|
|
|
|
|
|
|
|
; If this parameter is unspecified or not present, the default name
|
|
|
|
|
|
|
|
; will be the osp.conf section name followed by "-privatekey.pem"
|
|
|
|
|
|
|
|
; (for example: default-privatekey.pem)
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
privatekey=pkey.pem
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Specify the local certificate file.
|
|
|
|
|
|
|
|
; If this parameter is unspecified or not present, the default name
|
|
|
|
|
|
|
|
; will be the osp.conf section name followed by "- localcert.pem "
|
|
|
|
|
|
|
|
; (for example: default-localcert.pem)
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
localcert=localcert.pem
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Specify one or more Certificate Authority key file names. If none
|
|
|
|
|
|
|
|
; are listed, a single Certificate Authority key file name is added
|
|
|
|
|
|
|
|
; with the default name of the osp.conf section name followed by
|
|
|
|
|
|
|
|
; "-cacert_0.pem " (for example: default-cacert_0.pem)
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
cacert=cacert_0.pem
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Configure parameters for OSP communication between Asterisk OSP
|
|
|
|
|
|
|
|
; client and OSP servers.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; maxconnections: Max number of simultaneous connections to the
|
|
|
|
|
|
|
|
; provider OSP server (default=20)
|
|
|
|
|
|
|
|
; retrydelay: Extra delay between retries (default=0)
|
|
|
|
|
|
|
|
; retrylimit: Max number of retries before giving up (default=2)
|
|
|
|
|
|
|
|
; timeout: Timeout for response in milliseconds (default=500)
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
maxconnections=20
|
|
|
|
|
|
|
|
retrydelay=0
|
|
|
|
|
|
|
|
retrylimit=2
|
|
|
|
|
|
|
|
timeout=500
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Set the authentication policy.
|
|
|
|
|
|
|
|
; 0 - NO - Accept all calls.
|
|
|
|
|
|
|
|
; 1 - YES - Accept calls with valid token or no token.
|
|
|
|
|
|
|
|
; Block calls with invalid token.
|
|
|
|
|
|
|
|
; 2 - EXCLUSIVE - Accept calls with valid token.
|
|
|
|
|
|
|
|
; Block calls with invalid token or no token.
|
|
|
|
|
|
|
|
; Default is 1,
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
authpolicy=1
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Set the default destination protocol. The OSP module supports
|
|
|
|
|
|
|
|
; SIP, H323, and IAX protocols. The default protocol is set to SIP.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
defaultprotocol=SIP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.1.3 extensions.conf
|
|
|
|
|
|
|
|
OSP functions are implemented as dial plan functions in the extensions.conf
|
|
|
|
|
|
|
|
file. To add OSP support to your Asterisk server, simply copy and paste the
|
|
|
|
|
|
|
|
text box below to your extensions.conf file. These functions will enable your
|
|
|
|
|
|
|
|
Asterisk server to support all OSP call scenarios. Configuration of your
|
|
|
|
|
|
|
|
Asterisk server for OSP is now complete.
|
|
|
|
|
|
|
|
[globals]
|
|
|
|
|
|
|
|
DIALOUT=Zap/1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[SrcGW] ; OSP Source Gateway
|
|
|
|
|
|
|
|
exten => _XXXX.,1,NoOp(OSPSrcGW)
|
|
|
|
|
|
|
|
; Set calling number if necessary
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(numner)=1234567890)
|
|
|
|
|
|
|
|
; OSP lookup using default provider, if fail/error jump to lookup+101
|
|
|
|
|
|
|
|
exten => _XXXX.,n(lookup),OSPLookup(${EXTEN}||j)
|
|
|
|
|
|
|
|
; Deal with outbound call according to protocol
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Macro(outbound)
|
|
|
|
|
|
|
|
; Dial to destination, 60 timeout, with call duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},60,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
|
|
|
|
; Wait 1 second
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Wait,1
|
|
|
|
|
|
|
|
; Hangup
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
|
|
|
|
; Deal with OSPLookup fail/error
|
|
|
|
|
|
|
|
exten => _XXXX.,lookup+101,Hangup
|
|
|
|
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
|
|
|
|
; OSP report usage
|
|
|
|
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[DstGW] ; OSP Destination Gateway
|
|
|
|
|
|
|
|
exten => _XXXX.,1,NoOp(OSPDstGW)
|
|
|
|
|
|
|
|
; Deal with inbound call according to protocol
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Macro(inbound)
|
|
|
|
|
|
|
|
; Validate token using default provider, if fail/error jump to auth+101
|
|
|
|
|
|
|
|
exten => _XXXX.,n(auth),OSPAuth(|j)
|
|
|
|
|
|
|
|
; Ringing
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Ringing
|
|
|
|
|
|
|
|
; Wait 1 second
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Wait,1
|
|
|
|
|
|
|
|
; Check inbound call duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,n,GoToIf($[${OSPINTIMELIMIT}=0]?100:200)
|
|
|
|
|
|
|
|
; Without duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,100,Dial(${DIALOUT},15,o)
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Goto(1000)
|
|
|
|
|
|
|
|
; With duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,200,Dial(${DIALOUT},15,oL($[${OSPINTIMELIMIT}*1000]))
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Goto(1000)
|
|
|
|
|
|
|
|
; Wait 1 second
|
|
|
|
|
|
|
|
exten => _XXXX.,1000,Wait,1
|
|
|
|
|
|
|
|
; Hangup
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
|
|
|
|
; Deal with OSPAuth fail/error
|
|
|
|
|
|
|
|
exten => _XXXX.,auth+101,Hangup
|
|
|
|
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
|
|
|
|
; OSP report usage
|
|
|
|
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[GeneralProxy] ; Proxy
|
|
|
|
|
|
|
|
exten => _XXXX.,1,NoOp(OSP-GeneralProxy)
|
|
|
|
|
|
|
|
; Deal with inbound call according to protocol
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Macro(inbound)
|
|
|
|
|
|
|
|
; Validate token using default provider, if fail/error jump to auth+101
|
|
|
|
|
|
|
|
exten => _XXXX.,n(auth),OSPAuth(|j)
|
|
|
|
|
|
|
|
; OSP lookup using default provider, if fail/error jump to lookup+101
|
|
|
|
|
|
|
|
exten => _XXXX.,n(lookup),OSPLookup(${EXTEN}||j)
|
|
|
|
|
|
|
|
; Deal with outbound call according to protocol
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Macro(outbound)
|
|
|
|
|
|
|
|
; Dial to destination, 14 timeout, with call duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},14,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
|
|
|
|
; OSP lookup next destination using default provider, if fail/error jump to next1+101
|
|
|
|
|
|
|
|
exten => _XXXX.,n(next1),OSPNext(${HANGUPCAUSE}||j)
|
|
|
|
|
|
|
|
; Deal with outbound call according to protocol
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Macro(outbound)
|
|
|
|
|
|
|
|
; Dial to destination, 15 timeout, with call duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},15,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
|
|
|
|
; OSP lookup next destination using default provider, if fail/error jump to next2+101
|
|
|
|
|
|
|
|
exten => _XXXX.,n(next2),OSPNext(${HANGUPCAUSE}||j)
|
|
|
|
|
|
|
|
; Deal with outbound call according to protocol
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Macro(outbound)
|
|
|
|
|
|
|
|
; Dial to destination, 16 timeout, with call duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},16,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
|
|
|
|
; Hangup
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
|
|
|
|
; Deal with OSPAuth fail/error
|
|
|
|
|
|
|
|
exten => _XXXX.,auth+101,Hangup
|
|
|
|
|
|
|
|
; Deal with OSPLookup fail/error
|
|
|
|
|
|
|
|
exten => _XXXX.,lookup+101,Hangup
|
|
|
|
|
|
|
|
; Deal with OSPNext fail/error
|
|
|
|
|
|
|
|
exten => _XXXX.,next1+101,Hangup
|
|
|
|
|
|
|
|
; Deal with OSPNext fail/error
|
|
|
|
|
|
|
|
exten => _XXXX.,next2+101,Hangup
|
|
|
|
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
|
|
|
|
; OSP report usage
|
|
|
|
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[macro-inbound]
|
|
|
|
|
|
|
|
exten => s,1,NoOp(inbound)
|
|
|
|
|
|
|
|
; Get inbound protocol
|
|
|
|
|
|
|
|
exten => s,n,Set(CHANTECH=${CUT(CHANNEL,/,1)})
|
|
|
|
|
|
|
|
exten => s,n,GoToIf($["${CHANTECH}"="H323"]?100)
|
|
|
|
|
|
|
|
exten => s,n,GoToIf($["${CHANTECH}"="IAX2"]?200)
|
|
|
|
|
|
|
|
exten => s,n,GoToIf($["${CHANTECH}"="SIP"]?300)
|
|
|
|
|
|
|
|
exten => s,n,GoTo(1000)
|
|
|
|
|
|
|
|
; H323 --------------------------------------------------------
|
|
|
|
|
|
|
|
; Get peer IP
|
|
|
|
|
|
|
|
exten => s,100,Set(OSPPEERIP=${H323CHANINFO(peerip)})
|
|
|
|
|
|
|
|
; Get OSP token
|
|
|
|
|
|
|
|
exten => s,n,Set(OSPINTOKEN=${H323CHANINFO(osptoken)})
|
|
|
|
|
|
|
|
exten => s,n,GoTo(1000)
|
|
|
|
|
|
|
|
; IAX ----------------------------------------------------------
|
|
|
|
|
|
|
|
; Get peer IP
|
|
|
|
|
|
|
|
exten => s,200,Set(OSPPEERIP=${IAXPEER(CURRENTCHANNEL)})
|
|
|
|
|
|
|
|
; Get OSP token
|
|
|
|
|
|
|
|
exten => s,n,Set(OSPINTOKEN=${IAXCHANINFO(osptoken)})
|
|
|
|
|
|
|
|
exten => s,n,GoTo(1000)
|
|
|
|
|
|
|
|
; SIP ----------------------------------------------------------
|
|
|
|
|
|
|
|
; Get peer IP
|
|
|
|
|
|
|
|
exten => s,300,Set(OSPPEERIP=${SIPCHANINFO(peerip)})
|
|
|
|
|
|
|
|
; Get OSP token
|
|
|
|
|
|
|
|
exten => s,n,Set(OSPINTOKEN=${SIP_HEADER(P-OSP-Auth-Token)})
|
|
|
|
|
|
|
|
exten => s,n,GoTo(1000)
|
|
|
|
|
|
|
|
; --------------------------------------------------------------
|
|
|
|
|
|
|
|
exten => s,1000,MacroExit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[macro-outbound]
|
|
|
|
|
|
|
|
exten => s,1,NoOp(outbound)
|
|
|
|
|
|
|
|
; Set calling number which may be translated
|
|
|
|
|
|
|
|
exten => s,n,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
|
|
|
|
; Check destinatio protocol
|
|
|
|
|
|
|
|
exten => s,n,GoToIf($["${OSPTECH}"="H323"]?100)
|
|
|
|
|
|
|
|
exten => s,n,GoToIf($["${OSPTECH}"="IAX2"]?200)
|
|
|
|
|
|
|
|
exten => s,n,GoToIf($["${OSPTECH}"="SIP"]?300)
|
|
|
|
|
|
|
|
; Something wrong
|
|
|
|
|
|
|
|
exten => s,n,Hangup
|
|
|
|
|
|
|
|
exten => s,n,GoTo(1000)
|
|
|
|
|
|
|
|
; H323 --------------------------------------------------------
|
|
|
|
|
|
|
|
; Set call id
|
|
|
|
|
|
|
|
exten => s,100,Set(H323CHANINFO(callid)=${OSPOUTCALLID})
|
|
|
|
|
|
|
|
; Set OSP token
|
|
|
|
|
|
|
|
exten => s,n,Set(H323CHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
|
|
|
|
exten => s,n,GoTo(1000)
|
|
|
|
|
|
|
|
; IAX ----------------------------------------------------------
|
|
|
|
|
|
|
|
; Set OSP token
|
|
|
|
|
|
|
|
exten => s,200,Set(IAXCHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
|
|
|
|
exten => s,n,GoTo(1000)
|
|
|
|
|
|
|
|
; SIP ----------------------------------------------------------
|
|
|
|
|
|
|
|
exten => s,300,GoTo(1000)
|
|
|
|
|
|
|
|
; --------------------------------------------------------------
|
|
|
|
|
|
|
|
exten => s,1000,MacroExit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.1.4 zapata/sip/iax/h323/ooh323.conf
|
|
|
|
|
|
|
|
There is no configuration required for OSP.
|
|
|
|
|
|
|
|
|
|
|
|
3.1 OSP Support Implementation
|
|
|
|
3.2 OSP Dial Plan Functions
|
|
|
|
In Asterisk, all OSP support is implemented as dial plan functions.
|
|
|
|
This section provides a description of each OSP dial plan function.
|
|
|
|
|
|
|
|
|
|
|
|
3.1.1 OSPAuth
|
|
|
|
3.2.1 OSPAuth
|
|
|
|
OSP token validation function.
|
|
|
|
OSP token validation function.
|
|
|
|
Input:
|
|
|
|
Input:
|
|
|
|
* OSPPEERIP: last hop IP address
|
|
|
|
* OSPPEERIP: last hop IP address
|
|
|
|
* OSPINTOKEN: inbound OSP token
|
|
|
|
* OSPINTOKEN: inbound OSP token
|
|
|
|
* provider: OSP service provider configured in osp.conf. If it is empty,
|
|
|
|
* provider: OSP service provider configured in osp.conf. If it is empty, default provider is used.
|
|
|
|
default provider is used.
|
|
|
|
|
|
|
|
* priority jump
|
|
|
|
* priority jump
|
|
|
|
Output:
|
|
|
|
Output:
|
|
|
|
* OSPINHANDLE: inbound OSP transaction handle
|
|
|
|
* OSPINHANDLE: inbound OSP transaction handle
|
|
|
|
* OSPINTIMELIMIT: inbound call duration limit
|
|
|
|
* OSPINTIMELIMIT: inbound call duration limit
|
|
|
|
* OSPAUTHSTATUS: OSPAuth return value. SUCCESS/FAILED/ERROR
|
|
|
|
* OSPAUTHSTATUS: OSPAuth return value. SUCCESS/FAILED/ERROR
|
|
|
|
|
|
|
|
|
|
|
|
3.1.2 OSPLookup
|
|
|
|
3.2.2 OSPLookup
|
|
|
|
OSP lookup function.
|
|
|
|
OSP lookup function.
|
|
|
|
Input:
|
|
|
|
Input:
|
|
|
|
* OSPPEERIP: last hop IP address
|
|
|
|
* OSPPEERIP: last hop IP address
|
|
|
|
* OSPINHANDLE: inbound OSP transaction handle
|
|
|
|
* OSPINHANDLE: inbound OSP transaction handle
|
|
|
|
* OSPINTIMELIMIT: inbound call duration limit
|
|
|
|
* OSPINTIMELIMIT: inbound call duration limit
|
|
|
|
* exten: called number
|
|
|
|
* exten: called number
|
|
|
|
* provider: OSP service provider configured in osp.conf. If it is empty,
|
|
|
|
* provider: OSP service provider configured in osp.conf. If it is empty, default provider is used.
|
|
|
|
default provider is used.
|
|
|
|
|
|
|
|
* priority jump
|
|
|
|
* priority jump
|
|
|
|
|
|
|
|
* callidtypes: Generate call ID for the outbound call. h: H.323; s: SIP; i: IAX. Only h, H.323, has been implemented.
|
|
|
|
Output:
|
|
|
|
Output:
|
|
|
|
* OSPOUTHANDLE: outbound transaction handle
|
|
|
|
* OSPOUTHANDLE: outbound transaction handle
|
|
|
|
* OSPTECH: outbound protocol
|
|
|
|
* OSPTECH: outbound protocol
|
|
|
|
* OSPDEST: outbound destination
|
|
|
|
* OSPDEST: outbound destination IP address
|
|
|
|
|
|
|
|
* OSPCALLED: outbound called nummber
|
|
|
|
* OSPCALLING: outbound calling number
|
|
|
|
* OSPCALLING: outbound calling number
|
|
|
|
* OSPOUTTOKEN: outbound OSP token
|
|
|
|
* OSPOUTTOKEN: outbound OSP token
|
|
|
|
* OSPRESULTS: number of remain destinations
|
|
|
|
* OSPRESULTS: number of remaining destinations
|
|
|
|
* OSPOUTTIMELIMIT: outbound call duration limit
|
|
|
|
* OSPOUTTIMELIMIT: outbound call duration limit
|
|
|
|
|
|
|
|
* OSPOUTCALLIDTYPES: same as input callidtypes
|
|
|
|
|
|
|
|
* OSPOUTCALLID: outbound call ID. Only for H.323
|
|
|
|
|
|
|
|
* OSPDIALSTR: outbound dial string
|
|
|
|
* OSPLOOKUPSTATUS: OSPLookup return value. SUCCESS/FAILED/ERROR
|
|
|
|
* OSPLOOKUPSTATUS: OSPLookup return value. SUCCESS/FAILED/ERROR
|
|
|
|
|
|
|
|
|
|
|
|
3.1.3 OSPNext
|
|
|
|
3.2.3 OSPNext
|
|
|
|
OSP lookup next function.
|
|
|
|
OSP lookup next function.
|
|
|
|
Input:
|
|
|
|
Input:
|
|
|
|
* OSPINHANDLE: inbound transaction handle
|
|
|
|
* OSPINHANDLE: inbound transaction handle
|
|
|
|
* OSPOUTHANDLE: outbound transaction handle
|
|
|
|
* OSPOUTHANDLE: outbound transaction handle
|
|
|
|
* OSPINTIMELIMIT: inbound call duration limit
|
|
|
|
* OSPINTIMELIMIT: inbound call duration limit
|
|
|
|
|
|
|
|
* OSPOUTCALLIDTYPES: types of call ID generated by Asterisk.
|
|
|
|
* OSPRESULTS: number of remain destinations
|
|
|
|
* OSPRESULTS: number of remain destinations
|
|
|
|
* cause: last destination disconnect cause
|
|
|
|
* cause: last destination disconnect cause
|
|
|
|
* priority jump
|
|
|
|
* priority jump
|
|
|
|
Output:
|
|
|
|
Output:
|
|
|
|
* OSPTECH: outbound protocol
|
|
|
|
* OSPTECH: outbound protocol
|
|
|
|
* OSPDEST: outbound destination
|
|
|
|
* OSPDEST: outbound destination IP address
|
|
|
|
|
|
|
|
* OSPCALLED: outbound called number
|
|
|
|
* OSPCALLING: outbound calling number
|
|
|
|
* OSPCALLING: outbound calling number
|
|
|
|
* OSPOUTTOKEN: outbound OSP token
|
|
|
|
* OSPOUTTOKEN: outbound OSP token
|
|
|
|
* OSPRESULTS: number of remain destinations
|
|
|
|
* OSPRESULTS: number of remain destinations
|
|
|
|
* OSPOUTTIMELIMIT: outbound call duration limit
|
|
|
|
* OSPOUTTIMELIMIT: outbound call duration limit
|
|
|
|
|
|
|
|
* OSPOUTCALLID: outbound call ID. Only for H.323
|
|
|
|
|
|
|
|
* OSPDIALSTR: outbound dial string
|
|
|
|
* OSPNEXTSTATUS: OSPLookup return value. SUCCESS/FAILED/ERROR
|
|
|
|
* OSPNEXTSTATUS: OSPLookup return value. SUCCESS/FAILED/ERROR
|
|
|
|
|
|
|
|
|
|
|
|
3.1.4 OSPFinish
|
|
|
|
3.2.4 OSPFinish
|
|
|
|
OSP report usage function.
|
|
|
|
OSP report usage function.
|
|
|
|
Input:
|
|
|
|
Input:
|
|
|
|
* OSPINHANDLE: inbound transaction handle
|
|
|
|
* OSPINHANDLE: inbound transaction handle
|
|
|
@ -288,176 +572,233 @@ TransNexus and OSP Secured are trademarks of TransNexus, Inc.
|
|
|
|
Output:
|
|
|
|
Output:
|
|
|
|
* OSPFINISHSTATUS: OSPLookup return value. SUCCESS/FAILED/ERROR
|
|
|
|
* OSPFINISHSTATUS: OSPLookup return value. SUCCESS/FAILED/ERROR
|
|
|
|
|
|
|
|
|
|
|
|
3.2 Build with OSP Support
|
|
|
|
3.3 extensions.conf Examples
|
|
|
|
If the OSP Toolkit is installed in the default install directory, /usr/local,
|
|
|
|
The extensions.conf file example provided in Section 3.1 is designed to
|
|
|
|
no additional configuration is required. If the OSP Toolkit is installed in
|
|
|
|
handle all OSP call scenarios when Asterisk is used as a source or destination
|
|
|
|
another directory, say /myosp, Asterisk must be configured with the location
|
|
|
|
gateway to the PSTN or as a proxy between VoIP networks. The extenstion.conf
|
|
|
|
of the OSP Toolkit.
|
|
|
|
examples in this section are designed for specific use cases only.
|
|
|
|
--with-osptk=/myosp
|
|
|
|
|
|
|
|
Note: Please change the install path only if you familiar with both the OSP
|
|
|
|
|
|
|
|
Toolkit and the Asterisk. Otherwise, the change may results Asterisk not
|
|
|
|
|
|
|
|
supporting the OSP protocol.
|
|
|
|
|
|
|
|
Now, you can compile Asterisk according to the instructions provided with the
|
|
|
|
|
|
|
|
Asterisk distribution.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3 Configure with OSP Support
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3.1 osp.conf
|
|
|
|
3.3.1 Source Gateway
|
|
|
|
;
|
|
|
|
The examples in this section apply when the Asterisk server is being used as
|
|
|
|
; Open Settlement Protocol Sample Configuration File
|
|
|
|
a TDM to VoIP gateway. Calls originate on the TDM network and are converted
|
|
|
|
;
|
|
|
|
to VoIP by Asterisk. In these cases, the Asterisk server queries an OSP
|
|
|
|
; This file contains configuration of providers that
|
|
|
|
server to find a route to a VoIP destination. When the call ends, Asterisk
|
|
|
|
; are used by the OSP subsystem of Asterisk. The section
|
|
|
|
sends a CDR to the OSP server.
|
|
|
|
; "general" is reserved for global options. Each other
|
|
|
|
For SIP protocol.
|
|
|
|
; section declares an OSP Provider. The provider "default"
|
|
|
|
[SIPSrcGW]
|
|
|
|
; is used when no provider is otherwise specified.
|
|
|
|
exten => _XXXX.,1,NoOp(SIPSrcGW)
|
|
|
|
;
|
|
|
|
; Set calling number if necessary
|
|
|
|
[general]
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(numner)=CallingNumber)
|
|
|
|
;
|
|
|
|
; OSP lookup using default provider, if fail/error jump to lookup+101
|
|
|
|
; Should hardware acceleration be enabled? May not be changed
|
|
|
|
exten => _XXXX.,n(lookup),OSPLookup(${EXTEN}||j)
|
|
|
|
; on a reload.
|
|
|
|
; Set calling number which may be translated
|
|
|
|
;
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
accelerate=no
|
|
|
|
; Dial to destination, 60 timeout, with call duration limit
|
|
|
|
;
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},60,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
; Defines the token format that Asterisk can validate.
|
|
|
|
; Wait 3 seconds
|
|
|
|
; 0 - signed tokens only
|
|
|
|
exten => _XXXX.,n,Wait,3
|
|
|
|
; 1 - unsigned tokens only
|
|
|
|
; Hangup
|
|
|
|
; 2 - both signed and unsigned
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
; The defaults to 0, i.e. the Asterisk can validate signed tokens only.
|
|
|
|
; Deal with OSPLookup fail/error
|
|
|
|
;
|
|
|
|
exten => _XXXX.,lookup+101,Hangup
|
|
|
|
tokenformat=0
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
;
|
|
|
|
; OSP report usage
|
|
|
|
[default]
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
;
|
|
|
|
For IAX protocol.
|
|
|
|
; All paths are presumed to be under /var/lib/asterisk/keys unless
|
|
|
|
[IAXSrcGW]
|
|
|
|
; the path begins with '/'
|
|
|
|
exten => _XXXX.,1,NoOp(IAXSrcGW)
|
|
|
|
;
|
|
|
|
; Set calling number if necessary
|
|
|
|
; Specify the private keyfile. If unspecified, defaults to the name
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(numner)=CallingNumber)
|
|
|
|
; of the section followed by "-privatekey.pem" (e.g. default-privatekey.pem)
|
|
|
|
; OSP lookup using default provider, if fail/error jump to lookup+101
|
|
|
|
;
|
|
|
|
exten => _XXXX.,n(lookup),OSPLookup(${EXTEN}||j)
|
|
|
|
privatekey=pkey.pem
|
|
|
|
; Set outbound OSP token
|
|
|
|
;
|
|
|
|
exten => _XXXX.,n,Set(IAXCHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
; Specify the local certificate file. If unspecified, defaults to
|
|
|
|
; Set calling number which may be translated
|
|
|
|
; the name of the section followed by "-localcert.pem"
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
;
|
|
|
|
; Dial to destination, 60 timeout, with call duration limit
|
|
|
|
localcert=localcert.pem
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},60,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
;
|
|
|
|
; Wait 3 seconds
|
|
|
|
; Specify one or more Certificate Authority keys. If none are listed,
|
|
|
|
exten => _XXXX.,n,Wait,3
|
|
|
|
; a single one is added with the name "-cacert.pem"
|
|
|
|
; Hangup
|
|
|
|
;
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
cacert=cacert_0.pem
|
|
|
|
; Deal with OSPLookup fail/error
|
|
|
|
;
|
|
|
|
exten => _XXXX.,lookup+101,Hangup
|
|
|
|
; Specific parameters can be tuned as well:
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
;
|
|
|
|
; OSP report usage
|
|
|
|
; maxconnections: Max number of simultaneous connections to the provider (default=20)
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
; retrydelay: Extra delay between retries (default=0)
|
|
|
|
For H.323 protocol.
|
|
|
|
; retrylimit: Max number of retries before giving up (default=2)
|
|
|
|
[H323SrcGW]
|
|
|
|
; timeout: Timeout for response in milliseconds (default=500)
|
|
|
|
exten => _XXXX.,1,NoOp(H323SrcGW)
|
|
|
|
;
|
|
|
|
|
|
|
|
maxconnections=20
|
|
|
|
|
|
|
|
retrydelay=0
|
|
|
|
|
|
|
|
retrylimit=2
|
|
|
|
|
|
|
|
timeout=500
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; List all service points for this provider
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
;servicepoint=http://osptestserver.transnexus.com:1080/osp
|
|
|
|
|
|
|
|
servicepoint=http://OSP server IP:1080/osp
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Set the "source" for requesting authorization
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
;source=foo
|
|
|
|
|
|
|
|
source=[host IP]
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
; Set the authentication policy.
|
|
|
|
|
|
|
|
; 0 - NO
|
|
|
|
|
|
|
|
; 1 - YES
|
|
|
|
|
|
|
|
; 2 - EXCLUSIVE
|
|
|
|
|
|
|
|
; Default is 1, validate token but allow no token.
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
authpolicy=1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3.2 zapata/sip/iax.conf
|
|
|
|
|
|
|
|
There is no configuration required for OSP.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3.3 extensions.conf
|
|
|
|
|
|
|
|
An Asterisk box can be configured as OSP source/destination gateway or OSP proxy.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3.3.1 OSP Source Gateway
|
|
|
|
|
|
|
|
[PhoneSrcGW]
|
|
|
|
|
|
|
|
; Set calling number if necessary
|
|
|
|
; Set calling number if necessary
|
|
|
|
exten => _XXXX.,1,Set(CALLERID(numner)=CallingNumber)
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(numner)=CallingNumber)
|
|
|
|
; OSP lookup using default provider, if fail/error jump to 2+101
|
|
|
|
; OSP lookup using default provider, if fail/error jump to lookup+101
|
|
|
|
exten => _XXXX.,2,OSPLookup(${EXTEN}||j)
|
|
|
|
; "h" parameter is used to generate a call id
|
|
|
|
|
|
|
|
; Cisco OSP gateways use this call id to validate OSP token
|
|
|
|
|
|
|
|
exten => _XXXX.,n(lookup),OSPLookup(${EXTEN}||jh)
|
|
|
|
|
|
|
|
; Set outbound call id
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Set(OH323CHANINFO(callid)=${OSPOUTCALLID})
|
|
|
|
|
|
|
|
; Set outbound OSP token
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Set(OH323CHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
; Set calling number which may be translated
|
|
|
|
; Set calling number which may be translated
|
|
|
|
exten => _XXXX.,3,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
; Dial to destination, 60 timeout, with call duration limit
|
|
|
|
; Dial to destination, 60 timeout, with call duration limit
|
|
|
|
exten => _XXXX.,4,Dial(${OSPTECH}/${OSPDEST},60,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},60,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
; Wait 3 seconds
|
|
|
|
; Wait 3 seconds
|
|
|
|
exten => _XXXX.,5,Wait,3
|
|
|
|
exten => _XXXX.,n,Wait,3
|
|
|
|
; Hangup
|
|
|
|
; Hangup
|
|
|
|
exten => _XXXX.,6,Hangup
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
; Deal with OSPLookup fail/error
|
|
|
|
; Deal with OSPLookup fail/error
|
|
|
|
exten => _XXXX.,2+101,Hangup
|
|
|
|
exten => _XXXX.,lookup+101,Hangup
|
|
|
|
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
; OSP report usage
|
|
|
|
; OSP report usage
|
|
|
|
exten => h,1,OSPFinish(${HANGUPCAUSE})
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
3.3.3.2 OSP Destination Gateway
|
|
|
|
|
|
|
|
[PhoneDstGW]
|
|
|
|
3.3.2 Destination Gateway
|
|
|
|
|
|
|
|
The examples in this section apply when Asterisk is being used as a VoIP to
|
|
|
|
|
|
|
|
TDM gateway. VoIP calls are received by Asterisk which validates the OSP
|
|
|
|
|
|
|
|
peering token and completes to the TDM network. After the call ends,
|
|
|
|
|
|
|
|
Asterisk sends a CDR to the OSP server.
|
|
|
|
|
|
|
|
For SIP protocol
|
|
|
|
|
|
|
|
[SIPDstGW]
|
|
|
|
|
|
|
|
exten => _XXXX.,1,NoOp(SIPDstGW)
|
|
|
|
; Get peer IP
|
|
|
|
; Get peer IP
|
|
|
|
exten => _XXXX.,1,Set(OSPPEERIP=${SIPCHANINFO(peerip)})
|
|
|
|
exten => _XXXX.,n,Set(OSPPEERIP=${SIPCHANINFO(peerip)})
|
|
|
|
; Get OSP token
|
|
|
|
; Get OSP token
|
|
|
|
exten => _XXXX.,2,Set(OSPINTOKEN=${SIP_HEADER(P-OSP-Auth-Token)})
|
|
|
|
exten => _XXXX.,n,Set(OSPINTOKEN=${SIP_HEADER(P-OSP-Auth-Token)})
|
|
|
|
; Validate token using default provider, if fail/error jump to 3+101
|
|
|
|
; Validate token using default provider, if fail/error jump to auth+101
|
|
|
|
exten => _XXXX.,3,OSPAuth(|j)
|
|
|
|
exten => _XXXX.,n(auth),OSPAuth(|j)
|
|
|
|
; Ringing
|
|
|
|
; Ringing
|
|
|
|
exten => _XXXX.,4,Ringing
|
|
|
|
exten => _XXXX.,n,Ringing
|
|
|
|
; Wait 1 second
|
|
|
|
; Wait 1 second
|
|
|
|
exten => _XXXX.,5,Wait,1
|
|
|
|
exten => _XXXX.,n,Wait,1
|
|
|
|
; Dial phone, timeout 15 seconds, with call duration limit
|
|
|
|
; Dial phone, timeout 15 seconds, with call duration limit
|
|
|
|
exten => _XXXX.,6,Dial(${DIALOUTANALOG}/${EXTEN:1},15,oL($[${OSPINTIMELIMIT}*1000]))
|
|
|
|
exten => _XXXX.,n,Dial(${DIALOUTANALOG}/${EXTEN:1},15,oL($[${OSPINTIMELIMIT}*1000]))
|
|
|
|
; Wait 3 seconds
|
|
|
|
; Wait 3 seconds
|
|
|
|
exten => _XXXX.,7,Wait,3
|
|
|
|
exten => _XXXX.,n,Wait,3
|
|
|
|
; Hangup
|
|
|
|
; Hangup
|
|
|
|
exten => _XXXX.,8,Hangup
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
; Deal with OSPAuth fail/error
|
|
|
|
; Deal with OSPAuth fail/error
|
|
|
|
exten => _XXXX.,3+101,Hangup
|
|
|
|
exten => _XXXX.,auth+101,Hangup
|
|
|
|
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
; OSP report usage
|
|
|
|
; OSP report usage
|
|
|
|
exten => h,1,OSPFinish(${HANGUPCAUSE})
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
3.3.3.3 Proxy
|
|
|
|
For IAX protocol
|
|
|
|
[GeneralProxy]
|
|
|
|
[IAXDstGW]
|
|
|
|
|
|
|
|
exten => _XXXX.,1,NoOp(IAXDstGW)
|
|
|
|
|
|
|
|
; Get peer IP
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Set(OSPPEERIP=${IAXPEER(CURRENTCHANNEL)})
|
|
|
|
|
|
|
|
; Get OSP token
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Set(OSPINTOKEN=${IAXCHANINFO(osptoken)})
|
|
|
|
|
|
|
|
; Validate token using default provider, if fail/error jump to auth+101
|
|
|
|
|
|
|
|
exten => _XXXX.,n(auth),OSPAuth(|j)
|
|
|
|
|
|
|
|
; Ringing
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Ringing
|
|
|
|
|
|
|
|
; Wait 1 second
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Wait,1
|
|
|
|
|
|
|
|
; Dial phone, timeout 15 seconds, with call duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Dial(${DIALOUTANALOG}/${EXTEN:1},15,oL($[${OSPINTIMELIMIT}*1000]))
|
|
|
|
|
|
|
|
; Wait 3 seconds
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Wait,3
|
|
|
|
|
|
|
|
; Hangup
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
|
|
|
|
; Deal with OSPAuth fail/error
|
|
|
|
|
|
|
|
exten => _XXXX.,auth+101,Hangup
|
|
|
|
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
|
|
|
|
; OSP report usage
|
|
|
|
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
|
|
|
|
For H.323 protocol
|
|
|
|
|
|
|
|
[H323DstGW]
|
|
|
|
|
|
|
|
exten => _XXXX.,1,NoOp(H323DstGW)
|
|
|
|
; Get peer IP
|
|
|
|
; Get peer IP
|
|
|
|
exten => _XXXX.,1,Set(OSPPEERIP=${SIPCHANINFO(peerip)})
|
|
|
|
exten => _XXXX.,n,Set(OSPPEERIP=${H323CHANINFO(peerip)})
|
|
|
|
; Get OSP token
|
|
|
|
; Get OSP token
|
|
|
|
exten => _XXXX.,2,Set(OSPINTOKEN=${SIP_HEADER(P-OSP-Auth-Token)})
|
|
|
|
exten => _XXXX.,n,Set(OSPINTOKEN=${H323CHANINFO(osptoken)})
|
|
|
|
; Validate token using default provider, if fail/error jump to 3+101
|
|
|
|
; Validate token using default provider, if fail/error jump to auth+101
|
|
|
|
exten => _XXXX.,3,OSPAuth(|j)
|
|
|
|
exten => _XXXX.,n(auth),OSPAuth(|j)
|
|
|
|
; OSP lookup using default provider, if fail/error jump to 4+101
|
|
|
|
; Ringing
|
|
|
|
exten => _XXXX.,4,OSPLookup(${EXTEN}||j)
|
|
|
|
exten => _XXXX.,n,Ringing
|
|
|
|
|
|
|
|
; Wait 1 second
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Wait,1
|
|
|
|
|
|
|
|
; Dial phone, timeout 15 seconds, with call duration limit
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Dial(${DIALOUTANALOG}/${EXTEN:1},15,oL($[${OSPINTIMELIMIT}*1000]))
|
|
|
|
|
|
|
|
; Wait 3 seconds
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Wait,3
|
|
|
|
|
|
|
|
; Hangup
|
|
|
|
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
|
|
|
|
; Deal with OSPAuth fail/error
|
|
|
|
|
|
|
|
exten => _XXXX.,auth+101,Hangup
|
|
|
|
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
|
|
|
|
; OSP report usage
|
|
|
|
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3.3 Proxy
|
|
|
|
|
|
|
|
The example in this section applies when Asterisk is a proxy between two VoIP networks.
|
|
|
|
|
|
|
|
[GeneralProxy]
|
|
|
|
|
|
|
|
exten => _XXXX.,1,NoOp(GeneralProxy)
|
|
|
|
|
|
|
|
; Get peer IP and inbound OSP token
|
|
|
|
|
|
|
|
; SIP, un-comment the following two lines.
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OSPPEERIP=${SIPCHANINFO(peerip)})
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OSPINTOKEN=${SIP_HEADER(P-OSP-Auth-Token)})
|
|
|
|
|
|
|
|
; IAX, un-comment the following 2 lines
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OSPPEERIP=${IAXPEER(CURRENTCHANNEL)})
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OSPINTOKEN=${IAXCHANINFO(osptoken)})
|
|
|
|
|
|
|
|
; H323, un-comment the following two lines.
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OSPPEERIP=${OH323CHANINFO(peerip)})
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OSPINTOKEN=${OH323CHANINFO(osptoken)})
|
|
|
|
|
|
|
|
;---------------------------------------------------------------
|
|
|
|
|
|
|
|
; Validate token using default provider, if fail/error jump to auth+101
|
|
|
|
|
|
|
|
exten => _XXXX.,n(auth),OSPAuth(|j)
|
|
|
|
|
|
|
|
; OSP lookup using default provider, if fail/error jump to lookup+101
|
|
|
|
|
|
|
|
; "h" parameter is used to generate a call id for H.323 destinations
|
|
|
|
|
|
|
|
; Cisco OSP gateways use this call id to validate OSP token
|
|
|
|
|
|
|
|
exten => _XXXX.,n(lookup),OSPLookup(${EXTEN}||jh)
|
|
|
|
|
|
|
|
; Set outbound call id and OSP token
|
|
|
|
|
|
|
|
; IAX, un-comment the following line.
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(IAXCHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
|
|
|
|
; H323, un-comment the following two lines.
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OH323CHANINFO(callid)=${OSPOUTCALLID})
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OH323CHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
|
|
|
|
;---------------------------------------------------------------
|
|
|
|
; Set calling number which may be translated
|
|
|
|
; Set calling number which may be translated
|
|
|
|
exten => _XXXX.,5,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
; Dial to 1st destination, 60 timeout, with call duration limit
|
|
|
|
; Dial to destination, 14 timeout, with call duration limit
|
|
|
|
exten => _XXXX.,6,Dial(${OSPTECH}/${OSPDEST},24,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},14,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
; OSP lookup next, if fail/error jump to 7+101
|
|
|
|
; OSP lookup next destination using default provider, if fail/error jump to next1+101
|
|
|
|
exten => _XXXX.,7,OSPNext(${HANGUPCAUSE}||j)
|
|
|
|
exten => _XXXX.,n(next1),OSPNext(${HANGUPCAUSE}||j)
|
|
|
|
|
|
|
|
; Set outbound call id and OSP token
|
|
|
|
|
|
|
|
; IAX, un-comment the following line.
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(IAXCHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
|
|
|
|
; H323, un-comment the following two lines.
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OH323CHANINFO(callid)=${OSPOUTCALLID})
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OH323CHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
|
|
|
|
;---------------------------------------------------------------
|
|
|
|
; Set calling number which may be translated
|
|
|
|
; Set calling number which may be translated
|
|
|
|
exten => _XXXX.,8,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
; Dial to 2nd destination, 60 timeout, with call duration limit
|
|
|
|
; Dial to destination, 15 timeout, with call duration limit
|
|
|
|
exten => _XXXX.,9,Dial(${OSPTECH}/${OSPDEST},25,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},15,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
; OSP lookup next, if fail/error jump to 10+101
|
|
|
|
; OSP lookup next destination using default provider, if fail/error jump to next2+101
|
|
|
|
exten => _XXXX.,10,OSPNext(${HANGUPCAUSE}||j)
|
|
|
|
exten => _XXXX.,n(next2),OSPNext(${HANGUPCAUSE}||j)
|
|
|
|
|
|
|
|
; Set outbound call id and OSP token
|
|
|
|
|
|
|
|
; IAX, un-comment the following line.
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(IAXCHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
|
|
|
|
; H323, un-comment the following two lines.
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OH323CHANINFO(callid)=${OSPOUTCALLID})
|
|
|
|
|
|
|
|
;exten => _XXXX.,n,Set(OH323CHANINFO(osptoken)=${OSPOUTTOKEN})
|
|
|
|
|
|
|
|
;---------------------------------------------------------------
|
|
|
|
; Set calling number which may be translated
|
|
|
|
; Set calling number which may be translated
|
|
|
|
exten => _XXXX.,11,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
exten => _XXXX.,n,Set(CALLERID(number)=${OSPCALLING})
|
|
|
|
; Dial to 3rd destination, 60 timeout, with call duration limit
|
|
|
|
; Dial to destination, 16 timeout, with call duration limit
|
|
|
|
exten => _XXXX.,12,Dial(${OSPTECH}/${OSPDEST},26,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
exten => _XXXX.,n,Dial(${OSPDIALSTR},16,oL($[${OSPOUTTIMELIMIT}*1000]))
|
|
|
|
; Hangup
|
|
|
|
; Hangup
|
|
|
|
exten => _XXXX.,13,Hangup
|
|
|
|
exten => _XXXX.,n,Hangup
|
|
|
|
; Deal with OSPAuth fail/error
|
|
|
|
; Deal with OSPAuth fail/error
|
|
|
|
exten => _XXXX.,3+101,Hangup
|
|
|
|
exten => _XXXX.,auth+101,Hangup
|
|
|
|
; Deal with OSPLookup fail/error
|
|
|
|
; Deal with OSPLookup fail/error
|
|
|
|
exten => _XXXX.,4+101,Hangup
|
|
|
|
exten => _XXXX.,lookup+101,Hangup
|
|
|
|
; Deal with 1st OSPNext fail/error
|
|
|
|
; Deal with 1st OSPNext fail/error
|
|
|
|
exten => _XXXX.,7+101,Hangup
|
|
|
|
exten => _XXXX.,next1+101,Hangup
|
|
|
|
; Deal with 2nd OSPNext fail/error
|
|
|
|
; Deal with 2nd OSPNext fail/error
|
|
|
|
exten => _XXXX.,10+101,Hangup
|
|
|
|
exten => _XXXX.,next2+101,Hangup
|
|
|
|
|
|
|
|
exten => h,1,NoOp()
|
|
|
|
; OSP report usage
|
|
|
|
; OSP report usage
|
|
|
|
exten => h,1,OSPFinish(${HANGUPCAUSE})
|
|
|
|
exten => h,n,OSPFinish(${HANGUPCAUSE})
|
|
|
|