Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Latest commit 3090e9f @tmakkonen Merge pull request #20 from fulldecent/patch-1
Update main.cpp

sipcmd - the command line SIP/H.323/RTP softphone


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).


### Dependencies

apt-get install opal-dev ptlib-dev
apt-get install libopal-dev libpt-dev

Or for Ubuntu 12.10

apt-get install libpt-dev libopal-dev

### Download

Get source tarball from GitHub.

### Compile

To disable debug messages, comment out DEBUG flag from Makefile

### Environment

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.

### Run

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

-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

./sipcmd -P sip -u [username] -c [password] -w [server] -x "c;w200;d12345"

WAV file requirements:

  • mono
  • 8 kHz sampling rate
  • 16 bits sample size

The EBNF definition of the program syntax:

prog    :=  cmd ';'  |
cmd :=  call | answer | hangup
      | dtmf | voice | record | wait
      | setlabel | loop
call    :=  'c' remoteparty
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
setlabel:=  'l' label
loop    :=  'j' [ how-many-times ] [ 'l' label ]



Parses to the following:

  1. do this four times:
    1. call to 333
    2. wait until silent (max 3000 ms)
    3. send dtmf digits 123
    4. wait 200 ms
    5. do this three times:
      1. wait until silent (max 1000 ms)
      2. send sound file 'audio'
      3. record until silent (max 4000 ms) to files 'f-[0-3]-[0-2].out'
    6. hangup
    7. wait 2000 ms

Something went wrong with that request. Please try again.