Sei sulla pagina 1di 11

How To Cross Compile Asterisk and Run in Embedded System (Latest 1.8.19 Version) by cawan (cawan[at]ieee.org or chuiyewleong[at]hotmail.

com) on 12/12/2012 Asterisk is a very useful tool in constructing software based PABX server to manage a VoIP system. From the perspective of embedded system designer, it is really meaningful to run the asterisk in embedded platform to build a personal VoIP system in reducing the cost being incurred by making international calls while traveling around the world. In addition, by owning a personal VoIP system, the security and voice quality of our private conversation can be improved significantly. On the other hand, from the perspective of embedded hacker, the small box with asterisk running is an ideal platform to perform spoofing of the real PABX server. Besides, with additional FXO interface, it is possible to hack an automation system as well as the door access system by abusing the DTMF signal. Well, those are all about the applications of asterisk in embedded platform, but we should focus in cross compiling asterisk to run in embedded system in this paper. The embedded platform that we are going to use is MIPS32 24k, 500MHz. Let's start to download the most recent copy of asterisk source code from http://downloads.asterisk.org/pub/telephony/asterisk/. Host:# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz ... ... Host:# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current-patch.gz ... ... Host:# ls asterisk-1.8-current-patch.gz asterisk-1.8-current.tar.gz Host:# tar xzvf asterisk-1.8-current.tar.gz ... ... Host:# gunzip asterisk-1.8-current-patch.gz Host:# ls asterisk-1.8.19.0 asterisk-1.8-current-patch asterisk-1.8-current.tar.gz Host:# cd asterisk-1.8.19.0/ Host:# patch -p0 < ../asterisk-1.8-current-patch The next patch would delete the file asterisk-1.8.18.0-summary.txt, which does not exist! Assume -R? [n] Apply anyway? [n] Skipping patch. 1 out of 1 hunk ignored The next patch would delete the file asterisk-1.8.18.0-summary.html, which does not exist! Assume -R? [n] Apply anyway? [n] Skipping patch. 1 out of 1 hunk ignored patching file build_tools/make_version Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] Skipping patch. ... ... Apply anyway? [n] Skipping patch. 2 out of 2 hunks ignored -- saving rejects to file contrib/scripts/ast_tls_cert.rej patching file contrib/scripts/autosupport Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] Skipping patch. 2 out of 2 hunks ignored -- saving rejects to file contrib/scripts/autosupport.rej Host:# Well, it seems the patch has been applied to the current version of the asterisk source. We just ignore it first. Let's start to cross compile it now. Host:# ./configure --host=mips-linux-gnu --target=mips-linux-gnu \ CC="mips-linux-gnu-gcc -EL" LD="mips-linux-gnu-ld -EL" AR="mips-linux-gnu-ar" \ CXX="mips-linux-gnu-g++ -EL" ...

... checking for tgetent in -ltermcap... no checking for tgetent in -ltinfo... no checking for initscr in -lcurses... no checking for initscr in -lncurses... no configure: error: *** termcap support not found (on modern systems, this typically means the ncurses development package is missing) Host:# Unfortunately, the libtermcap makes trouble again... Since we already have experience in cross compiling libtermcap, we try to use libncurses this time. Let's start. Host:# wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz ... ... Host:# tar xzvf ncurses-5.9.tar.gz ... ... Host:# cd ncurses-5.9 Host:# ./configure --host=mips-linux-gnu --target=mips-linux-gnu \ CC="mips-linux-gnu-gcc -EL" LD="mips-linux-gnu-ld -EL" CXX="mips-linux-gnu-g++ -EL" ... ... Host:# make ... ... Host:# make install DESTDIR=$PWD/cawanmipsncurses ... ... Host:# cd cawanmipsncurses/ Host:# ls usr Host:# cd usr/ Host:# ls bin include lib man share Host:# cd lib Host:# ls libcurses.a libform_g.a libmenu_g.a libncurses++.a libpanel.a terminfo libform.a libmenu.a libncurses.a libncurses_g.a libpanel_g.a Host:# cd .. Host:# pwd /home/smp383/mips-4.3/bin/asterisk/testasterisk/ncurses-5.9/cawanmipsncurses/usr Host:# Nice, we have libncurses right now. Let's cross compile the asterisk again by specifying the path of libncurses explicitly. Host:# make distclean ... ... Host:# ./configure --host=mips-linux-gnu --target=mips-linux-gnu CC="mips-linux-gnu-gcc -EL" \ LD="mips-linux-gnu-ld -EL" AR="mips-linux-gnu-ar" CXX="mips-linux-gnu-g++ -EL" \ --with-ncurses=/home/smp383/mips-4.3/bin/asterisk/testasterisk/ncurses-5.9/cawanmipsncurses/usr ... ... checking for xml2-config... no configure: *** XML documentation will not be available because the 'libxml2' development package is missing. configure: *** Please run the 'configure' script with the '--disable-xmldoc' parameter option configure: *** or install the 'libxml2' development package. Host:# make make: -F.: Command not found /bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option -

/bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option /bin/sh: Illegal option **** **** The configure script must be executed before running 'make'. **** Please run "./configure". **** make: *** [makeopts] Error 1 Well, it seems we should add --disable-xmldoc in configure tool. Let's try again. Host:# make distclean ... ... Host:# ./configure --host=mips-linux-gnu --target=mips-linux-gnu CC="mips-linux-gnu-gcc -EL" \ LD="mips-linux-gnu-ld -EL" AR="mips-linux-gnu-ar" CXX="mips-linux-gnu-g++ -EL" \ --with-ncurses=/home/smp383/mips-4.3/bin/asterisk/testasterisk/ncurses-5.9/cawanmipsncurses/usr \ --disable-xmldoc ... ... configure: Package configured for: configure: OS type : linux-gnu configure: Host CPU : mips configure: build-cpu:vendor:os: i686 : pc : linux-gnu : configure: host-cpu:vendor:os: mips : unknown : linux-gnu : configure: Cross Compilation = YES Host:# make ... ... checking for tgetent in -ltermcap... no checking for tgetent in -ltinfo... no checking for tgetent in -lcurses... no checking for tgetent in -lncurses... no configure: error: termcap support not found make[1]: *** [editline/libedit.a] Error 1 make: *** [main] Error 2 Host:# Unfortunately, error again in generating editline/libedit.a archive. Let's check. Host:# find . -iname editline ./main/editline Host:# cd main/editline/ Host:# nano configure Let's have a look to the configure file. Since we already passed the libncurses path to the main configure tool, so, we can try to bypass the check error directly and see the libedit.a will be generated or not. At lines around 1282, we can see something like this. if { (eval echo configure:1282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && \ test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi When libncurses is missing, the "ac_cv_lib_$ac_lib_var" will set to "no". Now, let us change it to "yes". So, after the modification, it should look something like this. if { (eval echo configure:1282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && \ test -s conftest${ac_exeext}; then rm -rf conftest*

eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" fi Let us start the cross compilation again. Host:# pwd /home/smp383/mips-4.3/bin/asterisk/testasterisk/asterisk-1.8.19.0/main/editline Host:# cd .. Host:# cd .. Host:# make ... ... +--------- Asterisk Build Complete ---------+ + Asterisk has successfully been built, and + + can be installed by running: + + + + make install + +-------------------------------------------+ Host:# Excellent, the cross compilation process completed. Let us verify the libedit.a being generated. Host:# mkdir ./test Host:# cd test Host:# cp ../main/editline/libedit.a . Host:# mips-linux-gnu-ar t libedit.a editline.o_a fgetln.o_a vis.o_a unvis.o_a strlcpy.o_a strlcat.o_a history.o_a tokenizer.o_a readline.o_a Host:# mips-linux-gnu-ar x libedit.a Host:# ls editline.o_a fgetln.o_a history.o_a libedit.a readline.o_a strlcat.o_a strlcpy.o_a tokenizer.o_a unvis.o_a vis.o_a Host:# file editline.o_a editline.o_a: ELF 32-bit LSB relocatable, MIPS, MIPS32 rel2 version 1 (SYSV), not stripped Host:# Nice, the object file being generated are really those we are looking for. Let's continue our cross compilation process. Host:# cd .. Host:# make install DESTDIR=$PWD/cawanasterisk ... ... +---- Asterisk Installation Complete -------+ + + + YOU MUST READ THE SECURITY DOCUMENT + + + + Asterisk has successfully been installed. + + If you would like to install the sample + + configuration files (overwriting any + + existing config files), run: + + + + make samples + + + +----------------- or ---------------------+ + + + You can go ahead and install the asterisk +

+ program documentation now or later run: + + + + make progdocs + + + + **Note** This requires that you have + + doxygen installed on your local system + +-------------------------------------------+ Host:# ls ./cawanasterisk/etc/asterisk/ Host:# Well, still no any default configuration files found. Let's make samples. Host:# make samples DESTDIR=$PWD/cawanasterisk ... ... Installing file phoneprov/000000000000.cfg Installing file phoneprov/000000000000-directory.xml Installing file phoneprov/000000000000-phone.cfg Installing file phoneprov/polycom_line.xml Installing file phoneprov/polycom.xml Installing file phoneprov/snom-mac.xml Host:# ls -l ./cawanasterisk/etc/asterisk/ total 796 -rw-r--r-- 1 root root 140 2012-12-12 18:37 adsi.conf -rw-r--r-- 1 root root 2636 2012-12-12 18:37 agents.conf -rw-r--r-- 1 root root 2904 2012-12-12 18:37 ais.conf -rw-r--r-- 1 root root 2084 2012-12-12 18:37 alarmreceiver.conf -rw-r--r-- 1 root root 3498 2012-12-12 18:37 alsa.conf -rw-r--r-- 1 root root 767 2012-12-12 18:37 amd.conf -rw-r--r-- 1 root root 1044 2012-12-12 18:37 app_mysql.conf -rw-r--r-- 1 root root 3254 2012-12-12 18:37 asterisk.adsi -rw-r--r-- 1 root root 3461 2012-12-12 18:37 asterisk.conf -rw-r--r-- 1 root root 4803 2012-12-12 18:37 calendar.conf -rw-r--r-- 1 root root 6955 2012-12-12 18:37 ccss.conf -rw-r--r-- 1 root root 2466 2012-12-12 18:37 cdr_adaptive_odbc.conf -rw-r--r-- 1 root root 8381 2012-12-12 18:37 cdr.conf -rw-r--r-- 1 root root 1617 2012-12-12 18:37 cdr_custom.conf -rw-r--r-- 1 root root 418 2012-12-12 18:37 cdr_manager.conf -rw-r--r-- 1 root root 2231 2012-12-12 18:37 cdr_mysql.conf ... ... Host:# Good, the make samples done successfully. We don't need to perform make config because we are doing cross compilation but not going to install the asterisk locally. Now, let's run the asterisk in MIPS environment. tango3[~]# ifconfig eth0 192.168.1.198 eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 tango3[~]# mkdir cawan tango3[~]# mount -o nolock 192.168.1.197:/home/smp383 ./cawan tango3[~]# cd cawan tango3[cawan]# cd mips-4.3/bin/asterisk/ tango3[asterisk]# cd testasterisk/asterisk-1.8.19.0/cawanasterisk/ tango3[cawanasterisk]# ls etc/ usr/ var/ tango3[cawanasterisk]# cd usr/sbin/ tango3[sbin]# ls astcanary* astgenkey* rasterisk@ asterisk* autosupport* safe_asterisk* tango3[sbin]# ./asterisk -h Asterisk 1.8.19.0, Copyright (C) 1999 - 2012, Digium, Inc. and others. Usage: asterisk [OPTIONS] Valid Options: -V Display version number and exit -C <configfile> Use an alternate configuration file -G <group> Run as a group other than the caller -U <user> Run as a user other than the caller -c Provide console CLI -d Enable extra debugging

Do not fork Always fork Dump core in case of a crash This help screen Initialize crypto keys at startup Enable internal timing if DAHDI timer is available Limit the maximum load average before rejecting new calls Limit the maximum number of calls to the specified value Mute debugging and console output on the console Disable console colorization Run as pseudo-realtime thread Quiet mode (suppress output) Connect to Asterisk on this machine Same as -r, except attempt to reconnect if disconnected Connect to Asterisk via socket <socket> (only valid with -r) Record soundfiles in /var/tmp and move them where they belong after they are done -T Display the time in [Mmm dd hh:mm:ss] format for each line of output to the CLI -v Increase verbosity (multiple v's = more verbose) -x <cmd> Execute command <cmd> (implies -r) -X Execute includes by default (allows #exec in asterisk.conf) -W Adjust terminal colors to compensate for a light background tango3[sbin]# ./asterisk -V Asterisk 1.8.19.0 tango3[sbin]# ./asterisk -c -v Asterisk 1.8.19.0, Copyright (C) 1999 - 2012 Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= No entry for terminal type "vt102"; using dumb terminal settings. No 'modules.conf' found, no modules will be loaded. Unable to open AMI configuration manager.conf, or configuration is invalid. Asterisk management interface (AMI) disabled. Can't find indications config file indications.conf. Asterisk Dynamic Loader Starting: Asterisk PBX Core Initializing Registering builtin applications: [Answer] [BackGround] [Busy] [Congestion] [ExecIfTime] [Goto] [GotoIf] [GotoIfTime] [ImportVar] [Hangup] [Incomplete] [NoOp] [Proceeding] [Progress] [RaiseException] [ResetCDR] [Ringing] [SayAlpha] [SayDigits] [SayNumber] [SayPhonetic] [Set] [MSet] [SetAMAFlags] [Wait] [WaitExten] Could not load features.conf Unable to open Asterisk database '/var/lib/asterisk/astdb': No such file or directory

-f -F -g -h -i -I -L <load> -M <value> -m -n -p -q -r -R -s <socket> -t

Could not find valid ccss.conf file. Using cc_max_requests default Asterisk Dynamic Loader Starting: No 'modules.conf' found, no modules will be loaded. Asterisk Ready. *CLI> Well, we need to specify the path of asterisk.conf. Let's go. tango3[sbin]# pwd /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk-1.8.19.0/cawanasterisk/usr/sbin tango3[sbin]# ./asterisk -c -v -C /root/cawan/mips-4.3/bin/asterisk/testasterisk/\ asterisk-1.8.19.0/cawanasterisk/etc/asterisk/asterisk.conf Asterisk 1.8.19.0, Copyright (C) 1999 - 2012 Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= No entry for terminal type "vt102"; using dumb terminal settings. No 'modules.conf' found, no modules will be loaded. Unable to open AMI configuration manager.conf, or configuration is invalid. Asterisk management interface (AMI) disabled. Can't find indications config file indications.conf. Asterisk Dynamic Loader Starting: Asterisk PBX Core Initializing Registering builtin applications: [Answer] [BackGround] [Busy] [Congestion] [ExecIfTime] [Goto] [GotoIf] [GotoIfTime] [ImportVar] [Hangup] [Incomplete] [NoOp] [Proceeding] [Progress] [RaiseException] [ResetCDR] [Ringing] [SayAlpha] [SayDigits] [SayNumber] [SayPhonetic] [Set] [MSet] [SetAMAFlags] [Wait] [WaitExten] Could not load features.conf Unable to open Asterisk database '/var/lib/asterisk/astdb': No such file or directory Could not find valid ccss.conf file. Using cc_max_requests default Asterisk Dynamic Loader Starting: No 'modules.conf' found, no modules will be loaded. Asterisk Ready. *CLI> It seems the asterisk.conf needs to be modified. Let's do it. Host:# nano asterisk.conf [directories](!) astetcdir => /etc/asterisk astmoddir => /usr/lib/asterisk/modules astvarlibdir => /var/lib/asterisk

astdbdir => /var/lib/asterisk astkeydir => /var/lib/asterisk astdatadir => /var/lib/asterisk astagidir => /var/lib/asterisk/agi-bin astspooldir => /var/spool/asterisk astrundir => /var/run/asterisk astlogdir => /var/log/asterisk Let us change it to the correct path. [directories] astetcdir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/etc/asterisk astmoddir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/usr/lib/asterisk/modules astvarlibdir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/var/lib/asterisk astdbdir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/var/lib/asterisk astkeydir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/var/lib/asterisk astdatadir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/var/lib/asterisk astagidir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/var/lib/asterisk/agi-bin astspooldir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/var/spool/asterisk astrundir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/var/run/asterisk astlogdir => /root/cawan/mips-4.3/bin/asterisk/testasterisk/asterisk1.8.19.0/cawanasterisk/var/log/asterisk Remember to remove the (!) after [directories] Let's start the asterisk again in MIPS environment. tango3[sbin]# ./asterisk -c -v -C /root/cawan/mips-4.3/bin/asterisk/testasterisk/\ asterisk-1.8.19.0/cawanasterisk/etc/asterisk/asterisk.conf Asterisk 1.8.19.0, Copyright (C) 1999 - 2012 Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= ... ... pbx_ael.so => (Asterisk Extension Language Compiler) app_readexten.so => (Read and evaluate extension validity) func_channel.so => (Channel information dialplan functions) func_volume.so => (Technology independent volume control) func_sysinfo.so => (System information related functions) func_cdr.so => (Call Detail Record (CDR) dialplan function) res_mutestream.so => (Mute audio stream resources) app_directory.so => (Extension Directory) pbx_spool.so => (Outgoing Spool Support) func_pitchshift.so => (Audio Effects Dialplan Functions) func_sha1.so => (SHA-1 computation dialplan function) res_security_log.so => (Security Event Logging) func_frame_trace.so => (Frame Trace for internal ast_frame debugging.) codec_a_mu.so => (A-law and Mulaw direct Coder/Decoder) app_test.so => (Interface Test Application) func_iconv.so => (Charset conversions) chan_unistim.so => (UNISTIM Protocol (USTM)) codec_gsm.so => (GSM Coder/Decoder) bridge_simple.so => (Simple two channel bridging module) app_senddtmf.so => (Send DTMF digits Application) app_milliwatt.so => (Digital Milliwatt (mu-law) Test Application) app_chanspy.so => (Listen to the audio of an active channel) func_callcompletion.so => (Call Control Configuration Function)

codec_alaw.so => (A-law Coder/Decoder) app_exec.so => (Executes dialplan applications) codec_g726.so => (ITU G.726-32kbps G726 Transcoder) app_morsecode.so => (Morse code) app_originate.so => (Originate call) res_clioriginate.so => (Call origination and redirection from the CLI) func_timeout.so => (Channel timeout dialplan functions) pbx_loopback.so => (Loopback Switch) app_cdr.so => (Tell Asterisk to not maintain a CDR for the current call) app_disa.so => (DISA (Direct Inward System Access) Application) app_voicemail.so => (Comedian Mail (Voicemail System)) app_while.so => (While Loops and Conditional Execution) func_callerid.so => (Party ID related dialplan functions (Caller-ID, Connected-line, Redirecting)) app_dictate.so => (Virtual Dictation Machine) app_controlplayback.so => (Control Playback Application) app_image.so => (Image Transmission Application) app_playtones.so => (Playtones Application) app_playback.so => (Sound File Playback Application) app_adsiprog.so => (Asterisk ADSI Programming Application) func_vmcount.so => (Indicator for whether a voice mailbox has messages in a given folder.) func_md5.so => (MD5 digest dialplan functions) bridge_softmix.so => (Multi-party software based channel mixing) res_limit.so => (Resource limits) res_realtime.so => (Realtime Data Lookup/Rewrite) func_db.so => (Database (astdb) related dialplan functions) codec_ilbc.so => (iLBC Coder/Decoder) chan_phone.so => (Linux Telephony API Support) app_privacy.so => (Require phone number to be entered, if no CallerID sent) func_base64.so => (base64 encode/decode dialplan functions) func_uri.so => (URI encode/decode dialplan functions) app_authenticate.so => (Authentication Application) app_dial.so => (Dialing Application) app_speech_utils.so => (Dialplan Speech Applications) app_record.so => (Trivial Record Application) codec_lpc10.so => (LPC10 2.4kbps Coder/Decoder) res_phoneprov.so => (HTTP Phone Provisioning) app_system.so => (Generic System() application) app_directed_pickup.so => (Directed Call Pickup Application) chan_oss.so => (OSS Console Channel Driver) func_strings.so => (String handling dialplan functions) func_version.so => (Get Asterisk Version/Build Info) app_amd.so => (Answering Machine Detection Application) app_read.so => (Read Variable Application) app_sendtext.so => (Send Text Applications) codec_g722.so => (ITU G.722-64kbps G722 Transcoder) func_audiohookinherit.so => (Audiohook inheritance function) func_lock.so => (Dialplan mutexes) func_dialgroup.so => (Dialgroup dialplan function) func_blacklist.so => (Look up Caller*ID name/number from blacklist database) app_mixmonitor.so => (Mixed Audio Monitoring Application) app_url.so => (Send URL Applications) app_forkcdr.so => (Fork The CDR into 2 separate entities) func_module.so => (Checks if Asterisk module is loaded in memory) bridge_builtin_features.so => (Built in bridging features) codec_adpcm.so => (Adaptive Differential PCM Coder/Decoder) func_cut.so => (Cut out information from a string) codec_ulaw.so => (mu-Law Coder/Decoder) app_softhangup.so => (Hangs up the requested channel) == Aliased CLI command 'hangup request' to 'channel request hangup' == Aliased CLI command 'originate' to 'channel originate' == Aliased CLI command 'help' to 'core show help' == Aliased CLI command 'pri intense debug span' to 'pri set debug 2 span' == Aliased CLI command 'reload' to 'module reload' res_clialiases.so => (CLI Aliases) bridge_multiplexed.so => (Multiplexed two channel bridging module) res_convert.so => (File format conversion CLI command) app_waitforsilence.so => (Wait For Silence) app_festival.so => (Simple Festival Interface) app_sms.so => (SMS/PSTN handler) app_waituntil.so => (Wait until specified time)

app_mp3.so => (Silly MP3 Application) func_aes.so => (AES dialplan functions) func_enum.so => (ENUM related dialplan functions) app_talkdetect.so => (Playback with Talk Detection) func_groupcount.so => (Channel group dialplan functions) app_readfile.so => (Stores output of file into a variable) app_minivm.so => (Mini VoiceMail (A minimal Voicemail e-mail System)) func_rand.so => (Random number dialplan function) app_sayunixtime.so => (Say time) app_verbose.so => (Send verbose output) func_shell.so => (Collects the output generated by a command executed by the system shell) app_channelredirect.so => (Redirects a given channel to a dialplan target) func_env.so => (Environment/filesystem dialplan functions) app_setcallerid.so => (Set CallerID Presentation Application) app_dumpchan.so => (Dump Info About The Calling Channel) func_math.so => (Mathematical dialplan function) pbx_config.so => (Text Extension Configuration) func_global.so => (Variable dialplan functions) func_logic.so => (Logical dialplan functions) app_getcpeid.so => (Get ADSI CPE ID) app_ices.so => (Encode and Stream via icecast and ices) func_config.so => (Asterisk configuration file variable access) app_db.so => (Database Access Functions) app_userevent.so => (Custom User Event Application) app_celgenuserevent.so => (Generate an User-Defined CEL event) app_echo.so => (Simple Echo Application) app_queue.so => (True Call Queueing) Asterisk Ready. *CLI> Nice, the asterisk is successfully running now. Let's check the sip info. *CLI> sip show users Username Secret Accountcode Def.Context ACL ForcerPort *CLI> sip show peers Name/username Host Dyn Forcerport ACL Port Status 0 sip peers [Monitored: 0 online, 0 offline Unmonitored: 0 online, 0 offline] *CLI> sip show channelstats Peer Call ID Duration Recv: Pack Lost (%) Jitter Send: Pack Lost (%) Jitter 0 active SIP channels Fine, there is no any sip extension yet. Let us create it now and restart the asterisk again. Host:# nano sip.conf Go to the end of the file and append the following lines to create 2 extensions. [101] type=friend secret=101 host=dynamic context=internal username=101 callgroup=1 pickupgroup=1 [102] type=friend secret=102 host=dynamic context=internal username=102 callgroup=1 pickupgroup=1 Then, we edit extensions.conf. Host:# nano extensions.conf

Go to the end of the file and append the following lines. [internal] exten=>101,1,Dial(SIP/101,20) exten=>102,1,Dial(SIP/102,20) Now, let us restart the asterisk and check the sip extensions. *CLI> sip show users Username Secret Accountcode Def.Context ACL ForcerPort 101 101 internal No Yes 102 102 internal No Yes *CLI> sip show peers Name/username Host Dyn Forcerport ACL Port Status 101/101 (Unspecified) D N 0 Unmonitored 102/102 (Unspecified) D N 0 Unmonitored 2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 0 online, 2 offline] Good, 2 sip extensions have been created. Let's test it by using 2 smart phones with sip app (iSip or 3CXPhone) installed. Each smart phone registers to extension 101 and 102 respectively. Then, check the sip extensions in asterisk again. *CLI> sip show peers Name/username Host Dyn Forcerport ACL Port 101/101 192.168.1.3 D N 5060 102/102 192.168.1.9 D N 5065 2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]

Status Unmonitored Unmonitored

Excellent, it seems both of the extensions are online right now. Let's make a call. Yes, the callee rings and once the connection is accepted, it is ready to start a conversation. While the conversation is running, let us check the channel statistic in asterisk.
*CLI> sip show channelstats Peer Call ID Duration 192.168.1.9 .8zN5DtXR7- 00:00:22 1 active SIP channel *CLI> sip show channels Peer User/ANR 192.168.1.9 102 192.168.1.3 (None) 192.168.1.3 101 3 active SIP dialogs Recv: Pack 0000000000 Lost ( %) Jitter Send: Pack 0000000000 ( 0.00%) 0.0000 0000000000 Lost ( %) Jitter 0000000000 ( 0.00%) 0.0000

Call ID .8zN5DtXR7-g3dH r-9.sa-1gtndvpt 4d2aa9de449c20c

Format 0x4 (ulaw) 0x0 (nothing) 0x4 (ulaw)

Hold No No No

Last Message Tx: ACK Rx: REGISTER Tx: ACK

Expiry

Peer 102 <guest> 101

Nice, the conversation is shown accordingly.

Potrebbero piacerti anche