Voice over IP / SIP Baserat på material från Henning Schulzrinne, Columbia University. 1 Motivation for VoIP 2 1
Internet Telephony as PBX replacement 3 Switching Costs 4 2
Internet Telephony Modes 5 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 6 3
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) 7 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) 8 4
Påminner om HTTP 1.1 SIP meddelanden Requests och responses är I stort lika, första raden skiljer Kan innehålla en body, som vanligtvis är en sessionsbeskrivning 9 SIP meddelande 10 5
Metoder MESSAGE transport of an instant message body 11 Media negotiation 12 6
Informational Success Resultatkoder Redirection Request Failure Server Failure Global Failure 13 SIP proxy mode 14 7
SIP redirect mode 15 För att hitta användare 16 8
DNS SRV 17 SIP request forking 18 9
SIP sequential request forking 19 20 10
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. 21 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 22 11
CPL exempel <?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> 23 CPL taggar 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 24 12
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 25 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) 26 13
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 14