Integration eines SIP Stacks in eine Web-Service
Transcription
Integration eines SIP Stacks in eine Web-Service
Technische Universität Kaiserslautern – Integrated Communication Systems Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Projektarbeit im WS 2003/04 von Franz-Josef Fink Betreuer: Prof. Dr. Paul Müller Dipl.-Inform. Markus Hillenbrand Ge Zhang Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Inhalt I Inhalt Einleitung...............................................................................................................................5 1 Grundlagen..........................................................................................................................6 1.1 VoIP.............................................................................................................................6 1.2 SIP...............................................................................................................................8 1.2.1 Funktionsweise....................................................................................................8 1.2.2 Beispielszenario.................................................................................................15 1.2.3 SDP....................................................................................................................17 1.3 RTP............................................................................................................................19 1.4 Web-Services.............................................................................................................24 1.4.1 XML...................................................................................................................24 1.4.2 SOAP ................................................................................................................26 1.4.3 URI ....................................................................................................................28 1.4.4 WSDL ...............................................................................................................28 1.4.5 UDDI.................................................................................................................31 1.4.6 In der Praxis......................................................................................................32 2 Web-Service basierte VoIP-Lösung..................................................................................33 2.1 Problemstellungen.....................................................................................................33 2.2 Idee............................................................................................................................34 2.3 Projekt Venice...........................................................................................................35 2.4 Aufgabe.....................................................................................................................40 3 Realisierungsaspekte.........................................................................................................41 3.1 Voraussetzungen........................................................................................................41 3.2 SIP-Stack...................................................................................................................42 3.2.1 Nist Jain sip v1.1................................................................................................43 3.2.2 Sip Communicator............................................................................................47 3.3 SIP-Gateway..............................................................................................................50 3.3.1 Anruf von Simple Client nach SIP-Client.........................................................52 3.3.2 Anruf von SIP-Client nach Simple Client.........................................................53 3.3.3 Gesprächsende durch Simple Client..................................................................54 3.3.4 Gesprächsende durch SIP Client........................................................................55 3.3.5 Multiuserbetrieb.................................................................................................56 3.4 Testbetrieb.................................................................................................................56 3.4.1 Weitere SIP Softwaretelefone............................................................................57 3.4.2 Siemens optiPoint 400 standard SIP..................................................................61 4 Zusammenfassung ............................................................................................................64 5 Ausblick.............................................................................................................................65 6 Abkürzungen.....................................................................................................................66 7 Abbildungs- und Tabellenverzeichnis...............................................................................68 8 Quellenangaben.................................................................................................................69 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung 4 Abstract: Die VoIP-Telefonie setzt sich durch ihre Vorteile im Bereich der Kosten und der Funktionalität langsam, aber sicher immer mehr gegenüber der leitungsgebundenen Telefonie durch. Die Möglichkeit Internettelefonie über Web-Services anzubieten, ist dabei eine neue vielversprechende Lösung, die unter anderem von zugrundeliegenden Signalisierungstechnologien abstrahiert. Um Kompatibilität mit den sehr häufig vorkommenden, auf dem SIP Protokoll beruhenden Systemen zu gewährleisten, wird die Integration eines SIP Stacks auch in die Web-Service basierte Architektur gewünscht. Diese Projektarbeit beschäftigt sich mit der Entwicklung eines Prototyps, des SIP-Gateways, der die Web-Service basierte Lösung um eine SIP-Schnittstelle erweitert. Dazu werden ebenfalls die theoretischen Grundlagen erläutert, eine Modellbildung durchgeführt und die Implementierung getestet. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung 5 Einleitung Mit der rapiden Verbreitung des Internets weltweit und insbesondere der Einführung von Internetflatrates mit zeitunabhängigen Tarifen, hat sich auch ein größeres Interesse an der Internettelefonie, auch Voice over IP (VoIP) genannt, breit gemacht. Diese neue Technologie verwendet zur Übertragung der Sprache anstatt des normalen Telefonnetzes das Internet auch zum Transfer von Telefongesprächen. Internet steht in den meisten Firmen und auch in privaten Haushalten sowieso schon zur Verfügung. Dadurch können enorme Kosten gespart werden, da keine zusätzlichen Telefonleitungen verwendet werden müssen. Für den Gesprächsaufbau der Internettelefonie wurden verschiedene Protokolle entwickelt. Eines davon ist das Session Initiation Protokoll, kurz SIP. Damit ein Telefon die Verbindung per Internet herstellen kann, muss es also zur Sprachübertragung auch noch das Internetprotokoll zum Gesprächsaufbau verstehen. Da sich nebeneinander verschiedene Protokolle durchgesetzt haben, ist es günstig, wenn ein IP-Telefon mehrere verschiedene Protokolle verarbeiten kann. Die Protokolle sind oft sehr komplex und entwickeln sich auch weiter. Deshalb wird bei Internettelefonen eine umfangreiche Software benötigt. Im Projekt Venice wird ein Großteil dieser Funktionalität den Telefonen abgenommen und stattdessen von einem Web-Service zur Verfügung gestellt. Die vorliegende Arbeit beschäftigt sich damit, wie dieses auf Web-Service basierte VoIP-Telefonsystem um einen Service, der das SIP-Protokoll versteht, erweitert wird. Im ersten Kapitel werden dazu zuerst alle Grundlagen erläutert. Dadurch wird auf wichtige Begriffe wie Web-Services, VoIP-Telefonie und SIP Protokoll ausführlich eingegangen. Daraufhin wird im zweiten Kapitel erklärt, wie die VoIP-Telefonie über Web-Services funktionieren kann. Dabei wird das Projekt Venice vorgestellt, in dessen Rahmen diese Arbeit durchgeführt wird. Im dritten Kapitel wird aufgezeigt, wie das Projekt um die SIP Funktionalität erweitert wird. Hierzu wird auch der SIP Stack beschrieben, der als Implementierung von SIP die Basis für die Verwendung des SIP-Protokolls in diesem Projekt bildet, und wie dieser in Venice eingebaut wird. Dies geschieht mithilfe der Implementierung eines Gateway-Services, der zwischen externen Telefonaten mit dem SIP-Protokoll und dem Web-Service vermittelt, um ein Gespräch zwischen diesen aufbauen zu können. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 6 1 Grundlagen 1.1 VoIP Seitdem 1872 das Telefon zur Sprachübertragung erfunden wurde, hat sich vieles verändert. Während zuerst nur analoge Signale verwendet wurden, stellte sich das Telefonnetz (Public Switched Telephone Network (PSTN)) langsam auf digitale Kommunikation (ISDN) um. Dabei werden die analogen Signale durch Pulse Code Modulation (PCM) in digitale umgewandelt und dann übertragen [1]. Obwohl Quality of Service (QoS) gewährleistet wird, ist die Bandbreite doch sehr teuer, was hohe Gesprächskosten bewirkt. Und auch die Kommunikation erfolgt ineffizient, da für jede Verbindung ein eigener Kanal verwendet werden muss. Im Februar 1995 stellte die israelische Firma Vocaltec, Inc. als erste eine Lösung für diese Probleme in Form einer IP Telefonsoftware vor [2]. Mit dieser wurden die analogen Signale mit speziellen Codecs digitalisiert und komprimiert, wie es auch beim digitalen Telefonnetz üblich ist. Codec ist eine Abkürzung für Coder/Decoder, also ein Programm welches einen Datenstrom oder ein Signal in eine codierte Version transformieren kann und wieder zurück. Anders als bei ISDN werden die kodierten Sprachsignale darauf aber in IP-Pakete zerlegt und mittels Internet verschickt. Beim Gesprächspartner werden die Daten wieder aus den Internetpaketen herausgeholt und dann zu Sprachsignalen dekodiert und ausgegeben. Das Internet bietet den großen Vorteil gegenüber dem normalen Telefonnetz, dass neben der Sprachübertragung auch Video und andere Daten durch Multiplexen viel effizienter verschickt werden können, da es aufgrund der Paketvermittlung nicht verbindungsorientiert arbeiten muss. Die schon vorhandene Struktur des Internets kann um diese Telefonfunktion einfach erweitert werden. Dadurch können auch Kosten enorm gesenkt werden, insbesondere weil Internetverbindungen ohnehin meistens schon zur Verfügung stehen und damit kaum zusätzliche Gebühren anfallen. Nicht nur Installation, sondern auch Wartung und Unterhalt sind günstiger. Deshalb sind nicht nur Privatpersonen, sondern vor allem auch große Firmen an dieser neuen Technik VoIP besonders interessiert. Anfangs war diese Technologie, wie nicht anders zu erwarten, noch nicht weit ausgereift und hatte einige Probleme, welche die allgemeine Akzeptanz erschwerten. Man konnte nur Telefongespräche mit Gesprächspartnern führen, die auch genau die selbe Software verwendeten; außerdem war die Sprachqualität sehr gering, da Quality of Service nicht gewährleistet werden konnte. Die Verbindungen waren nur halbduplex, also man konnte entweder Sprechen oder Hören, aber nicht beides gleichzeitig. Erst später wurde auch auf Übertragung in Vollduplex gewechselt. Heutzutage gibt es viel schnellere Internetverbindungen, besonders durch die Verbreitung von DSL, und auch Router und Gateways, die VoIP Pakete bevorzugt behandeln und damit QoS anbieten können. Dadurch kann man in modernen VoIP Lösungen i. d. R. kaum noch Unterschiede zu normalen TelefongespräIntegration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 7 chen feststellen. Zudem benötigt man nicht mehr unbedingt einen Computer mit Multimediaausrüstung, sondern es gibt auch schon Hardware IP-Telefone auf dem Markt, die sich von klassischen Telefonen kaum unterscheiden und sehr einfach zu bedienen sind. Durch das Verwenden bestimmter Standardprotokolle wie dem Session Initiation Protokoll (SIP) oder H.3231 wird auch die Kommunikation verschiedener Produkte möglich gemacht. Des Weiteren existieren Gateways, die zwischen verschiedenen dieser Protokolle vermitteln und die sogar Telefongespräche in das normale PSTN ermöglichen oder auch von dem PSTN durch spezielle Vermittlungsrechner in das Internet. Heutige Heimcomputer sind fast alle mit Soundkarte und Internetanschluss versehen. Viele kostenlose VoIP-Programme, wie zum Beispiel das H.323 verwendende Netmeeting2, und der SIP verwendende Microsoft Messenger, welche bei dem verbreiteten Betriebssystem Microsoft Windows schon mitgeliefert werden, ermöglichen einer großen Masse von Anwendern die IP-Telefonie. Man benötigt dazu lediglich noch ein Mikrofon und einen Kopfhörer. Firmen wie Indigo Networks3 bieten jedermann eine kostenlose Verwendung für Internettelefonie mittels SIP. Dabei erhält man eine echte Telefonnummer mit ENUM-Eintrag4. ENUM ist ein System der Internet Engineering Task Force (IETF), das eine Internetadresse auf eine Telefonnummer des PSTN abbildet. Ruft man eine solche Telefonnummer an, wird das Gespräch erst an ein spezielles Gateway mit dieser Telefonnummer weitergeleitet, dieser sucht dann die zugehörige IP-Adresse heraus und leitet das Gespräch dahin weiter. So ist nicht nur die Kommunikation zwischen SIP-Nutzern möglich, sondern man ist auch von den bisher gebräuchlichen Telefonen aus erreichbar und kann auch kostengünstig in das PSTN telefonieren. Damit steht der weitgehenden Nutzung von VoIP nicht mehr viel im Wege, und die Technologie entwickelt sich in dem rasanten Tempo des Internets weiter. Bei ISDN Telefonen stehen schon viele zusätzliche Funktionen zur Verfügung, die über das reine Gespräch zweier Teilnehmer hinausgehen: die Übermittlung der Rufnummer, Rückruf bei Besetzt, Anklopfen, Rückfragen/Makeln, Dreierkonferenz, Rufnummernanzeige (CLIP), Erreichbarkeit unter mehreren Nummern mit flexibler Aufteilung dieser auf verschiedene Endgeräte, Rückruf bei Nichtmelden, Anrufweiterschaltungsvarianten und Tarifinformationen. VoIP-Telefone bieten ebenfalls viele dieser Funktionen und es ist sogar die Erweiterung durch vielfältige neue Leistungsmerkmale möglich. Besonders praktisch ist, dass man VoIP an allen Orten an denen ein Internetanschluss Verfügung steht verwenden kann. Dadurch kann man auch auf Reisen immer günstig telefonieren oder ist zum Beispiel zu hause und auch am Arbeitsplatz unter der gleichen Nummer erreichbar. Besonders vorteilhaft ist ferner die Verschmelzung von Computer und Telefon. Man vermag außerdem parallel zum Telefongespräch ohne großen Aufwand Dateien, wie Fotos, Musik, Videoclips oder Berichte mitschicken und es lassen sich einfache Telefonplugins in 1 2 3 4 Standard der International Telecommunication Union (ITU) http://www.microsoft.com/windows/netmeeting/ www.sipgate.de E.164 number (rfc2916) Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 8 Programme einbauen, zum Beispiel zu einer Service-Hotline. Ein anderer Vorteil besteht in der Videotelefonie, denn die meisten Telefonprogramme unterstützen die Übertragung von Videodaten und man benötigt lediglich noch eine Web-Cam. Funktionen, bei denen hoher Rechenaufwand benötigt wird, wie z. B. Sprachfilter oder Verschlüsselung, kann auch der Computer übernehmen. VoIP stellt also eine neue Generation des Telefonierens dar. Trotzdem sollen hier aber auch nicht die Nachteile verschwiegen werden. Da Internetverbindungen und Netzgeräte nur eine bestimmte Anzahl an Paketen verarbeiten können, ist es möglich durch Überlastung bestimmter Stellen die Verbindung zu stören oder ganz zu verhindern. Dies kann böswillig für Denial of Service Attacken (DOS) ausgenutzt werden, oder solche Störungen können bei einer zu hohen Auslastung des Netzes auftreten (Congestion). Wenn die Pakete zu langsam ankommen leidet die Qualität5. Bei einer direkten Verbindung erfährt jeder Teilnehmer auch die IP-Adresse des Partners. Diese kann unerwünscht private Informationen preisgeben, z. B. über den Internetprovider und den Standort. Dadurch sind dann gezielte Angriffe möglich. Ebenso können Nachrichten gefälscht werden, indem sie von einer vorgetäuschten IP-Adresse verschickt werden (IP Spoofing), oder irgendwo auf dem Weg mitgehört werden (Sniffen). Trotzdem sind ebenso Telefonate im PSTN nicht komplett sicher und die Nachteile von Internettelefonie halten sich in Grenzen. Ein typisches VoIP-Telefonat besteht aus zwei Teilen, erstens dem Verbindungsaufbau, dem Signaling, und zweitens dem Datentransfer, der meistens per Realtime Transfer Protokoll (RTP) erfolgt. Für das Signaling gibt es viele verschiedene Protokolle, die zueinander inkompatibel sind. Die beiden häufigsten SIP und H.323 sind auch schon zuvor erwähnt worden. Das H.323 Protokoll der ITU hat sich aus dem Telefonbereich entwickelt und ist schon sehr ausgereift, aber auch komplex. SIP vom IETF hingegen ist noch recht neu, wurde aber speziell im Hinblick auf Internetfunktionalität konzipiert und ist deshalb wohl das vielversprechendste. Im Moment sind diese zwei Protokolle die dominierenden und sie koexistieren, da beide ihre Vorzüge haben. Während die meisten Hardware Internet Telefone eher auf H.323 beruhen, zeichnet sich der Trend (besonders bei den mehr an Computer gebundenen Lösungen) zur Verwendung von SIP ab. 1.2 SIP 1.2.1 Funktionsweise Das SIP Protokoll regelt Aufbau, Abbau und Veränderungen von Telefonverbindungen. Dieses Application Layer Protokoll wurde von Prof. Hennig Schulzrinne in Berlin entwi5 Siehe Jitter in 1.3 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 9 ckelt, erstmals 1999 als ein Standard der IETF für Voice over IP Verbindungen in RFC 2543 vorgestellt und 2002 in RFC 3261 verbessert. Die von SIP bereit gestellten Dienste sind: • Benutzerlokalisierung: Bestimmung der Kommunikationsendpunkte, die für die Kommunikation benötigt werden • Anrufaufbau: Aufbau der Verbindung sowie Bestimmung der Verbindungsparameter • Verfügbarkeitsprüfung: Überprüfung, ob die angerufene Partei bereit und willig ist, einen eingehenden Anruf anzunehmen • Anrufbehandlung: Der Transfer und der Abbau von Verbindungen SIP ist ähnlich wie HTTP aufgebaut und basiert genauso auf ASCII-Text. Die Pakete sind also auch von Menschen lesbar. Hier ein Beispiel einer SIP Message: INVITE sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 169.130.12.12 Authorization: PGP version=5.0, signature=... From: A. Bell <sip:[email protected]> To: T. A. Watson <sip:[email protected]> Call-ID: [email protected] Subject: Mr. Watson, come here. Content-Type: application/sdp Content-Length: ... v=0 o=bell 53655765 2353687637 IN IP4 128.3.4.5 c=IN IP4 135.180.144.94 m=audio 3456 RTP/AVP 0 3 4 5 Abbildung 1: SIP Nachricht Der obere Teil von Abbildung 1 wird SIP Header genannt. Er gibt die SIP Methode (hier INVITE), den Empfänger (sip:[email protected]), die Version des Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 10 Protokolls (SIP/2.0), das gewählte Transportprotokoll (UDP), einen Proxyserver oder SIPRouter über den die Nachricht geleitet wird (169.130.12.12), den Sender (From: A. Bell <sip:[email protected]>), einige eindeutige Call-ID ([email protected]) und Informationen zum Inhalt der Nachricht (Content) an. Es gibt noch eine Vielzahl von Informationen die je nach Art der Nachricht im Header angegeben werden können: Header Feld beschreibt: Accept die Medientypen, welche in der Antwort möglich sind Accept-Encoding die in der Antwort erlaubten Kodierungen des Inhalts Accept-Language bevorzugte Sprache für Status-, Begründungs- und Sitzungsbeschreibungs-Antworten Allow welche Methoden erlaubt sind Authorization Informationen für eine Autorisierung Call-ID eindeutige Identifizierung eines Gesprächs: Call-ID = ("Call-ID"|"i")":"local-id"@"host Contact Kontaktadresse des Benutzers Content-Encoding Kodierungsart des Inhalts Content-Length Länge des Inhalts in bit Content-Type Art des Inhalts, z.B. text/html CSeq Ansteigende Kommando-Sequenznummer für jede neue Nachricht mit gleicher Call-ID Date Zeit des ersten Sendens einer Nachricht (nach RFC 1123) Encryption Art der Verschlüsselung des Inhalts Expires Zeitpunkt an dem die Nachricht verfällt oder Lebensdauer in Sekunden From Absender mit SIP-Adresse Hide ob die Route der Nachricht geheim gehalten werden soll Max-Forwards maximale Anzahl der Weiterleitungen (wird automatisch dekrementiert) Organization Zugehörigkeit des Absenders zu einer bestimmten Organisation Priority Priorität der Nachricht: emergency, urgent, normal, non-urgent Proxy-Authenticate Informationen von einem Proxy zur benötigten Authentifizierung Proxy-Authentization Angaben des Clients für eine Authorisierung bei einem Proxy Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 11 Header Feld beschreibt: Proxy-Require notwendige Eigenschaften, die ein Proxy haben muss Record-Route Speichern der SIP-Adressen aller Stationen auf der Route Require notwendige Eigenschaften, die der antwortende Teilnehmer haben muss Response-Key Schlüssel, mit dem die Antwort verschlüsselt werden muss Retry-After Zeitspanne bis zum weiteren Sendeversuch, falls voriger nicht erfolgreich Route Route, auf der die Nachricht gekommen ist. Jeder Proxy nimmt den ersten Eintrag aus der Liste weg und verschickt die Nachricht an diesen Eintrag weiter. Server Informationen über die Software des Servers Subject Textinformation über den Zweck des Gesprächs Timestamp Zeitstempel mit individueller Zeit des Clients beim Erstellen der Nachricht To Adresse, für die die Nachricht bestimmt ist Unsupported Eigenschaften, die vom Server nicht unterstützt werden User-Agent Informationen über die Software des Clients Via Weg, den die Nachricht bis jetzt gegangen ist Warning Warnungen über aufgetauchte Probleme bei einer Nachricht WWW-Authenticate Informationen zu einer benötigten Authentifizierung Tabelle 1: SIP Header Felder nach [3] Zudem kann es auch noch experimentelle, neue und selbst eingeführte Header geben, die natürlich nur dann nützlich sind, wenn sie jedem der Teilnehmer bekannt sind. Der untere Teil der SIP Nachricht aus Abb. 1 ist die sogenannte Payload und gibt weitere Informationen wie z. B. die verfügbaren Audio Codecs an. Dieser Teil ist im Session Description Protokoll6(SDP) beschrieben. SIP ist Client/Server basiert. Der Client schickt dabei eine Anfrage (Request), welche vom Server nach Bearbeitung mit dem Ergebnis beantwortet (Response) wird. Dabei kann bei einer Kommunikation von zwei Teilnehmern jeder die Rolle von Server und Client annehmen. Die Teilnehmer werden dabei als User Agents (UA) bezeichnet. Also können sie je nach Situation entweder die Rolle eines User Agent Client (UAC) oder ein User Agent Server (UAS) übernehmen. Die Kommunikation beginnend mit einem Request bis zur engültigen Response wird bei SIP als Transaktion bezeichnet. Das komplette Gespräch stellt einen Dialog dar. Üblicherweise sind User Agents Hardware- oder Softwaretelefone. 6 siehe Abschnitt 1.2.2 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 12 Sie können aber auch spezielle Gateways oder Router sein, die für die SIP-Kommunikation erweiterte Funktionalität wie beispielsweise die Weiterleitung von Verbindungen anbieten [4]. Die Requests, die dem UAC zum Senden zur Verfügung stehen, sind [5]: • • • • • INVITE: Einladung zu einem Gespräch, welches mit einem in der in der Payload angegebenen Codecs kodiert ist OPTIONS: Setzen von spezielle Optionen (meistens für Router) BYE: Anruf beenden CANCEL: Abbruch eines Requests REGISTER: Anmelden eines neuen Nutzers bei einem Telefonverzeichnis Als Antwort sind daraufhin sehr viele Responses möglich. Diese wurden, wie auch von Http bekannt, durchnummeriert. Viele Fehlercodes wurden dabei sogar ganz von HTTP/1.1 übernommen, wenn ein gleichartiger Fehler auftritt wie dort. • Codes zwischen 100 und 199 sind informative Zwischenbemerkungen; 180 ist beispielsweise die Meldung, dass beim Gegenüber jetzt das Telefon klingelt. • Antworten 200 bis 299 geben dann einen endgültigen Erfolg durch; 200, ist zum Beispiel die Nachricht, dass das INVITE angenommen wurde • Die 300er Codes werden für Weiterleitungsmeldungen verwendet. • Mit 4 beginnende Meldungen bedeuten, dass ein Fehler beim Client liegt, wie z. B. fehlerhafte Syntax. • Bei 500 bis 599 kann der Server den Request nicht erfüllen. • 600 bis 699 sind letztendlich Fehler, die global auftreten, also wenn der Request von keinem Server erfüllt werden kann. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 13 Folgende Tabelle 2 zeigt nun die exakten Fehlermeldungen: Type Status code Error 100 Trying 180 Ringing 181 Call Is Being Forwarded 182 Queued Success 200 OK Redirection 300 Multiple Choices 301 Moved Permanently 302 Moved Temporarily 303 See Other 305 Use Proxy 380 Alternative Service 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout 409 Conflict 410 Gone 411 Length Required 413 Request Entity Too Large 414 Request-URI Too Large 415 Unsupported Media Type 420 Bad Extension 480 Temporarily not available 481 Transaction Does Not Exist 482 Loop Detected 483 Too Many Hops 484 Address Incomplete 485 Ambiguous 486 Busy Here 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Time-out 505 SIP Version not supported 600 Busy Everywhere 603 Decline 604 Does not exist anywhere 606 Not Acceptable Informational Client-Error Client-Error Server-Error Global failure Tabelle 2: SIP Client Fehlercodes nach [3] Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 14 SIP-Nachrichten müssen nicht über direkte Verbindungen erfolgen, sondern können auch, wie im Internet üblich, von speziellen SIP-Proxies weitergeleitet werden. Anhand der Email ähnlichen SIP-URL (sip:username@hostname) kann die Nachricht flexibel weiterverschickt oder umgeleitet werden. Normalerweise melden sich User Agents bei einem Server an, der Registrar genannt wird. Dieser hat dann immer die aktuelle IP-Adresse des jeweiligen SIP-UA, auch wenn der UA sich an unterschiedlichen Orten aufhält. Registrare führen eine Liste mit den anwesenden Usern und deren Aufenthaltsadresse7. SIP-Proxies können entweder direkt weiterleiten, ohne zwischen bestimmten Zuständen zu unterscheiden (stateless) oder aber intelligent (stateful) sein und unterstützende Funktionen haben. Solche Funktionen können sein: • Verteilen von Anrufen auf verschiedene Ziele: Falls es nicht genau feststeht, wo sich der Adressat im Moment aufhält und verschiedene Orte denkbar sind. • Traffic und Kostenberechnung • Anmeldung: Proxies übernehmen oft die Funktion eines Registrars (sie müssen dabei nicht einmal als Proxy verwendet werden). Grundsätzlich ist es auch erlaubt, eine bereits bestehende Verbindung durch neue INVITE-Requests zu modifizieren. Diese Möglichkeit wird genutzt, um die Kommunikationsquelle zu ändern oder um im Gespräch eine Pause einzuführen, also den Gesprächspartner auf "Hold" zu setzen. Dazu wird einfach als eigene Empfängeradresse die IP-Adresse 0.0.0.0 verwendet. Selbst wenn der andere Teilnehmer "Hold" nicht versteht, schickt dieser seine Daten dann an die nicht existierende IP-Adresse. In dieser Zeit wird als neue Quelle zum Beispiel ein Musikstream angegeben. Eine Rufumleitung lässt sich mit SIP genauso einfach durchführen. Dazu wird einfach eine Response 302 (Temporarily Not Available) verschickt. Dabei wird im "Contact"-Feld eine Liste der alternativen SIP-URLs mitgeschickt. Der Gesprächspartner kann es dann mit der alternativen Nummer versuchen, normalerweise übernimmt dies aber der Proxy. Für Sicherheit bietet SIP auch die gängigen Mechanismen wie sie auch bei Http und Email verwendet werden. Eine Authentifizierung erfolgt dadurch, dass alle Requests mit dem Code 401 (Authorization Reqired) oder dem Code 407 (Proxy Authentication Required) abgelehnt werden können, falls die Authorisierungsinformationen im Request nicht genügen. Schutz vor einfachem Sniffen8 der Pakete kann durch Verwenden des Transport Layer Security Protokolls (TLS)9 anstatt des unverschlüsselten UDP erzielt werden. Auf der Medienebene bietet sich auch die Möglichkeit Verschlüsselungsalgorithmen wie z. B. 7 Durch die Funktion REGISTER 8 Mitlesen der Internetpakete von Rechnern, die bei der Verbindung zwischen den Kommunikationspartnern liegen 9 es verwendet Secure Sockets Layer (SSL) 3.0 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 15 Triple-DES zu benutzen. Das sogenannte Secure Realtimetime Protokoll (SRTP)10 kann dabei RTP ersetzen, dadurch wird eine Verschlüsselung in Echtzeit ermöglicht und es kommt nicht zu störenden zeitlichen Verzögerungen bei der übertragenen Sprache. Der Austausch der Schlüssel erfolgt hierbei durch TSL geschützte Signalisierung. Durch diese Methoden oder auch das Verwenden von Pretty Good Privacy (PGP)11 kann (bei genügend hoher Sicherheitsstufe) ein Unmöglichmachen des Abhörens gewährleistet werden. Eine "Man in the middle attack", bei der sich ein Belauscher als Gegenstelle für beide Gesprächspartner ausgibt, kann dadurch verhindert werden, dass ein Teil des öffentlichen Schlüssels angezeigt wird, um ihn dann dem Gesprächspartner vorlesen zu können. SIP stellt also alle nötigen Mechanismen für eine sichere Kommunikation bereit. Leider werden solche Sicherheitsmechanismen derzeit kaum verwendet, was einerseits an dem geringen Sicherheitsbewusstsein der Endnutzer liegt und auch daran, dass staatliche Sicherheitsbehörden und Geheimdienste dadurch einer der wichtigsten Informationsquellen beraubt würden [6][7]. Nachdem nun generell auf die Vorteile und Mechanismen von SIP eingegangen wurde, wird das ganze nochmal mit einem Beispiel vertieft. 1.2.2 Beispielszenario Ein typischer Verbindungsaufbau mit SIP sieht nun wie folgt aus: Anrufer Angerufener INVITE 100 (Trying) 180(Ringing) Transaktion 200 (OK) ACK Dialog RTP BYE 200 (OK) Abbildung 2: SIP Verbindungsaufbau 10 http://srtp.sourceforge.net/spec.html 11 http://www.gnupg.org/ Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 16 Nachdem die Teilnehmer über die Register-Methode bei einem Registrar erfolgreich angemeldet sind, also einen 200 Responsecode zurückbekommen haben (der UA gibt an, wo er zu erreichen ist und erhält die Bestätigung mit dem Code 200 (Ok)), kann der eigentliche Dialog beginnen. Jeder Request wird zuerst an den zuständigen SIP-Proxy versandt, der dann das weitere Routing bestimmt. Bei jeder weiteren Station wird dann der VIAHeader um diese Adresse erweitert. Jede Response-Nachricht wird immer an die Adresse geschickt, welche im ersten Via-Feld aufgeführt ist, wobei dann diese Adresse wieder aus der Liste gestrichen wird. Dadurch können die Antworten genau die gleiche Route zurück verfolgen auf der schon der Request gekommen ist. Die übliche SIP Verbindung ist in Abbildung 2 zu sehen; sie wird folgendermaßen initiiert: 1. Der Anrufer (Caller) schickt eine INVITE-Message an den Angerufenen (Callee). Diese kann direkt erfolgen, oder über eine Vielzahl von Proxy Servern. In der INVITENachricht stehen auch alle wichtigen Daten für das Kommunikationsmedium. 2. Darauf erfolgt normalerweise eine informative Nachricht 100 (Trying) als Antwort. Wenn UDP verwendet wird, werden die gleichen Requests grundsätzlich immer wieder verschickt, bis die Nachricht beantwortet wird oder ein Timeout erfolgt. Bei der Ankunft von 100 wird also erkannt, dass erfolgreich gesendet wurde und der Request muss nicht wiederholt abgeschickt werden. 3. Wenn der INVITE-Request beim Gegenüber angekommen ist, muss auf Eingreifen des Benutzers gewartet werden, der das Telefonat annimmt oder ablehnt. Das Telefon klingelt. Deshalb wird 180 (Ringing ) zurück gesendet. 4. Nun gibt es eben diese beiden Möglichkeiten: - Falls das Gespräch abgelehnt wird, schickt man z. B. 603 (Declined) zurück. Damit endet der Dialog. - Bei Annahme wird mit einem 200 (Ok) geantwortet, und darin enthalten ist eine Beschreibung der eigenen Mediendaten, die für die Kommunikation benötigt werden. 5. Wenn diese Daten beim Anrufenden angekommen sind, antwortet dieser mit der Acknowledgement Methode (ACK). Diese Methode wird ausschliesslich bei INVITE verwendet. 6. Jetzt ist die Verbindung aufgebaut und Daten werden per RTP miteinander ausgetauscht. 7. Wenn einer der Gesprächspartner die Verbindung trennen will, schickt er einen BYERequest. 8. Dieser Request wird dann durch ein einfaches 200 bestätigt und das Gespräch ist beendet. Um überhaupt ein Gespräch führen zu können, müssen einige Informationen über das Kommunikationsmedium und die Übertragungsweise ausgehandelt werden. Dies geschieht Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 17 in der Payload der INVITE-Message. Sie wird durch das Session Description Protokoll beschrieben, das im nächsten Kapitel erläutert wird. 1.2.3 SDP Neben SIP benötigt man, wie zuvor schon angesprochen, auch noch das Session Description Protokoll, welches SIP sehr ähnlich ist, aber statt dem Verbindungsaufbau den Austausch von benötigten Kommunikationsinformationen wie Codecs und Ports durchführt. Die Codecs müssen dabei nicht genau festgelegt werden. Es ist deshalb prinzipiell sogar möglich, dass beide Parteien mit unterschiedlichen Codecs senden. Die am wichtigsten auszutauschenden Informationren sind: die IP-Adresse für die Medienverbindung, die Art des Mediums, also Video und Audio, der Port, auf dem der Stream erwartet wird und alle verschiedenen Codecs, die möglich sind. Folgende Abbildung zeigt eine typische SDP-Payload, die einer INVITE-Nachricht angehängt ist: v=0 o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4 s=SDP Seminar i=A Seminar on the session description protocol u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps [email protected] (Mark Handley) c=IN IP4 224.2.17.12/127 t=2873397496 2873404696 a=recvonly m=audio 49170 RTP/AVP 0 m=video 51372 RTP/AVP 31 m=application 32416 udp wb a=orient:portrait Abbildung 3: SDP- Payload [8] Der Inhalt besteht also immer aus einer Zeile mit einem Buchstaben beginnend, der den Parameter spezifiziert, gefolgt von der gewünschten näheren Beschreibung des Inhalts dieses Parameters. Die möglichen Parameter sehen wie folgt aus: Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 18 Session description v= protocol version o= owner and session identifier s= session name i*12= Session information u*= URI of description e*= email address p*= phone number c*= connection information - not required if included in all media b*= bandwidth information t= time the session is active r*= zero or more repeat times z*= time zone adjustments k*= encryption key a*= zero or more session attribute lines Media description (beliebig viele) m= media name and transport address i*= media title c*= connection information - optional if included at session-level b*= bandwidth information k*= encryption key a*= zero or more media attribute lines Tabelle 3: SDP Parameter [8] Da die Nachrichten nur beinhalten, an welchem Port und welche Daten erwartet werden, können unter Umständen Probleme auftreten. Schickt beispielsweise der UAS eine Liste von Codecs, von denen der UAC keinen beherrscht, so bietet sich keine Gelegenheit mehr, dies dem UAS zu melden. Deshalb kann der UAC nur das Gespräch aufnehmen und dann direkt wieder beenden. Der Partner versteht in diesem Fall nicht, warum die Verbindung fehlschlägt[8]. Anderenfalls ist eine Verbindung erfolgreich aufgebaut und eine RTP-Verbindung wird aufgebaut, um die Gesprächsdaten zu transportieren. 12 * bedeutet optionale Beschreibung Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 19 1.3 RTP RTP ist das Protokoll, das für die Übertragung der Sprachsignale zuständig ist (und auch der Videosignale, falls Videoübertragung erfolgen soll). RTP wurde von der AudioVideo Transport Working Group (AVT WG)13 für den Transport von Nutzdaten im zeitsensitiven Modus entwickelt. Dafür hat es spezielle Eigenschaften wie: • • • • Identifizierung des Datentyps Folgenummerierung Zeitstempel Auslieferungsüberwachung Den genauen Inhalt eines RTP-Headers wird hier in Abbildung 4 dargestellt: V P X CC M PT(7Bit) Sequence Number (16 Bit) Timestamp (32 Bit) Synchronisation Source ( SSRC) Identifier (32 Bit) Contributing Source (SSRC) Identifier (32 Bit) V: Version (2 Bit) P: Padding (1 Bit) X: Extension (1 Bit) CC: Contributing Source Count (CSRC) (4 Bit) M: Marker (1 Bit) PT: Payload Type (7 Bit) Abbildung 4: RTP-Header[9] Nachdem Sprache durch Aufnahme, Digitalisierung und Komprimierung durch einen Codec in Audiodaten umgewandelt wurde, werden diese Audiodaten als Stream versendet. Die Einheiten sind dabei sehr klein, meistens wird alle 20ms ein Paket verschickt. Jeder Dateneinheit geht ein RTP-Header voraus. Und RTP-Header und die Audio-Dateneinheit werden zusammen wiederum in ein UDP-Paket verpackt und dieses schließlich in ein IPPaket (siehe Abbildung 5). 13 im Auftrag der IETF Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 20 Realtime-Time-Daten 20-150 Byte RTP UDP IP 12-Byte-Header 8-Byte-Header 20-Byte-Header Abbildung 5: Audio-Paket mit Header Der RTP-Header zeigt an, welcher Kodierungstyp verwendet wird, den Payload Type (PT). Deshalb ist es auch möglich, während des Sendens das Kodierungsverfahren zu wechseln. Zudem enthält jedes Paket einen Zeitstempel und eine Sequenznummer, da im Internet beim Verwenden von UDP häufig Pakete verloren gehen und/oder in der falschen Reihenfolge beim Empfänger eintreffen können. Dadurch können die Pakete beim Empfänger sinnvoll wieder zusammengefügt werden. Der Empfänger erfährt dadurch auch etwas über die Qualität der Verbindung und kann diese dann eventuell anpassen. Dies geschieht dadurch, dass die Datenübertragung vom Realtime Control Protokoll (RTCP) überwacht wird. RTCP basiert auf einem regelmäßigen Kontrollpaketeaustausch zwischen den Teilnehmern. Dabei wird ein Feedback über die Dienstgüte ausgetauscht und QoS-Parameter werden dann passend gesetzt [9]. Übliche Audio-Kodierungen und deren Payloadtyp zeigt nun Tabelle 4: PT Kodierung 0 PCMU 1 reserved 2 reserved 3 sample/fra me Sample Rate (Hz) Kanäle sample 8,000 1 GSM frame 8,000 1 4 G723 frame 8,000 1 5 DVI4 sample 8,000 1 6 DVI4 sample 16,000 1 7 LPC frame 8,000 1 8 PCMA sample 8,000 1 9 G722 sample 8,000 1 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 21 PT Kodierung sample/fra me Sample Rate (Hz) Kanäle 10 L16 sample 44,100 2 11 L16 sample 44,100 1 12 QCELP frame 8,000 1 13 CN14 frame 8,000 1 14 MPA frame 90,000 variabel 15 G728 frame 8,000 1 16 DVI4 sample 11,025 1 17 DVI4 sample 22,050 1 18 G729 frame 1 8000 Tabelle 4: RTP Audio-Codecs nach [9] Weitere Codecs wie die G726-xx, G729D, G729E, GSM-EFR, L8, RED und VDVI bekommen dynamische PT-Nummern, die von 96 bis 127 aufwärts vergeben werden können. Andere Nummern sind dabei entweder reserviert oder für Videokodierungen festgelegt. RTP wird analog zu der Audioübertragung auch für Videoübertragung verwendet [10]. Da die Sprache nur mit einem Mikrofon aufgenommen wird, reicht ein Kanal (Mono) bei der Übertragung aus. Stereo Sound und noch mehr Kanäle sind ebenfalls möglich, werden hier aber nicht näher betrachtet. Wie die Tabelle 4 zeigt, sind die Kodierungen entweder sample-basiert oder frame-basiert. Bei der sample-basierten Kodierung ist jede Abtastrate fest durch eine gegebene Größe in Bits gegeben. Die kodierten Daten sind daraufhin variabel. Samples werden individuell kodiert, z.B. durch Delta Modulation. Ein RTP-Audio-Paket kann dabei eine beliebige Anzahl von Samples enthalten und die Dauer des Audio-Pakets wird durch die Anzahl der Samples festgelegt. Frame-basierte Kodierungen packen einen Audioblock fester Länge in einen anderen Block komprimierter Daten, der üblicherweise auch eine feste Länge besitzt. Man wendet also ein Zeitfenster auf den Samplestrom an. Jede Gruppe von Samples nennt man dann Frame, dieser wird in einen kürzeren Bit-Stream kodiert. Der Sender kann mehrere solcher 14 comfort noise ist kein üblicher Codec, er dient zum Erzeugen von künstlichem Rauschen zur Unterdrückung von Pausen voller Stille in Gesprächen (näheres siehe RFC3389) Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 22 Frames zusammen in einem RTP-Paket verschicken. Für den Empfänger ist es dann leicht möglich wegen der festen Länge der Frames diese wieder aus dem Paket zu extrahieren, indem er es einfach in der durch die Kodierung festgelegten Größe teilt. Die Codecs können also aufeinander folgende Frames in einem Paket direkt bearbeiten ohne die Anzahl der Frames wissen zu müssen. Um den Audiostream später auch wieder richtig zu erhalten, sind die Frames in einem Paket nach der zeitlichen Reihenfolge sortiert, so dass das erste Frame immer das älteste ist. Im Gegensatz zu samplebasierten Kodierungen, bei denen fast keine Verzögerung stattfindet, entsteht bei framebasierten Kodierungen eine kurze Verzögerung dadurch, dass erst das ganze Frame aufgenommen werden muss, bevor es kodiert werden kann. Frame 1 Frame 2 Frame 3 Zeitfenster Begin n d er Kod ier u n g Abbildung 6: framebasierte Kodierung Im folgenden werden ein paar der wichtigen Codecs genauer betrachtet: • PCMU/PCMA: PCMU, auch als Ulaw oder ?-Law bekannt, und PCMA, ebenso Alaw genannt, wurde von der ITU in ihrer Empfehlung G.711 spezifiziert. Es handelt sich hierbei um eine sample-basierte Kodierung mit 8 Bits pro Sample. Sie wird mit einer logarithmischen Kennlinie von 12 auf 8 Bit pro Abtastwert komprimiert. Die logarithmische Kennlinie wird verwendet, da es wahrscheinlicher ist, dass viele Signale bei einer niedrigeren Signalstufe vorkommen als bei einer hohen. Um die Besonderheiten der menschlichen Wahrnehmung zu berücksichtigen, wird nur der Frequenzbereich von 300 bis 3400 Hz übertragen. PCMA wird bei ISDN verwendet und wird deshalb auch von den meisten IP-Telephonen bevorzugt, weil dadurch Sprachdaten an Gateways zum PSTN nicht umcodiert werden müssen, sondern direkt über ISDN weiterlaufen können. Genauso wie bei ISDN benötigt PCMU eine Nettobandbreite von 64kBit/s in beide Richtungen, was mit Headern sogar noch bis auf 80kbit/s ansteigt (vgl. auch Abbildung 4). Während Ulaw in Nord-Amerika und Japan als Standard gewählt wurde, wird Alaw in Europa und dem Rest der Welt bevorzugt[11]. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 23 • G.729 Deshalb wird häufig G.729 als alternative für PCMU angeboten, falls die Verbindung schlechter ist. Die benötigte Bandbreite ist dabei mit 8kbit/s um fast 90% geringer als bei PCMU, bei fast gleicher Sprachqualität, die immer noch viel besser als bei Mobiltelefonen ist. • DVI4 DVI415 verwendet Adaptive Differential Pulse Code Modulation16 (ADPCM) und ist eine sample-basierte Kodierung mit 4 Bit pro Sample. Es verwendet nur die Unterschiede zwischen den Samples und passt die Skalierung der Kodierung dynamisch bei großen und kleinen Unterschieden an. Das Verfahren benötigt eine viel geringere Bandbreite als normale PCM und ist einfach zu implementieren, aber es tritt viel weißes Rauschen auf. Weißes Rauschen nennt man ein Rauschen mit derselben Amplitude in jeder Frequenz. Akustisch wird dieses Signal so wahrgenommen, als ob die Amplitude mit der Frequenz anstiege, da im menschlichen Gehör die Empfindlichkeit mit zunehmender Frequenz logarithmisch ansteigt. Der Höreindruck gleicht dem eines stimmlosen "sch" [12]. • G.723 Der frame-basierte Standard G723 wurde in der Empfehlung G.723.1, "Dual-rate speech coder for multimedia communications transmitting at 5.3 and 6.3kbit/s" von der ITU vorgestellt. Die Sprache wird dabei also in sehr geringen Bitraten übertragen. Frames können entweder 24 Oktette (6.3 kb/s frame), 20 Oktette (5.3 kb/s frame) groß oder, falls in kleinen Geprächspausen die Stille unterdrückt wird, ein sogenanntes Silence Insertion Descriptor (SID)17 Frame von 4 Oktetten sein. Die Frames können miteinander beliebig vermischt werden, denn am Anfang jedes Frames werden in 2 reservierten Bits der Typ und damit die Länge des Frames angegeben. Die Audiolänge der Frames ist immer auf 30ms festgelegt. Durch die framebasierte Kodierung entsteht eine Verzögerung von 7.5ms wegen des Look-Aheads. Die Sprachübertragung von all diesen Codecs ist aber immer nur so gut wie es die Internetverbindung hergibt. Bei einer Verzögerung von unter 150ms spricht man nach den Telefonnormen ( ITU Recommendation G.109) von sehr guter Qualität. Bis 400ms ist die Übertragungsqualität noch akzeptabel, darüber aber ist die Verzögerung schon störend, weil sich die Gesprächspartner dann gegenseitig ins Wort fallen. Ein anderes Problem ist eine unregelmäßige Übertragung: der Jitter. Dabei werden Pakete, die nicht schnell genug ankommen, ausgelassen und die Sprache setzt für einen Moment aus oder Pakete, die zu schnell aufeinander folgen, werden als Knacken hörbar. Deshalb speichert der Empfänger die Pakete in einem sogenannten Jitter-Puffer. Falls dieser zu klein ist, kommt es also zu Übertragungsfehlern, ist er zu groß, kommt es zu 15 http://www.cs.columbia.edu/~hgs/audio/dvi/ 16 abgeleitet von dem "IMA ADPCM wave type" der Interactive Multimedia Association (IMA) 17 Auch als comfort noise bekannt Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 24 einer zu großen Verzögerung. Gehen Pakete komplett verloren und können wegen der Verzögerung nicht neu angefordert werden, muss der Codec diese Pakete ausgleichen. Wenn maximal 5% Verlust auftritt, ist dies beim Gespräch nicht hörbar [13]. Nachdem nun die wichtigsten Grundbegriffe der VoIP-Telefonie näher erläutert wurden, geht es in den nächsten Kapiteln um eine ganz andere neue Internet Technologie, die Web-Services. Dabei handelt sich um ein nicht weniger aktuelles Thema. Verwendung von Web-Service breitet sich rasant aus. In dieser Projektarbeit werden nun IP-Telefonie und Web-Services kombiniert. 1.4 Web-Services Das World Wide Web Consortium W3C definiert Web-Services in der Spezifikation18 von 2002 wie folgt: Ein Web-Service ist ein durch eine URI festgelegtes Softwaresystem, dessen öffentliche Schnittstellen und Verbindungen durch XML definiert und beschrieben werden. Diese Definition kann von anderen Softwaresystemen aufgefunden werden. Diese Systeme können dann mit dem Web-Service in der Art wie sie in dessen Beschreibung definiert wurde auf Basis von über Internet-Protokollen verschickten XML-Dokumenten kommunizieren. Web-Services nutzen dabei üblicherweise spezielle Standards wie HTTP, SOAP , XML, WSDL und UDDI um ihre Dienste zur Verfügung zu stellen. Was man darunter versteht wird nun im folgenden genauer erklärt. 1.4.1 XML Extensible Markup Language (XML) ist ein Framework um Dokument Markup Languages (Auszeichnungssprachen) zu definieren. XML hat sich als System für den Dokumentaustausch über das Internet weitgehend durchgesetzt. Eine Dokument-MarkupLanguage ist ein Satz von Elementen (Tags). Diese Tags haben die üblich verwendeten Eigenschaften von Dokumenten, wie Struktur, Inhalt und Darstellungsinformationen. Eine Document Type Definition (DTD) ist eine Datei in Standard Generalized Markup Language (SGML) oder in XML, in der die Regeln (Grammatik) zum Aufbau einer XMLDatei beschrieben werden. XML Schemata 19 sind die funktionserweiterten Nachfolger von DTDs und sind selbst in XML definierbar. Wenn sich mehrere Kommunikationspartner auf 18 http://www.w3.org/TR/2002/WD-ws-gloss-20021114/ 19 http://www.w3.org/TR/xmlschema-0/ Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 25 ein solches, für alle Zwecke leicht anpassbares Schema geeinigt haben, können Dokumente danach erstellt und miteinander ausgetauscht werden. Alle Anwendungen können diese Dokumente dann verarbeiten. Der Inhalt kann dann auch an andere Formate, wie html oder pdf, geliefert werden [14]. • • • • • • • • • • • Die wichtigsten Vorteile von XML sind: Mit XML ist es möglich (fast) beliebig strukturierte Daten in einer Textdatei zu speichern. Die DTD oder das Schema können zentral gehalten werden. XML gestattet die syntaktische Validierung eines Dokuments. XML-Werkzeuge (z. B. Parser) sind frei erhältlich. Einfache Austauschbarkeit von Daten XML Dateien können dynamisch oder statisch sein. Formatierung und Programmierung von Dokumenten erweitertes Linking [15] XML ist lizenzfrei, plattformunabhängig und von den meisten Systemen unterstützt. Wegen der Struktur gibt es effiziente Suchroutinen mit erweiterten Funktionen, wie z. B. der Suche nach Dokumenten mit bestimmten Tags oder Similarity Search. XML kann die Unicode-Standards UTF20-16 und UTF-8 verwenden und ist deshalb prinzipiell vom Zeichensatz unabhängig. In der neusten Fassung von 2004 können sogar Tags in anderen Sprachen definiert werden. Ein einfaches XML Dokument, das für den Adressenaustausch definiert wurde, kann dann folgendermaßen aussehen: 20 nach RFC3629 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 26 <?xml version='1.0' encoding="ISO-8859-1" standalone="no"?> <adresse> <einzeladresse> <name>Mustermann</name> <vorn>Max</vorn> <strasse>Triftstrasse 10</strasse> <plz>67663</plz> <ort>Kaiserslautern</ort> <tel art="priv">0631/2345</tel> <tel art="off">0631/2346</tel> </einzeladresse> Abbildung 7: XML Beispiel 1.4.2 SOAP Mit dem SOAP wird die interne Struktur der XML-Dokumente beschrieben, die WebServices konsumieren und produzieren. Der Inhalt dieser Dokumente ist in XML verfasst. SOAP ist ein bekannter Industriestandard der sich durchgesetzt hat21. Er wurde zusammen von IBM, Microsoft, Userland und DevelopMentor speziell für Remote-Procedure-Calls und andere Requests über HTTP entwickelt, kann aber ebenso z. B. über FTP, TCP, SMTP, POP3, MQSeries und Jabber erfolgen. SOAP ist unabhängig vom zugrundeliegenden Transportprotokoll. Der Vorteil von SOAP besteht darin, dass zwei unterschiedliche Anwendungen plattformunabhängig und auch nicht beschränkt auf eine Programmiersprache oder ein Protokoll Informationen durch eine einfache XML-basierte Nachricht austauschen können [16]. Abbildung 8: SOAP Umschlag 21 http://www.w3.org/TR/SOAP/ Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 27 Eine SOAP-Nachricht besteht aus einem Umschlag (Envelope), der optional einen SOAP-Header und danach einen erforderlichen Body enthält (vgl. Abb. 8). Der Header enthält Information zur Nachrichtverarbeitung, wie Angaben zum Routing, der Authentifizierung oder der Autorisierung. Der Body beinhaltet die eigentliche zu versendende und zu verarbeitende Nachricht in freier XML-Syntax. Das folgende Beispiel zeigt eine typische SOAP Anfrage anhand der Abfrage des aktuellen Kurses der IBM Aktie (siehe Abbildung 9). Dabei beruht die XML-Syntax für die Formulierung auf dem Namensraum http://www.w3.org/2001/06/soap-envelope. Diese RPC-Anfrage ruft die Funktion getQuote(String symbol) auf dem Server für "symbol=IBM" auf. Daraufhin sendet der Server eine SOAP Message mit dem Kurs "98.06" zurück (Abb. 10) [17]. <s:Envelope xmlns:s="http://www.w3.org/2001/06/soap-envelope"> <s:Header> <m:transaction xmlns:m="soap-transaction" s:mustUnderstand="true"> <transactionID>1234</transactionID> </m:transaction> </s:Header> <s:Body> <n:getQuote xmlns:n="urn:QuoteService"> <symbol xsi:type="xsd:string"> IBM </symbol> </n:getQuote> </s:Body> </s:Envelope> Abbildung 9: SOAP Aktienkurs Anfrage Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 28 <s:Envelope xmlns:s="http://www.w3.org/2001/06/soap-envelope"> <s:Body> <n:getQuoteRespone xmlns:n="urn:QuoteService"> <value xsi:type="xsd:float"> 98.06 </value> </n:getQuoteResponse> </s:Body> </s:Envelope> Abbildung 10: SOAP Aktienkurs Antwort 1.4.3 URI Der Uniform Resource Identifier (URI22) ist eine Zeichenfolge um eine virtuelle oder physikalische Quelle zu identifizieren. Er legt die Eindeutigkeit des Web-Services durch eine Adresse fest. Ein URI kann ein Uniform Resource Locator (URL) (z. B. http://www.uni-kl.de) oder ein allgemeiner gefasster Uniform Resource Name (z. B. URN://www.uni-kl.de) sein. Durch den URI kann ein Web-Service gefunden und seine Dienste in Anspruch genommen werden. Der noch später genauer erklärte Web-Service Venice hat zum Beispiel die URL: http://venture.informatik.uni-kl.de:14080/VoiceIPWebService_ICSY-jaxrpc [18]. 1.4.4 WSDL Web-Services sind selbstbeschreibend. Diese Beschreibung erfolgt durch die auf XML basierende Web Services Definition Language23. Sie ist also aufgrund der XML-Eigenschaften plattform-, programmiersprache- und protokollunabhängig. Sie enthält folgende Informationen für die Außenwelt über: 22 RFC 2396 23 http://www.w3.org/TR/wsdl Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen • • • 29 die Schnittstellendefinition: Die Art der Dokumente, die übertragen werden. Die Funktionsweise und der Zweck des Web-Services und wie dieser von einem Konsumenten benutzt werden kann. Die URI: eindeutige Adresse des Web-Services das Binding: welche Transportprotokolle für die Kommunikation verwendet werden [19] Zur Veranschaulichung zeigt Abbildung 11 eine gekürzte WSDL-Datei eines einfachen Web-Services, der eine Temperatur von Fahrenheit in Celsius umrechnet. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 30 <?xml version="1.0" encoding="utf-8"?> <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://Walkthrough/XmlWebServices/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://Walkthrough/XmlWebServices/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <s:schema elementFormDefault="qualified" targetNamespace="http://Walkthrough/XmlWebServices/"> <s:element name="ConvertTemperature"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="Fahrenheit" type="s:double" /> </s:sequence> </s:complexType> </s:element> ... </types> <message name="ConvertTemperatureSoapIn"> <part name="parameters" element="s0:ConvertTemperature" /> </message> ... <portType name="Service1Soap"> <operation name="ConvertTemperature"> <documentation>This method converts a temperature in degrees Fahrenheit to a temperature in degrees Celsius.</documentation> <input message="s0:ConvertTemperatureSoapIn" /> <output message="s0:ConvertTemperatureSoapOut" /> </operation> </portType> <binding name="Service1Soap" type="s0:Service1Soap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <operation name="ConvertTemperature"> <soap:operation soapAction="http://Walkthrough/XmlWebServices/ConvertTemperature" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <service name="Service1"> <documentation>A temperature conversion service.</documentation> <port name="Service1Soap" binding="s0:Service1Soap"> <soap:address location="http://www.xprogramming.com/webservices/service1.asmx" /> </port> </service> </definitions> Abbildung 11: Beispiel WSDL für Temperaturkonverter 24 24 http://www.xprogramming.com/webservices/service1.asmx?WSDL Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 31 Am 15. März 2001 wurde die WSDL Version 1.1 vorgestellt. Sie ist eine W3C Note. In dem Working Draft Version 2.0 wurden die Sprachdefinition (core language) und die Nachrichten-Muster (message exchange patterns) weiterentwickelt. 1.4.5 UDDI Die Universal Description, Discovery and Integration (UDDI) Spezifikation beschreibt einen Register-Dienst für Web-Services, andere elektronische und auch nicht elektronische Dienste. Ein solches Register verwaltet Informationen über die Dienstanbieter (Provider) und die Art und Schnittstellen der Dienste. Deshalb wird auf der einen Seite UDDI verwenden, um aktiv Dienste anzubieten und dafür zu werben. Und auf der anderen Seite können Nutzer von Diensten durch UDDI passende Dienste inklusive der zugehörigen Informationen finden und diese dann in Anspruch nehmen. Dazu werden ebenfalls die Standards SOAP, WSDL und XML verwendet. UDDI stellt die folgenden drei Basisfunktionen zur Verfügung (Abb. 12): • • • publish: Das Veröffentlichen eigener Web-Services um von anderen leichter gefunden zu werden. find: Das Suchen (Query) und Finden (Discovery) von speziellen Web-Services bind: Das Verbinden zu dem gefundenen Web-Service UDDI 2. Query 1. Publish 3. Discovery 4. Bind Service Requester Service Provider Abbildung 12: UDDI Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Grundlagen 32 Die großen öffentlichen UDDI-Register gleichen sich regelmäßig miteinander ab, damit sie alle auf dem gleichen Stand bleiben. Besonders bekannt ist das Universal Business Register (UBR), das ein Verzeichnis der öffentlich verfügbaren e-commerce Dienste anbietet. Diese beinhalten Informationen in drei Teilen: Erstens stehen dort Details über Adresse und weitere Kontaktmöglichkeiten der anbietenden Firma (white pages), zweitens deren gewerbliche Klassifizierungen (yellow pages) und drittens technische Details, wie die Spezifikation des Web-Services (green pages). Zur Zeit wird das UBR in Zusammenarbeit von IBM, Microsoft, NTT Com und SAP geleitet. UDDI hilft also besonders im gewerblichen Bereich beim Auffinden des passenden Angebots aus Millionen Online Angeboten. Auf der anderen Seite hilft es auch den Firmen neue Kunden zu gewinnen und den Kontakt zu alten Kunden zu verbessern. 1.4.6 In der Praxis In der praktischen Anwendung kann man die Definition dann etwas enger fassen. Definition 2: Ein Web-Service ist eine Einheit, beschrieben durch ein WSDL-Dokument, die an ihrer URI existiert und SOAP Dokumente mit der Welt austauscht und in einem UDDI Verzeichnis eingetragen und gefunden werden kann. Wie schon der Name sagt, bieten Web-Services Dienste über das World Wide Web (WWW) an. Eine Anfrage wird geschickt und darauf eine Antwort geliefert. Die Möglichkeiten sind vielfältig. Ein Web-Service kann periodische Sensordaten senden, oder man kann ebenfalls eine spezielle Anfrage über das aktuelle Wetter an verschiedenen Orten erfragen. Die Dokumente können also einseitig und asynchron verschickt werden oder synchron in einem Request-Response Modell. Die meisten Web-Services nutzen einen RPC über XML. Entwickler können so schon existierende Anwendungen einfach zu Web-Services umwandeln, ohne große Veränderungen durchführen zu müssen. Es gibt Web-Service Entwicklungstools die den Programmierer unterstützen und solche Umwandlungen durch automatische Codegenerierung erleichtern. WSDL Dokumente werden dadurch direkt aus dem Quellcode generiert. WebServices werden auch häufig für die Interaktion zwischen heterogenen Applikationen eingesetzt, um zwischen diesen ein Interface zu erzeugen. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Web-Service basierte VoIP-Lösung 33 2 Web-Service basierte VoIP-Lösung 2.1 Problemstellungen In Kapitel 1.1 wurde bereits dargelegt, dass es die verschiedenen Protokolle für VoIP gibt, die nicht so einfach miteinander kommunizieren können. Insbesondere haben sich die beiden Standards H.323 und SIP stark durchgesetzt und werden wegen ihren unterschiedlichen Vorteile auch noch lange koexistieren. Die bisherigen VoIP Systeme basieren auf Clientprogrammen, die fest in den Endgeräten installiert sind und sowohl das Signaling als auch die Medienverarbeitung übernehmen. Dadurch ist die Software erstens sehr umfangreich und zweitens muss bei Protokolländerungen und Einführen von neuen Features immer wieder in allen Clients ein Update durchgeführt werden. Das bringt nicht nur viel Aufwand, sondern auch hohe Kosten mit sich und ist zudem problemanfällig. Diese Standalone-Software lässt sich auch schwierig in andere Applikationen integrieren, meistens müssen solche dafür komplett neu entwickelt werden. Oft schützen Firewalls das Intranet vor Zugriffen aus externen Netzen. Das hat zur Folge, dass ein externer Anrufer ohne weitere Maßnahmen gar nicht die Chance hat, einen VoIP Anruf zu initiieren, da alle Pakete von der Firewall abgefangen werden. Auftretende Probleme wie • verschiedene Protokolle • Aufwand bei Clientupdates • Größe der Software • Integration in andere Systeme • Firewall sind sehr störende Faktoren für die weitegehende Ausbreitung und Verwendung von VoIP. Es wurden schon einige Verbesserungen entwickelt, um diese Probleme zu vermeiden. Für die verschiedene Protokolle existieren Gateways, die zwischen diesen übersetzen [4]. Um Clientupdates zu vereinfachen, werden VoIP Programme auch als Web-Applikationen angeboten. Der Webbrowser ruft dann immer die aktuelle Version des Programmes auf, dadurch ist aber eine Integration in eigene Applikationen sehr schwierig. Deshalb werden für die bessere Integrierbarkeit Programmierschnittstellen (APIs) entwickelt, jedoch benötigen diese trotzdem noch eine enge programmiertechnische Integration der VoIP-Software in die anderen Applikationen. Für das Firewall Problem gibt es Lösungen die mit Proxy Servern arbeiten. Zum Beispiel Firewall Controlling Proxies, die dann der Firewall die erlaubten Verbindungen angeben. Alle diese Lösungen sind mehr oder weniger zufrieden stellend. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Web-Service basierte VoIP-Lösung 34 2.2 Idee Eine neue Lösung stellt dabei das Anbieten eines VoIP Systems durch Web-Services dar. Dabei übernimmt ein Web-Service die Kommunikation mit den Signaling Protokollen. Der Client wendet sich, wenn ein neuer Anruf erwünscht wird, an den Web-Service, der dann dabei hilft, die Verbindung aufzubauen. Durch dieses Auslagern der Funktionalität des Signaling von den Clients auf die Web-Services wird die Größe der Clientsoftware enorm reduziert. Der Client muss nur den Aufruf des Web-Services kennen und später den Datenaustausch über RTP durchführen. Dadurch wird das Updaten der Clientsoftware auch nicht mehr so oft benötigt, da meistens Updates am Web-Service ausreichen. Diese Simple Clients (SC) kommunizieren über die in der entsprechenden WSDL-Datei angegebenen Protokolle, meist mittels SOAP. Weil Clients für Web-Services leicht zu entwickeln sind, besteht die Möglichkeit solche Lösungen einfach auch in andere Applikationen zu integrieren. RTP H.323-Telefon Simple Client SOAP RTP H323 SIP-Client VoIP Web-Service SIP Web-Service H.323 Web-Service SIP Abbildung 13: VoIP über Web-Service In Abbildung 13 kommuniziert ein Simple Client per RTP mit einem H.323 und einem SIP Telefon. Nachdem der Simple Client über SOAP die Verbindung über den VoIP WebService angefragt hat, leitet dieser die Anfrage über einen anderen (Web-)Service, der das benötigte Protokoll versteht, an das externe Telefon weiter. Es werden in dem Modell verschiedene Web-Services verwendet, um eine bessere Modularität zu erhalten, und auch um ein Verteilen der Web-Services auf verschiedenen Servern zu ermöglichen. Natürlich Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Web-Service basierte VoIP-Lösung 35 können Simple Clients auch direkt miteinander kommunizieren, in diesem Fall werden die Layer 1 Web-Services und die anderen Protokolle gar nicht benötigt. Das folgende Beispiel zeigt, wie ein Verbindungsaufbau von einem Simple Client zu einem SIP User Agent prinzipiell aussehen kann: SC VoIP Service SIP Service SIP UA Make_Call Make_Call Ringing Ok Ok Ringing Ok Ok INVITE Ringing 180 Ok 200 ACK Verbindung ist aufgebaut Abbildung 14: Verbindungsaufbau Simple Client nach SIP UA Der Simple Client ruft zuerst die Methode makeCall() des Web-Services auf. Damit meldet er, dass er einen Anruf beginnen will und an wen dieser Anruf gesendet werden soll. Der Web-Service leitet diesen Aufruf dann an den SIP-Service weiter, welcher ihn in eine SIP INVITE-Methode übersetzt. Wenn diese bei dem adressierten SIP UA eingetroffen ist, sendet er zuerst mit der Zwischenmeldung 180 zurück, dass der Anruf in Bearbeitung ist. Nach Interaktion des Benutzers wird, falls dieser sich entschlossen hat den Anruf anzunehmen, eine SIP Antwort 200 geschickt. Diese geht auch wie die Ringing-Antwort den gleichen Weg zurück, den sie gekommen ist. Darauf hin übermittelt der Simple Client nochmal ein OK, dass der Verbindung nichts mehr im Wege steht (doppelter Handshake). Nachdem der SIP Web-Service das OK als ACK weitergeleitet hat, beginnt die Mediendatenübertragung per RTP direkt zwischen den beiden Clients. Nachdem bis jetzt nur Theorie besprochen wurde, wird nun im Folgenden auch eine praktische Implementierung gezeigt. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Web-Service basierte VoIP-Lösung 36 2.3 Projekt Venice In dem Projekt Venice, das dieser Arbeit zugrunde liegt, wird die Umsetzung von VoIP als Web-Service erforscht und durch eine Implementierung in Java getestet [20]. Unter einer Implemetierungsklasse VoiceIPWeb-Service werden dabei verschiedene Dienste zusammengefasst und als Web-Service nach aussen angeboten. Dort meldet sich dann ein Client an und der Service hilft bei der Vermittlung von Gesprächen. Für die Anmeldung benötigt er zuerst die Dienste des AuthenticationService, der die Benutzer verwaltet. Der AuthenticationService enthält einen Usermanager, der mit Hilfe in einer XML-Datei oder einer SQL25 Anfrage auf eine Datenbank, in der alle Benutzer und deren Passwörter gespeichert sind, den Benutzer auf Rechtmässigkeit überprüft. Will ein Simple Client sich an dem Web-Service anmelden, muss er sich erst mit der Funktion login() registrieren. Ist der Benutzer authentifiziert und autorisiert, bekommt er vom Web-Service eine eindeutige Anmelde-ID, Lease genannt, die durch die Methode refreshLease() in bestimmten Zeitintervallen immer wieder verlängert werden muss, ansonsten gibt es ein Timeout und der Benutzer wird automatisch abgemeldet. Natürlich gibt es auch eine Funktion logout() zum Abmelden. Der andere wichtige Dienst, der zur Verfügung steht, ist der VoiceIPService. Er hat die Verarbeitung von VoIP Telefonaten zur Aufgabe. Im aktuellen Stand der Entwicklung stehen dazu folgende Methoden zur Verfügung: initCall() Bereitet ein Gespräch vor makeCall() Leitet einen Anruf ein acceptCall() Nimmt einen Anruf an denyCall() Lehnt einen Anruf ab endCall() Beendet einen bestehenden Anruf Tabelle 5: VoIP Web-Service Methoden 25 Datenbank-Abragesprache Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Web-Service basierte VoIP-Lösung 37 Abbildung 15: Venice Web-Services Jede aufgebaute Verbindung wird dabei von einem sogenannten CallHandler verwaltet. Dieser wird automatisch vom VoiceIPService erzeugt, wenn ein Gespräch aufgebaut werden soll und weist der Verbindung eine eindeutige CallID zu, die genauso wie auch Lease eine Universal Unique Identifier (UUID) ist. Ein CallHandler kann RemoteCallhandler oder LocalCallHandler sein. Sind die zwei Benutzer an entfernten Web-Services angemeldet, braucht man den RemoteCallHandler, dieser verwendet eine WSBridge, welche die Kommunikation zwischen den beiden Web-Services übernimmt. Die CallHandler sind die Klassen, die für das Senden und Empfangen von Nachrichten zuständig sind. Sie besitzen dazu Funktionen wie makeCall(), acceptCall() und endCall(), durch welche sie Events an die Clients leiten können. Folgendes Sequenzdiagramm (Abbildung 16) zeigt die zeitliche Reihenfolge und die beteiligten Komponenten bei einer Kommunikation zweier Simple Clients in Venice: Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Web-Service basierte VoIP-Lösung Abbildung 16: Venice Verbindungsaufbau mit Remote Web-Service Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung 38 Web-Service basierte VoIP-Lösung 39 Abbildung 17: Venice Simple Client Der Simple Client (Abbildung 17) ist ebenfalls in Java implementiert26, und zwar derzeit als Java Webstart Applikation, die automatisch bei jedem Neustart den Client auf eine mögliche neuere Version überprüft. In einer späteren Ausbaustufe wird hierfür ein allgemeiner Software-Verteilungsdienst verwendet[21]. Das Programm ist dabei zustandsorientiert programmiert. Der Client befindet sich je nach aktuellem Status in einem bestimmten Zustand und vermag nur in passende Folgezustände zu wechseln. Das vermeidet Fehler, denn diese werden bei unzulässigen Zuständen abgefangen. Das Diagramm in Abbildung 18 zeigt die verschiedenen Zustände: Abbildung 18: Venice Simple Client Zustandsdiagramm 26 auch eine Version in C# existiert Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Web-Service basierte VoIP-Lösung 40 Nach Start befindet man sich zuerst im Zustand "LOGIN". Bei einem erfolgreichen Login erhält der Client eine bestimmte Lease und ist dann im Zustand "PICKUP". Dort kann er entweder passiv auf einen eingehenden Anruf warten, wodurch er in "INCOMING" wechselt, oder aktiv jemanden anrufen. Dies geschieht durch Ausführen von initCall(), wodurch der Client in den Zustand "MAKECALL" gelangt und danach erreicht er durch makeCall() den Zustand "CALLING". Bei Annahme eines Gesprächs gerät man in den Zustand "TALKING", ein Ablehnen oder Gesprächsende führt wieder nach "PICKUP" zurück. Das Zustandsmodell ist so ausgelegt, dass zu jeder Zeit neue Zustände integriert oder alte Zustände ersetzt werden können [22][23]. 2.4 Aufgabe Die Aufgabe dieser Projektarbeit besteht nun darin, Venice zu erweitern. Es müssen auch die Services der unteren Schicht implementiert werden, insbesondere ein Dienst, der die Kommunikation mit SIP Clients ermöglicht. Dazu soll eine Open-Source Software zur Verarbeitung von SIP (SIP Stack) in die Architektur von Venice integriert werden, um Gespräche von SIP Telefonen an Simple Clients des Venice Projektes und in die andere Richtung zuzulassen. Im Kapitel 3 werden nun zuerst ein paar grundlegende Voraussetzungen und dann die Entwicklung des SIP Services erläutert. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 41 3 Realisierungsaspekte 3.1 Voraussetzungen Im folgenden werden die Bestandteile der Entwicklungsumgebung vorgestellt, die benötigt werden und auch sehr hilfreich sind. So wie auch der Venice Web-Service basiert der SIP-Service komplett auf Java27. Zusätzlich zu den Standard Bibliotheken werden aber auch noch spezielle Software-Pakete verwendet, die nun dargestellt werden. • Java Web Services Developer Pack 1.328 Für die Web-Serviceentwicklung benötigt man noch das Java Web Service Developer Pack. Dieses bietet alle Klassen, Bibliotheken und Werkzeuge, deren ein Java Entwickler bedarf, um XML Anwendungen, Web-Service und Webanwendungen mit Web-Serviceintegration zu implementieren. Es enthält nicht nur die Java APIs für XML, Java Architektur für XML Binding (JAXB), JavaServer Faces, XML Security, JavaServer Pages Standard Tag Library (JSTL), Java WSDP Registry Server, sondern auch das Ant Build Tool von Apache und den Apache Tomcat container in der Version 5. Tomcat ist ein Webserver auf dem die Web-Services liegen und von dort aus ausführbar sind. • Java Media Framework 2.1.1e29 Die Java Media Framework API (JMF) hilft dabei Audio, Video und andere zeitbasierten Medien in Java Programme einzubinden. Dieses Paket kann in verschiedenen Medienformaten senden, empfangen, aufnehmen und abspielen. Es unterstützt viele Codecs (Tabelle 6). Im Projekt wird das JMF dazu verwendet, um die RTP Verbindung herzustellen und die Sprachdaten beim Telefonieren zu senden und zu empfangen. Sowohl der Simple Client von Venice, als auch der SIPCommunicator 30 benutzen dieses Softwarepaket, da es sich für solche Java Anwendungen gut anbietet. 27 28 29 30 Sun Java 2 Standard Edition 1.4.2 (Http://java.sun.com/j2se ) http://java.sun.com/webservices/webservicespack.html http://java.sun.com/products/java-media/jmf/ Mehr dazu später in Abschnitt 3.2.2 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 42 Media Type RTP Payload JMF 2.1.1 Cross Platform Version JMF 2.1.1 JMF Solaris/Li 2.1.1 nux Per- Window formance s PerPack formance Pack Audio: G.711 (U-law) 8 kHz 0 R31,T32 R,T R,T Audio: GSM mono 3 R,T R,T R,T Audio: G.723 mono 4 R R,T R,T Audio: 4-bit mono DVI 8 kHz 5 R,T R,T R,T Audio: 4-bit mono DVI 11.025 kHz R,T R,T R,T 16 Audio: 4-bit mono DVI 22.05 kHz 17 R,T R,T R,T Audio: MPEG Layer I, II 14 R,T R,T R,T Tabelle 6: von JMF unterstützte RTP Audio Codecs33 3.2 SIP-Stack Die Kommunikation zu einem SIP Gerät beruht nun auf einem SIP Stack. Der Stack stellt eine Implementierung des Protokolls nach den im RFC vorgeschlagenen Eigenschaften dar. Die Funktion des Stacks ist, auf einkommende SIP Nachrichten zu horchen, solche Nachrichten zu analysieren und zu bestimmen (parsen) und einen Handler aufzurufen, der diese Nachricht passend verarbeitet. Für SIP Stacks gibt es viele Implementierungen. Hier wird eine Open-Source-Lösung benutzt. Im Prinzip ist es unerheblich, welcher Stack verwendet wird, solange die Implementierung sich an die Standards hält. Der SIP Stack aus dem vocal sip package34 ist ein bekannter Open-Source Stack. Dieses Package besteht aus einer sehr umfassenden und ausgereiften, in C++ programmierten Sammlung von SIP Tools. Ebenfalls beliebt ist das in C programmierte osip35, eine kleine und effiziente Implementierung des RFC 2543 und das hier verwendete Nist SIP36, welches einen Java Specification Request (JSR 32) darstellt und sich durch Aktualität und gute Kompatibilität zu den RFCs auszeichnet. 31 32 33 34 35 36 indicates that the format can be decoded and presented indicates that media streams can be encoded and transmitted in the format http://java.sun.com/products/java-media/jmf/2.1.1/formats.html http://www.vovida.org/protocols/downloads/sip http://www.gnu.org/software/osip/osip.html http://dns.antd.nist.gov/proj/iptel/ Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 43 3.2.1 Nist Jain sip v1.1 Nist Sip wurde am National Institute for Standards and Technology (NIST) entwickelt und JAIN37 zertifiziert. Es bietet nicht nur alles aus getreu RFC 3261, sondern hat sogar noch Support für die SIP Erweiterungen, die in folgenden RFCs vorgeschlagen sind: RFC 2976 (Sitzungskontrollinformationen), RFC 3262 (Verarbeitungsinformationen), RFC 3265 (asynchrone Meldungen), RFC 3311 (aktuellere Sitzungsinformationen), RFC 3326 (Grund für Request), RFC 3428 (Instant Messages) und RFC 3515 (Quellenreferenz). Diese werden in unserer momentanen Implementation noch nicht benötigt, jedoch können sie später, wenn neue Funktionen hinzukommen, sehr hilfreich sein. Der Stack enthält Transaktions- und Dialogschicht. Die Transaktionsschicht behandelt Retransmissionen und die passenden Antworten auf Requests. Die Dialogschicht gruppiert Dialoge und ist nützlich bei der Entwicklung von zustandsorientierten Komponenten wie User Agents und Proxy Servern. Diese implementieren die zugehörigen JAIN SIP Schnittstellen direkt. Der Aufbau des Stacks ist übersichtlich und wie für J2SE üblich eventbasiert. Ein Handler erzeugt eine sogenanntes JAIN Event und übergibt es an den registrierten SIPListener. Eine Anwendung muss dann also immer das Listener Interface implementieren und kann dann dadurch mit dem Stack kommunizieren. Außerdem muss sich die Anwendung bei dem sogenannten SIPProvider anmelden, um selber auch SIP Nachrichten senden zu können. Alle Meldungen sind also immer in Events gekapselt und werden asynchron verschickt. Der SIPProvider empfängt Nachrichten aus dem Internet und schickt sie als Events weiter an den SIPListener. Abbildung 19 zeigt die eventbasierte Architektur des JAIN SIP Stacks. Abbildung 19: JAIN SIP Architektur 37 http://java.sun.com/products/jain/index.jsp Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 44 Das NIST SIP Stack Paket besteht dabei aus vielen Klassen. Die Packages die dabei zur Auswahl stehen, heißen: • • • • • • • • • • • • gov.nist.core: Die Basisklassen, auf denen der Rest der Implementation beruht. gov.nist.javax.sdp: Implementation von SDP Klassen (nach JSR 141) gov.nist.javax.sip: Das Wurzelverzeichnis für die SIP Implementierung. Das SIP Stack Interface verwaltet Listening Points und Listening Provider. Der Stack ist mit einer IP-Adresse verbunden und kann mehrere Listening Points besitzen. In einer Anwendung können sich mehrere Stacks befinden. Ein Stack wird mit der SipFactory erzeugt. Dabei werden spezielle Eigenschaften des Stacks in der Konfiguration gesetzt. gov.nist.javax.sip.address: die adressspezifischen Klassen, wie die Address Factory gov.nist.javax.sip.header: die SIP Header Klassen und die Implementierung der JAIN-SIP Header Factory gov.nist.javax.sip.parser: Parser für SIP Headers, URL's und Adressen. Der Parser konsumiert entweder einen Stream, falls TCP verwendet wird, oder den Eingang aus einem Puffer, falls UDP benutzt wird, und liefert daraus eine analysierte Nachrichtenstruktur. gov.nist.javax.sip.stack: Klassen für den Aufbau des SIP-Stacks javax.sdp: Klassen für den Stack nach JSR 141. javax.sip die wichtigsten Interfaces des SIP Stacks javax.sip.address die Interfaces von Adresskomponenten von SIP javax.sip.header Header Interfaces javax.sip.message Message Interfaces Die Erzeugung neuer SIP Objekte erfolgt über Factories. Diese Klassen verfügen über alle Funktionen für Eigenschaften nach den SIP Standards. Am wichtigsten ist die SipFactory, mit Ihr werden neue SIP Objekte und andere Factory Objekte erzeugt (siehe Abbildung 20). Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 45 try { Properties properties = new Properties(); properties.setProperty("javax.sip.IP_ADDRESS", "131.246.103.22"); properties.setProperty("javax.sip.OUTBOUND_PROXY", "131.246.103.26:5070/UDP"); // Other initialization properties. try { sipStack = sipFactory.createSipStack(properties); } catch (SipException e) { System.err.println(e); } } Abbildung 20: Initialisierung eines neuen Stacks mit Hilfe des SipFactory Die AddressFactory kann URIs und URLs zusammenbauen, die HeaderFactory dann die anderen noch benötigten Headerfelder und die MessageFactory schliesslich um die Art der Message, ob Requests oder Responses und deren Inhalte nach SDP zu erstellen. Dabei muss der Inhalt kein SDP Objekt sein, sondern kann auch als ein Textstring angegeben werden. try { SipURI requestURI = addressFactory.createSipURI (toUser, toSipAddress); // Create other headers Request request = messageFactory.createRequest (requestURI, Request.INVITE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards); } Abbildung 21: Erstellen eines neuen Requests Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte • • • • • • • • • • • • • 46 Die vom SIP Stack unterstützen Requests sind die üblichen wie: INVITE BYE CANCEL OPTIONS ACK REGISTER aber auch neuere Requests werden angeboten wie: INFO: Kontrollinformation der Sitzung PRACK: Provisorisches Acknowledgement UPDATE: Erneuern der Sitzung SUBSCRIBE: Anmeldung zur automatischen Benachrichtigung bei bestimmten Ereignissen NOTIFY: Benachrichtigen von bestimmten Ereignissen MESSAGE: um direkte Textnachrichten zu verschicken REFER: Referenz auf eine bestimmte Quelle NIST SIP unterscheidet zwischen Client-Transaktionen und Server-Transaktionen. Eine neue Transaktion beginnt entweder wenn ein Request empfangen wird, oder ein neuer Request gesendet wird. Wurde ein neuer Request gesendet muss eine Client-Transaktion beantragt werden, wird eine empfangen, entscheidet die Anwendung ob eine neue Server Transaktion benötigt wird. Handelt es sich beim eingegangenen Request um einen dem schon bestehenden Dialog zugehörigen Request, wird dieser dessen Server-Transaktion zugewiesen. Kommt eine Response zurück wird diese automatisch der Client-Transaktion des vorangegangenen Requests zugeordnet. Die Transaktion-ID wird schließlich zum Senden von neuen Nachrichten verwendet (vgl. Abbildung 22 und 23). try { // Create the client transaction ClientTransaction inviteTid = sipProvider.getNewClientTransaction(request); // send the request inviteTid.sendRequest(); } Abbildung 22: Senden eines Requests Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 47 Selbstverständlich unterstützt der Stack auch Dialoge, um im selben Kontext gesendete Nachrichten miteinander in Verbindung zu bringen. Dialoge werden dabei nie direkt von der Anwendung erzeugt, sondern bei Transaktionen wie INVITE oder SUBSCRIBE automatisch initiiert und vom Stack verwaltet. Gelöscht werden können Dialoge jedoch schon von der Anwendung, was aber besser dem Stack überlassen wird. Für Dialoge gibt es besondere Zustände, wie Early, Confirmed, Completed und Terminated, die sich je nach Transaktion ändern. Über Transaktionen kann man den Zustand des Dialogs abfragen und dann passend behandeln [24]. try { public void processRequest(RequestEvent requestEvent) { Request request = requestEvent.getRequest(); ServerTransaction st = requestEvent.getServerTransaction(); // do request specific processing here } } Abbildung 23: Einkommende Nachricht als Event 3.2.2 Sip Communicator Der auf dem Jain SIP Package beruhende SIP Communicator38 ist komplett in Java implementiert und benutzt das JMF. Er liegt dem Jain Sip Stack als Beispiel bei und ist auch Open-Source. Somit eignet er sich gut, um die Kommunikation von einem Simple Client zu einem SIP Telefon zu testen. Natürlich können auch alle anderen SIP kompatiblen Telefone und Softphones verwendet werden. Folgende Abbildung 24 zeigt das Programm: 38 Http://sip-communicator.dev.java.net Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 48 Abbildung 24: SIP Communicator Die bei SIP Telefonen üblichen Parameter werden hier anhand der Konfiguration von SIP-Communicator gezeigt. PUBLIC_ADDRESS: Die eigene SIP-Adresse wie [email protected] oder [email protected]. Defaultwert ist user.name@<local IP address> DISPLAY_NAME: Der angezeigte Name, wie z. B. "Franz- Josef Fink" TRANSPORT: Welches Transportprotokoll verwendet werden soll. Möglich sind udp und tcp. Defaultwert ist udp. PREFERRED_LOCAL_PORT: Der Port der für den Austausch von SIP Nachrichten verwendet wird. Defaultwert ist 5060, falls dieser nicht verfügbar, wird ein verfügbarer zufällig gewählter Port verwendet. REGISTRAR_ADDRESS: Die IP-Adresse eines REGISTRAR-Servers, der verwendet werden soll. REGISTRAR_PORT: Der Port des REGISTRAR-Servers. REGISTRAR_TRANSPORT: Welches Transportprotokoll zum REGISTRAR verwendet werden soll. Möglich sind udp und tcp. Defaultwert ist udp. REGISTRATIONS_EXPIRATION: Die Anzahl der Sekunden, für die die Anmeldungen gültig bleiben sollen. Defaultwert ist 3600. STACK_PATH: Der komplette Pfad zu der JAIN-SIP Implementierung. Man kann auch einen anderen SIP Stack für das Softphone verwenden. Defaultwert ist "gov.nist". Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 49 MEDIA_SOURCE: Als Quelle für Audio und Video kann eine URL oder eine Datei angegeben werden, die dann per RTP-Stream übertragen wird. Z.B. file://home/user/jsphone/lostinspace.mov VIDEO_PORT: Der Port, auf dem Video Daten empfangen werden. Defaultwert ist 22222. AUDIO_PORT: Der Port, auf dem Audio Daten empfangen werden. Defaultwert ist 22224. Hinzu kommen spezielle Stack Eigenschaften: IP_ADDRESS: Die IP-Adresse des Sip-Stack. Defaultwert ist das Ergebnis des Methodenaufrufs InetAddress.getLocalHost().getHostAddress(). STACK_NAME: Name, um den Stack zu identifizieren, wobei keine Leerzeichen erlaubt sind. ROUTER_PATH: Gibt den Klassenpfad zu dem Routerobjekt an. Z. B. com.sun.javax.sip.RouteImpl. Das Objekt muss das javax.sip.Router interface implementieren. Defaultwert ist examples.jsphone.sip.JsPhoneRouter. OUTBOUND_PROXY: Gibt den ausgehenden Proxy, falls einer verwendet werden soll, im Format: "ipaddress:port/transport" an. Z.B. 129.1.22.333:5060/UDP. RETRANSMISSON_FILTER: Das Verhalten, wie Nachrichten wiederholt werden, hängt davon ab, ob es sich um einen UAS oder einen UAC handelt. Bei UAC übernimmt die Anwendung die Wiederholungen von ACKs. Bei UAS übernimmt die Anwendung die Wiederholungen von 2xx Antworten. Alle anderen Wiederholungen werden vom SIP-Provider übernommen. Wenn man den Filter einschaltet, werden keine Wiederholungen von den Anwendungen, sondern alle vom SIPProvider durchgeführt. EXTENSION_METHODS: Erweiterungsmethoden, die neue Dialoge erzeugen können, werden hier angegeben. Sie werden durch Doppelpunkte getrennt. Z. B. "FOO:BAR". Mit dem konfigurierten SIP Communicator Client, sollte jedes andere SIP Telefon erreichbar sein. Um jedoch einen Simple Client zu erreichen bedarf es noch einer speziellen Software, die einen SIP Stack implementiert und die Nachrichten an den Venice Web-Service übergibt. Dazu wurde das SIP-Gateway entwickelt. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 50 3.3 SIP-Gateway Der SIP Service hat die Funktion eines Gateways. Auf der einen Seite konsumiert er SOAP Events des VoIP Web-Service, auf der anderen Seite spricht er SIP über einen SIP Stack an. Die Events von dem Web-Service sind die gleichen, die auch ein Simple Client verarbeitet: INCOMING_CALL, CONNECTION_ESTABLISHED, CONNECTION_DENIED, END_CALL. Diese werden dann in die äquivalenten SIP Nachrichten INVITE, OK, DECLINE, BYE übersetzt. Wenn nun ein Simple Client mit einem externen SIP Client telefonieren möchte oder umgekehrt, muss der SIP Client, ebenso wie ein anderer Simple Client, bei dem VoIP Web-Service vorher registriert sein. Dazu erhält der SIP Client bei dem SIP-Gateway eine virtuelle Benutzeridentifikation, mit der er sich dann bei dem Web-Service mit zugehörigem Passwort einloggt und eine weltweit eindeutige Lease zugewiesen bekommt. Das Gateway bildet dann die Kommunikation zwischen dem virtuellen SIP-Gateway Benutzer (sip_internal) und dem reellen SIP Client. Der Simple Client ruft den virtuellen Benutzer an und bemerkt gar nicht, dass es sich nicht um einen anderen Simple Client, sondern um einen SIP Client handelt. Das SIP-Gateway emuliert dabei einen Simple Client. Ruft ein SIP Client einen Simple Client an, ruft er eigentlich das SIP-Gateway an, das wie ein normaler SIP Client reagiert und die Nachrichten dann per SOAP an den passenden Simple Client weiterleitet. Das SIP-Gateway benötigt deshalb Schnittstellen für beide Protokolle. Auf der VoIP Web-Service Seite fängt er genauso wie auch ein Simple Client die Nachrichten mit der wsEventReceived Methode auf. Und er sendet sie mit der WSEventProvider Klasse durch die Methoden: login, logout, action_acceptCall, action_denyCall, action_endCall, action_makeCall an den Web-Service (siehe Abbildung 25). Auf der SIP Seite übermittelt er entweder Requests durch die Methode processRequest, falls er als User Agent Client arbeitet, z. B. processInvite, processCancel, processBye, oder das Gateway beantwortet solche Requests mit der Methode processResponse. Dabei sind alle Responses wie in Tabelle 1 möglich. Die wichtigsten die von der Anwendung behandelt werden müssen sind aber: 100-Trying 180-Ringing 200-Ok ACK 486-Busy 603-Declined Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 51 Abbildung 25: SIP-Gateway Methoden Um einen SIP Stack zu initialisieren wurden folgende Eigenschaften festgelegt (vgl. auch Abbildung 20): properties.setProperty("javax.sip.OUTBOUND_PROXY", "131.246.103.22:5060/UDP"); properties.setProperty("javax.sip.RETRANSMISSION_FILTER", "true"); properties.setProperty("javax.sip.STACK_NAME", "waitingforsip"); In diesem Beispiel wird ein SIP-Stack "waitingforsip" auf einem Rechner mit der IPAdresse 131.246.103.22 angelegt. Um eine SIP Request Nachricht zu senden wird dann zuerst ein Request durch die Klassen addressFactory, headerFactory und messageFactory zusammengebaut. Mit diesem Request wird dann eine ClientTransaction erzeugt (mit dem Befehl: sipProvider.getNewClientTransaction(request)). Alle weiteren Nachrichten, die zu dieser Transaktion gehören behalten dann diese eindeutige Transaktions-ID. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 52 Daraufhin wird der Request über die Funktion transaktionsid.sendRequest() verschickt. Kommt ein Requestevent bei dem Gateway an, wird der Request durch die Methode getRequest() extrahiert, und durch getServerTransaction() wird die Transaktions-ID ausgelesen. Darüber hinaus kann man über die Transaktions-ID auch den übergeordneten Dialog geliefert bekommen, womit eine eindeutige Zuordnung des Events zu einem bestimmten Gespräch ermöglicht wird. Um nun eine Incoming Call-Message weiterzuleiten, muss die genauere Beschreibung der Eigenschaften des Anrufers in der SIP INVITE-Nachricht mitgeschickt werden. Dazu wird mithilfe der SDP Factory aus dem Package javax.sdp eine passene SDP Payload zusammengebaut und an den Request angehängt. Es bestehen die zwei grundlegenden Fälle bei der Kommunikation zwischen SIP Client und Simple Client, deren Hauptunterscheidungsmerkmal darin liegt, von wem der beiden das Gespräch initiiert wird. 3.3.1 Anruf von Simple Client nach SIP-Client In dem ersten Fall wird betrachtet, wie von einem Simple Client ein außerhalb liegender SIP-Client angerufen wird. Der Simple Client ruft dabei wie auch sonst die Methode make_Call() auf. Durch die Adresse, die mit sip: beginnt, weiß der VoIP-Service, dass er den speziellen SIPCallHandler erstellen muss39. Dieser leitet dann das "incoming call" an den SIP-Gateway-Service weiter. Das Gateway baut aus der Clientkonfiguration des Simple Client eine INVITE-Message, die die verfügbaren Codecs und die IP-Adresse des Simple Client für die RTP-Verbindung enthält, wobei die Kontaktadresse aber das SIP -Gateway bleibt. Das INVITE wird daraufhin entweder direkt an den SIP-Client, oder an einen zuständigen SIP Proxy verschickt. Wenn die Nachricht dort erfolgreich angekommen ist, kommt zuerst eine Response 180 zurück und das INVITE muss nicht wiederholt gesendet werden. Für den Fall, dass das Gespräch akzeptiert wird, bekommt das Gateway dann eine OK Nachricht mit den bevorzugten Codecs und den Angaben zur RTP Verbindung vom SIP Client. Diese Informationen liest er mit der Methode getSDPinfo() aus und updatet die Clientkonfiguration. Dann schickt er ein acceptCall() an den Web-Service. Der SIPCallHandler übermittelt daraufhin sein "connection_established" an den Simple Client und das Gateway. Das Gateway leitet diese Bestätigung der Verbindung an den SIP Client durch ein ACK weiter und die RTP-Verbindung ist erfolgreich aufgebaut. Dieser Ablauf ist in Abbildung 26 graphisch dargestellt. 39 Zu einem späteren Zeitpunkt des Projekts wird hier eine flexiblere Heuristik eingebaut, die über diverse Abfragen (Enum, H.323 Gatekeeper, etc.) das zu verwendende Protokoll bestimmt. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte Simple Client 53 VoIP-Service/ SIPCallHandler [1] make call SIP Client Gateway [2] incoming call [3] INVITE [4] 180 [5] OK [6] accept [7] established [7] established [8] OK [9] RTP Abbildung 26: Aufbau Simple Client nach SIP 3.3.2 Anruf von SIP-Client nach Simple Client In dem anderen Fall wird betrachtet, wie von einem außerhalb liegenden SIP-Client ein Simple Client gerufen wird. In dieser Situation muss das SIP-Gateway des Simple Clients schon gestartet sein. Dies erfolgt beim Einloggen des Simple Clients automatisch. Zum Login bei dem VoIP-Service verwendet das Gateway immer die interne User-ID "internal_sip". Bei diesem User weiß der Web-Service, dass es sich nicht um einen richtigen Benutzer handelt, sondern um das Gateway. Er verwendet deshalb immer den SIPCallHandler. Das Gateway meldet sich bei einem SIP Registrar Server an, bei dem dann ein SIP-Client, der den Simple Client Benutzer anrufen will, die Adresse des Gateways abfragen kann. Der SIP-Client schickt dann seine INVITE-Message an das zuständige Gateway, das diese mit einem 100 (Trying) bestätigt. Daraufhin erfolgen vom Gateway zum Simple Client wieder analog zum vorigen Fall makeCall() und acceptCall(). Wenn das Gateway die Nachricht "connection_established" vom SIPCallHandler empfängt, leitet er ein 200 (Ok) an den SIP Client weiter und hierdurch ist die Verbindung erfolgreich aufgebaut. Nach dem Betrachten der Aufbauphase, folgt hier die Erläuterung, wie das Gespräch wieder beendet wird. Für den Gesprächsabbau gibt es natürlich wieder die beiden Möglichkeiten, je nachdem von welcher Seite der Wunsch zum Trennen der RTP-Verbindung geäußert wird (Abb.27). Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 54 VoIP-Service/ SIPCallHandler Simple Client Gateway SIP Client [1] INVITE [2] make call [3] 100 [4] incoming call [5] accept [6] established [6] established [7] OK [8] ACK [9] RTP Abbildung 27: Aufbau SIP nach Simple Client 3.3.3 Gesprächsende durch Simple Client Wird das Gesprächsende vom Simple Client initiiert, schickt dieser ein endCall(). Dieses kann natürlich nicht verweigert werden und deshalb schickt der SIPCallHandler an beide Clients das event_end_call. Der Simple Client beendet dann die Verbindung und das Gateway sendet darauf eine SIP BYE-Message an den SIP Client, wodurch auch dieser von dem Ende informiert wird. Simple Client VoIP-Service/ SIPCallHandler Gateway SIP Client [1] BYE [2] end call [3] event end_call [3] event end_call Abbildung 28: Gesprächsende durch Simple Client Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 55 3.3.4 Gesprächsende durch SIP Client Bei der anderen Möglichkeit empfängt das Gateway ein BYE vom SIP Client. Dieses wird als ein endCall() an den VoIP-Service weitergereicht und vom SIPCallHandler an den Simple Client weitergegeben, wie auch in Abbildung 29 verdeutlicht wird. Die Verbindung ist beendet. Simple Client VoIP-Service/ SIPCallHandler SIP Client Gateway [1] end_call [2] event end_call [2] event end_call {3} BYE Abbildung 29: Gesprächsende durch SIP Client Die daraus resultierenden verschiedenen Möglichkeiten werden durch Zustände im Gateway repräsentiert, dadurch wird eine richtige Behandlung der Events gewährleistet und Fehler vermieden. Die Zustände sind demnach: STATUS_UNCONNECTED STATUS_SIPtoSC, STATUS_SCtoSIP, STATUS_BYE_SIPtoSC STATUS_BYE_SCtoSIP, STATUS_CONNECTED 3.3.5 Multiuserbetrieb Soll nun von dem SIP-Gateway nicht nur Kommunikation zwischen zwei festen Partnern möglich sein, sondern möchten mehrere verschiedene Clients via Gateway kommunizieren, dann ist das Problem nicht viel komplizierter. Verschiedene SIP Clients anzurufen ist einfach durch die Eingabe der verschiedenen SIP-Adressen möglich. Die SIP-Adresse wird dabei bei vom SIPCallHandler an das Gateway in dem Event INCOMING_CALL Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 56 weiter gegeben und bei der Adressierung der INVITE-Message berücksichtigt. Jeder SIP Client erzeugt dabei seine eigene Instanz des Gateways. In die entgegengesetzte Richtung funktioniert der Anruf verschiedener Simple Clients durch die dazugehörigen SIP-Gateways, die beim Login für diese automatisch erzeugt werden, falls der Benutzer Verbindungen mit SIP wünscht. Die SIP-Gateways melden sich mit der Methode register() an einem festgelegten REGISTRAR Server an und warten daraufhin auf einem bestimmten SIP-Port auf eingehende Anrufe. Die richtige Adresse SIP-Adresse und den Port des gewünschten Venice-Benutzers findet ein externer SIP-Client dann durch eine Anfrage bei diesem REGISTRAR Server heraus. 3.4 Testbetrieb Im Rahmen der Software-Entwicklungsarbeiten wurde das System ausgiebig getestet um Fehler auszuschalten. In der ersten Testphase wurde der Gesprächsaufbau, dessen vorzeitiger Abbruch sowie das Beenden eines Gesprächs durchgeführt und dabei jeweils von dem Simple Client und dem SIP Client initiiert, um alle Status des Gateways abzudecken. Als SIP Client wurde dabei immer der SIP Communicator verwendet. Bei den Tests lief der Venice Web-Service und das SIP-Gateway unter Linux (Suse Linux 9.0) und die Clients abwechselnd unter Linux und Microsoft Windows XP. Dabei wurde festgestellt, dass die Sprachqualität unter Windows durch den zur DirectX-Technologie gehörenden DirectSound, bei dem direkt auf die Soundhardware zugegriffen werden kann, höher als bei dem unter Linux verwendeten Javasound ist. Bei Linux hingegen blockierte in seltenen Fällen ein anderes Programm die Soundkarte, wodurch Internettelefonie unmöglich gemacht wurde. Durch Beenden des blockierenden Programmes wird die Ressource wieder freigegeben und wieder verfügbar. Andere Fehlerquellen, die auftraten, waren Firewall- bzw. Router-Konfigurationen, welche die Benutzung der benötigten Ports unterbunden haben. Außerdem muss man darauf achten, dass kein anderes Programm den gleichen Port verwendet. Es ist natürlich möglich die Standardportwerte zu ändern. In der Standardkonfiguration werden folgende Ports benutzt: Simple Client RTP Audio Send Port Simple Client RTP Audio Recieve Port Simple Client Notification Port SIP-Gateway Notification Port SIP Communicator RTP Port SIP Message Port : : : : : : Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung 9000 9100 9200 9150 22224 5060 Realisierungsaspekte 57 Da das SIP-Gateway kompatibel zu RFC 3261 entwickelt wurde, sollte es auch ohne Anpassungen direkt mit den meisten anderen SIP-Hardware- und Softwaretelefonen funktionieren. Deshalb wurden in der zweiten Testphase auch noch andere Programme getestet, die nun noch vorgestellt werden. 3.4.1 Weitere SIP Softwaretelefone Viele SIP-Softwaretelefone sind nicht kostenfrei und/oder erlauben nur das Telefonieren über eigene Gateways, für die man sich registrieren muss und auf die man dann beschränkt ist. Deshalb wurden solche Programme nicht getestet. Jedoch lassen manche Anbieter den zeitbegrenzten Test ihrer Software zu, wie z. B. Adobe Inc. mit ihrem Programm SIPPStar. SIPPStar40 Der Unterschied zwischen den verschiedenen Programmen besteht meist nur in dem Funktionsumfang der Software. Über die graphische Benutzeroberfläche (Abb. 30) hinausgehende Features von Sippstar sind hierbei eine kostenlose Anmeldung an den firmeneigenen Registrarservern und Gatewayservern mit der Möglichkeit, auch weltweit in das öffentliche Telefonnetz zu kommunizieren. Zudem hat der Client unter anderem auch einen Anrufbeantworter mit Fernabfrage und eine integrierte optionale Verschlüsselung. Abbildung 30: SIP Client SIPPStar 40 http://www.sippstar.com Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 58 Für den Test sind diese Funktionen weniger von Bedeutung. Vielmehr kommt es darauf an, welche Codecs verfügbar sind, welche Ports verwendet werden, wie der Benutzername des Telefons festgelegt wird, und zu welchen RFCs der Client kompatibel ist. Eine INVITE-Message, die vom Sippstar an das SIP-Gateway gesendet wurde, sieht dann zum Beispiel folgendermaßen aus: INVITE sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 131.246.103.26:5060;branch=z9hG4bKnp432753-42dc207f131.246.103.26;rport From: <sip:[email protected]:5060>;tag=19cb4fd5 To: <sip:[email protected]> Call-ID: [email protected] CSeq: 1 INVITE User-Agent: null Expires: 180 Accept: application/sdp Content-Type: application/sdp Contact: <sip:[email protected]:5060> Max-Forwards: 70 Content-Length: 247 v=0 o=SIPPS 432753612 432753609 IN IP4 131.246.103.26 s=SIP call c=IN IP4 131.246.103.26 t=0 0 m=audio 30000 RTP/AVP 0 8 97 2 3 a=rtpmap:0 pcmu/8000 a=rtpmap:8 pcma/8000 a=rtpmap:97 iLBC/8000 a=rtpmap:2 G726-32/8000 a=rtpmap:3 GSM/8000 Abbildung 31: INVITE-Message von SIPPStar Aus der Abbildung 31 kann man erkennen, dass der Client die Codecs PCMU, PCMA, iLBC, G726-32 und GSM versteht und dass er auf Port 30000 auf eingehende RTP Daten wartet. Hier wird die INVITE-Nachricht beispielsweise an die Adresse "[email protected]" verschickt, wobei der Absender das Windowslogin "hiwi" ist. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 59 Da PCMU quasi jeder Client verstehen sollte und damit auch eine hohe Sprachqualität gewährleistet wird wurde diese Codec für die Tests aller weiterer Programme fest verwendet. Die Tests zeigten, wie schon erwartet, dass durch das Wechseln des SIP Clients auch keine neuen Probleme in der Signaling Phase auftraten. Dies wurde ebenfalls durch Tests mit dem häufig verwendeten Client Ubiquity belegt. Ubiquity41 Dieser SIP User Agent benötigt zwar eine zeitlich begrenzte Lizenz, diese wird aber kostenlos vergeben und kann auch immer wieder verlängert werden. Der Client ist einfach gestaltet (siehe Abbildung 32) und basiert auf der JAIN SIP Lite API42 und unterstützt damit alle Anforderungen aus RFC 2543. Abbildung 32: Ubiquity User Agent Ein Beispiel der von diesem UA gesendeten INVITE-Message kann man in Abb. 33 betrachten: 41 http://www.ubiquity.net/products/SIP/SIP_User_Agent.php 42 http://jcp.org/en/jsr/detail?id=125 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 60 INVITE sip:[email protected] SIP/2.0 Call-ID: [email protected] Content-Type: application/sdp To: <sip:[email protected]> From: <sip:[email protected]>;tag=624840401 Contact: <sip:[email protected]:5060> CSeq: 1 INVITE Via: SIP/2.0/UDP 131.246.103.26:5060;branch=83F6671A13C4000000FCFFA9B4D7-8*0 Content-Length: 125 v=0 o=- 1086621468744 1086621468744 IN IP4 131.246.103.26 s=c=IN IP4 131.246.103.26 t=0 0 m=audio 5006 RTP/AVP 3 0 8 Abbildung 33: INVITE-Message von Ubiquity Hierbei fällt auf, dass der SIP-Benutzername unabhängig vom login immer "user" ist. Die erkannten Codecs sind nur PCMU, PCMA und GSM. Die anderen getesteten SIP-Messages (wie BYE, CANCEL, OK ...) unterschieden sich auch nicht von dem Protokollstandard. Es existiert noch eine Vielzahl anderer SIP User Agents und mit der Beliebtheit von SIP steigt die Zahl rapide. Unter http://www.iptel.org/info/products/sipphones.php kann man eine Liste der zahlreichen Alternativen betrachten. Die meisten sollten dabei ohne Probleme mit dem SIP-Gateway funktionieren, es werden dabei lediglich kleine Unterschiede in Sprachqualität, Codecauswahl und Geschwindigkeit auftreten. Zuletzt wurde noch das optiPoint 400 Hardwaretelefon von Siemens getestet. 3.4.2 Siemens optiPoint 400 standard SIP Das optiPoint 400 unterscheidet sich im Aussehen kaum von einem normalen Telefon, wie in Abbildung 34 zu sehen ist. Jedoch wird es anstatt mit dem Telefonanschluss mit einem Internetanschluss verbunden. Dazu gibt es auch die Möglichkeit, den internen Miniswitch des Telefons zu verwenden und damit einen PC an das Telefon anzuschließen. Somit kann man das Telefon einfach zwischen den PC und das Netz verbinden und benötigt keinen zusätzlichen Anschluss. Üblicherweise erhält das Telefon seine IP-Adresse und weitere Konfiguration per DHCP. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 61 Abbildung 34: optiPoint 400 standard SIP Trotzdem kann man das Telefon auch auf eine fixe IP-Adresse einstellen. Hat das Telefon dann eine gültige Internetkonfiguration, bootet es und ist über das Netz erreichbar. Durch den internen Http-Server des Telefons auf Port 8085 ist es möglich, mit einem Internetbrowser komfortabel die restlichen Einstellungen wie Benutzername, Proxies, Gateways usw. durchzuführen. Daraufhin kann das Telefon per "Benutzername@IP-Adresse" vom Simple Client aus angerufen werden. Um aber von dem SIP Telefon einen Anruf an eine SIP-Adresse tätigen zu können, ist es notwendig in den Einstellungen einen SIP Server eingetragen zu haben (auch wenn dieser nicht verwendet werden muss), ansonsten kann man nur Telefonnummern eingeben. Deshalb wurde der Open-Source SIP Server SIP Express Router (SER43) verwendet. Er besitzt Registrar-, Proxy- und Redirect-Server Funktionalität. Danach kann man damit komfortabel telefonieren, auch wenn man keinen Computer hat. Die Eingabe der SIP-Adresse über den Wählblock ist jedoch etwas umständlich. Auch wenn sich das optiPoint 400 äußerlich sehr von den bisherigen Programmen unterscheidet, beruht es innerlich auf einem üblichen SIP-Stack. Das ist unschwer erkennbar, wenn man eine von dem SIP-Telefon gesendete INVITE-Message, wie in Abbildung 35 sieht: 43 Http://www.iptel.org/ser Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Realisierungsaspekte 62 INVITE sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 131.246.103.163:5060;branch=z9hG4bKb3f07d17e Max-Forwards: 70 To: <sip:[email protected]> From: "4772" <sip:[email protected]>;tag=2ef6b0bbdc0b277;epid=SC216107 Call-ID: [email protected] CSeq: 930791426 INVITE Supported: timer,replaces Min-SE: 5 Content-Type: application/sdp Contact: "4772" <sip:[email protected]:5060;transport=udp> Content-Length: 257 v=0 o=MxSIP 0 1607182229 IN IP4 131.246.103.163 s=SIP Call c=IN IP4 131.246.103.163 t=0 0 m=audio 5010 RTP/AVP 0 8 4 100 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:4 G723/8000 a=rtpmap:100 telephone-event/8000 a=fmtp:188 0-15 a=ptime:20 Abbildung 35: optiPoint 400 INVITE-Message Obwohl das Endgerät unterschiedlich ist, bleibt die Übertragungsschnittstelle gleich. Somit wurden auch bei der Verwendung des Hardwaretelefons keine neuen Probleme zu dem aktuellen Stand der SIP-Gateway Implementierung festgestellt. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Zusammenfassung 63 4 Zusammenfassung Das Ziel dieser Arbeit war die Integration eines SIP-Stacks in eine Web-Service basierte VoIP-Lösung. Hierbei wurde der Open-Source Nist SIP Stack in das Web-Service basierte Venice durch einen SIP-Gateway Service integriert. Der SIP-Gateway ist ein selbstständiger auf den Stack aufgebauter Dienst, der auf der einen Seite mit Hilfe des Nist Stacks auf einkommende SIP Nachrichten wartet oder SIP Nachrichten senden kann, und der auf der anderen Seite mithilfe von SOAP mit dem VoIP-Webservice des Projektes Venice kommunizieren kann. Es wurde der grundlegende Aufbau und die wichtigsten Funktionen der Implementierung beschrieben und versucht, den Aufbau des Programmes verständlich zu machen. Details für genauere Funktion des Implementierung sind in Kommentaren im Quelltext gegeben und können auch mithilfe des Log4J 44 Logging Mechanismus mit definierbarer Tiefe zur Laufzeit des Gateways ausgegeben werden. 44 Http://logging.apache.org/log4j Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Ausblick 64 5 Ausblick IP Telefonie ist erst noch am Anfang seiner Verbreitung. Mit dem rapiden Wachstum des Internets und der immer weitergehenden Vernetzung (All over IP) hat sie gute Chancen, rasch die normale Telefonie zu verdrängen, so wie die digitale Fotografie mehr und mehr die analoge verdrängt. Im Moment sind noch nicht alle Voraussetzungen für VoIPTelefonie ideal. Gerade ungesicherte Übertragungsqualitäten (QoS) durch Beanspruchung unterschiedlicher Dienstleister für den Internetzugang, und geringer Kostenvorteile wegen Internetverbindungen, die auf normalen Telefonanschlüssen beruhen, behindern einen Umstieg noch sehr. Aber wie Roland Kittel, der Vorstand des Festnetzbereiches der Deutschen Telekom, in einem Interview in der Zeitschrift Technology Review 02/2004 verriet, besteht der Plan, das deutsche Telefonnetz in den nächsten Jahren komplett auf InternetTechnologie umzustellen. Dieses Ziel soll schon weit vor 2020 erreicht sein. Von den Telefongesellschaften der meisten anderen Länder ist auch nichts anderes zu erwarten, sind doch die Kostenvorteile durch effizientere Nutzung der Leitungen erheblich. Auch Systeme, in denen Menschen mit Mobiltelefonen über VoIP telefonieren, sind nicht mehr Zukunftsvisionen, sondern es gibt schon gut funktionierende Modelle auf dem Markt, die auch immer erschwinglicher werden. Bei diesen Angeboten wird auf die jetzt überall auftauchenden Funknetzwerke gesetzt. Die ersten Modelle kamen schon 1999 von Symbol Technologies45 mit ihrer auf H.323 basierten Net Vision Serie auf den Markt. Aber auch viele andere Firmen, wie Zyxel mit ihrem Prestige 2000W bieten gute Lösungen an. Das Prestige 2000W unterstützt SIP, das sich für VoIP immer weiter durchsetzt. Dadurch kann man von jedem offenen WLAN46-Hotspot ohne Zusatzkosten telefonieren. Für eine gute Sprachqualität bei VoIP müssen die Sprach-Datenpakete Vorrang vor allen anderen erhalten. Die dazu erforderlichen Quality-of-Service-Steuerung befindet sich für WLAN derzeit erst im Standardisierungsprozess (IEEE 802.11e)[25]. Abbildung 36: Zyxel Prestige 2000W Einen weiteren Ansatz gibt es, den Mobilfunkstandard UMTS für IP Telefonie zu verwenden, falls dieser sich durchsetzen kann. Auf jeden Fall wird sich in der Technologie in den nächsten Jahren noch sehr viel verändern. Gerade für Mobilgeräte, wie Mobiltelefone oder Personal Digital Assistants (PDAs) mit geringeren Ressourcen bietet sich deshalb eine Web-Service basierte VoIP -Lösung besonders an. 45 http://www.symbol.com/news/pressreleases/pr_wireless_patent.html 46 Wireless Local Area Network Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Abkürzungen 65 6 Abkürzungen ADPC Adaptive Differential Pulse Code Modulation (adaptive Audio Komprimierung) API Application Programming Interface (Programmierschnittstelle) AVT WG Audio-Video Transport Working Group CLIP Calling Line Identification Presentation (Rufnummernanzeige) DES Data Encryption Standard DTD Document Type Definition ENUM Telefon number mapping mit E.164 Nummer n(siehe rfc2916) ISDN Integrated Services Digital Network (das digitale leitungsvermittelte Telefonnetz) ITU International Telecommunication Union JSR Java Specification Requests JWSDP Java Web Service Developer Pack NIST National Institute for standards and technology (eine Abteilung des U.S. Commerce Departments) PCM Pulse Code Modulation PDA Personal Digital Assistant PGP Pretty Good Privacy (auf öffentliche Schlüssel basiertes Verschlüsselungsverfahren) PT Payload Type (Art der Kodierung von RTP Nutzdaten) PSTN Public Switched Telephone Network (das Telefonnetz) QoS Quality of Service RTCP RealTime Control Protokoll RFC Request for Comment SDP Session Description Protokoll SID Silence Insertion Descriptor SIP Session Initiation Protokoll SOAP Simple Object Access Protokoll SSL Secure Sockets Layer SQL Structured Query Language TLS Transport Layer Security Protokoll Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Abkürzungen 66 UAC User Agent Client UAS User Agent Server UBR Universal Business Register UDDI Universal Description, Discovery and Integration URI Uniform Resource Identifier URL Uniform Resource Locator UUID Universal Unique Identifier UTF Unicode Transfer Format nach RFC3629 VoIP Voice over IP oder auch IP-Telefonie genannt WSDL Web Services Definition Language WWW World Wide Web XML Extensible Markup Language Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Abbildungs- und Tabellenverzeichnis 67 7 Abbildungs- und Tabellenverzeichnis Abbildung 1: SIP Nachricht...................................................................................................9 Abbildung 2: SIP Verbindungsaufbau.................................................................................15 Abbildung 3: SDP- Payload [8]............................................................................................17 Abbildung 4: RTP-Header[9]...............................................................................................19 Abbildung 5: Audio-Paket mit Header.................................................................................20 Abbildung 6: framebasierte Kodierung................................................................................22 Abbildung 7: XML Beispiel.................................................................................................26 Abbildung 8: SOAP Umschlag............................................................................................26 Abbildung 9: SOAP Aktienkurs Anfrage.............................................................................27 Abbildung 10: SOAP Aktienkurs Antwort..........................................................................28 Abbildung 11: Beispiel WSDL für Temperaturkonverter ...................................................30 Abbildung 12: UDDI............................................................................................................31 Abbildung 13: VoIP über Web-Service...............................................................................34 Abbildung 14: Verbindungsaufbau Simple Client nach SIP UA.........................................35 Abbildung 15: Venice Web-Services...................................................................................37 Abbildung 16: Venice Verbindungsaufbau mit Remote Web-Service................................38 Abbildung 17: Venice Simple Client...................................................................................39 Abbildung 18: Venice Simple Client Zustandsdiagramm....................................................39 Abbildung 19: JAIN SIP Architektur...................................................................................43 Abbildung 20: Initialisierung eines neuen Stacks mit Hilfe des SipFactory........................45 Abbildung 21: Erstellen eines neuen Requests....................................................................45 Abbildung 22: Senden eines Requests.................................................................................46 Abbildung 23: Einkommende Nachricht als Event..............................................................47 Abbildung 24: SIP Communicator.......................................................................................48 Abbildung 25: SIP-Gateway Methoden...............................................................................51 Abbildung 26: Aufbau Simple Client nach SIP...................................................................53 Abbildung 27: Aufbau SIP nach Simple Client...................................................................54 Abbildung 28: Gesprächsende durch Simple Client............................................................54 Abbildung 29: Gesprächsende durch SIP Client..................................................................55 Abbildung 30: SIP Client SIPPStar......................................................................................57 Abbildung 31: INVITE-Message von SIPPStar...................................................................58 Abbildung 32: Ubiquity User Agent....................................................................................59 Abbildung 33: INVITE-Message von Ubiquity...................................................................60 Abbildung 34: optiPoint 400 standard SIP...........................................................................61 Abbildung 35: optiPoint 400 INVITE-Message..................................................................62 Abbildung 36: Zyxel Prestige 2000W..................................................................................64 Tabelle 1: SIP Header Felder nach [3].................................................................................11 Tabelle 2: SIP Client Fehlercodes nach [3]..........................................................................13 Tabelle 3: SDP Parameter [8]...............................................................................................18 Tabelle 4: RTP Audio-Codecs nach [9]...............................................................................21 Tabelle 5: VoIP Web-Service Methoden.............................................................................36 Tabelle 6: von JMF unterstützte RTP Audio Codecs...........................................................42 Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Quellenangaben 68 8 Quellenangaben 1: Dokey Deanna K., Rushing John S.: Voice over Internet Protocol. 1999. In http://isds.bus.lsu.edu/cvoc/Projects/TechLibrary/VoiceOver/ 2: Dusch Edith: Internet Telephonie – VoIP. ITA. 7 2002. 3: Rosenberg, et. al., SIP: Session Initiation Protocol, RFC 2543. 1999. 4: Rupp S., Siegmund G., Lauterschlager W.: SIP-Multimediale Dienste im Internet, dpunkt .verlag, Heidelberg, 1. Aufl. 2002. 5: Rosenberg, et. al., SIP: Session Initiation Protocol, RFC 3261. 2002. 6: Stredicke Christian: Neuer Standard in der VoIP-Welt, Heft LANline , Ausgabe 1. 2002 7: Session Initiation Protocol (SIP) working group. In http://www.ietf.org/html.charters/sip-charter.html 8: Handley, M., Jacobson V., SDP: Session Description Protocol, RFC 2327. 1998. 9: Schulzrinne, H., Casner, S., Frederick, R., Jacobson V.: RTP: A Transport Protocol for Real-Time Applications, RFC 3550. 2003. 10: Schulzrinne H: RTP Profile for Audio and Video Conferences with Minimal Control. In RFC 3551. 2003. 11: FAQ: Audio File Formats, In http://www.vorde.org/compSpeechFAQ/fullAudioFormats 12: Hui-Hsiung Kuo: White Noise Theory, CRC Press. 1999. 13: Mansmann Urs: Weltweit wählen, in c't Magazin 9/2004. 14: Umstätter Walther: XML - Einführung, In http://www.ib.huberlin.de/~wumsta/sgml/xml.html. 2000. 15: Bray Tim, Paoli Jean, Sperberger-McQueen: Extensible Markup Language (XML) 1.1, in http://www.w3c.org/TR/xml11/. 2004. 16: Gudgin Martin, Hadley Marc, Mendelsohn Noah: SOAP Version 1.2 Part 1: Messaging Framework, in http://www.w3c.org/TR/soap12-part1/. 2003. 17: James Snell, Doug Tidwell & Pavel Kulchenko, Webservice-Programmierung mit SOAP, O'REILLY. 1. Auflage. 2002. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung Quellenangaben 69 18: T. Berners-Lee, Uniform Resource Identifiers (URI): Generic Syntax, in RFC 2396. August 1998. 19: Christensen, E., Cubera F., Meredith G.Berners-Lee, T., Fielding, R., Weerawarana S.: Web Servoce Description Language (WSDL) 1.1. In http://www.w3c.org/TR/wsdl. 2001. 20: Hillenbrand M., Müller P., Müller H.: Voice over IP als Web Service, 18. DFN Arbeitstagung (Düsseldorf). 2004. 21: Markus Hillenbrand, Paul Müller und Kristian Mihajloski: A Software Deployment Service for Autonomous Computing Environments, In: Proceedings of IAWTIC 2004 (Gold Coast Australia). 2004. 22: Hillenbrand Markus, Zhang Ge: A Web Services Based Framework for Voice over th IP, In Proceedings of the 30 Euromico conference 2004, Rennes, France. 2004. 23: Zhang Ge , Hillenbrand Markus: Implementing SIP and H.323 Signaling as Web th Services, In Proceedings of the 30 Euromico conference 2004, Rennes, France. 2004. 24: O'Doherty Helim, Ranganathan Mudumbai: JAIN SIP Tutorial. Sun Microsystems. 2003. 25: Produktinformation Zyxel, http://www.zyxel.de/product/overview.php, 2004. Integration eines SIP Stacks in eine Web-Service basierte VoIP-Lösung