Command line soft phone that makes phone calls, accepts calls, enters DTMF digits, plays back WAV files and records them. A useful testing tool for VoIP systems. Runs on Linux.
Upgraded to latest versions of ptlib and opal avaliable on apt repos on Ubuntu 12.04. (3.10.2 and 2.10.2, respectively).
apt-get install opal-dev ptlib-dev
apt-get install libopal-dev sip-dev libpt-dev
apt-get install libopal-dev libpt-dev
Get source tarball from GitHub.
make
To disable debug messages, comment out DEBUG flag from Makefile
If you compile the dependencies from source, make sure that libpt and libopal are in your LD_LIBRARY_PATH
. The default installation location is /usr/local/lib
.
testphone options:
-u --user username (required)
-c --password password for registration
-a --alias username alias
-l --localaddress local address to listen on
-o --opallog enable extra opal library logging to file
-p --listenport the port to listen on
-P --protocol sip/h323/rtp (required)
-r --remoteparty the party to call to
-x --execute program to follow
-d --audio-prefix recorded audio filename prefix
-f --file the name of played sound file
-g --gatekeeper gatekeeper to use
-w --gateway gateway to use
-m -mediaformat one or more codecs to use, separated by semicolon; wildcards are supported (e.g. -m "G.711*;G.722*")
-l
or -p
without -x
assumes answer mode. Additional -r
forces caller id checking. -r
without -l
, -p
or -x
assumes call mode.
To register to a gateaway, specify -c
, -g
and -w
Example:
./sipcmd -P sip -u [username] -c [password] -w [server] -x "c;w200;d12345"
WAV file requirements:
The EBNF definition of the program syntax:
prog := cmd ';' |
cmd := call | answer | hangup
| dtmf | voice | record | wait
| setlabel | loop
call := 'c' remoteparty [ timeout ]
answer := 'a' [ expectedremoteparty ]
hangup := 'h'
dtmf := 'd' digits
voice := 'v' audiofile
record := 'r' [ append ] [ silence ] [ iter ] millis audiofile
append := 'a'
silence := 's'
closed := 'c'
iter := 'i'
activity:= 'a'
wait := 'w' [ activity | silence ] [ closed ] millis
timeout := 'w' millis
setlabel:= 'l' label
loop := 'j' [ how-many-times ] [ 'l' label ]
Example:
"l4;c333;ws3000;d123;w200;lthrice;ws1000;vaudio;rsi4000f.out;j3lthrice;h;j4"
Parses to the following: