Voice over IP / SIP Motivation for VoIP Baserat på material från Henning Schulzrinne, Columbia University. 1 2 Internet Telephony as PBX replacement Switching Costs 3 4 Internet Telephony Modes SIP SIP = Session Initiation Protocol Registrering / Lokalisering av användare mha email-liknande adress Starta session över Internet Förhandla om sessionsparameter från den uppringande (caller) till de uppringda (callees). (Param. kan ändras under sessionen) Avsluta session Bygger på användandet av proxy servrar Tillhandahåller personmobilitet => annan terminal, samma identifierare. Jmf terminalmobilitet, servicemobilitet 5 6 1
SIP applikationer Etablera voice-over-ip samtal, videosamtal, osv Sätta upp multimediakonferanser Textmeddelanden (chatt,im) Event notification (subscribe/notify); Tillgänglighet, närvaro (presence) Nya tjänster Samverkan med PSTN (telenätet) SIP adresser Exempel: Adress-of-record (identifierar en anv) : sip:johan.garcia@kau.se Direkta adresser FQDN (identifierar en terminal) sip:johan@jglap.cs.kau.se Utöver sip finns också sips- adresser: TLS över TCP (jmf http och https) 7 8 SIP meddelanden Påminner om HTTP 1.1 Requests och responses är I stort lika, första raden skiljer Kan innehålla en body, som vanligtvis är en sessionsbeskrivning SIP meddelande 9 10 Metoder Media negotiation MESSAGE transport of an instant message body 11 12 2
Informational Success Resultatkoder Redirection Request Failure SIP proxy mode Server Failure Global Failure 13 14 SIP redirect mode För att hitta användare 15 16 DNS SRV SIP request forking 17 18 3
SIP sequential request forking 19 20 Comparison with H.323 H.323 is another signaling protocol for real-time, interactive H.323 is a complete, vertically integrated suite of protocols for multimedia conferencing: signaling, registration, admission control, transport and codecs. SIP is a single component. Works with RTP, but does not mandate it. Can be combined with other protocols and services. H.323 comes from the ITU (telephony). SIP comes from IETF: Borrows much of its concepts from HTTP. SIP has a Web flavor, whereas H.323 has a telephony flavor. SIP uses the KISS principle: Keep it simple stupid. Service Creation Many possible approaches to create services: Functionality in calling UA Functionality in called UA Functionality in server: CPL Call processing Language SIP CGI SIP Servlets JAIN & Parlay Server specific programming 21 22 CPL exempel CPL taggar <?xml version= 1.0?> <!DOCTYPE cpl PUBLIC -//IETF//DTD RFCxxxx CPL 1.0//EN cpl.dtd > <cpl> <incoming> <adress-switch field= origin subfield= user > <adress is= svarmor > <reject status= reject > reason= Kan inte prata just nu /> </adress> </adress-switch> </incoming> </cpl> cpl startat cpl script incoming inkommande samtal outgoing utgående samtal location specificerar URL lookup Skapar action från på lookupresultat remove-location Tar bor URL från mängd proxy proxiar samtal till nya locations redirect redirectar samtal till nya locations reject rejectar samtal 23 24 4
CPL taggar (forts) mail sänder email till speciferad adress log servern loggar speciferad information subaction definierar subaction (subrutin) sub anropar subrutin adress-switch val beroende av adress string-switch val beroende av sträng time-switch val beroende av tid priority-switch val beroende på priority-headern ancillary för framtida utökningar Serverspecifik programmering Vi kommer att använda SER servern, och ändra dess konfigureringsscript för att skapa en ny tjänst. Exempel på kommandon: exec_msg Starta externt program, skicka header i stdin exec_dset Starta extern program, skicka uri i stdin och skriv över den med stdout if (uri=~ 020123456 ) { } letar efter matchning i uri:n sl_send_reply ( 302, Moved temporarily ) skickar angivet svar (tillståndslöst) 25 26 Lab 3 tjänstekonstruktion Ni skall implementera en SIP-tjänst som är tänkt att samverka med telefonnätet via en PSTN gateway. Två telefonnummer skall hanteras speciellt 020100100 Numret till kundtjänst som kunder ringer 020100200 Numret som personal ringer för att bli vidarekopplde till kunder som ringt tidigare När kund ringer skall Contact: fältet sparas ner i en köfil När en personal ringer skall vidarekoppling ske till den kund som ligger överst i köfilen Sålunda, två program/script skall skapas: Läs från stdin, spara ner uri från Contact: rad till köfil Läs översta raden från köfil, ta bort den och skicka den till stdout 27 5