iaxphone is an OpenGL voice over IP application utilizing a single UDP port, 4569, to reach an Asterisk PBX using IAX protocol. The IAX protocol is particularly well suited to NAT environments since just this one port needs to be configured and forwarded through as it carries both the channel status and voice data on it.
An Asterisk installation also supports hardware devices to connect to actual phone lines. However you can use iaxphone along with an Asterisk installation without custom hardware to have a ready to go, online only voicemail system.
There are other SoftPhone applications that can also communicate with an Asterisk installation, some of which like Asterisk are freely available. Many of them use the SIP protocol. See http://www.voip-info.org/wiki-VOIP+Phones
An iaxphone terminal and basic OpenGL implementation have been tested with Emacs/SLIME under GNU CLISP for Windows, sufficient for retrieving Asterisk voicemail or making a call to another IAX user. This is largely based on the libiax2 library and bundled miniphone code. A few changes were made to allow for the Common Lisp (read-line) function to block for new commands while an added background thread calls network and audio functions.
Currently, the libiax2 library which contains IAX protocol and network code is used completely unmodified. A new library called phonesup was put together for much of the miniphone terminal code, audio codecs and platform dependent audio code.
Prebuilt support libraries for Windows are available here
The iaxphone Common Lisp packages under development use these libraries for network and audio support.
The project's Darcs repository is at
You may have tried a web search for libiax2 and come across various sources. When building libiax2 from scratch the correct place to get the latest sources is from the Digium SVN repository, http://svn.digium.com/svn/libiax2/trunk with for example the TortoiseSVN client.
iaxphone utilizes the following common-lisp.net projects:
→ Ensure that you've ASDF loaded cl-opengl already or have added its directory location to the list of paths contained in the *central-registry* variable of your ASDF package.
→ Load the cl-ode package, for the Open Dynamics Engine. Run the cl-ode test before proceeding.
→ CFFI is used to access the libiax2 library. You will likely already have CFFI in your system from having successfully run the cl-opengl examples.
Now you can load the included iaxphone.asd and run (start-iax) to bring up the iaxphone terminal, or (start-iax t) for the OpenGL application. Hooks are available to embed iaxphone capabilities into your own application, even without OpenGL.
In your lisp initialization file, after you load asdf can you pre-load iaxphone and set a call-list. With iaxphone running as OpenGL simply press ``c'' on your keyboard to call the first IAX location in your call list.
(asdf:operate 'asdf:load-op 'iaxphone)
(in-package "IAXPHONE")
(setf *iax-accounts* (list (make-iax-account :user "username" :pass "password" :host "example.com")))
(setf *call-list* (list (cons (car *iax-accounts*) "8500")))
If you don't have an Asterisk installation of your own with its iax.conf configured with an account you know, then try connecting to one of the IAX servers listed at the voip-info.org Phone Numbers page.
Create a stand alone binary of iaxphone for your lisp implementation and platform and announce its web location to the devel list. The binary can be mirrored from you just once, or routinely, to be made available from these web pages at common-lisp.net. If you do have a permanent mirror site then a link to your iaxphone binary directory can remain listed here too.
Write additional back ends to interface with audio subsystems on other platforms.
Back to Common-lisp.net.