Heute ist Sonntag, der 29. Januar 2012




Autor: Heiko Sommerfeldt

Phoner – ein Freewaretool bekommt VoIP-Unterstützung

 

Heiko Sommerfeldt ist Entwickler des Freeware-Software-Telefons Phoner, das ursprünglich als CAPI-Anwendung für ISDN-Telefonie entwickelt wurde. Im Jahr 2004 begann er die Migration der Anwendung für VoIP. Der Bericht zeigt, wie einfach eine Software-Anwendung mit Hilfe von Open-Source-Bibliotheken um VoIP-Funktionalitäten erweitert werden kann.

 

Im Jahr 1997 war ich auf der Suche nach einem Thema für meine Diplomarbeit, um mein Informatik-Studium in Ulm abzuschließen. In einem Aushang sah das Thema „Telefonieoberfläche für Windows“, das mich sehr interessierte. Ich fing sogleich mit der Entwicklung an. Die Anforderung war, eine Windows-Applikation zu bauen, die mittels Drag&Drop-Bedienung; Telefonaufrufe initiieren kann. Dabei sollte die Telephonie API (TAPI) als Schnittstelle zum Festnetz dienen. Mangels passendem Modem, jedoch vorhandener ISDN-Karte wurde kurzerhand parallel auch CAPI ausprobiert. Das entstandene Programm wurde „Phoner“ getauft. Im Laufe der Zeit wurden immer mehr ISDN-Leistungsmerkmale in Phoner integriert und Features wie Anrufbeantworter und SMS-Versand hinzugefügt. Die TAPI-Schnittstelle wurde lediglich stiefmütterlich unterstützt – die Hauptschnittstelle blieb ISDN-CAPI.

In den Jahren 2003-2004 verebbte der ISDN-Boom immer mehr und VoIP wurde immer populärer. Beruflich hatte ich mit H.323 zu tun. Deshalb lag es nahe, den Multimedia-Standard H.323 in Phoner einzubauen, der auch VoIP unterstützt und bis zu diesem Zeitpunkt führend war. Da ich jedoch keinen kommerziellen Sourcecode einsetzen konnte, blieb nur Freeware übrig – in diesem Fall der Softwarestack OpenH323. Jedoch ist OpenH323 in C++ programmiert. Phoner wurde hingegen komplett in Delphi entwickelt. Ich wollte keines der Softwareteile umschreiben. Als Notbehelf hätte ich eine Wrapper-DLL mit C-Interface schreiben können. Diesen Ansatz habe ich jedoch nicht umgesetzt – Phoner blieb zunächst eine Festnetz-Anwendung ohne VoIP-Unterstützung. Seit 2004 ist VoIP noch populärer geworden, H.323 konnte sich jedoch nicht durchsetzen. Der neue Standard lautete fortan SIP. Eine komplette Eigenentwicklung sollte Phoner nicht erfahren, da es sich um ein reines Freizeitprojekt handelte.

<br>Phoner - die CAPI-Anwendung mit VoIP-Erweiterung
Phoner - die CAPI-Anwendung mit VoIP-Erweiterung
Im Laufe des Jahres 2004 wurde ich dann auf oSIP (www.osip.org) aufmerksam. Das war zwar „nur“ eine Library zum Parsen und Zusammensetzen von SIP-Nachrichten, jedoch ist auch eine rudimentäre State-Machine enthalten, die ich mir näher angeschaut habe.

Nun kam wieder das alte Problem auf: oSIP ist in C programmiert – Phoner noch immer in Delphi. Also musste oSIP in eine DLL verpackt werden und in die Anwendung integriert werden. Die oSIP enthält sehr viele Strukturen und Funktionen, die ich in Delphi in Pascal-Syntax hätte nachbauen müssen, so dass dieser Weg auch wenig zielführend erschien.

Phoner bindet jedoch bereits eine „fremde“ C-Dll ein, nämlich die CAPI (capi2032.dll). Daraus entstand die Idee, selbst eine CAPI zu bauen, die sich der Applikation gegenüber als normale CAPI ausgibt und auf Netzwerkseite das SIP-Protokoll verwendet. Diese Idee, welche grundsätzlich nicht neu ist, gefiel mir am besten.

Deshalb begann ich die DLL „sipper.dll“ zu entwickeln. Theoretisch hätte diese auch in „capi2032.dll“ umbenannt werden können, so dass sie auch mit anderen CAPI-Applikationen funktionieren müsste. Diesen Anwendungsfall habe ich jedoch nie getestet, weil der Fokus stets die Phoner-Anwendung war.

Um Phoner so wenig wie möglich zu ändern, wird zwischen Applikation und DLL immer der Sprachcodec G.711 A-Law verwendet – wie bei ISDN. Innerhalb der DLL konnte ich in C/C++ jeglichen anderen frei verwendbaren Codec integrieren. In Phoner selbst ist lediglich ein Konfigurationsdialog hinzugekommen, der eine Ini-Datei schreibt. Diese Ini-Datei von der „sipper.dll“ ausgelesen.

Somit hat Phoner selbst ohne merkliche Änderungen die Migration hin zu einem VoIP-Client vollzogen. In naher Zukunft (Stand Sommer 2005) möchte ich die Leistungsmerkmale soweit wie möglich ausbauen, sodass man dann auch im VoIP-Modus von Phoner die gewohnten ISDN-Leistungsmerkmale (Transfer, Rufumleitung, Konferenz, ...) nutzen kann. Ohne oSIP wäre diese schnelle Umsetzung nicht möglich gewesen. Da oSIP lediglich eine Low-Level-API zur Verfügung stellt, muss die Funktionalität im Wesentlichen selbst implementiert werden. Die Nachrichten selbst muss man in korrekter Syntax zusammenstellen und die Reaktion auf empfangene Meldungen muss ebenfalls implementiert werden.. Die Kommunikation per UDP war ebenso schnell eingebaut, wie die Behandlung des aufgesetzten RTP-Protokolls. Erstaunlich einfach war die Integration weiterer Codecs. Für G.726, GSM und iLBC habe ich auf freie Komponenten zurückgegriffen. Diese Codecs und oSIP selbst unterliegen nicht der GPL (sondern teilweise L-GPL), weshalb ich auch Phoner weiterhin als „Closed Source“ Applikation vertreiben kann.

Links zum Thema:

Pfeil

©2008, VoIP-Info.de