vgradnja funkcionalnosti prisotnosti v okolje xbmcfakulteta za elektrotehniko, računalništvo in...
TRANSCRIPT
Fakulteta za elektrotehniko, računalništvo in informatiko
Smetanova ulica 17
2000 Maribor, Slovenija
David Vrečer
VGRADNJA FUNKCIONALNOSTI
PRISOTNOSTI V OKOLJE XBMC
Magistrsko delo
Maribor, September 2013
VGRADNJA FUNKCIONALNOSTI
PRISOTNOSTI V OKOLJE XBMC
Magistrsko delo
Študent(ka): David Vrečer
Študijski program: Študijski program druge stopnje
Telekomunikacije
Mentor: red. prof. dr. Zdravko Kačič
Somentor: izr. prof. dr. Matej Rojc
Lektor: Fridrih Dosedla
ZAHVALA
Zahvaljujem se mentorju red. prof. dr. Zdravku
Kačiču za pomoč in vodenje pri opravljanju
diplomskega dela. Prav tako se zahvaljujem
somentorju izr. prof. dr. Mateju Rojcu.
Posebna zahvala velja staršem, ki so mi omogočili
študij in moji zaročenki Ani, ki mi je ves čas študija
stala ob strani.
i
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
Ključne besede: Xbox medijski center, XCAP, prisotnost,
UDK: 004.5:621.39(043)
Povzetek V magistrskem delu opisujemo namestitev strežnikov za navzočnost in omrežni
imenik ter izvedbo aplikacije za medijski center XBMC, ki omogoča povezavo na strežnik
IMS, prenos shranjenih kontaktov s strežnika za omrežni imenik in sledenje navzočnosti
uporabnikovih kontaktov. Podana je tudi konfiguracija programskega telefona SIP
MyMonster, ki smo ga uporabili za testiranje delovanja strežnikov ter opisano delovanje
aplikacije, ki smo jo razvili za program XBMC.
ii
Integration of presence service into XBMC
Key words: Xbox media center, XCAP, presence,
UDK: 004.5:621.39(043)
Abstract
In this master thesis, the issues of installing the servers for presence and XCAP are
addressed. The development of the application for XBMC media center that enables
connection to the IMS server, acquisition of saved users contacts from the XCAP server and
monitoring of the contacts presence information is discussed. Additionally the Configuration
of MyMonster softphone that is used for testing of proper operation of servers is described.
At the end the functionality of the application developed for XBMC is presented.
iii
Kazalo 1 Uvod ......................................................................................................................... 1
2 Konfiguracija storitev na internetu .......................................................................... 3
2.1 Protokol za upravljanje z dokumenti XML ...................................................... 3
2.1.1 Uporaba XCAP v aplikacijah ..................................................................... 7
2.2 Operacije XCAP ............................................................................................... 7
2.2.1 Operacija za ustvarjanje ali zamenjavo ...................................................... 8
2.2.2 Operacija za brisanje ................................................................................... 9
2.2.3 Operacija pridobivanja ................................................................................ 9
3 Navzočnost ............................................................................................................. 11
3.1 Pregled storitve navzočnosti ........................................................................... 11
3.1.1 Življenjski krog navzočnosti ..................................................................... 13
3.1.2 Naročanje na navzočnost in obvestila o navzočnosti ................................ 16
3.1.3 Objavljanje informacij o navzočnosti ....................................................... 19
3.1.4 Podatkovni format za objavo informacije o navzočnosti .......................... 21
3.2 Storitev navzočnosti v IMS ............................................................................ 23
3.2.1 Arhitektura navzočnosti v IMS ................................................................. 23
3.2.2 Objavljanje podatkov o navzočnosti ......................................................... 24
3.2.3 Naročanje opazovalcev ............................................................................. 26
3.2.4 OMA razširitve PIDF ................................................................................ 28
4 Predstavitev osnovnih programov .......................................................................... 31
4.1 Telefonska centrala Kamailio ......................................................................... 31
4.1.1 Arhitektura strežnika Kamailio ................................................................. 31
4.2 XBOX media center ....................................................................................... 34
4.2.1 Razvijanje dodatkov za XBMC ................................................................ 35
4.3 PJSIP ............................................................................................................... 36
iv
4.3.1 Pjsua .......................................................................................................... 37
5 Namestitev strežnika in programov ....................................................................... 39
5.1 Postavitev strežnika Kamailio ........................................................................ 39
5.2 Dodajanje MySQL podpore v Kamailio ......................................................... 41
5.3 Nastavitev takojšnjega sporočanja in navzočnosti ......................................... 44
5.4 Nastavitev Omrežnega imenika ...................................................................... 45
5.5 Nastavitev SIP odjemalca Monster ................................................................. 49
6 Izvedba aplikacije s podporo navzočnosti v XBMC .............................................. 52
6.1 Shranjevanje nastavitev .................................................................................. 53
6.2 Podpora funkcionalnosti navzočnosti ............................................................. 53
6.3 Vpeljava funkcionalnosti XCAP .................................................................... 56
6.4 Uporabniški vmesnik ...................................................................................... 59
7 Prikaz delovanja ..................................................................................................... 66
8 Sklep ...................................................................................................................... 71
Priloga A – Kratek življenjepis ................................................................................ 74
v
KAZALO SLIK
Slika 2.1: Poenostavljen pogled delovanja XCAP ......................................................... 4
Slika 2.2: Protokolni sklad XCAP .................................................................................. 5
Slika 2.3: Primer operacije PUT ..................................................................................... 6
Slika 2.4: XCAP odjemalec in strežnik .......................................................................... 6
Slika 2.5: Ustvarjanje ali zamenjava dokumenta XML .................................................. 8
Slika 2.6: Dodajanje elementa v dokument XML .......................................................... 9
Slika 2.7: Brisanje dokumenta XML .............................................................................. 9
Slika 3.1: Arhitektura navzočnosti SIP ........................................................................ 12
Slika 3.2: Prvi del življenjskega kroga informacije navzočnosti (PUBLISH) ............. 14
Slika 3.3: Drugi del življenjskega kroga informacije navzočnosti (NOTIFY) ............ 15
Slika 3.4: Primer naročanja na spremembe navzočnosti .............................................. 17
Slika 3.5: Primer prošnje SUBSCRIBE ....................................................................... 18
Slika 3.6: Primer prošnje NOTIFY .............................................................................. 19
Slika 3.7: Objava informacij o navzočnosti ................................................................. 20
Slika 3.8: Prošnja PUBLISH ........................................................................................ 21
Slika 3.9: Primer PIDF ................................................................................................. 22
Slika 3.10: Arhitektura storitve navzočnosti v IMS ..................................................... 23
Slika 3.11: Arhitektura navzočnosti na osnovi SIP v IMS ........................................... 24
Slika 3.12: Objavljanje informacij o navzočnosti ........................................................ 25
Slika 3.13: Naročanje opazovalca na lasten seznam .................................................... 27
Slika 3.14: Naročanje RLS na entiteto navzočnosti ..................................................... 28
Slika 3.15: Primer dokumenta PIDF razširjenega s strani OMA ................................. 29
Slika 4.1: Arhitektura strežnika Kamailio [5] .............................................................. 32
Slika 4.2: Vmesnik programa XBMC [8] ..................................................................... 34
vi
Slika 5.1: Osnovne nastavitve odjemalca SIP .............................................................. 50
Slika 5.2: Nastavitve navzočnosti odjemalca SIP ........................................................ 50
Slika 5.3: Nastavitve XCAP odjemalca SIP ................................................................. 51
Slika 6.1: Prikaz komunikacije aplikacije .................................................................... 52
Slika 7.1: začetni zaslon ............................................................................................... 66
Slika 7.2: Nastavitve uporabniskega racuna ................................................................. 67
Slika 7.3: Uspešna prijava v sistem .............................................................................. 68
Slika 7.4: Dodajanje entitet .......................................................................................... 68
Slika 7.5: Nastavitve navzočnosti ................................................................................. 69
Slika 7.6: Kontakt Online ............................................................................................. 69
Slika 7.7: Kontakt Away .............................................................................................. 70
Slika 7.8: Kontakt Busy ................................................................................................ 70
Slika 7.9: Sprememba statusnega teksta ....................................................................... 70
Slika 7.10: Meni etitete navzočnosti ............................................................................ 70
vii
UPORABLJENE KRATICE
3GPP Partnerskega projekta tretje generacije (3rd Generation Partnership Project)
GGSN Prehodno podporno vozlišče GPRS
GPL Splošna javna Licenca (General Public Licence)
HSS Strežnik za domače naročnike
HTTP Protokol za prenos hiperteksta (Hypertext transfer protocol)
ICE Vzpostavitev medsebojne povezave (Interactive Connectivity Establishment)
I-CSCF Poizvedovalna funkcija krmiljenja klicne seje (Interrogating Call Session
Control Function)
IETF Delovna skupina za internetsko inženirstvo (Internet Engineering Task Force)
IMS Internetni multimedijski podsistem (IP Multimedia Subsystem – IMS)
IP Internetni protokol (Internet Protocol)
IP-CAN IP - povezovalno dostopovno omrežje (IP-Connectivity Access Network)
MIME Večnamenska razširitev za elektronsko pošto (Multipurpose Internet Mail
Extension)
MSC Strežnik mobilnega komutacijskega centra (Mobile switching center)
MSRP Protokol za prenos sporočil znotraj vzpostavljene seje (Message Session Relay
Protocol)
NAT Prevajanje omrežnih naslovov (Network Address Translation)
OMA Zveza odprte mobilnosti (Open mobile alliance)
PA Agent storitve navzočnosti (Presence agent).
PIDF Podatkovni format za objavo informacije o navzočnosti (Presence Information
Data Format).
PNA Omrežni agent storitve navzočnosti (Presence Network Agent)
viii
PS Strežnik navzočnosti (Presence Server)
PUA Uporabniški agent storitve navzočnosti (Presence User Agent )
RLS Strežnik seznamov virov (Resource List Server)
RTP Protokol za prenos v realnem času (Real Time Transport Protocol)
S-CSCF Strežna funkcija krmiljenja klicne seje (Serving Call Session Control Function)
SCTP Protokol za krmiljenje prenosa pretokov (Stream Control Transmision
Protocol)
SDL Specifikacijski in opisni jezik (Specification and description Language)
SDP Protokol za opis seje (Session Description Protocol)
SIP Protokol za zagon seje (Session Initiation Protocol)
SNMP Preprosti protokol za upravljanje omrežja (Simple Network Management
Protocol)
STUN Enostavno prečkanje UDP preko NAT (Simple Traversal of UDP over NAT)
TCP Protokol za krmiljenje transporta (Transmission Control Protocol)
TLS Varnost transportnega sloja (Transport Layer Security)
TURN Prehod NAT s pomočjo posrednikov (Traversal Using Relays around NAT)
UAID Identifikator uporabe s strani aplikacije (Application Usage ID)
UDP Uporabniški datagramski protokol (User Datagram Protocol)
URI Enolični identifikator virov (Uniform Resource Identifier)
VoIP Govor preko IP (Voice over IP)
XBMC Medijski center XBOX (Xbox Media Center)
XCAP Protokol za upravljanje z dokumenti (XML Configuration Access Protocol)
XML Razširljive označevalni jezik (Extensible Markup Language )
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 1
1 UVOD
Živimo v časih, ko ljudje vedno bolj uporabljamo družabna omrežja, saj želimo biti
bolj povezani med seboj in v kontaktu drug z drugim. Komentarji, priporočila, "všečkanje"
in podobna opravila so že del vsakdana marsikaterega uporabnika spleta. Poleg uporabe
spleta velik del ljudi vsakodnevno uporablja tudi televizor, saj ima skoraj vsako
gospodinjstvo vsaj en televizor in gre razvoj vedno bolj v smer interaktivnih televizij. Na
televizorje poskušamo dodati vsa opravila, ki jih tipično izvajamo na spletu.
V tem magistrskem delu poskušamo narediti prvi korak proti interaktivnemu
televizorju. Na eni strani imamo že postavljeno omrežje internetnega multimedijskega
podsistema (IP Multimedia Subsystem – IMS), ki ga lahko uporabljamo za izvajanje
klicev, pošiljanje sporočil in še marsikaj drugega. Na drugi strani pa poznamo razne
programe, ki služijo kot medijski centri za katere lahko razvijamo aplikacije. V
magistrskem delu poskušamo pripeljati funkcionalnosti navzočnosti, ki jih omogoča IMS,
v program medijskega centra. To bi omogočilo, da bi se lahko uporabnik preko televizorja
prijavil na storitve IMS-a, videl kdaj so prijatelji na voljo in z njimi komuniciral preko
programa, katerega razvoj za televizor je cilj te magistrske naloge.
Cilj magistrskega dela je namestitev strežnika s podporo za storitve navzočnosti in
omrežnega imenika, razvoj aplikacije za medijski center, ki bo omogočala povezavo na
strežnik IMS in pridobitev shranjenih kontaktov s strežnika za omrežni imenik in sledenje
navzočnosti uporabnikovih kontaktov.
Kot osnovo za dosego cilja magistrske naloge smo izbrali programa Xbox medijski
center (Xbox media center - XBMC) ter Kamailio, ki sta oba odprtokodna programa in ju
lahko uporabljamo brez dodanih stroškov. XBMC je program za medijsko predvajanje in
omogoča razvoj lastnih aplikacij. Kamailio je odprtokodni SIP strežnik, ki omogoča
uporabo storitev navzočnosti ter omrežnega imenika.
Diplomsko delo je sestavljeno iz osmih poglavij. Drugo poglavje predstavlja
teoretično ozadje protokola, ki se uporablja za delovanje omrežnega imenika. Tretje
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 2
poglavje govori o teoretičnem ozadju storitve navzočnosti na splošno ter o delovanju
navzočnosti znotraj sistemov IMS. V četrtem poglavju predstavimo programski opremi
Kamailio ter XBMC, ki sta osnova za izdelavo naše povezave ter knjižnico PJSIP, ki služi
kot osnova za programiranje aplikacije v XBMC. Peto poglavje predstavlja namestitve
strežnika ter vseh programov, ki jih potrebujemo za vzpostavitev povezave ter testiranje te
povezave. V šestem poglavju predstavimo izvedbo aplikacije ter nekatere razrede in
funkcije, ki smo jih izvedli za delovanje aplikacije. Sedmo poglavje vsebuje prikaz
delovanja aplikacije, konfiguracijo nastavitev, prijavo na strežnik in spreminjanje
informacij. V zadnjem poglavju povzamemo delo ter predstavimo probleme, ki so nastali
med razvijanjem rešitve ter predstavimo možnosti za nadgradnjo aplikacije.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 3
2 KONFIGURACIJA STORITEV NA INTERNETU
Veliko storitev potrebuje mehanizme, ki omogočajo uporabnikom, da upravljajo s
konfiguracijami storitev. Na primer strežnik navzočnosti zahteva, da entitete navzočnosti
(uporabniki) avtorizirajo, kateri opazovalci lahko vidijo njihove informacije o navzočnosti.
Prav tako storitve pritisni za pogovor zahtevajo, da uporabniki ustvarijo in skrbijo za
skupine. Ti primeri si delijo veliko podobnosti: uporabnik mora opravljati operacije na
strežniku v nerealnem času, da lahko manipulira z enim ali več dokumenti, ki določajo ali
poosebljajo njegove primerke storitve. [1]
Običajno uporabnik ustvari dokument za konfiguracijo lokalno v svojem terminalu
in ga nato naloži na strežnik. Včasih pa mora uporabnik narediti samo majhne spremembe
v že obstoječ dokument, zato se ne splača ponovno nalagati celotnega dokumenta. V
nekaterih primerih uporabniki zamenjajo njihov običajni terminal in uporabljajo drugega,
zato si morajo najprej priskrbeti svežo kopijo trenutnega dokumenta nastavitev, narediti
nekaj sprememb in jih naložiti nazaj na strežnik.
Značilno za dokumente za konfiguracijo je, da so zelo strukturirani. Zaradi tega se
danes pojavlja trend uporabe razširljivega označevalnega jezika (Extensible Markup
Language – XML) za oblikovanje dokumentov, ki poosebljajo primerke storitev.
2.1 PROTOKOL ZA UPRAVLJANJE Z DOKUMENTI XML
Protokol za upravljanje z dokumenti (XML Configuration Access Protocol –
XCAP) omogoča shranjevanje in nalaganje konfiguracijskih dokumentov XML na
strežnik. Njegovo najbolj poenostavljeno delovanje prikazuje slika 2.1, kjer vidimo kako
uporabnik na svojem računalniku ustvari dokument XML in ga naloži na strežnik. Ta
dokument strežnik kasneje uporablja za ustvarjanje poosebljenega primerka storitve.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 4
Slika 2.1: Poenostavljen pogled delovanja XCAP
S tem naletimo na problem ustvarjanja protokola, ki omogoča takšen postopek
nalaganja na strežnik. Protokol za prenos hiperteksta (Hypertext Transfer Protocol –
HTTP) daje dobro osnovo, saj omogoča uporabo metod POST in PUT za prenašanje datotek
od odjemalca do strežnika. Prav tako vsebuje metodo GET za prenašanje dokumentov s
strežnika. Vendar imamo še dodatne potrebe, ki preprečujejo uporabo protokola HTTP. Na
primer, če želi uporabnik dodati prijatelja na svoj seznam prijateljev v storitvi navzočnosti,
torej želi spremeniti le par bitov potencialno velikega dokumenta, se mu ne splača ponovno
nalagati celotnega XML dokumenta, ker je razen spremenjene vsebine dokument večinoma
nespremenjen. Takšnega načina delovanja HTTP ne omogoča.
Delovna skupina za internetsko inženirstvo (Internet Engineering Task Force –
IETF) se je odločila, da razvije skupek konvencij in pravil za uporabo protokola HTTP za
nalaganje in pridobivanje celotnih delov dokumentov XML na strežnik in z njega. Iz tega
je nastal XCAP, ki ni nov protokol ampak le skupek konvencij za uporabo protokola HTTP
za upravljanje z oddaljeno shranjenimi dokumenti XML. Slika 2.2 prikazuje shemo sklada
protokolov, ki ga uporablja XCAP.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 5
Slika 2.2: Protokolni sklad XCAP
XCAP daje odjemalca, ki lahko na daljavo bere, piše in spreminja aplikacijske
konfiguracije XML, ki so shranjene na strežniku. To vključuje spreminjanje seznamov
uporabnikov v seznamu navzočnosti, politik dovoljenj (na primer dovoljeni opazovalci) ali
udeležencev v konferenci. XCAP ne nadzira uporabniškega vmesnika ampak se osredotoči
na podatkovno strukturo.
XCAP definira tudi konvencije, ki načrtujejo dokumente XML in njihove
komponente v HTTP naslove enoličnih identifikatorjev virov (Uniform Resource Identifier
– URI). Tako XCAP omogoča edinstven način zastopanja dokumentov XML ali
komponent s HTTP naslovi URI. Prav tako definira pravila, ki urejajo, kako spremembe
dela vsebine vplivajo na preostali dokument. To pomeni, da XCAP dovoljuje uporabnikom
spreminjanje dokumentov XML, vendar mora biti končni dokument še vedno v skladu z
originalno shemo XML. Dodatno XCAP določa tudi osnovne politike dovoljenj, ki so
povezane z dostopom do virov.
XCAP je dodal set operacij, ki so preslikane na osnovne metode HTTP 1.1.. XCAP
omogoča, da lahko odjemalci z operacijami spreminjajo celoten dokument XML, poljuben
element dokumenta XML ali poljuben atribut znotraj elementa XML. Za vsakega izmed
teh nivojev XCAP ponuja ustvarjanje, brisanje, spreminjanje, zamenjavo in pridobivanje
dokumentov XML. Torej, če povzamemo, XCAP omogoča, da ustvarjamo, brišemo,
spreminjamo, zamenjujemo ali pridobivamo celotne dokumente, elemente ali atribute
XML.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 6
Slika 2.3 prikazuje primer prošnje XCAP, v kateri Alice pošilja prošnjo HTTP PUT,
za ustvarjanje novega seznama navzočnosti. S slike je razvidno, da je XCAP le
kombinacija HTTP-ja in XML-ja, z nekaj dodatnimi pravili.
Slika 2.3: Primer operacije PUT [1]
XCAP definira dva funkcionalna elementa: odjemalec XCAP in strežnik XCAP, ki
jih prikazuje slika 2.4. Odjemalec XCAP je odjemalec, ki je v skladu s HTTP 1.1 in ima
podporo za pravila in konvencije, ki jih določa XCAP. Pošilja prošnje HTTP in dobiva
odzive HTTP. Strežnik XCAP je strežnik, ki je v skladu s HTTP 1.1, ki prav tako podpira
pravila in konvencije, ki jih določa XCAP. Strežnik dobiva prošnje HTTP in generira
odzive HTTP.
Slika 2.4: XCAP odjemalec in strežnik
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 7
2.1.1 UPORABA XCAP V APLIKACIJAH
Videli smo, da obstaja več aplikacij, ki uporabljajo XCAP, na primer: v storitvah
navzočnosti uporabljajo entitete navzočnosti XCAP, da lahko nadzirajo, kateri opazovalci
lahko vidijo vse informacije o navzočnosti. V splošnem lahko rečemo, da kadarkoli je
potreba po spreminjanju konfiguracij podatkov aplikacij, kjer je seznam shranjen
oddaljeno v obliki XML, je XCAP dober protokol za izvedbo teh sprememb.
Zaradi te vsestranskosti ima XCAP različno uporabo glede na aplikacije. Njegova
uporaba je definira glede na to, kako določena aplikacija uporablja XCAP za interakcijo s
strežnikom XCAP. Vse že prej omenjene aplikacije imajo različno delovanje. Vsaka
uporaba aplikacije je določena z identifikatorjem uporabe s strani aplikacije (Application
Usage ID – AUID), ki posamezno uporabo aplikacije edinstveno določa.
IETF je definirala različne uporabe XCAP aplikacij, ki so v povezavi s storitvijo
navzočnosti.
Uporaba XCAP aplikacij za sezname virov. Omogoča spreminjanje
seznamov virov, ki se tipično uporabljajo kot seznami navzočnosti.
Uporaba XCAP aplikacij za dovoljevanje navzočnosti. Omogoča
odjemalcu, da določa pravila glede dovoljenj v navzočnosti. To pomeni, da
lahko ta pravila dovoljujejo nekaterim opazovalcem, da dostopajo do
določenih delov informacij entitete navzočnosti.
Uporaba XCAP aplikacij za spreminjanje dokumentov navzočnosti.
Omogoča uporabniku, da izvaja spreminjanje informacij o navzočnosti kot
je spreminjanje statusa navzočnosti z uporabo protokola XCAP. Za razliko
od spreminjanja teh podatkov z uporabo metode SIP PUBLISH.
2.2 OPERACIJE XCAP
XCAP omogoča odjemalcem različne tipe operacij na oddaljenih dokumentih
XML. Te operacije so preslikane na prošnje HTTP, kjer vrednost Request-URI pomeni
vir (dokument, element, atribut), ki naj se ustvari, izbriše, zamenja, spremeni ali pridobi.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 8
2.2.1 OPERACIJA ZA USTVARJANJE ALI ZAMENJAVO
Da lahko ustvarimo nov dokument na oddaljenem strežniku ali zamenjamo že
obstoječega, uporablja odjemalec XCAP metodo HTTP PUT. V prošnji HTTP PUT pomeni
vrednost polja Request-URI identifikacijo dokumenta XML, ki ga želimo ustvariti (v
primeru, da še ni obstajal) ali zamenjati (v primeru, da že obstaja). Dokument XML, ki ga
želimo ustvariti ali zamenjati je na prošnjo dodan kot telo večnamenske razširitve za
elektronsko pošto (Multipurpose Internet Mail Extension – MIME) in je identificiran s
poljem Content-Type, katerega vrednost je odvisna od uporabljene aplikacije. Slika 2.5
prikazuje primer operacije XCAP, ki ustvari ali zamenja dokument ims.xml.
Slika 2.5: Ustvarjanje ali zamenjava dokumenta XML
Če odjemalec XCAP želi ustvariti ali zamenjati posamezen element ali atribut
obstoječega dokumenta XML, je operacija podobna. Odjemalec XCAP uporabi metodo
HTTP PUT, v kateri polje Request-URI kaže na element ali atribut dokumenta XML, ki
naj se ustvari ali zamenja. Polje Content-Type se nastavi na application/xcap-
el+xml ali application/xcap-att+xml, odvisno od tega ali ta operacija vpliva na
element ali atribut. Prošnja PUT vsebuje telo XML, ki vključuje element ali atribut, ki ga
želimo ustvariti ali zamenjati. Na primer, slika 2.6 prikazuje vstavljanje elementa
kljucne-besede, kot podrejeni element elementu knjiga v dokument ims.xml.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 9
Slika 2.6: Dodajanje elementa v dokument XML [1]
Ker sta metodi ustvarjanja in zamenjave preslikani na isto prošnjo HTTP,
potrebujemo način, kako jih razlikovati. Način je zelo preprost, če izbiranje odseka ne
najde obstoječega elementa, potem je to metoda ustvarjanja. V primeru, da izbiranje
odseka najde obstoječi element v dokumentu je to operacija zamenjave.
2.2.2 OPERACIJA ZA BRISANJE
Za izbris dokumenta, elementa ali atributa dokumenta XML na oddaljenem
strežniku uporabi odjemalec XCAP HTTP prošnjo DELETE. Polje Request-URI izbere
dokument, element ali atribut, ki ga želimo izbrisati. Po prejemu metode DELETE strežnik
odstrani dokument, element ali atribut. V primeru, da je izbran določen element, strežnik
izbriše element z vsemi njegovimi atributi in podrejenimi elementi. Dokument, ki ga
dobimo mora biti v skladu z uporabo aplikacij in shemo XML, ki določa, kateri elementi in
atributi so obvezni in kateri so opcijski. V nasprotnem primeru strežnik ne izpolni prošnje
brisanja. Slika 2.7 prikazuje primer operacije brisanja, ki odstrani dokument ims.xml s
strežnika.
Slika 2.7: Brisanje dokumenta XML
2.2.3 OPERACIJA PRIDOBIVANJA
Obstaja veliko primerov, v katerih odjemalec XCAP poskuša pridobivati obstoječi
dokument, element ali atribut, ki je shranjen na oddaljenem strežniku. Na primer, če
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 10
uporabnik uporablja nov terminal verjetno še nima dokumentov XML, ki jih je ustvaril s
prejšnjim terminalom. V tem primeru mora najprej pridobiti obstoječe dokumente s
strežnika in jih šele nato lahko spreminja.
Za pridobivanje dokumenta, elementa ali atributa odjemalec ustvari prošnjo HTTP
GET. Za to prošnjo mora odjemalec XCAP vedeti ime dokumenta XML. Polje Request-
URI izbere dokument, element ali atribut, ki ga želimo pridobiti. Strežnik na to odgovori z
200 (OK), ki vsebuje telo MIME. Če smo pridobivali celoten dokument potem telo
vsebuje celoten dokument, drugače vrne samo želen element ali atribut.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 11
3 NAVZOČNOST
Navzočnost je ena izmed osnovnih storitev, ki se vse bolj uporablja, saj omogoča
dostop do velikega nabora prilagojene vsebine o določenem uporabniku ali skupini
uporabnikov. Storitve navzočnosti lahko berejo in razumejo informacije o navzočnosti. Z
uporabo teh informacij se storitve, ki so uporabniku na voljo, prilagajajo glede na njegove
potrebe in nastavitve. [1]
3.1 PREGLED STORITVE NAVZOČNOSTI
Navzočnost je storitev, ki daje uporabniku informacije o dostopnosti, dosegljivosti
in pripravljenosti na komunikacijo z drugimi uporabniki. Storitev navzočnosti prikazuje ali
so uporabniki dosegljivi in če so, pove ali so prisotni, v stanju mirovanja ali zasedeni.
Poleg tega storitev navzočnosti omogoča uporabnikom, da delijo informacije oziroma
komentarje v obliki statusnih sporočil ter dajejo informacije o njihovih načinih
komunikacije in opreme, ki je na voljo (torej ali imajo na voljo tekstovno, avdio ali video
komunikacijo).
Ogrodje navzočnosti določa različne vloge, kot jih vidimo na sliki 3.1. Oseba, ki
daje informacije o navzočnosti storitvi navzočnosti se imenuje entiteta navzočnosti (angl.
Presentity). Na sliki 3.1 ima vlogo entitet navzočnosti Alice. Entiteta navzočnosti daje
informacije o navzočnosti, kot so status, zmožnosti komunikacije, komunikacijski naslov
in druge. Te informacije o navzočnosti entiteta navzočnosti deli preko več naprav znanih
kot uporabniški agenti storitve navzočnosti (Presence User Agent – PUA), ki pridobivajo
informacije o njeni navzočnosti.
Slika 3.1 prikazuje tri PUA: terminal IMS, prenosni računalnik in namizni
računalnik. Vsak vsebuje košček informacije o Alice, ki je naša entiteta navzočnosti.
Prenosni in namizni računalnik vesta ali je Alice prijavljena v katerega izmed
računalnikov. Terminal IMS pozna status njene registracije na omrežje IMS in ve ali Alice
že sodeluje v kakšnem tipu komunikacije. Vse te kose informacij posredujejo agentu
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 12
storitve navzočnosti (Presence agent – PA). PA zbira vse informacije, ki jih dobi in ustvari
celotno sliko o navzočnosti.
Agent storitve navzočnosti je lahko tudi sestavni del strežnika navzočnosti
(Presence Server – PS). PS je funkcijska entiteta, ki deluje kot PA ali kot posredovalni
strežnik za prošnje SUBSCRIBE. Oba sta si podobna v funkcionalnosti, vendar lahko PS
deluje tudi kot posredovalni strežnik, medtem ko PA tega ne omogoča.
Na sliki 3.1 vidimo dva opazovalca: Bob in Cynthia. Opazovalec je entiteta, ki
povprašuje po informacijah navzočnosti o entiteti navzočnosti. Obstaja več tipov
opazovalcev na primer, pridobitnik je opazovalec, ki od PA pridobiva trenutno informacije
o navzočnosti entitete. Naročnik je opazovalec, ki prosi za obvestila o prihodnjih
spremembah v informacijah o navzočnosti entitete tako, da ima naročen opazovalec
natančno posodobljen pogled na informacije o navzočnosti entitete.
Aplikacije večinoma vsebujejo kombinirano funkcionalnost opazovalca in entitete
navzočnosti, saj tako skrijejo razlikovanje med objavljanjem informacij o navzočnosti in
njihovim pridobivanjem. Storitev navzočnosti je namenska aplikacija zgrajena na
obvestilih o dogodkih ogrodja SIP. Ogrodje dovoljuje opazovalcem, da se prijavijo na
obvestila o spremembah navzočnosti ali da pridobijo trenutne informacije o entiteti
navzočnosti. Stanja prijav na obvestila o spremembah navzočnosti so shranjena v PA
Slika 3.1: Arhitektura navzočnosti SIP
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 13
entitete navzočnosti, ki deluje kot obveščevalec. PA obvešča vse prijavljene opazovalce,
ko se zgodi kakšna sprememba v navzočnosti opazovane entitete.
Vse transakcije SUBSCRIBE/NOTIFY vsebujejo glavo imenovano SIP Event, ki
opredeljuje dogodek, na katerega se navezuje prijava ali obvestilo.
Vse zahteve NOTIFY vsebujejo polje MIME, ki prikazuje informacije o navzočnosti
entitete navzočnosti. To polje je XML dokument, ki je oblikovan po določenih pravilih.
Ker se informacije o navzočnosti prenašajo v XML dokumentu, je enostavno razširiti
informacije o navzočnosti glede na naše potrebe. Dejstvo, da se informacije o navzočnosti
ne prenašajo direktno s protokolom SIP, ampak znotraj dokumentov XML, ki jih prenaša
protokol SIP, nam daje jasno ločitev med slojem transportnega protokola SIP in med
slojem aplikacijskega protokola XML.
3.1.1 ŽIVLJENJSKI KROG NAVZOČNOSTI
Informacije, ki jih daje entiteta navzočnosti, gredo med svojim življenjskim krogom
skozi več transformacij. Od faze ustvaritve do pošiljanja, obravnavanja, hranitve in do
zadnje faze dostave do uporabnikov (opazovalcev).
Slika 3.2 prikazuje shemo prvega dela življenjskega kroga informacije navzočnosti.
Entiteta navzočnosti (leva stran slike) želi objaviti svoje informacije o navzočnosti.
Dejanske informacije o navzočnosti se razlikujejo glede na to kateri PUA uporablja entiteta
navzočnosti. Lahko se uporablja različne PUA za dajanje informacij o navzočnosti kot so:
računalnik, mobilni telefon ali stacionarni telefon. Kot zgled lahko vzamemo, da je entiteta
navzočnosti oddaljena od računalnika, vendar se vseeno pogovarja preko mobilnega
telefona, tako se potem ti detajli preslikajo v informacije o navzočnosti.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 14
V določenem trenutku v času pošlje vsak izmed prej naštetih PUA prošnjo SIP
PUBLISH, ki vsebuje njihove trenutne informacije o stanju navzočnosti entitete
navzočnosti. Dokument, ki ga prejme PA, se poda v proces združitve, ki ga vodi politika
združevanja in omogoča, da se trije dokumenti o navzočnosti združijo v poenoteno
različico informacije o navzočnosti. Dodatno entiteta navzočnosti naloži še dokument o
politiki navzočnosti z uporabo protokola XCAP. Dokument politike navzočnosti omogoča
dodatne nastavitve zasebnosti, ki jih PA upošteva preden posreduje informacije o
navzočnosti opazovalcem. Na primer, dokument politike navzočnosti lahko pove, da
določeni opazovalci ne bodo dobili informacij o lokaciji entitete navzočnosti, medtem ko
bodo drugi dobili to informacijo.
Drugi del življenjskega kroga navzočnosti prikazuje slika 3.3. Opazovalec se prijavi
na obveščanje o navzočnosti entitete s tem, da pošlje prošnjo SUBSCRIBE, ki je
naslovljena na naslov URI entitete navzočnosti. Prošnja SUBSCRIBE lahko vsebuje filtre,
ki povedo, katere informacije opazovalca zanimajo. PA dobi prošnjo SUBSCRIBE, potrdi
Slika 3.2: Prvi del življenjskega kroga informacije navzočnosti (PUBLISH)
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 15
opazovalca in izvleče identiteto ter filter opazovalca. Potem PA vzame dokument
navzočnosti entitete navzočnosti, dokument politike zasebnosti in opazovalčevo identiteto
ter doda politiko zasebnosti poenotenemu dokumentu navzočnosti. Rezultat tega je
dokument o navzočnosti, ki je prikrojen opazovalcu, vendar je ta dokument še vedno samo
potencialen, saj še mora iti skozi več transformacij.
Nato PA vzame potencialni dokument navzočnosti in doda opazovalčev filter, ki ga
je prejel v prošnji SUBSCRIBE. Ta filter odstrani vse odvečne informacije, ki opazovalca
ne zanimajo. Na primer, opazovalca zanimajo samo osnovni podatki, kot so spremembe
stanja (prisoten/odsoten) in ne geografske koordinate.
Ko PA zaključi filtriranje dokumenta navzočnosti, sta na voljo dve možnosti: če se
uporabljajo polna obvestila ali če je to prvi dokument delnega obvestila, se ustvari celoten
dokument navzočnosti; če pa se uporabljajo delna obvestila in se je že poslal polni
dokument, potem PA ustvari delni dokument navzočnosti glede na prejšnjo poslano verzijo
in tako pošlje le spremembe.
Slika 3.3: Drugi del življenjskega kroga informacije navzočnosti (NOTIFY)
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 16
PA nato ustvari prošnjo NOTIFY, ki vsebuje dokument navzočnosti in ga pošlje
opazovalcu. Če pošlje delno verzijo, potem uporabi opazovalec prejšnjo verzijo in prejeto
verzijo sprememb ter jih združi in tako dobi celotni dokument informacij o navzočnosti. V
primeru, da pridobi celoten dokument navzočnosti, uporabi vse informacije, ki jih
dokument vsebuje in jih preprosto prikaže uporabniku.
3.1.2 NAROČANJE NA NAVZOČNOST IN OBVESTILA O NAVZOČNOSTI
Vmesnik, ki je definiran med opazovalcem in PA, dovoljuje opazovalcu, da se
prijavi na informacije navzočnosti entitete navzočnosti. Prijava je lahko preprosta operacija
pridobivanja. V tem primeru opazovalec želi pridobiti le trenutne informacije o
navzočnosti entitete in ne želi obvestil o prihodnjih spremembah navzočnosti entitete.
Druga možnost pa je SUBSCRIBE prošnja, ki ustvari naročnino na informacije o
navzočnosti entitete, ki trajajo določen čas, ki ga določimo v polju Expires. V tem
primeru dobiva opazovalec posodobitve o stanju navzočnosti entitete, ko se entiteti stanje
spremeni. V primeru, da opazovalec želi obdržati naročnino aktivno, jo mora obnavljati
preden poteče.
Slika 3.4 prikazuje primer naročanja na spremembe navzočnosti. Opazovalec pošlje
prošnjo SUBSRIBE(1) do PA. Prošnja vsebuje polje Event, ki mora biti nastavljeno na
presence, s čemer nakazuje, da se naroča na informacije o navzočnosti določene entitete.
PA avtenticira in avtorizira opazovalca in odgovori z 200(OK), kateremu sledi prošnja
NOTIFY(3). Ta prošnja že lahko vsebuje dokument XML, ki vsebuje informacije o
navzočnosti entitete. V primeru, da NOTIFY vsebuje dokument o navzočnosti entitete, je ta
dokument XML dokument, ki je oblikovan po pravilih podatkovnega formata za objavo
informacije o navzočnosti (Presence information data format – PIDF). V nekaterih
primerih, kot na primer, da še opazovalec ni bil potrjen, ta prošnja NOTIFY(3) samo
pošilja status naročnine, vendar ne prenaša dokumenta PIDF, ki bi opisoval informacije o
navzočnosti entitete.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 17
Slika 3.4: Primer naročanja na spremembe navzočnosti
Opazovalec odgovori PA, na prošnjo NOTIFY, z odgovorom 200(OK)(4). Ko je
opazovalec avtoriziran za prejemanje informacij o navzočnosti entitete ali se stanje
navzočnosti entitete spremeni, mu PA pošlje prošnjo NOTIFY(5), ki vsebuje dokument
navzočnosti v obliki PIDF. Na to prošnjo opazovalec odgovori z 200(OK)(6).
Slika 3.5 nam prikazuje primer prošnje SUBSCRIBE, ki jo pošlje opazovalec, kot je
Alice, entiteti navzočnosti, v tem primeru Bob. Polje Request-URI je nastavljeno na
naslov URI entitete navzočnosti. Ker polje Expires ni nastavljeno na vrednost nič, bo
operacija naročnine po določenem času potekla. Alice je predlagala, da je čas naročnine
ena ura. PA v odgovoru 200 OK na to prošnjo SUBSCRIBE nastavi čas v polje Expires.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 18
Slika 3.5: Primer prošnje SUBSCRIBE [1]
Prošnja SUBSCRIBE lahko vsebuje tudi polje Accept, ki pove katere tipe MIME
lahko opazovalec razume. To polje določa tipe MIME, ki jih kasneje PA vključuje v
prošnje NOTIFY. Kot prikazuje slika 3.5, opazovalec razume format PIDF.
Na sliki 3.6 vidimo primer prošnje NOTIFY, ki prenaša informacije v formatu PIDF.
Polje Subsription-State prikazuje stanje naročnine in časovnik izteka naročnine.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 19
Slika 3.6: Primer prošnje NOTIFY [1]
3.1.3 OBJAVLJANJE INFORMACIJ O NAVZOČNOSTI
Metoda, s katero entitete navzočnosti omogočijo, da PA dostopa do njihovih
informacij o navzočnosti, se imenuje REGISTER. Transakcije REGISTER podajajo trenutno
lokacijo (IP naslov) uporabnika. Tako lahko PA spremeni njihovo navzočnost na
offline, kadar niso registrirani in ko se registrirajo spremeni njihovo navzočnost na
online. Po drugi strani pa je semantika metode REGISTER zelo preprosta: REGISTER
veže naslov vira (javna identiteta) z naslovom kontakta. Torej, če ne želimo
preobremenjevati te semantike z namenom objavljanja informacij o navzočnosti,
potrebujemo nov mehanizem, ki omogoča, da PUA nalagajo dokumente z informacijami o
navzočnosti na PA.
Organizacija IETF je definirala metodo SIP PUBLISH v RFC 3903 [16]. Namen te
metode je objavljanje stanja dogodkov, ki se uporabljajo znotraj okvirov za obveščanje o
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 20
specifičnih dogodkih protokola za zagon seje (Session Initiation Protocol – SIP). Metoda
PUBLISH zato ni uporabna le za objavljanje informacij o navzočnosti, temveč je dovolj
splošna, da jo lahko uporabljamo za objavljanje kakršnihkoli stanj povezanih z
dogodkovnimi paketi.
Slika 3.7 prikazuje tipični potek objavljanja informacij o navzočnosti. PUA pošlje
PA prošnjo PUBLISH, ki vsebuje dokument PIDF. Ta prošnja je prikazana na sliki 3.8.
PA potrdi prejem prošnje PUBLISH tako, da odgovori z 200(OK). Odgovor 200(OK)
vsebuje polje SIP-Etag, ki ga lahko uporabimo za zagotavljanje številke verzije
shranjenega dokumenta.
Slika 3.7: Objava informacij o navzočnosti
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 21
Slika 3.8: Prošnja PUBLISH [1]
3.1.4 PODATKOVNI FORMAT ZA OBJAVO INFORMACIJE O NAVZOČNOSTI
PIDF je dokument oblike XML, ki ga uporabljamo za prenašanje semantike
informacij o navzočnosti med dvema entitetama navzočnosti in je določen z RFC 3863
[17]. PIDF določa splošen profil navzočnosti zato, da ga lahko za prenašanje informacij o
navzočnosti uporabljajo različni protokoli, ne le SIP. Zasnovan je z minimalističnim
pristopom, ki garantira ponovno uporabnost z različnimi protokoli. Po drugi strani pa je
zelo razširljiv tako, da lahko, kjer je potrebno, format razširimo preko minimalnega
modela. Nekatere razširitve so zasnovane s ciljem določanja bolj natančnega pogleda na
informacije o navzočnosti entitete.
PIDF kodira informacije o navzočnosti v dokument XML, ki se ga lahko prenaša v
objavah in obvestilih o navzočnosti kot katerikoli drug dokument MIME. Ker je to nov tip
aplikacije in kodiranja, ima tudi svoj medijski tip MIME application/pidf+xml.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 22
Dokument PIDF vsebuje informacije o navzočnosti entitete. Te informacije so
sestavljene iz več skupkov. Vsak skupek vsebuje status entitete navzočnosti (open ali
closed, kar pomeni ali je online/offline), opcijski element contact, ki določa
naslov URI kontakta, opcijsko opombo note, opcijski časovni žig timestamp in možne
druge razširitve elementov.
Poudariti je treba, da PIDF samo definira statusa open in closed, kar za večino
aplikacij ni dovolj. Dovoljuje pa razširitev statusov kot so doma, na telefonu,
odsoten, itd.
Slika 3.9 prikazuje PIDF primer entitete navzočnosti
pres:[email protected]. Iz tega PIDF primera vidimo, da je online za
komuniciranje. Z opazovalci deli kontakt v obliki TEL URI in opombo, ki pove, da je to
njen mobilni telefon.
Slika 3.9: Primer PIDF [1]
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 23
3.2 STORITEV NAVZOČNOSTI V IMS
Storitve navzočnosti, ki potekajo preko IMS, so definirane s strani partnerskega
projekta tretje generacije (3rd Generation Partnership Project - 3GPP) s specifikacijo TS
24.141 [19]. Treba je poudariti, da 3GPP samo vzdržuje specifikacijo in je ne razvija.
Storitev navzočnosti se je medtem preselila na zvezo odprte mobilnosti (Open mobile
alliance – OMA). OMA vidi storitev navzočnosti kot omogočevalca, torej kot skupek
specifikacij, ki omogočajo storitve.
3.2.1 ARHITEKTURA NAVZOČNOSTI V IMS
Slika 3.10 prikazuje arhitekturo storitve navzočnost v IMS v navezi s konfiguracijo,
ki jo ponuja arhitektura XDM. Terminal IMS igra vlogo tako opazovalca kot PUA. V
središču te arhitekture je funkcija PS, ki deluje kot PA in se nahaja v domačem omrežju.
PS je dopolnjen s strežnikom vsebine, XDMS-jem navzočnosti in XDMS-jem vsebine
navzočnosti. Če gledamo na te strežnike s strani IMS arhitekture, so vsi aplikacijski
strežniki.
Značilno za storitev navzočnosti je, da potrebuje zmožnost urejanja seznamov.
Strežnik zaznamkov virov (Resource List Server – RLS) daje potrebno funkcionalnost za
gostovanje različnih seznamov. RLS se dopolnjuje z RLS XDMS-jem in deljenim XDMS-
jem. S strani IMS arhitekture so vse te storitve aplikacijski strežniki.
Slika 3.10: Arhitektura storitve navzočnosti v IMS
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 24
Aplikacijski strežniki lahko delujejo kot opazovalci informacij o navzočnosti.
Tipično je opazovalec v storitvi navzočnosti implementiran v povezavi z drugimi
storitvami, ki sledijo navzočnosti entitete.
Storitev navzočnosti vsebuje različne vmesnike, ki jih prikazuje slika 3.11 Večina
vmesnikov je realizacija splošnega vmesnika za krmiljenje storitev.
3.2.2 OBJAVLJANJE PODATKOV O NAVZOČNOSTI
Ko se zažene IMS aplikacija za navzočnost, v našem primeru je to IMS terminal,
objavi vse trenutne informacije o entitetah navzočnosti. Slika 3.12 prikazuje potek
objavljanja informacij o navzočnosti in kot lahko vidimo, se ne razlikuje veliko od
splošnega objavljanja informacij o navzočnosti. IMS terminal pošlje prošnjo PUBLISH(1),
ki v polju Event vsebuje besedilo presence in vključuje dokument PIDF, ki opisuje
informacije o navzočnosti. Strežna funkcija krmiljenja klicne seje (Serving Call Session
Control Function – S-CSCF) sprejme to prošnjo (2) in oceni začetne informacije o
navzočnosti. Eden izmed začetnih kriterijev na filtru pove, da je potrebno prošnjo
Slika 3.11: Arhitektura navzočnosti na osnovi SIP v IMS
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 25
PUBLISH, ki ima polje event nastavljeno na presence, posredovati na PS, kjer se
informacije o navzočnosti entitete navzočnosti shranijo, zato S-CSCF posreduje prošnjo
PUBLISH(3) aplikacijskemu strežniku. PS odobri objavo in pošlje nazaj odgovor
200(OK)(4).
Poleg IMS terminala lahko katerakoli druga omrežna entiteta deluje kot izvor
informacij o navzočnosti in objavlja uporabnikove informacije o navzočnosti. Tem
entitetam pravimo omrežni agenti storitve navzočnosti (Presence Network Agent – PNA)
in lahko objavljajo informacije o navzočnosti entitete v imenu uporabnika na podoben
način, kot bi to objavili PUA. PNA uporabijo metodo SIP PUBLISH, ki vsebuje PIDF
dokument. Katerakoli omrežna entiteta lahko deluje kot PNA: strežnik mobilnega
komutacijskega centra (Mobile switching center – MSC), prehodno podporno vozlišče
GPRS (Gateway GPRS support Node – GGSN), strežno podporno vozlišče GPRS (serving
GPRS support Node –SGSN), strežnik za domače naročnike (Home Subscriber Server –
HSS) in drugi.
Slika 3.12: Objavljanje informacij o navzočnosti [1]
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 26
3.2.3 NAROČANJE OPAZOVALCEV
Uporabnik Alice upravlja z IMS terminalom, ki lahko deluje kot opazovalec. Ko
požene aplikacijo za navzočnost, se njen terminal prijavi na informacije o navzočnosti
njenih entitet navzočnosti.
Čeprav IMS omogoča opazovalcem, da se posamezno prijavijo na vsako izmed
entitet navzočnosti, se tipično naročajo na enega ali več seznamov navzočnosti, ki
gostujejo v domačem omrežju na RLS. S tem dobimo zelo učinkovito skupinsko naročanje
z enim korakom, kar prihrani čas in povezavo, ki bi jo potrebovali za posamično naročanje.
Slika 3.13 prikazuje tok naročanja na lasten seznam, ki privzema, da imamo na
RLS seznam naslovov URI od entitet navzočnosti, na katere se želi Alice naročiti.
Aplikacija opazovalca v terminalu IMS pošlje prošnjo SUBSCRIBE(1) naslovljeno na njen
seznam sip:[email protected]. Prošnja SUBSCRIBE ima polje
Require nastavljeno na eventlist, kar nakazuje, da je naročanje naslovljeno na seznam
in ne na posamezno entiteto navzočnosti. Če je polje Event nastavljeno na presence to
prikazuje, da je to naročnina za paket dogodkov navzočnosti. S-CSCF nato prejme prošnjo
SUBSCRIBE (2) in oceni začetne kriterije filtriranja. Eden izmed teh kriterijev pove, da
ima prošnja SUBSCRIBE polje Event nastavljeno na presence ter polje Require
nastavljeno na eventlist in ga je zato potrebno posredovati (3) na Aplikacijski
strežnik, ki je RLS. RLS preveri identiteto naročnika in potrdi naročnino nato pa pošlje
odgovor 200(OK)(4). RLS prav tako pošlje začetno prošnjo NOTIFY(7), ki še ne
vsebuje podatkov o navzočnosti. RLS se posamezno prijavi na vse entitete navzočnosti, ki
jih vsebuje seznam virov. Ko RLS prejme dovolj informacij, ustvari novo prošnjo
NOTFIY(13), ki vsebuje dokument o navzočnosti sestavljen iz informacij vseh entitet
navzočnosti.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 27
Slika 3.14 prikazuje, kako se RLS naroči na eno izmed entitet navzočnosti, ki so na
prejetem seznamu. Ta proces se ponovi za vsak naslov URI na seznamu. Prošnja vsebuje
polje Event, ki je nastavljeno na presence. Prošnje se posredujejo preko S-CSCF v
domače omrežje RLS (2) do poizvedovalne funkcije krmiljenja klicne seje (Interrogating
Call Session Control Function – I-CSCF) v omrežju entitete navzočnosti. I-CSCF ustvari
poizvedbo na HSS z uporabo protokola Diameter, (3),(4), da poišče S-CSCF, ki je
dodeljen entiteti navzočnosti in mu nato posreduje prošnjo SUBSCRIBE(5). S-CSCF oceni
začetne kriterije filtra, kjer je kriterij, ki nakazuje, da je potrebno prošnjo posredovati PS-ju
entitete navzočnosti (6). Po pošiljanju odgovora 200(OK)(7), PS pošlje prošnjo
NOTIFY(11), ki vsebuje informacije o navzočnosti entitete navzočnosti. Na sliki 3.13
Slika 3.13: Naročanje opazovalca na lasten seznam
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 28
vidimo, da niti S-CSCF niti I-CSCF ne beleži poti. Torej, PS pošlje prošnjo NOTIFY(11)
direktno na naslednje vozlišče, ki je zabeležilo to pot (S-CSCF v omrežju RLS). S tem, da
nimamo poti, se izognemo temu, da bi se S-CSCF zaklenil v primeru, da nebi imel
prijavljenih entitet navzočnosti. Če se entiteta navzočnosti prijavi kasneje, se lahko zgodi
dodelitev S-CSCF-ja, ki jo vodi do drugega S-CSCF.
3.2.4 OMA RAZŠIRITVE PIDF
OMA je definirala manjše število dodatnih elementov, ki dopolnjujejo standard
PIDF za mobilne namene. Slika 3.15 prikazuje vse te dodatne elemente, ki jih je dodala
OMA.
Slika 3.14: Naročanje RLS na entiteto navzočnosti
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 29
Slika 3.15: Primer dokumenta PIDF razširjenega s strani OMA
OMA definira element willingness, ki se lahko uporablja za prikaz
uporabnikove pripravljenosti do sprejemanja dohodnih komunikacij za specifične
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 30
aplikacije in naprave. Ta element lahko vsebuje vrednosti open ali closed. Element
session-participation prikazuje ali ima uporabnik vsaj eno aktivno sejo v katerikoli
storitvi. Ta element lahko vsebuje vrednosti open ali closed. Element registration-
state prikazuje stanje registracije entitete navzočnosti na določene storitve. Lahko
vsebuje vrednosti active ali terminated. Element barring-state prikazuje ali je
uporabnik aktiviral zaporo za katero izmed storitev. Lahko vsebuje vrednosti active ali
terminated. Element service-description se uporablja za prikazovanje storitev, ki
so specifične za OMA. Ta element lahko ima dva podrejena elementa: service-id in
version. Element service-id identificira storitev in lahko vsebuje eno izmed številk,
ki jih je definirala OMA. Element version nam pove verzijo storitve. Vse te elemente
najdemo v komponenti service podatkovnega modela navzočnosti.
Element network-availability se uporablja za prikazovanje tipa omrežja, na
katerega je povezana uporabnikova naprava. Vsebuje element network, ki vsebuje
atrribut id, ki je nastavljen na tip omrežja, na katerega je povezan. Ta atribut lahko
vsebuje vrednost IMS, s čemer nakaže, da je to omrežje IMS, vendar lahko dobi tudi
vrednost kateregakoli IP-povezovalnega dostopovnega omrežja (IP-Connectivity Access
Network – IP-CAN) dostopovnega tipa z isto vrednostjo kot jo dobi P-Access-
Network-Info. Element network vsebuje podrejeni element, ki je nastavljen na active
ali terminated. Element network-availability najdemo v komponenti device
podatkovnega modela navzočnosti.
Entiteta navzočnosti lahko uporabi element override-willingness, da
omogoča splošno pripravljenost za vse aplikacije. Kot posledica tega ima override-
willingness prioriteto pred nastavitvam willingness od aplikacij in naprav. Element
override-willingness lahko vsebuje vrednost open in closed in ga najdemo v
komponenti person v podatkovnem modelu navzočnosti.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 31
4 PREDSTAVITEV OSNOVNIH PROGRAMOV
4.1 TELEFONSKA CENTRALA KAMAILIO
Kamailio (bivši OpenSer) je odprtokodni SIP strežnik, ki je zmožen obravnavati
tisoče vzporednih klicev na sekundo in je razvit pod splošno javno licenco (General Public
Licence – GPL). Njegove zmožnosti obsegajo asinhron protokol za krmiljenje transporta
(Transmission Control Protocol – TCP), uporabniški datagramski protokol (User Datagram
Protocol – UDP), protokol za krmiljenje prenosa pretokov (Stream Control Transmision
Protocol – SCTP), varno komunikacijo preko varnosti transportnega sloja (Transport Layer
Security – TLS) za govor preko IP (Voice over IP – VoIP) (zvok, video), IPv4 in IPv6,
preprosto takojšnje sporočanje in navzočnost z vgrajenim XCAP strežnikom in protokolom
za prenos sporočil znotraj vzpostavljene seje (Message Session Relay Protocol – MSRP),
oštevilčenje, usmerjanje glede na najnižje stroške, prometno uravnovešanje, usmerjanje
preko nadomestnih povezav, ustvarjanje računov, avtentikacijo in avtorizacijo. Kamailio
podpira tudi različne sisteme, kot so: MySQL, Postgres, Oracle, Radius, LDAP, Redis,
Cassandra, XMMLRPC kontrolni vmesniki in nadziranje preprostih protokolov za
upravljanje omrežja (Simple Network Management Protocol - SNMP). Lahko ga
uporabljamo za gradnjo velikih platform za podporo VoIP ali za povečevanje kapacitet
prehodov SIP-v-PSTN.[3]
4.1.1 ARHITEKTURA STREŽNIKA KAMAILIO
Strežnik Kamailio ima modularno arhitekturo. Če pogledamo od daleč, vidimo dve
glavni kategoriji:
Jedro – to je komponenta, ki skrbi za nizkonivojsko delovanje. Od verzije
3.0.0 naprej jedro strežnika Kamailio vsebuje tako imenovane notranje
knjižnice. Te se uporabljajo za zbiranje kode, ki si jo deli več modulov in se
ne uporablja kot del jedra.
Moduli – to so komponente, ki omogočajo večino funkcionalnosti, ki
naredijo ta strežnik tako uporaben v različnih izvedbah po svetu.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 32
Arhitektura strežnika Kamailio se je spremenila z verzijo 3.0.x, s čemer je
omogočila, da se programska koda deli med več moduli, ki so shranjeni v notranjih
knjižnicah. Slika 4.1 prikazuje novo arhitekturo verzije 3.0.x v primerjavi s staro verzije
1.x.[4]
Slika 4.1: Arhitektura strežnika Kamailio [5]
JEDRO STREŽNIKA KAMAILIO
Jedro strežnika Kamailio vsebuje:
upravitelj pomnilnika,
razčlenjevalnik sporočil SIP,
upravljanje transportnega sloja in DNS,
razčlenjevalnik in prevajalnik konfiguracijskih datotek,
posredovanje brez stanj,
psevdo spremenljivke in pogoni za transformacije,
vmesniki za oddaljene postopke,
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 33
vmesniki za časovnik.
Notranje knjižnice vsebujejo:
Nekatere komponente iz starega jedra verzije 1.5.x
Abstraktne sloje podatkovnih baz
Upravljavski vmesnik
Pogon za statistiko
MODULI STREŽNIKA KAMAILIO
V repozitoriju trenutno obstaja več kot 150 modulov. Z nalaganjem raznih modulov
lahko dobimo funkcionalnosti kot so:
Upravljanje registracij in uporabniških lokacij,
vodenje računov, dovoljenje in avtentikacij,
tekstovne operacije,
odgovarjanje brez stanj,
razširitve za navzočnost in takojšnje sporočanje,
podpora za RADIUS in LDAP,
sledenje aktivnim klicem,
ter mnoge druge.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 34
4.2 XBOX MEDIA CENTER
XBMC je odprtokodna aplikacija za medijsko predvajanje ter zabavno središče za
digitalne medije. XBMC je na voljo na platformah LINUX, OSX in Windows. Leta 2003
ga je ustvarila skupina podobno razmišljujočih programerjev. XBMC je neprofiten projekt,
ki ga vodijo in razvijajo prostovoljci po vsem svetu. Več kot petdeset razvijalcev
programske opreme prispeva k razvijanju XBMC-ja ter več kot sto prevajalcev, ki so
omogočili, da je na voljo v več kot tridesetih jezikih. [6]
Trenutno se lahko XBMC uporablja za predvajanje skoraj vseh poznanih
popularnih avdio in video formatov. Zasnovan je bil za mrežno predvajanje tako, da lahko
pretakamo naše vsebine direktno preko mreže ali interneta kjerkoli želimo. Z njim lahko
gledamo tudi CD-je in DVD-je, prav tako pa lahko predvaja vsebine iz zgoščenih arhivskih
datotek kot so ZIP ali RAR. Ena izmed njegovih funkcij je tudi, da pregleda vsebino
našega diska in za nas avtomatsko ustvari poosebljeno knjižnico vsebin na disku.
Ena izmed glavnih lastnosti programa XBMC je prilagodljivost. Na sliki 4.2 vidimo
eno izmed različnih preoblek vmesnika, ki omogočajo prilagajanje videza programa. Poleg
preoblek imamo na voljo različne dodatke, ki dovoljujejo uporabniku dostop do raznih
spletnih storitev kot so YouTube, Spotify, Grooveshark in druge. [7]
Slika 4.2: Vmesnik programa XBMC [8]
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 35
V začetku so XBMC ustvarili kot aplikacijo za medijsko predvajanje v igralni
konzoli Xbox, vendar je danes na voljo kot aplikacija za operacijske sisteme Android,
Linux, BSD, MAC OS X, iOS in Mircosoft Windows. Na voljo je tudi kot samostojna
verzija poimenovana XBMCbuntu. Zaradi odprtokodne zasnove in povezave med
operacijskimi sistemi, se XBMC uporablja v različnih napravah, kot so: pametna televizija,
set-top box sistemi, hotelski televizijski sistemi.
XBMC je aplikacija, ki se uporablja na več platformah in je programiran v
programskem jeziku C++. Aplikacija delno uporablja tudi specifikacijski in opisni jezik
(Specification and description Language – SDL), multimedijska ogrodja in OpenGL za
procesiranje grafike na platformah Linux in Mac OS X, medtem ko za procesiranje grafike
na platformi Windows uporablja Microsoft DirectX in Direct3D.
Ker XBMC izvira iz platforme Xbox, ki ima strojne in programske omejitve, je bilo
rezerviranje omejenih virov vedno pomembno pri razvijanju programov. XBMC je
programiran tako, da izrablja sistemska sredstva zelo učinkovito, zato ga lahko poganjamo
na cenovno zelo ugodni strojni opremi in tudi starejših računalnikih.
4.2.1 RAZVIJANJE DODATKOV ZA XBMC
XBMC vsebuje več odprtih uporabniških vmesnikov, ki omogočajo zunanjim
razvijalcem razširjanje z raznimi dodatki. Dodatki so lahko zvočni ali video vtičniki za
spletne vire, skripte za gradnike, preobleke/motivi, vizualizacije, ohranjevalniki zaslona,
spletni povzemalci, vremenske napovedi in še več. Razvijalci XBMC-ja spodbujajo
uporabnike, da ustvarjajo in objavljajo svoje dodatke, da dodajo dodatno vsebino in
storitve znotraj okolja XBMC.
XBMC ima vgrajen prevajalnik kode Python, ki omogoča razvijanje dodatkov,
skript in vtičnikov. S pomočjo teh dodatkov lahko razširimo delovanje programa XBMC
brez veliko programerskih izkušenj. [9]
Pri razvijanju za XBMC imamo na voljo dodatke in skripte. Skripte dajejo
fleksibilnost in kontrolo celotnega grafičnega vmesnika XBMC, dodatki pa omogočajo, da
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 36
hitro in konsistentno uporabniku predstavljamo informacije z uporabo standardne strukture
menijev XMBC. Dodatki so prav tako skripte, vendar se uporabljajo le za določene
funkcije in so shranjene v datoteki /plugins/ namesto v datoteki /scripts/, kjer so
shranjene skripte.
Ko uporabnik požene dodatek, ta generira seznam postavk ter jih posreduje XBMC-
ju, da jih ta izriše na zaslon. Čeprav razvijalci dodatkov izgubijo nekaj nadzora nad
predstavitvijo podatkov, ti ne potrebujejo ustvarjati lastnih vmesnikov, ali skrbeti za
ustvarjanje uporabnega videza in občutka. Dodatke večinoma uporabljamo za pridobivanje
podatkov s spletnih strani in prikazovanje seznamov video posnetkov v XMBC-ju.
4.3 PJSIP
PJSIP je multimedijska komunikacijska knjižnica, ki je prosto dostopna in
odprtokodna. Napisana je v programskem jeziku C in vključuje standardizirane protokole
kot so SIP, protokol za opis seje (Session Description Protocol – SDP), protokol za prenos
v realnem času (Real Time Transport Protocol – RTP), enostavno prečkanje UDP preko
NAT (Simple Traversal of UDP over NAT – STUN), prehod NAT s pomočjo posrednikov
(Traversal Using Relays around NAT – TURN) in vzpostavitev medsebojne povezave
(Interactive Connectivity Establishment – ICE). Združuje signalni protokol (SIP) z
bogatim multimedijskim ogrodjem in funkcionalnostjo prečkanja omrežja s pomočjo
prevajanja omrežnih naslovov (Network Address Translation – NAT) v visoko nivojski
vmesnik, ki je prenosljiv in primeren za skoraj vse tipe sistemov, kot so: namizni
računalniki, vgrajeni sistemi ter mobilne naprave. [10]
Multimedijska komunikacijska knjižnica je zelo bogata z lastnostmi, a hkrati tudi
kompaktna. Podpira avdio, video, navzočnost in takojšnje sporočanje poleg tega ima tudi
obširno dokumentacijo. Je tudi zelo prenosljiva, saj na mobilnih napravah prevzame
lastnosti, ki so odvisne od naprave ter v večini primerov lahko uporablja izvorne
multimedijske sposobnosti naprave.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 37
4.3.1 PJSUA
PJSUA je odprtokodni uporabniški agent SIP, ki ga uporabljamo kot referenčno
izvedbo knjižnic PJSIP, PJNATH in PJMEDIA. Kljub njegovi preprostosti vsebuje veliko
različnih lastnosti.
Lastnosti SIP:
Več hkratnih registracij
Podpora več klicem
IPv6
PRACK
UPDATE
OPTIONS
Klic na čakanju
Preusmeritev klica
SIMPLE z podporo za PIDF in XPIDF
Lasten tekst navzočnosti
Podpora za objavljanje PUBLISH
Takojšnje sporočanje in obveščanje o tipkanju
Transport preko UDP in TCP
Avtentikacija Digest
Medijske lastnosti:
Več hkratnih klicev
Konferenčni klici
Kodeki Speex, iLBC, GSM, G711, G722 in L16
Stereo kodeki
Predvajanje, pretakanje in snemanje datotek WAV
RTCP
Nadziranje kvalitete klicev
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 38
RFC 2833 [18]
Avtomatski odzivnik
Generiranje tonov
Izničevanje odmeva
Zaznavanje tišine
Simuliranje izgubljenih paketov
SRTP
Lastnosti prečkanja NAT:
Interaktivno ustvarjanje povezljivosti
STUN
TURN
Paketi TLS keep-alive in SIP TCP
Avtomatsko zaznavanje sprememb naslova SIP UDP
Avtomatsko zaznavanje sprememb medijskega transporta ICE [11]
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 39
5 NAMESTITEV STREŽNIKA IN PROGRAMOV
5.1 POSTAVITEV STREŽNIKA KAMAILIO
Namestitev strežnika Kamailio pričnemo s tem, da dodamo njegov repozitorij v
/apt/source.list. S tem poskrbimo, da nam ne bo potrebno prenašati posameznih
paketov ali ga nameščati iz izvornih datotek. Nato moramo še posodobiti apt. [12]
apt-get update
Za tem še preverimo ali nam uspe najti paket z imenom Kamailio preko ukaza:
apt-cache search kamailio
Nato pa še bolj natančno preverimo verzijo paketa Kamailio, saj mora biti verzija
3.1.x.
apt-cache show kamailio
Na DNS strežniku moramo dodati pravilne SIP UDP in SIP TCP SRV, ki bodo
usmerjali pakete na naslov IP našega strežnika Kamailio.
Presence 1D IN A 172.16.25.2
Nadaljujemo z namestitvijo strežnika Kamailio.
Apt-get install kamailio
Ko se namestitev zaključi vidimo sporočilo:
Setting up kamailio (3.1.0+lenny3) ...
adduser: Warning: The home directory `/var/run/kamailio' does not belong
to the user you are currently creating. Kamailio not yet configured. Edit
/etc/default/kamailio first.
Odpremo datoteko /etc/default/kamailio.
# Set to yes to enable kamailio, once configured properly.
RUN_KAMAILIO=yes
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 40
# User to run as
USER=kamailio
# Group to run as
GROUP=kamailio
# Amount of memory to allocate for the running Kamailio server (in Mb)
MEMORY=64
Nato lahko zaženemo osnovno Kamailio storitev, ki se zažene z vnaprej nastavljeno
konfiguracijo.
/etc/init.d/kamailio start
Starting kamailio: kamailioloading modules under
/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/
Listening on
udp: 127.0.0.1:5060
udp: 158.193.139.51:5060
tcp: 127.0.0.1:5060
tcp: 158.193.139.51:5060
Aliases:
tcp: localhost:5060
udp: localhost:5060
Sedaj moramo še dodati alias v konfiguracijsko datoteko kamailo.cfg.
Poiščemo vrstico:
/* add local domain aliases */
#alias="sip.mydomain.com"
V tem delu dodamo vrstico z našo domeno.
alias="ietkims.uni-mb.si"
Ponovno zaženemo strežnik.
/etc/init.d/kamailio restart
Restarting kamailio: kamailioloading modules under
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 41
/usr/lib/kamailio/modules_k/:/usr/lib/kamailio/modules/
Listening on
udp: 127.0.0.1:5065
udp: 172.16.25.2:5065
tcp: 127.0.0.1:5065
tcp: 172.16.25.2:5065
Aliases:
tcp: localhost:5065
udp: localhost:5065
*: ietkims.uni-mb.si:*
kamailio started
Namestitev strežnika je s tem zaključena in sedaj se lahko registriramo na strežnik z
odjemalcem MyMonster.
5.2 DODAJANJE MYSQL PODPORE V KAMAILIO
Za uporabo shranjevanja podatkov moramo najprej namestiti strežnik podatkovne
baze. Za podatkovne baze uporabimo MySQL in Kamailio module, ki jih Kamailio
uporablja za povezovanje s podatkovno bazo. [13]
Namestitev je preprosta, le zaženemo:
apt-get install mysql-server kamailio-mysql-modules
Med namestitvijo se ponudi izbira root gesla za strežnik MySQL. Nato moramo
določiti parametre, ki jih bo strežnik Kamailio uporabljal za povezovanje z bazo. Za to
moramo urediti datoteko /etc/kamailio/kamctlrc in nastaviti ustrezne podatke, ki jih
bosta uporabljala strežnik Kamailio in ukaz kamctl.
Dodamo ali odkomentiramo naslednje vrstice:
SIP_DOMAIN=ietkims.uni-mb.si
DBENGINE=MYSQL
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 42
DBHOST=localhost
DBNAME=kamailio
DBRWUSER=openser
DBRWPW=„openserrw“
DBROUSER=openserro
DBROPW=openserro
DBROOTUSER=„root“
ALIASES_TYPE=„DB“
CTLENGINE=„FIFO“
OSER_FIFO=“/tmp/kamailio_tmp“
VERBOSE=1
PID_FILE=/var/run/kamailio.pid
Nato z ukazom kamdbctl create ustvarimo tabele, ki jih bo Kamailio uporabljal
za shranjevanje podatkov.
pstest:/etc/kamailio# kamdbctl create
MySQL password for root:
database engine 'mysql' loaded
INFO: test server charset
INFO: creating database kamailio …
Creating core table: standard
Creating core table: acc
Creating core table: lcr
Creating core table: domain
Creating core table: group
Creating core table: permissions
Creating core table: registrar
Creating core table: usrloc
Creating core table: msilo
Creating core table: alias_db
Creating core table: uri_db
Creating core table: speeddial
Creating core table: avpops
Creating core table: auth_db
Creating core table: pdt
Creating core table: dialog
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 43
Creating core table: dispatcher
Creating core table: dialplan
INFO: Core Kamailio tables succesfully created.
Kot zadnji korak še poskusimo dodati novega uporabnika v podatkovno bazo.
Ietkims2:/etc/kamailio# kamctl add test test_password
database engine 'MYSQL' loaded
Control engine 'FIFO' loaded
is_user: user counter=0
check_db_alias: alias counter=0
new user 'test' added
Z nameščenim MySQL strežnikom moramo sedaj preveriti ali imamo nameščene
module MySQL, ki jih Kamailio potrebuje. Če niso nameščeni, moramo odkomentirati
vrstice z moduli, ki jih potrebujemo. Odpremo datoteko
/etc/kamailio/kamailio.cfg in kot prvi korak definiramo bloke za podporo MySQL
WITH_MYSQL, avtentikacijo s podatkovno bazo WITH_AUTH, podatkovne baze vzdevkov
WITH_ALIASDB in trajno shranjevanje lokacije WITH_USRLOCDB.
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_IPAUTH
#!define WITH_ALIASDB
#!define WITH_USRLOCDB
Sedaj v datoteki cfg poiščemo ####### Defined Values ###### in znotraj
teh vrednosti poiščemo DB_URL, tam preverimo, da je DB_URL nastavljen pravilno.
#!define DBURL „mysql:/ /openser:openserrw@localhost/kamailio“
Da IMS strežniku omogočimo nemoteno komuniciranje s strežnikom navzočnosti,
še znotraj datoteke cfg poiščemo odsek Route:
#!ifdef WITH_IPAUTH
if(#allow_source_address())
{
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 44
# source IP allowed
return;
}
Ter ga spremenimo na:
#!ifdef WITH_IPAUTH
if(1==1)
{
# source IP allowed
return;
}
Ostali del datoteke je že pravilno nastavljen, zato nam ni potrebno spreminjati
drugih odsekov programske kode.
5.3 NASTAVITEV TAKOJŠNJEGA SPOROČANJA IN NAVZOČNOSTI
Za podporo navzočnosti potrebuje Kamailio posebne podatkovne tabele. Torej, ko
nameščamo MySQL podporo za Kamailio, moramo v etc/kamailio/kamctlrc
odkomentirati naslednji dve vrstici. [14]
# If to install tables for the modules in the EXTRA_MODULES variable.
INSTALL_EXTRA_TABLES=ask
# If to install presence related tables.
INSTALL_PRESENCE_TABLES=ask
Nato zaženemo ukaz kamdbctl create, a ker smo že ustvarili podatkovne baze
pri nastavljanju podpore MySQL za Kamailio, moramo najprej zagnati ukaz kadbctl
reinit, ki bazo pobriše in jo na novo ustvari.
Sedaj lahko namestimo modul za navzočnost strežnika Kamailio, kar storimo z
ukazom apt-get install. Ne smemo pa pozabiti ponovno zagnati strežnika Kamailio z
ukazom /etc/init.d/kamailio restart.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 45
Konfiguracijo takojšnjega sporočanja in osnovne navzočnosti izvedemo v datoteki
/etc/kamailio/kamailio.cfg, kjer dodamo vrstico:
#!define WITH_PRESENCE
Za vzpostavitev preproste navzočnosti je to dovolj, saj so vse ostale vrstice že
vključene znotraj datoteke kamailio.cfg.
5.4 NASTAVITEV OMREŽNEGA IMENIKA
Strežnik Kamailio nima vnaprej nastavljenih nastavitev za podporo XCAP, zato
moramo v /etc/kamailio/kamailio.cfg dodati par vrstic. Na vrhu dodamo
definicijo XCAP podpore. [15]
#!define WITH_XCAPSRV
V odsek global parameters moramo dodati parametre za življenjsko dobo
povezave in dovoljenje prejemanja prošenj brez dolžine vsebine.
tcp_connection_lifetime=3064
#!ifdef WITH_XCAPSRV
tcp_accept_no_cl=yes
#!endif
Znotraj odseka load module dodamo blok, ki zažene module, ki so potrebni za
delovanje omrežnega imenika XCAP.
#!ifdef WITH_XCAPSRV
loadmodule „xhttp.so“
loadmodule „xcap_server.so“
#!endif
V odseku module parameters pripravimo XCAP parametre strežniškega
modula za podatkovno bazo.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 46
#!ifdef WITH_XCAPSRV
# —– xcap_server params —–
modparam(„xcap_server“, „db_url“, DBURL)
#!endif
Nato v odseku modparam poiščemo blok, kjer je definirana navzočnost (iščemo
!ifdef WITH_PRESENCE) in dodamo naslednje vrstice:
modparam("presence", "fallback2db", 1)
modparam("presence", "db_update_period", 20)
Kot naslednje poiščemo modparam("presence_xml","force_active",1) in
za to vrstico dodamo:
modparam(„presence_xml“, „integrated_xcap_server“, 1)
Naš celoten blok mora sedaj izgledati tako:
#!ifdef WITH_PRESENCE
# —– presence params —–
modparam(„presence“, „db_url“, DBURL)
modparam(„presence“, „fallback2db“, 1)
modparam(„presence“, „db_update_period“, 20)
# —– presence_xml params —–
modparam(„presence_xml“, „db_url“, DBURL)
modparam(„presence_xml“, „force_active“, 1)
modparam(„presence_xml“, „integrated_xcap_server“, 1)
#!endif
Za nastavitev logičnega dela Route lahko kar kopiramo naslednji del v
Kamailio.cfg.
#!ifdef WITH_XCAPSRV
#!define WITH_XHTTPAUTH
event_route[xhttp:request] {
xdbg("===== xhttp: request [$rv] $rm => $hu\n");
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 47
#!ifdef WITH_XHTTPAUTH
if (!www_authorize("xcap", "subscriber"))
{
www_challenge("xcap", "0");
exit;
}
#!endif
if($hu=~"^/xcap-root/")
{
set_reply_close();
set_reply_no_connect();
# xcap ops
$xcapuri(u=>data) = $hu;
if($xcapuri(u=>xuid)=~"^sip:.+@.+")
$var(uri) = $xcapuri(u=>xuid);
else if($xcapuri(u=>xuid)=~".+@.+")
$var(uri) = "sip:" + $xcapuri(u=>xuid);
else
$var(uri) = "sip:"+ $xcapuri(u=>xuid) + "@" + $Ri;
xlog("===== xhttp: $xcapuri(u=>auid) : $xcapuri(u=>xuid)\n");
if($xcapuri(u=>auid)=="xcap-caps")
{
$var(xbody) =
"<?xml version='1.0' encoding='UTF-8'?> <xcap-caps
xmlns='urn:ietf:params:xml:ns:xcap-caps'> <auids> <auid>rls-
services</auid> <auid>pidf-manipulation</auid> <auid>xcap-
caps</auid> <auid>resource-lists</auid> <auid>pres-rules</auid>
<auid>org.openmobilealliance.pres-rules</auid> </auids> <extensions>
</extensions> <namespaces> <namespace>urn:ietf:params:xml:ns:rls-
services</namespace>
<namespace>urn:ietf:params:xml:ns:pidf</namespace>
<namespace>urn:ietf:params:xml:ns:xcap-caps</namespace>
<namespace>urn:ietf:params:xml:ns:resource-lists</namespace>
<namespace>urn:ietf:params:xml:ns:pres-rules</namespace> </namespaces>
</xcap-caps>";
xhttp_reply("200", "ok", "application/xcap-caps+xml",
"$var(xbody)");
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 48
exit;
}
#!ifdef WITH_XHTTPAUTH
# be sure auth user access only its documents
if ($au!=$(var(uri){uri.user})) {
xhttp_reply("403", "Forbidden", "text/html",
"<html><body>$si:$sp</body></html>");
exit;
}
#!endif
switch($rm) {
case "PUT":
xcaps_put("$var(uri)", "$hu", "$rb");
if($xcapuri(u=>auid)=~"pres-rules")
{
xlog("===== xhttp put: refreshing watchers
for $var(uri)\n");
pres_update_watchers("$var(uri)",
"presence");
pres_refresh_watchers("$var(uri)",
"presence", 1);
}
exit;
break;
case "GET":
xlog("===== xhttp: get $var(uri) => $hu\n");
xcaps_get("$var(uri)", "$hu");
exit;
break;
case "DELETE":
xcaps_del("$var(uri)", "$hu");
if($xcapuri(u=>auid)=~"pres-rules")
{
xlog("===== xhttp del: refreshing watchers
for $var(uri)\n");
pres_update_watchers("$var(uri)",
"presence");
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 49
pres_refresh_watchers("$var(uri)",
"presence", 1);
}
exit;
break;
}
}
# http ops
xhttp_reply("200", "ok", "text/html",
"<html><body>OK: $si:$sp</body></html>");
exit;
}
#!endif
5.5 NASTAVITEV SIP ODJEMALCA MONSTER
Za povezovanje na strežnik uporabljamo SIP odjemalec Monster. V programu
moramo najprej dodati novega uporabnika, ki mu nastavimo podatke znotraj treh menijev:
IMS Network
Presence
XDMS Profile
IMS NETWORK
V tem meniju nastavimo uporabniški račun, s katerim se registriramo na strežnik
SIP. Nastavitve, ki jih vidimo na sliki 5.1, so sleče:
Domena: ietkims.uni-mb.si
Prikazno ime: mpres00
Javna identiteta: sip:[email protected]
Privatna identiteta: [email protected]
Skrivno geslo: mpres00
PCSCF: pcscf.ietkims.uni-mb.si
PCSCF vrata: 4060
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 50
Slika 5.1: Osnovne nastavitve odjemalca SIP
PRESENCE
Meni presence omogoča izbiro načina uporabe navzočnosti in osnovnih storitev,
ki so na voljo. Označimo OMA Presence Simple in odkljukamo vse nastavitve, ki so
nam na voljo, kot je razvidno iz slike 5.2.
Slika 5.2: Nastavitve navzočnosti odjemalca SIP
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 51
XBMC PROFILE
Zadnje nastavitve odjemalca SIP najdemo pod menijem XDMC Profile. Znotraj
tega menija se nahajajo nastavitve povezovanja z našim strežnikom XCAP, kot vidimo na
sliki 5.3. V tem meniju odkljukamo uporabo XDMS in dodatno nastavimo:
Gostitelj: 172.16.25.2
Vrata: 5065
Root: /xcap-root
Uporabniško ime: mpres00
Geslo: mpres00
Slika 5.3: Nastavitve XCAP odjemalca SIP
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 52
6 IZVEDBA APLIKACIJE S PODPORO NAVZOČNOSTI V
XBMC
Za namen razvoja dodatka za XBMC smo postavili strežnik Kamailio z
razširitvami, ki jih potrebujemo za delovanje funkcij navzočnosti, odjemalec SIP
MyMonster, s katerim bomo testirali delovanje naše aplikacije in preprosto aplikacijo v
XBMC, ki omogoča povezovanje na strežnik IMS in opravljanje preprostih klicev.
Sedaj želimo to aplikacijo nadgraditi tako, da bo omogočala povezovanje na
strežnik XCAP, kjer bo dostopala do svojega shranjenega omrežnega imenika ter
omogočala izmenjavo podatkov o navzočnosti ostalih uporabnikov, kot to prikazuje slika
6.1.
Slika 6.1: Prikaz komunikacije aplikacije
Slika 6.1 prikazuje, da se mora aplikacija najprej registrirati na strežnik navzočnosti
in strežnik XCAP. Po uspešni registraciji poskuša aplikacija s strežnika XCAP pridobiti
seznam virov uporabnika. V primeru, da ta seznam virov še ne obstaja, si ga aplikacija
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 53
lokalno ustvari in ga naloži na strežnik. Nato se prijavi na spremembe o navzočnost vseh
entitet na seznamu virov na strežnik navzočnosti in sedaj posluša vse spremembe
navzočnosti ostalih uporabnikov ter objavlja lastne spremembe navzočnosti. Aplikacija
mora omogočati tudi dodajanje in brisanje uporabnikov ter shranjevanje teh sprememb na
strežniku XCAP.
6.1 SHRANJEVANJE NASTAVITEV
Za shranjevanje nastavitev, ki jih konfiguriramo v programu, uporabljamo razred
clSettings. Ta razred vsebuje spremenljivke: id – naslov SIP URI uporabnika,
reg_uri – naslov SIP URI strežnika IMS , proxy – naslov strežnika proxy, username –
uporabniško ime uporabnika, password – geslo uporabnika, xcap_address – naslov
strežnika xcap, xcap_username –uporabniško ime na strežniku XCAP, xcap_password
–geslo uporabnika na strežniku XCAP.
id="sip:[email protected]"
reg_uri="sip:ietkims.uni-mb.si"
proxy="sip:pcscf.ietkims.uni-mb.si:4060;lr"
username="[email protected]"
password="mpres00"
xcap_address="http://172.16.25.2:5065/xcap-root/"
xcap_username="[email protected]"
xcap_password="mpres00"
6.2 PODPORA FUNKCIONALNOSTI NAVZOČNOSTI
Za podporo navzočnosti v naši aplikaciji potrebujemo dva razreda ClBuddies in
MyBuddyCallback. Razred ClBuddies uporabljamo za shranjevanje podatkov entitet
navzočnosti, dodajanje in brisanje entitet navzočnosti s seznama kontaktov, registracijo na
njihove posodobitve ter spreminjanje podatkov o navzočnosti entitet navzočnosti, ki jih
bomo prikazovali v glavnem programu.
V razredu ClBuddies uporabljamo za shranjevanje stanj entitet navzočnosti
sezname: buddyList – shranjevanje reference na objekte entitet navzočnosti,
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 54
buddyNamesList – naslovi uri entitet navzočnosti, buddyStatusList – tekstovni opis
stanja navzočnosti entitete navzočnosti, buddyDisplayNames – prikazna imena entitet
navzočnosti, buddyActivityList – stanje entitete navzočnosti prikazano s številko 1-
away, 2-busy, ostalo-online, buddyOnlineStatus – stanje entitete navzočnosti 0-offline,
1-online.
buddyList = [] #list of references to buddy objects
buddyNamesList = [] #list of buddy names
buddyStatusList = [] #list of buddy statuses
buddyDisplayNames = [] #list of display names
buddyActivityList = [] #list of activities
buddyOnlineStatus = [] #list of online statuses
Ko želimo dodati entiteto navzočnosti na seznam entitet, kličemo metodo
addBuddy(), s katero najprej pripnemo osnovne podatke v vse zgornje sezname in se nato
prijavimo na spremembe navzočnosti te entitete.
def addBuddy(self, buddyUri, display_name):
global acc
global myUI
#add the new buddy to the lists:
self.buddyNamesList.append(buddyUri)
self.buddyStatusList.append("offline")
self.buddyDisplayNames.append(display_name)
self.buddyActivityList.append(0)
self.buddyOnlineStatus.append(0)
#create new buddy instance and subscribe to it:
buddyInstance = acc.add_buddy(buddyUri,
cb=myBuddyCallback(myUI,self))
buddyInstance.subscribe();
self.buddyList.append(buddyInstance)
Za brisanje entitet navzočnosti s seznama uporabljamo metodo deleteBuddy(),
ki najprej poišče indeks tiste entitete navzočnosti, ki jo želimo odstraniti in jo nato izbriše
iz vseh seznamov entitet navzočnosti.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 55
def deleteBuddy(self, buddyUri):
#find position of buddy with buddyUri in lists:
buddyIndex = self.buddyNamesList.index(buddyUri)
#delete given buddy from lists.
self.buddyList.pop(buddyIndex)
self.buddyActivityList.pop(buddyIndex)
self.buddyNamesList.pop(buddyIndex)
self.buddyStatusList.pop(buddyIndex)
self.buddyDisplayNames.pop(buddyIndex)
self.buddyOnlineStatus.pop(buddyIndex)
Imamo še dve metodi, ki jih kličejo metode povratnih klicev. Metodo
changeBuddyStatus() kliče razred MyBuddyCallback, kadar pride do sprememb v
stanju entitete navzočnosti, ki jo spremljamo. Ta metoda sprejme nove podatke in jih
popravi.
def
changeBuddyStatus(self,buddyUri,buddyStatus,buddyActivity,buddyOnlineStat
us):
try:
buddyIndex = self.buddyNamesList.index(buddyUri)
self.buddyStatusList[buddyIndex] = buddyStatus
self.buddyActivityList[buddyIndex] = buddyActivity
self.buddyOnlineStatus[buddyIndex] = buddyOnlineStatus
except Exception, e:
print e
Druga metoda pa je confirmBuddyInstance(), ki jo kliče razred
MyAccountCallback v primeru, da nas doda drug uporabnik. V tem primeru vzamemo
njegove podatke in ga avtomatsko dodamo med naše kontakte.
def confirmBuddyInstance(self,buddyInstance,buddyUri):
self.buddyNamesList.append(buddyUri)
self.buddyList.append(buddyInstance)
self.buddyStatusList.append("offline")
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 56
self.buddyActivityList.append(0)
self.buddyOnlineStatus.append(0)
self.myUI.refreshBuddyList()
Razred povratnih klicev myBuddyCallback vsebuje samo metodo on_state(),
ki se kliče le ob spremembah stanj entitet navzočnosti. Ob spremembi povzamemo podatke
entitete navzočnosti, ki se ji je spremenilo stanje in kličemo metodo
changeBuddyStatus(), ki posodobi podatke. Nato kličemo metodo
refreshBuddyList() v glavnem programu, da posodobimo podatke, ki nam jih
aplikacija prikazuje.
def on_state(self):
global myUI
global myBuddies
global myBuddy
myBuddies.changeBuddyStatus(self.buddy.info().uri,
self.buddy.info().online_text,self.buddy.info().activity,self.buddy.info(
).online_status)
print self.buddy.info().uri + self.buddy.info().online_text +
str(self.buddy.info().activity) + str(self.buddy.info().online_status)
myUI.refreshBuddyList()
6.3 VPELJAVA FUNKCIONALNOSTI XCAP
Za registracijo na strežnik XCAP uporabljamo datoteko ClXcap.py, ki uporablja
tudi metode iz knjižnice xcaplib. Metoda, ki jo kličemo se imenuje
do_resource_lists(). Ta metoda najprej pridobi podatke iz razreda nastavitev ter se
nato z uporabo teh podatkov poskuša prijaviti na XCAP strežnik.
xcap_client =
XCAPClient(instanca.IdleListener.getSettings().xcap_address.encode("utf-
8"), instanca.IdleListener.getSettings().xcap_username.encode("utf-8"),
instanca.IdleListener.getSettings().xcap_password.encode("utf-8"),
auth="digest".encode("utf-8"))
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 57
V tej metodi nato kličemo metodo get_resource_lists(), ki poskusi s
strežnika pridobiti dokument XCAP, ki ga z metodo parseString() spremenimo iz
XML oblike v tekstovni niz. V kolikor je pridobivanje neuspešno, izpišemo ustrezno
napako in nadaljujemo program. V primeru, da je seznam še prazen ga bomo ustvarili, ko
bomo dodali našo prvo entiteto navzočnosti.
def get_resource_lists(self):
global xcap_client, resource_lists, resource_lists_xml
try:
resource_lists_xml = xcap_client.get('resource-lists')
except URLError, e:
print "error: prazna lista"
#raise RuntimeError("Cannot obtain 'resource-lists' document:
%s" % str(e))
except HTTPError, e:
print "error: napaka v povezavi"
resource_lists = -1
#raise RuntimeError("Cannot obtain 'resource-lists' document:
%s %s" % (e.response.status, e.response.reason))
else:
try:
#resource_lists = ResourceLists.parse(resource_lists_xml)
resource_lists = parseString(resource_lists_xml)
except Exception, e:
raise RuntimeError("Invalid 'resource_lists' document:
%s" % str(e))
Temu sledi metoda print_resource_lists(), v kateri pridobljen tekstovni niz
vrstico po vrstico razbijemo na posamezne dele ter tako pridobljene naslove URI in
nastavljena prikazna imena dodamo na seznam prijateljev.
def print_resource_lists(self,instanca):
global resource_lists, resource_lists_xml, show_xml
test = ""
if (resource_lists==-1):
return
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 58
for index in
range(len(resource_lists.getElementsByTagName("entry"))):
uri,display_name =
resource_lists.getElementsByTagName("entry")[index].toxml().split("<displ
ay-name>",2)
print uri,display_name
display_name,balast =
display_name.split("</display-name>",2)
uri,balast=uri.split("\" xmlns",2)
balast,uri=uri.split("\"",2)
print uri,display_name
instanca.IdleListener.buddies.addBuddy(str(uri).encode("utf-
8"),str(display_name.encode("utf-8")))
instanca.refreshBuddyList()
Ta datoteka vsebuje tudi metodo za ustvarjanje seznama virov
create_xcap_resource_lists(), s katero generiramo seznam entitet navzočnosti, ki
ga kasneje naložimo na strežnik XCAP. S to metodo ustvarjamo tekstovni niz oblike XML.
Najprej v niz shranimo splošni del oblike zapisa seznama virov. Nato mu dodamo naslove
URI in prikazna imena naših kontaktov ter preostali del XML datoteke. Ko dodamo vse
kontakte z našega seznama prijateljev, kličemo metodo put_resource_lists().
def create_xcap_resource_lists(self,listaUri,listaDisplayName):
seznam = '<resource-lists xmlns="urn:ietf:params:xml:ns:resource-
lists">\n <list name="friends">\n <display-name>friends</display-
name>\n'
print len(listaUri)
for index in range(len(listaUri)):
uri = listaUri[index]
displayName = listaDisplayName[index]
seznam = seznam + '<entry
xmlns="urn:ietf:params:xml:ns:resource-lists" uri="'+uri+'">\n
<display-name>'+displayName+'</display-name>\n </entry>\n'
seznam = seznam + ' </list>\n</resource-lists>'
print seznam
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 59
self.put_resource_lists(seznam)
Metoda put_resource_lists() poskuša naložiti ustvarjen seznam virov na
strežnik XCAP. V primeru, da pride do napake, nam jo javi.
def put_resource_lists(self,lista):
global xcap_client, resource_lists, resource_lists_xml,
resource_lists_xml_put
try:
xcap_client.put('resource-lists'.encode("utf-
8"),lista.encode("utf-8"))
except URLError, e:
raise RuntimeError("Cannot obtain 'resource-lists' document:
%s" % str(e))
except HTTPError, e:
raise RuntimeError("Cannot obtain 'resource-lists' document:
%s %s" % (e.response.status, e.response.reason))
6.4 UPORABNIŠKI VMESNIK
Uporabniški vmesnik se nahaja v datoteki main.py in razredu MyClass. Ker je
bila v osnovi to aplikacija, ki smo jo uporabljali za vzpostavljanje preprostih klicev, se
bomo osredotočili le na dele, ki se navezujejo na XCAP in navzočnost.
Najprej ustvarimo polje, kjer bomo prikazovali naš seznam entitet navzočnosti in
polja, ki jih bomo potrebovali za oblikovanje prikaza stanja navzočnosti entitet.
#Presence lista prisotnih
self.listaDisplayName = xbmcgui.ControlList(120, 190, 600,
700,'font13','0xFFFFFFFF',selectedColor='0xFFFF00FF')
self.addControl(self.listaDisplayName)
#Presence lista uri naslovov
self.listaUri = []
self.listaBuddyOnlineStatus = []
#Presence slike
self.listaSlikeStatus = []
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 60
Zaradi omejitev XBMC prikaza smo aplikacijo omejili na trinajst kontaktov in za
njih pripravimo prostor, kjer bomo prikazovali sliko stanja navzočnosti in vse te slike
nastavimo na skrite.
self.slikaStatus1 = xbmcgui.ControlImage(405, 193, 32,
32,'special://home//addons//script.sipClient//Media//status-offline.png')
self.addControl(self.slikaStatus1)
self.listaSlikeStatus.append(self.slikaStatus1)
for index in range(len(self.listaSlikeStatus)):
self.listaSlikeStatus[index].setVisible(False)
V primeru, da uporabnik klikne na katero izmed dodanih entitet navzočnosti,
pridobimo podatke tiste entitete navzočnosti in odpremo meni, kjer lahko izbiramo ali
želimo uporabnika klicati ali brisati iz seznama entitet navzočnosti.
if control == self.listaDisplayName:
print self.listaBuddyOnlineStatus
item = self.listaDisplayName.getSelectedItem()
stevilka = self.listaDisplayName.getSelectedPosition()
self.labelaMeniListe.setLabel(self.listaUri[stevilka])
if(self.listaBuddyOnlineStatus[stevilka]==0):
self.pokaziMeniListe(item.getLabel(),False)
else:
self.pokaziMeniListe(item.getLabel(),True)
self.setFocus(self.gumbMeniKlici)
Za dodajanje prijateljev na seznam entitet smo ustvarili gumb, ki odpre razred
DodajPrijateljaPopupClass, v katerem lahko vpišemo podatke prijatelja ter ga
dodamo na seznam entitet navzočnosti. Po končanem dodajanju osvežimo seznam entitet
navzočnosti in ustvarimo XCAP dokument ter ga naložimo na strežnik.
if control == self.gumbDodajPrijatelja:
myInstance = self
popup = DodajPrijateljaPopupClass()
popup.posljiUi(myInstance)
popup .doModal()
self.refreshBuddyList()
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 61
application.create_xcap_resource_lists(self.IdleListener.buddies.ge
tBuddyNames(), self.IdleListener.buddies.getBuddyDisplayNames())
del popup
Gumb za brisanje prijateljev izbriše prijateljeve podatke iz razreda ClBuddies,
osveži seznam entitet navzočnosti ter ponovno ustvari XCAP dokument in ga naloži na
strežnik.
if control == self.gumbMeniOdstraniPrijatelja:
self.IdleListener.buddies.deleteBuddy(self.labelaMeniListe.getLabel
().encode("utf-8"))
self.skrijMeniListe()
self.writeConsole(self.labelaMeniListe.getLabel().encode("utf-8") +
" je bil izbrisan iz tvojih prijateljev!")
self.refreshBuddyList()
application.create_xcap_resource_lists(self.IdleListener.buddies.ge
tBuddyNames(), self.IdleListener.buddies.getBuddyDisplayNames())
Gumb za spreminjanje statusa odpre razred ChangeStatusClass, v
katerem lahko spreminjamo statusno besedilo ter prikaz našega stanja (online, away, busy,
offline).
if control == self.gumbStatus:
#self.IdleListener.toggleStatus(isonline,activity,pres_text,rpid_id
)
popup = ChangeStatusClass()
popup.posljiUi(self)
popup.posljiTrenutniStatus(self.isonline, self.activity,
self.pres_text)
popup .doModal()
del popup
Funkcija refreshBuddyList skrbi za prikazovanje podatkov entitet navzočnosti.
Ob vsakem klicu te funkcije pridobimo iz razreda ClBuddies podatke o entitetah
navzočnosti, ki jim sledimo. Vsem entitetam pregledamo stanja in glede na ta stanja
prilagodimo prikazne slike.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 62
def refreshBuddyList(self):
listaImena = self.IdleListener.buddies.getBuddyNames()
listaStatus = self.IdleListener.buddies.getBuddyStatus()
listaVzdevki = self.IdleListener.buddies.getBuddyDisplayNames()
listaAktivnosti = self.IdleListener.buddies.getBuddyActivity()
self.listaBuddyOnlineStatus =
self.IdleListener.buddies.getBuddyOnlineStatus()
self.listaUri = listaImena
listaStatusTemp = []
for index in range(len(self.listaSlikeStatus)):
self.listaSlikeStatus[index].setVisible(False)
for index in range(len(listaAktivnosti)):
self.listaSlikeStatus[index].setVisible(True)
for index in range(self.listaStatus.size()):
listaStatusTemp.append(self.listaStatus.getListItem(index).getLabel
())
self.listaDisplayName.reset()
self.listaStatus.reset()
i = iter(listaVzdevki)
for index in range(len(listaImena)):
if(len(listaImena)>len(listaStatusTemp)):
listaStatusTemp.append('Offline')
for index in range(len(listaImena)):
item = i.next()
self.listaDisplayName.addItem(item)
print item + " " + listaStatus[index]
print self.listaBuddyOnlineStatus
if(self.listaBuddyOnlineStatus[index]==0 or
self.listaBuddyOnlineStatus[index]==2):
self.listaStatus.addItem('Offline')
self.listaStatus.getListItem(index).select(False)
if(listaAktivnosti[index]==0):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-offline.png')
elif(listaStatus[index] == 'Online'):
self.listaStatus.addItem('Online')
self.listaStatus.getListItem(index).select(True)
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 63
if(listaAktivnosti[index]==0):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-online.png')
elif(listaAktivnosti[index]==1):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-away.png')
elif(listaAktivnosti[index]==2):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-busy.png')
elif(listaStatus[index] == '?'):
self.listaStatus.addItem(listaStatusTemp[index])
if(self.listaStatus.getListItem(index).getLabel() ==
'Offline'):
self.listaStatus.getListItem(index).select(False)
else:
self.listaStatus.getListItem(index).select(True)
if(listaAktivnosti[index]==0):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-online.png')
elif(listaAktivnosti[index]==1):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-away.png')
elif(listaAktivnosti[index]==2):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-busy.png')
else:
self.listaStatus.addItem(listaStatus[index])
self.listaStatus.getListItem(index).select(True)
if(listaAktivnosti[index]==0):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-online.png')
elif(listaAktivnosti[index]==1):
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-away.png')
elif(listaAktivnosti[index]==2):
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 64
self.listaSlikeStatus[index].setImage('special://home//addons//scri
pt.sipClient//Media//status-busy.png')
self.refreshStates()
return "refreshBuddyList"
Razred ChangeStatusClass vsebuje gumbe in vnosna polja za nastavljanje
želenega stanja navzočnosti. Ob potrditvi nastavitev se glede na izbiro pošljejo ustrezni
podatki preko funkcije updateUserStatus(), ki pošlje podatke o naši navzočnosti
strežniku navzočnosti in spremeni prikaz našega statusa v programu.
if control == self.gumbPotrdi:
if self.gumbOnline.isSelected():
self.isonline=1
self.activity=0
self.pres_text=self.gumbPresenceText.getLabel().encode("utf-8")
self.instance.updateUserStatus(self.isonline,self.activity,self.pres_text
)
if self.gumbAway.isSelected():
self.isonline=1
self.activity=1
self.pres_text=self.gumbPresenceText.getLabel().encode("utf-8")
self.instance.updateUserStatus(self.isonline,self.activity,self.pres_text
)
if self.gumbBusy.isSelected():
self.isonline=1
self.activity=2
self.pres_text=self.gumbPresenceText.getLabel().encode("utf-8")
self.instance.updateUserStatus(self.isonline,self.activity,self.pres_text
)
if self.gumbAppearOffline.isSelected():
self.isonline=0
self.activity=0
self.pres_text=self.gumbPresenceText.getLabel().encode("utf-8")
self.instance.updateUserStatus(self.isonline,self.activity,self.pres_text
)
self.close()
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 65
Razred DodajPrijateljaPopupClass vsebuje vnosni polji za prikazno ime in
naslov URI prijatelja, ki ga želimo dodati. Ko uporabnika dodajamo, se v razredu
ClBuddies kliče metoda addBuddy(), preko katere se naročimo na informacije o
navzočnosti entitete.
if control == self.gumbDodaj:
niz = self.gumbDodajUriPrijatelja.getLabel().encode("utf-8")
#vedno ko pošiljamo kaj v pjsip je potrebno narediti kodiranje v utf-8
displayName =
self.gumbDodajDisplayName.getLabel().encode("utf-8")
self.instance.IdleListener.buddies.addBuddy(niz,displayName)
self.close()
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 66
7 PRIKAZ DELOVANJA
V tem poglavju predstavljamo delovanje aplikacije za navzočnost v programu
XBMC. Od zagona aplikacije, dodajanja in brisanja novih entitet navzočnosti ter
spreminjanja stanj navzočnosti entitet.
Ob zagonu aplikacije se prikaže začetni zaslon, kot ga prikazuje slika 7.1. Vidimo,
da lahko v tem meniju spreminjamo nastavitve in se prijavimo v sistem. Vidimo tudi dva
druga gumba za dodajanje prijateljev in spreminjanje statusa, vendar se moramo njihovo
uporabo najprej prijaviti na strežnik IMS.
Slika 7.1: začetni zaslon
Na začetnem zaslonu izberemo gumb Nastavitve, ki odpre meni, kjer lahko
nastavljamo parametre potrebne za prijavo na strežnik IMS ter strežnik XCAP. Tu
kliknemo na vsako tekstovno polje ter nastavimo naše podatke:
Uporabniško ime: [email protected],
Geslo: mpres00
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 67
Registracijski streznik: sip:ietkims.uni-mb.si
Proxy: sip:pcscf.ietkims.uni-mb.si:4060;lr
ID uporabnika: sip:[email protected]
Naslov XCAP strežnika: http://172.16.25.2:5065/xcap-root/
XCAP uporabniško ime: [email protected]
XCAP geslo: mpres00
Izpolnjen meni z nastavitvami nam prikazuje slika 7.2
Slika 7.2: Nastavitve uporabniskega racuna
Te nastavitve potrdimo z uporabo gumba Potrdi in se nato z uporabo gumba
Prijavi se registriramo na strežnika IMS in XCAP. Ob uspešni prijavi se krogec ob
tekstu Spremeni status obarva v zeleno in gumb Prijavi se, se spremeni v Odjavi
se, kot prikazuje slika 7.3. Hkrati s tem se s strežnika XCAP prenese seznam entitet
navzočnosti in prikažejo se uporabnikovi kontakti ter njihovo trenutno stanje navzočnosti.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 68
Slika 7.3: Uspešna prijava v sistem
Sedaj lahko z uporabo gumba Dodaj Prijatelja dodamo entitete navzočnosti,
katerih spremembe želimo spremljati. Ob kliku na ta gumb se odpre meni, v katerem
vnesemo Prikazno ime in naslov Sip URI naše entitete navzočnosti. Slika 7.4
prikazuje dodajanje kontakta z izpolnjenimi polji.
Slika 7.4: Dodajanje entitet
Nastavitve navzočnosti lahko spreminjamo z uporabo gumba Spremeni status.
S klikom na ta gumb se odpre meni, kjer lahko izbiramo med štirimi različnimi statusi
(Online/Away/Busy/Offline) ter spreminjamo tekst, ki se prikazuje ob prikazu
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 69
uporabnikovega statusa. Slika 7.5 prikazuje meni z izbranim statusom Online in
prikaznim tekstom prav tako Online.
Slika 7.5: Nastavitve navzočnosti
Spremembe statusa se prikazujejo na našem seznamu entitet navzočnosti v realnem
času. Kadarkoli se kateremu izmed uporabnikov na našem seznamu spremeni stanje, se
prikaz spremeni na trenutno stanje. Slika 7.6, slika 7.7 in slika 7.8 prikazujejo spreminjanje
stanja entitete navzočnosti na stanja Online, Away in Busy medtem ko slika 7.9 prikazuje
spreminjanje statusnega teksta.
Slika 7.6: Kontakt Online
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 70
Slika 7.7: Kontakt Away
Slika 7.8: Kontakt Busy
Slika 7.9: Sprememba statusnega teksta
Vsaka entiteta navzočnosti je hkrati gumb, ki ob pritisku prikaže meni za izbrano
entiteto. S to entiteto lahko vzpostavimo preprost klic, jo odstranimo iz seznama entitet, ki
jih spremljamo ter prekličemo izbiro. Slika 7.10 prikazuje meni ob kliku na entiteto
Danilo Zimsek.
Slika 7.10: Meni etitete navzočnosti
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 71
8 SKLEP
Cilj magistrskega dela je bil uspešno namestiti strežnik s podporo za storitve
navzočnosti in omrežnega imenika. Nato ustvariti aplikacijo, ki omogoča povezavo na
strežnik IMS, pridobitev shranjenih kontaktov z omrežnega imenika in sledenje
spremembam navzočnosti teh kontaktov.
Uspešno smo namestili in konfigurirali strežnik omrežnega imenika ter strežnik
navzočnosti. Ko smo preverili pravilno delovanje strežnikov s pomočjo programa
MyMonster, smo pričeli z razvojem aplikacije za XBMC. Po uspešnem razvoju aplikacije
smo jo testirali in ugotovili, da deluje tako, kot smo si zastavili v prvotnem cilju.
Razvoj aplikacije ni potekal brez problemov. Največ problemov nam je povzročala
omejena količina funkcij za prikazovanje elementov znotraj programa XBMC. Zaradi tega
smo morali listo kontaktov omejiti le na trinajst oseb, saj smo morali prikazovalna polja
pripraviti ob zagonu aplikacije. Na omejitve smo naleteli tudi na strežniku XCAP, ki je
podpiral le osnovne funkcionalnosti pridobivanja, brisanja in ustvarjanja seznamov entitet
navzočnosti, ne pa tudi spreminjanja že obstoječih XML dokumentov na strežniku. Tega
problema žal nismo uspeli rešiti, zato smo uporabljali le te osnovne tri funkcije za delo z
seznami entitet navzočnosti.
Razvito aplikacijo bi lahko nadgradili s podporo za delovanje znotraj celotnega
programa XBMC, saj trenutno deluje le, ko je aplikacija zagnana. V prihodnje bi želeli, da
se aplikacija požene ob zagonu programa XBMC, kar bi pomenilo, da bi lahko ostali
uporabniki sledili našim nastavitvam navzočnosti tudi, kadar uporabljamo druge aplikacije
znotraj programa XBMC (na primer, gledamo filme, poslušamo glasbo, itd.). Druga možna
nadgradnja bi bila sprememba liste kontaktov v bolj dinamično obliko generiranja
seznamov, kar bi omogočilo, da prekoračimo trenutno omejitev le trinajstih kontaktov.
Ocenjujemo, da je razvita aplikacija uporabna, saj lahko sedaj z njo uporabljamo
funkcije navzočnosti kar pred televizorjem in tudi s katerega koli računalnika, saj
funkcionalnost omrežnega imenika omogoča, da lahko od kjerkoli prenesemo naše
kontakte v aplikacijo.
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 72
VIRI
[1] G. Camarillo, M. A. Garcia-Martin, The 3G IP multimedia subsystem (IMS),
Chichester: J. Wiley & Sons, 2008.
[2] R. M. Perea, Internet Multimedia Communications Using SIP, Morgan Kaufmann
Publishers Inc, 2008
[3] Kamailio (2013). Kamailio SIP Server. Pridobljeno 15. Februarja 2013. Spletna
stran: http://www.kamailio.org/w/
[4] Asipto (2013). Kamailio SIP Server v.3.2.0 Development Guide. Pridobljeno 16.
Februarja 2013. Spletna stran: http://www.asipto.com/pub/kamailio-devel-guide/
[5] Kopirano 16. Februarja 2013, vir: http://www.asipto.com/pub/kamailio-devel-
guide/obj/kamailio_architecture_new.png
[6] XBMC (2013), About | XBMC. Pridobljeno 17. Februarja 2013. Spletna stran:
http://xbmc.org/about/
[7] Wikipedia, the free encyclopedia (2012). XBMC. Pridobljeno 17. Februarja 2012.
Spletna stran: http://en.wikipedia.org/wiki/XBMC
[8] Kopirano 17. Februarja 2013, vir: http://xbmc.org/wp-
content/gallery/confluence/screenshot000.jpg
[9] XBMC (2013). Python development. Pridobljeno 17. Februarja 2013. Spletna
stran: http://wiki.xbmc.org/index.php?title=Python_development
[10] PJSIP (2013). Pjsip – Open Source SIP, Media, and NAT Traversal Library.
Pridobljeno 19. Februarja 2013. Spletna stran: http://www.pjsip.org/
[11] PJSIP (2013). Manual of pjsua. Pridobljeno 19. Februarja 2013. Spletna stran:
http://www.pjsip.org/pjsua.htm
[12] Network Information Library (2013). Installing Kamailio .1 on debian lenny.
Pridobljeno 20. Februarja 2013. Spletna stran:
http://nil.uniza.sk/sip/kamailio/installing-kamailio-31-debian-lenny
[13] Network Information Library (2013). Adding MySQL support into Kamailio 3.1.
Pridobljeno 20. Februarja 2013. Spletna stran:
http://nil.uniza.sk/sip/kamailio/adding-mysql-support-kamailio-31-debian-lenny
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 73
[14] Network Information Library (2013). Configuring IM and presence on Kamailio
3.1. Pridobljeno 20. Februarja 2013. Spletna stran: http://nil.uniza.sk/instant-
messaging/simple/configuring-im-and-presence-kamailio-31-howto
[15] Network Information Library (2013). Configuring XCAP support for IM and
presence over Kamailio. Pridobljeno 20. Februarja 2013. Spletna stran:
http://nil.uniza.sk/instant-messaging/simple/configuring-xcap-support-im-and-
presence-over-kamailio-31-debian-lenny
[16] Internet Engineering Task Force (2013). Session Initiation Protocol (SIP).
Pridobljeno 12. Marca 2013. Spletna stran: http://www.ietf.org/rfc/rfc3903.txt
[17] Internet Engineering Task Force (2013). Presence Information Data Format
(PIDF). Pridobljeno 13. Marca 2013. Spletna stran:
http://www.ietf.org/rfc/rfc3863.txt
[18] Internet Engineering Task Force (2013). RTP PAyload for DTMF Digits,
Telephony Tones and Telephony Signals. Pridobljeno 13. Marca 2013. Spletna
stran: http://www.ietf.org/rfc/rfc2833.txt
[19] 3GPP (2013). 3GPP specification: 24.141. Pridobljeno 15. Marca 2013. Spletna
stran: http://www.3gpp.org/ftp/Specs/html-info/24141.htm
Vgradnja funkcionalnosti prisotnosti v okolje XBMC
15. marec 2013
Stran | 74
PRILOGA A – KRATEK ŽIVLJENJEPIS
Naslov: David Vrečer
Polule 78a
3000 Celje
E-pošta: [email protected]
Rojen: 17. 10. 1986 v Celju
Šolanje: 1993-2001
2001-2006
2006-2010
2010-2013
Osnovna šola Frana Kranjca Celje
Šolski center Celje, Tehniška gimnazija Lava
Fakulteta za elektrotehniko, računalništvo in informatiko,
Univerza v Mariboru,
univerzitetni študijski program Telekomunikacije
Fakulteta za elektrotehniko, računalništvo in informatiko,
Univerza v Mariboru, Magistski študijski program druge
stopnje Telekomunikacije