Hlavní navigace

Jabber - komunikačný protokol (5)

Peter Sivák

Dnešná časť seriálu sa bude venovať manažmentu používateľských účtov. Začneme tiež s opisom InfoQuery paketov, ktoré používajú model request/response a umožňujú prenos akýchkoľvek štruktúrovaných dát.

V protokole XMPP nie je stanovené žiadne minimum funkcii, ktoré musí klient implementovať. Jabber klient môže byť veľmi jednoduchý – stačí, aby dokázal odpovedať na niektorú z prijatých správ. Môže byť tiež zložitý – ako klienti s grafickým UI. Otvorenosť protokolu umožňuje implementovať presne takú jeho časť, ktorú vyžaduje konkrétna aplikácia, a ignorovať zvyšok. Napr. klient s JID jabrss@jabber.at umožňuje zasielanie notifikácii o nových článkoch (získaných pomocou RSS) ako XMPP správy. Nie je potrebné, aby implementoval prácu s rosterom alebo blokovanie komunikácie.

Jabber je množina protokolov. Hlavnú časť tvoria XMPP Core a XMPP IM. Tieto sa v súčasnosti nachádzajú v schvaľovacom procese IETF. Okrem nich existujú tzv. JEP (Jabber Enhancement Proposals). Sú to dokumenty, ktoré rozširujú základný protokol. Líšia sa však stupňom akceptácie. Vývoj niektorých je ukončený, iné existujú ako koncepty a ďalšie sú nahradzované inými. Podobný spôsob rozširovania existuje aj v Jave.

Ak by ste hľadali referenčnú implementáciu týchto protokolov – niečo ako Amaya vo w3c – tak vedzte, že nič také zatiaľ neexistuje. Potrebu takejto implementácie si začínajú uvedomovať aj ľudia z jabber.org – ako vidieť z ich weblogov. Zatiaľ sa hovorí o pythone ako vhodnom jazyku na implementáciu.

Manažment používateľských účtov

Dnes si ukážeme, ako vytvoriť konto na Jabber serveri so zadaným JID. Protokol umožňuje klientom vytváranie vlastných kónt. Tu je príklad demonštrujúci vytvorenie aj zrušenie konta:

// pripojenie k XMPP serveru
XMPPConnection con = new XMPPConnection("jabber.sk");
// získanie manažéra používateľských účtov
AccountManager accMan = con.getAccountManager();
// je povolené vytvárať nové kontá?
if (accMan.supportsAccountCreation()) {
  // administrátor servera môže poskytovať informáciu pre nových používateľov
  System.out.println(accMan.getAccountInstructions());
  // vytvorenie používateľského účtu
  accMan.createAccount("geek", "heslo");
  // prihlásenie sa
  con.login("geek", "heslo");
  // zrušenie účtu, na ktorý sme prihlásení
  accMan.deleteAccount();
} 

Ak potrebujete mať manažment používateľov pod kontrolou, môžete túto vlastnosť na serveri zakázať a pridávať nových používateľov cez používateľské rozhranie servera – často editovaním databázy na serveri.

Element IQ podrobnejšie

Ďalej budeme pokračovať elementom IQ. Element IQ (infoquery) umožňuje poslať požiadavku inej entite a prijať od nej odpoveď. Môže obsahovať akýkoľvek iný element. Ten však musí mať riadne uvedený menný priestor (namespace). Menný priestor pomáha určiť význam prenášaných dát. Napr. vložením elementu query a určením menného priestoru na jabber:iq:roster žiadame server o zaslanie obsahu rosteru.

<iq from='psivak@jabber.sk' type='get' id='1'>
  <query xmlns='jabber:iq:roster'/>
</iq>

Jediným prípadom, keď vnútorný element nemusí mať uvedený menný priestor, je, ak ním je element <error>. Na druhej strane si môžeme vytvoriť aj vlastný menný priestor a prenášať tak údaje, ktoré si sami určíme.

IQ môže obsahovať tieto atribúty:

  • to – určuje zamýšlaného príjemcu požiadavky (teda jeho JID). Ak IQ neobsahuje tento atribút, tak sa berie implicitne najbližšia entita. IQ paket sa napr. používa, keď server informuje klienta o spôsoboch autentizácie, ktoré podporuje. Vtedy sa atribút „to“ neuvádza, lebo server ešte nevie JID klienta.
  • from – určuje odosielateľa IQ paketu. Podobne ako pri atribúte „to“ aj pri tomto atribúte sú situácie, keď jeho uvedenie nemá zmysel. Možno niekoho napadne vydávať sa za iného používateľa napísaním cudzieho JIDu do atribútu „from“. Kým v protokole SMTP to je možné, XMPP server musí skontrolovať, či obsah atribútu zodpovedá prihlásenej entite. A ak nezodpovedá, tak ho musí prepísať.
  • id – umožňuje spojiť odpoveď s požiadavkou. Pri odpovedaní musí entita použiť rovnaký id, ako bol uvedený v požiadavke. Obsahom atribútu môže byť akýkoľvek reťazec (samozrejme taký, ktorý povoluje XML v atribúte). Na zaistenie jedinečnosti je vhodné použiť náhodný generátor.
  • type – pomocou tohto atribútu entita rozlišuje požiadavku od odpovede. Možné hodnoty sú:

    • get – označuje paket so žiadosťou o dáta. Napr. klient zisťuje spôsoby autentizácie, ktoré server podporuje:

      <iq type='get' id='auth1'>
        <query xmlns='jabber:iq:auth'/>
      </iq>
    • set – označuje paket odosielajúci dáta na spracovanie. Napr. prihlásenie sa klienta (JEP-0078):

      <iq type='set' id='auth2'>
        <query xmlns='jabber:iq:auth'>
      
          <username>meno</username>
          <password>heslo</password>
          <resource>zdroj</resource>
        </query>
      
      </iq>
    • result – označuje paket, ktorý je odpoveďou na úspešné spracovanie požiadavky get alebo set.
    • error – označuje paket, ktorý je odpoveďou na neúspešné spracovanie alebo doručenie požiadavky get alebo set. Napr. ak sa pokúsime prihlásiť druhý krát, tak sa vráti chyba:

      <iq type="error" to="xy@jabber.sk " id="2" >
        <query xmlns="jabber:iq:auth"/>
        <error code="503" >Service Unavailable</error>
      
      </iq>

      Chybové kódy sú ako v protokole HTTP:

      302 Redirect
      400 Bad Request
      401 Unauthorized
      402 Payment Required
      403 Forbidden
      404 Not Found
      405 Not Allowed
      406 Not Acceptable
      407 Registration Required
      408 Request Timeout
      409 Conflict
      500 Internal Server Error
      501 Not Implemented
      502 Remote Server Error
      503 Service Unavailable
      504 Remote Server Timeout
      510 Disconnected

Záver

Cieľom dnešnej časti bolo predviesť pridávanie a odoberanie používateľských účtov pomocou Smacku a opísať teóriu okolo IQ paketov. Nabudúce budeme prenášať vlastné informácie prostredníctvom IQ paketov a povieme si niečo o Provider Architektúre v Smacku.

Našli jste v článku chybu?

10. 9. 2004 0:05

Pihhan (neregistrovaný)

Me tak napadlo, ze jsem nekde videl chybove kody jinak. A taky ze jo. Hlaseni chyb pomoci error code=x je starsi metoda, ted se pouziva stanza error chyove hlaseni, ktere rika co se ma delat (prerusit, autorizovat...), a HTTP kody jsou vedeny jako legacy. viz http://www.jabber.org/ietf/draft-ietf-xmpp-core-24.html#stanzas

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

DigiZone.cz: Velká cena v Abú Dhabí: 131 ti­síc diváků

Velká cena v Abú Dhabí: 131 ti­síc diváků

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

DigiZone.cz: Flix TV: dva set-top boxy za korunu

Flix TV: dva set-top boxy za korunu

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky