Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

ICQ vs Jabber

crasher.km (919)|2.10.2007 22:50
Toto téma dostala kamarádka na vysoké škole a požádala mě o pomoct. Hodím to sem, kdyby náhodou měl někdo nějaký články, zdroje, či zkušenosti. Nepište sem prosím příspěvky typu: Icq rlzzz, jabber smrdí apod. Budu vděčný za každou informaci, která by šla použít.
tgfh (2985)|2.10.2007 22:56
Odkážu na toto: https://www.svethardware.cz/forum/showthread.php/8705-instant-messaging

Mrkni na linky z prvního postu. Jinak téma zajímavé, dá se o tom hodně napsat. Jak už z threadu vyplývá: Jabber rulez :)
Pavel Boček (4169)|2.10.2007 23:01
Pokud o tom neví, tak http://www.icq.com/legal/end-user-license.html (zajímavosti: není to pro mladší 13 let, cílem ICQ je vlastně lidem cpát reklamu před hu**-obličej, používání jiných klientů je nelegální a můžete být pozvání k soudu kamsi do Ameriky).

K jabberu: lidi mají vždycky špatně (resp. vůbec) u QiPu nastavený ID viz http://www.jptuning.net/clanky/qip-a-znaky-z-azbuky-v-nekterych-klientech-118.html) a aspoň u mně to zobrazuje azbuku. Pak ICQ transport dosud nevyřešil přeposlání souborů (co vím, tak na serveru beží normální ICQ klient a jen se to přeposílá přes jabber tam kam má). O jabber se dost dočteš na jabber.cz (redir na wiki), většina toho co sem řekl tam je :)
eraser (0)|3.10.2007 00:00
Tak som si prečítal licenčné podmienky a páčia sa mi dva body:

- souhlasíte s tím, že nebudete používat jiný SW než ten, který vám dodala společnost AOL (všechny neoriginální klienti typu Miranda jsou nelegální!)

- licenční podmínky se mohou kdykoli změnit. Jste povinni je číst každých 30 dní


Je to síce pekne napísané, avšak chcel by som vidieť podmienky v roku 1998, kedy som sa na ICQ zaregistroval, resp. vytvoril si konto a bolo mi pridelené UIN, čiže v dobe, kedy bolo ICQ v plienkach a vlastnili ho Mirabilis. Pokiaľ sa nespomínala aktualizácia licenčných podmienok, tak potom na mňa nič nemôžu mať, pretože s novými podmienkami nesúhlasím, a aj keď ICQ používam naďalej, avšak s mojim starým UIN, ktoré bolo vytvorené v dobe, kedy platili iné podmienky, potom si AOL nemôže písať, čo sa im zachce a aplikovať na stávajúcich užívateľov ICQ nové pravidlá, resp. licenčné podmienky. Naviac mi nikto nič neposlal, ani som žiadnu AOL licenciu ohľadne ICQ nepotvrdil. Ale toto je určite na dlhé lakte a sofistikovanú debatu. Ak by však AOL tvrdo zasiahla, tak by sme tu nemali žiadnych neoficiálnych klientov a tisíce ľudí by mali na krku žaloby. AOL je rado, že niekto ICQ vôbec používa.

Ak by bol záujem, môžem tu uviesť zaujímavé informácie ohľadne počiatku vzniku ICQ, rozvoja a taktiež i menšiu ukážku z pohľadu vývojárov.
mech13 (5526)|3.10.2007 00:16
urcite, sem s tim
eraser (0)|3.10.2007 02:04
5. SIEŤ ICQ

5.1 CHARAKTERISTIKA ICQ

Ako už napovedá meno, ICQ alebo 'I Seek You' - "Hľadám Ťa", je to jednoduchý a šikovný spôsob, ako sa spojiť s ľuďmi prostredníctvom Internetu. Server ICQ vykoná za vás komplikovanú prácu, ako nájdenie priateľa, spolužiaka alebo človeka, ktorý má rovnaké záujmy ako vy. Môžete s nimi komunikovať - chatovať, SMSkovať alebo si vymieňať súbory. Takýmto rôznym spôsobom môžete nadviazať komunikáciu pomocou klientskej aplikácie ICQ.
Skratkou ICQ možno tiež označiť sieť, ktorá sa skladá z ICQ serverov, ktoré sprostredkovávajú viac než komunikačné služby a ďalej ju tvoria klientské aplikácie, resp. programy, ktoré používajú jednotliví užívatelia, ktorí tieto služby využívajú.
Najobľúbenejšou metódou komunikácie na ICQ je chat rýchlymi, krátkymi správami (Instant Messages), čo nám dovoľuje poslať správu, ktorá sa vo veľmi krátkom okamžiku zobrazí adresátovi. ICQ, ako bolo povedané, umožňuje chatovať a posielať SMS správy tak jednoducho, ako aj posielať a prijímať URL adresy a súbory.
ICQ prináša množstvo spôsobov, ako komunikovať v jednom balíčku.

5.1.1 KOMUNITA ICQ

ICQ je globálna komunita, ktorú tvoríme spolu s našimi priateľmi a pritom sme sa nemuseli nikdy stretnúť. Tak ako rôzne vyhľadávacie služby nám pomáhajú hľadať informácie, ICQ nám pomáha nájsť ľudí. Komunita ICQ nás môže spojiť s užívateľmi, ktorí majú podobné záujmy ako my.
ICQ v súčasnosti registruje 160 miliónov užívateľov z viac ako 245 krajín sveta a to všetko od novembra 1996, takže ak nás napadne rôzna úvaha, máme problém, môžeme sa spoľahnúť, že nájdeme niekoho, kto s nami bude diskutovať, resp. nám pomôže.

5.1.2 PRIPOJENIE SA DO KOMUNITY ICQ

Pripojenie sa do komunity ICQ je jednoduché. Ak si nainštalujeme ICQ klientskú aplikáciu, program nám umožní registráciu na serveri ICQ, ku ktorému máme prístup prostredníctvom siete Internet. Po úspešnej registrácii obdržíme unikátne ICQ číslo. Ďalej môžeme zadať o sebe personálne informácie, ktoré nás spájajú s ICQ číslom. Toto umožní ICQ užívateľom nás ľahšie objaviť. O našich kontaktoch máme prehľad, či sú prihlásení alebo nie.
Ktokoľvek sa môže začleniť do ICQ spoločnosti. Stačí postupovať podľa nasledujúcich štyroch krokov:
1. Nainštalujeme si ICQ aplikáciu (existuje ich veľké množstvo), ktorá je zadarmo a kompatibilná s operačným systémom Windows a niektoré aj s inými operačnými systémami, napr. Mac, UNIX, Pocket PC a Palm OS.
2. Zaregistrujeme sa – určíme si heslo a ICQ nám pridelí ICQ číslo. Následne vyplíme naše osobné informácie tak, aby nás mohli ostatní ICQ užívatelia podľa nich nájsť a kontaktovať.
3. Nájdeme priateľa/kontakt – nájdeme známych priateľov zadaním ich mena, e-mailu, ICQ čísla. Alebo nájdeme si nových priateľov pomocou ich záujmov, bydliska, jazyka, veku, pohlavia, atď. Ak niekoho vyhľadáme, pridáme si ho do ICQ zoznamu užívateľov (Contact List) a začneme s ním komunikovať.
4. Začneme používať ICQ – ICQ nám oznámi, či náš kontakt je práve pripojený (online) a môžeme začať s ním komunikovať v reálnom čase. Ak je kontakt odpojený (offline), môžeme mu zanechať správu alebo mu zaslať SMS správu na jeho mobilný telefón.

5.2 VZNIK A VÝVOJ ICQ

"Maličká izraelská firma využila Internet a spôsobila nevídaný rozruch...ICQ je najhorúcejšou vecou na webe"
David Einstein, San-Francisco Chronicle, Február 1998
"Mirabilis spôsobila internetovú senzáciu v podobe ICQ."
San Jose Mercury

5.2.1 FIRMA MIRABILIS, TVORCA ICQ

ICQ Inc., nástupca Mirabilis Ltd. bol vytvorený, keď America Online získala podiel na majetku Mirabilis v júne 1998. Mirabilis bol založený v júli 1996, kedy sa štyria mladí Izraelčania rozhodli spojiť užívateľov Internetu v jeden celok. Yair Goldfinger (vtedy 26 ročný, vedúci technologického oddelenia), Arik Vardi (27 ročný, vedúci vývoja), Sefi Vigiser (25, prezident) a Amnon Amir (24 ročný, v tej dobe študent), vytvorili firmu, ktorá sa rozhodla presadiť nový spôsob komunikácie cez internet. Všimli si, aké sú úspešné World Wide Web stránky, ktoré si získali popularitu surfovaním a prehliadaním narastajúcim množstvom ľudí. Zrealizovali to, čoho sa iní báli. Mnoho ľudí bolo spojených do obrovskej svetovej siete - do Internetu. Títo ľudia boli síce pripojení, ale neboli prepojení. Preto Mirabilis vytvorili článok, ktorý tu chýbal, aby pospájal jednotlivých ľudí a umožnil im priamu komunikáciu, pričom spôsob komunikácie a ovládanie aplikácie mal byť prostý a jednoduchý. Boli priekopníkmi tejto technológie, čím sa vytvorilo nové odvetvie.

5.2.2 POČIATKY ICQ

V novembri 1996, len štyri mesiace po založení Mirabilis, vyšla prvá verzia klientskej aplikácie ICQ ("I Seek You") a produkt bol sprístupnený na Internete. Bol nadšene prijatý takmer okamžite, najskôr len malou hŕstkou užívateľov, ale neskôr stovkami tisíc. Užívatelia dávali tip svojim priateľom. Táto reťazová reakcia spôsobila najväčšie množstvo stiahnutí tejto aplikácie, čo bolo pre malú, novovzniknutú firmu veľkým úspechom. Ako napísal Alexander Woodby z portálu Tucows, "ICQ je program, ktorý spôsobil na internete rozruch. Vytvorený malou a mladou skupinkou ľudí, presadil sám seba ako vedúceho medziužívateľského chatovacieho programu súčasnosti." To bola pre Mirabilis pocta a úspech, že sa im podarilo vytvoriť novú internetovú kategóriu. Mirabilis nezaváhali a začali zlepšovať svoju aplikáciu podľa rád a požiadaviek užívateľov, ktorí boli vždy s novou verziou spokojnejší a ihneď si ju adaptovali.

5.2.3 REKORDY SIETE ICQ

Behom polroka bola vytvorená najväčšia internetová on-line komunikačná sieť.
Mirabilis behom tohto polroka dosiahli kritickú hodnotu 850 000 registrácií a udržiavali si dominantné postavenie v tomto novovytvorenom virtuálnom svete.
S dosiahnutím 100 000, 200 000,... 500 000 súčasných on-line užívateľov na internete v júni 1997, Mirabilis zaznamenali nový rekord. Od prvých dôb na internete, bolo zaznamenaných 100 000 súbežných užívateľov. Mirabilis boli jediní, ktorí tento rekord dosiahli. S narastajúcou a komplikovanejšou sieťou Internet sa stupňovalo aj technické vybavenie serverov ICQ, ktoré dokážu momentálne obslúžiť stovky tisíc užívateľov aj počas špičky.

5.2.4 DOPLNKOVÉ SLUŽBY A NÁSTROJE

ICQ skupina zaznamenala rapídny vzrast. Začali postupne vydávať prídavné produkty a poskytovať služby založené na ich technológii, ktoré boli uvádzané v krátkych časových intervaloch. Napríklad predstavili novú službu - User-Created Interest Lists (užívateľský zoznam záujomov), v máji 1997, ďalej User-Created Public Chat-Rooms, vydaný v auguste 1997. Postupne začalo tisíce užívateľov v krátkom čase zakladať chatovacie miestnosti, ktoré boli otvorené, takže sa do nich mohol pripojiť ktokoľvek. Takto sa vytvárali fóra, ktoré riešili rôzne otázky a problémy.

V auguste 1997 Mirabilis ohlásili ich Intranetový Server, čiže ICQ server určený pre podniky. Viaceré z doplnkových produktov, ktoré boli v poslednej dobe vydané, je najmä nový ICQ klient (ICQ program) s kompletne novými funkciami a založený na novom koncepte, verzie pre Mac, Unix a vylepšená a rozšírená vyhľadávacia služba. ICQ skupina vyvíja špeciálne servery, rozmanité komunikačné produkty, pre virtuálne komunity, nové služby, funkcie, doplnky a vylepšenia.
V roku 2000 sa radikálne zmenil protokol ICQ pre komunikáciu klient-server. Predtým sa používal protokol UDP a v súčasnosti je využívaný protokol TCP.

5.2.5 OCENENIA

V krátkej existenčnej dobe, ICQ vytvorilo silnú a uznávanú značku a získalo celosvetové meno, pričom za svoju činnosť bolo ocenené cenami a poctami. Patrí medzi ne: "Najlepší internetový program" udelený SIAF a CNET Downloads Shareware.com, "Essential Downloads" od PC Magazine, "Cream of the Crop" od Tucows, "The Best of the Weekly Wares" od CNET Downloads.com, "The Cool Tool of the Day" od Cool Tool, "The Top Downloads and Editors Picks" od Softseek, "Pick of the Week" od Stroud's. Zisk ocenení "WinList" od Windows Magazine, "100Hot.com" List a viacej.

5.2.6 JEDNODUCHÁ KONFIGURÁCIA PRIPOJENIA

ICQ bola prvou aplikáciou, ktorá zjednodušene využívala verejné sieťové adresy. Pretože ICQ ignorovalo myšlienku, že musíme dokonale vedieť, ako pracuje náš počítač, nikdy sme sa nemuseli pýtať IT oddelenia na IP adresy, domény serverov alebo hostiteľské prostriedky. Pridelili sme nášmu PC sieťovú adresu, napojili na Internet a toto PC mohlo komunikovať s iným PC tak, ako sme si žiadali.
V dnešnej dobe už neexistujúci Napster zdieľal väčšie množstvo súborov, než sa cez ICQ poslalo správ. Pred Napsterom, ak sme chceli poskytnúť súbory z nášho PC, potrebovali sme stálu IP adresu, doménu, registráciu na doménových serveroch a správne nakonfigurovaný webový server na našom PC. S Napsterom sme mohli poskytnúť súbory behom 5 minút, než sme si stiahli a nainštalovali tento program. Napster bol tak jednoduchý, až je neuveriteľné, že dokázal nahradiť webový server.
Napster bol prispôsobený pre zdielanie hudobných MP3 súborov. Myšlienka, ktorú priniesol chat a Napster je jednoduchá: jednoduché nastavenia a ovládanie aj pre netechnicky založených užívateľov.

5.3 ZHRNUTIE

ICQ vytvára celosvetovú komunikačnú sieť. Patria sem služby ako Instant Messaging, SMS, výmena súborov, telefonovanie a e-mail. Je nástrojom pre správcov a tvorcov webu, slúži na zasielanie pozdravov alebo blahoželaní a patrí medzi najväčšie vyhľadávače ľudí celého sveta.

Ale predovšetkým, ICQ tvoria jeho užívatelia – s ďalším užívateľom sa môžeme spojiť behom sekundy, užívatelia ICQ sú známi pre ich nadšenie, entuziazmus a angažovanosť v ICQ komunite a je to vidno.
Poslaním ICQ nebolo iba poskytnutie svetovo najrýchlejšieho, najbohatšieho a užívateľsky prijemného komunikačného nástroja. Myšlienkou ICQ je poskytovať ľuďom, jednotlivcom a skupinám po celom svete, prostriedok, ako sa nájsť a medzi sebou komunikovať.

Či už potrebuje študent z Tokia pomoc so svojou úlohou, či chlapec z Chicaga hľadá priateľku, alebo sa niekto iba nudí, všetci vedia, že ICQ im pomôže – užívatelia ICQ majú rôzne záujmy, sú rôzneho veku, z rôznych krajín, hovoria rôznymi jazykmi a rôzneho povolania – a vždy sa nájde niekto, kto je práve online!
Hlavné faktory:
• Celosvetovo je registrovaných viac ako 150 miliónov užívateľov.
• Asi 90 000 nových užívateľov pribudne behom jedného dňa.
• V priemere sú užívatelia pripojení 4 hodiny denne..
• Asi 800 milión ICQ správ sa pošle a prijme každý deň.
• 70% ICQ užívateľov žije mimo USA, vo viac ako 243 krajinách!

5.3.1 STRUČNÝ PREHĽAD FUNKCIÍ

ICQ poskytuje výmenu krátkych správ privátne, bezpečene a okamžite! Správy pre online užívateľov môžu mať veľkosť 7900 znakov, avšak správy pre offline užívateľov môžu dosiahnuť maximálne iba 450 znakov.
SMS – ak chceme kontaktovať niekoho, kto je mimo práce, domova alebo je na ceste, môžeme mu zaslať SMS správu z nášho ICQ na jeho mobilný telefón.
Ďalej môžeme rozosielať naše obľúbené URL adresy ostatným užívateľom ICQ. URL, tak isto ako správy, môžu byť poslané offline užívateľom.

Vyhľadávacia služba siete ICQ je rozvetvená a komplexná. Hľadať sa dá podľa mnohých kritérií a ich kombinácií. Medzi základné možnosti, ako nájsť ICQ užívateľa, je zadanie jeho ICQ čísla, e-mailovej adresy, mena a priezviska, prípadne aj prezývky. Všetci užívatelia sú uložení na servere ICQ, v centrálnej databáze, ktorá sa nazýva ICQ Global Directory. Kto je registrovaný v ICQ, má právo si pridať, prípadne aktualizovať informácie o svojej osobe do tejto databázy.

ICQ myslí aj na súkromie svojich užívateľov, a preto im ho dovoľuje nastaviť (Privacy Settings). Patrí sem autorizácia (Authorization), kedy rozhodujeme, kto má právo pridať si nás do jeho zoznamu, ďalej či môžu vidieť ľudia náš ICQ stav (status) priamo z Webu (Webaware). Samozrejmosťou je aj možnosť ignorovania správ od užívateľov, ktorých nemáme pridaných vo svojom zozname.
Pre bezpečnosť dovoľuje ICQ svojim užívateľom zmenu hesla (Password). Heslo si môžeme meniť tak často, ako len potrebujeme.
eraser (0)|3.10.2007 02:24
6. OSCAR (Open System for Communication in Realtime)

Skratka OSCAR, alebo v preklade otvorený systém pre komunikáciu v reálnom čase, označuje Instant Messenger protokol (IM protokol; slúžiaci na rýchle doručovanie krátkych správ).
Tento protokol (pod slovíčkom „protokol“ sa skrýva presný a jednoznačný popis pravidiel pre vzájomnú komunikáciu všetkých zúčastnených členov, teda všetkých relevantných účastníkov tejto sieťovej komunikácie) zahŕňa protokol ICQ a protokol AIM. Firma Mirabilis, ktorá navrhla protokol ICQ, bola kúpená firmou AOL, a preto sa tieto služby zlúčili. Firma AOL začala teda vydávať klientské aplikácie, ktoré dokážu naraz komunikovať s užívateľmi ICQ i AIM. Integráciu týchto protokolov zabezpečili programátori AOL pomocou pridania rodiny (family) 0x15 (hexadecimálny zápis), ktorá zabezpečuje kompatibilitu so starými ICQ databázovými servermi.

6.1 Terminológia

Otvorený systém OSCAR používa vlastnú terminológiu a množstvo skratiek, ktoré označujú vlastnosti, funkcie a objekty tohto systému.

BOS
Basic OSCAR Service. Tento výraz odkazuje na službu, ktorá vytvára jadro služby Instant Messenger (IM služba, slúžiaca na rýchle doručovanie krátkych správ). Tieto služby zahŕňajú prihlasovanie (login), odhlasovanie (logoff), vyhľadávanie (locate), posielanie správ, informačný manažment, zoznam priateľov (buddy list, contact list).

Buddy List
Zoznam priateľov slúži na to, že dovoľuje užívateľom vidieť takmer s okamžitou odozvou, že ich priatelia (buddies) používajú IM službu. Samozrejmosťou je možnosť nastavenia si súkromia, buď pre všetkých užívateľov, alebo len vybraných zo zoznamu.

DC
DC je skratka pre priame spojenie (direct connection). Je veľmi nákladné, aby sa všetky klientské dáta posielali cez server. Tento problém sa vyriešil s priamym spojením klient-klient, kedy sa jeden z klientov pripojí na otvorený port druhého klienta a takto si môžu posielať správy, súbory a iné údaje.

FLAP
FLAP je nízko-úrovňový komunikačný protokol, ktorý uľahčuje vývoj vysoko-úrovňových, záznamových, komunikačných vrstiev. Je použitý v TCP pripojení medzi všetkými klientmi a servermi.

FLAP má 6 bajtovú hlavičku, táto vrstva (layer) popisuje paket.

ICBM
ICMB – Inter Client Basic Message. ICBM je združený klient-klient mechanizmus. Práve najviac viditeľný kanál sa používa na posielanie inštantných správ.

Instant Message (IM)
Nástroj na posielanie krátkych správ medzi užívateľmi. Správy sú doručované takmer okamžite. Na rozdiel od e-mailov, tieto správy nemôžu obsahovať veľké množstvá dát, ale výhodou je čas doručenia. Príjemca môže na prichádzajúcu správu jednoducho odpovedať, takto sa vytvára konverzácia v takmer reálnom čase.

Login/Logoff
Login/Logoff je internou službou IM klienta. Zabezpečuje pripojenie na IM server. Toto zahrnuje počiatočné prihlásenie (login), rôzne migrácie počas užívateľovho sedenia (session) a finálne odpojenie (logoff).

Migration
Proces automatického presunu užívateľa z jedného servera na druhý. Presuny (migrácie) sa môžu uskutočňovať kedykoľvek počas sedenia a je kompletne transparentné. I keď môže nastať spomalenie klienta, žiadne dáta sa počas migrácie nestratia.

OSCAR
Open System for Communication in Realtime - otvorený systém pre komunikáciu v reálnom čase, označuje Instant Messenger protokol.

SSI
Server-stored information je služba, ktorá umožňuje klientovi si uložiť jeho zoznam (buddies, skupiny, komentáre, rôzne masky) priamo na server. Toto zvyšuje mobilitu klienta a redukuje tok dát cez sieť a zaťaženie servera. Oscar pre túto službu využíva rodinu 0x13.

SNAC
SNAC je základnou komunikačnou jednotkou, ktorá prúdi medzi klientmi a servermi. Komunikačná vrstva SNAC sedí na vrchu FLAP vrstvy.

SNAC má 10 bajtovú hlavičku, táto vrstva (layer) popisuje funkcie.

TLV
TLV – Type Length Value – dovoľuje zasielať informácie, ktoré majú byť odoslané cez protokol. Obyčajne sa pod TLV interpretuje ako vrstva jadra (core layer). V podstate sa jedná o flexibilnú štruktúru pre kódovanie, ktorá obsahuje parameter typ, dĺžka a hodnota.


6.2 Základné špecifikácie systému oscar


6.2.1 FLAP

FLAP je nízko-úrovňový komunikačný protokol, ktorý uľahčuje vývoj vysoko-úrovňových, záznamových, komunikačných vrstiev. Je použitý v TCP pripojení medzi všetkými klientmi a servermi.
Šesť bajtová hlavička popisuje celý paket.
Formát FLAP paketu je vyobrazený na obr. 6.1.



Obr. 6.1 Formát FLAP paketu


FLAP hodnota id byte je vždy 0x2A. Je to štartovacia značka.
FLAP sekvenčné číslo (datagram sequence number) sa používa na detekciu chýb. Takže server môže odhaliť problém, ak klient nastaví FLAP veľkosť dát (data size) na 10 a zapíše 20 bajtov ako dáta. Počiatok sekvenčného čísla je generovaný náhodne. Neexistuje žiadne spojenie medzi sekvenčným číslom, ktoré nastavuje server a sekvenčným číslom od klienta. Toto číslo je vždy zvyšované smerom nahor (až po 0xFFFF) po každom zaslanom príkaze. Ak sekvenčné číslo dosiahne 0xFFFF, pokračuje od 0x0000, čo je pochopiteľné. Ak sa vytvorí nové spojenie, je doporučené vygenerovať nové číslo pre toto spojenie, za účelom vnútornej spojitosti (internal coherency). Sekvenčné čísla sú nezávislé od kanálov (channels): existuje malá séria sekvenčných čísel pre TCP spojenie (pre socket).

Kanály
(channels) sú metódou, ktorá slúži na rozlíšenie mnohých komunikačných tokov po tom istom TCP sockete. Analogicky ich možno považovať za TCP/UDP čísla portov. OSCAR používa päť kanálov:
  • 0x01 – Požiadavka na nové spojenie (New Connection Negotation)
  • 0x02 – SNAC dáta
  • 0x03 – FLAP – úroveň chýb
  • 0x04 – Požiadavka na ukončenie spojenia (Close Connection Negotiation)
  • 0x05 – Keep alive (užitočné ak sa používa proxy server na pripojenie k BOS, čo slúži na zamedzenie ukončenia internetového spojenia cez proxy, ak sa nevykazuje počas určenej doby, internetová aktivita)
Potom, čo je nastavené nové spojenie (vytvorí sa socket) použitím kanála 0x01, dáta môžu byť prenášané len cez kanál 0x02, pokiaľ sa nevyskytne chyba (kanál 0x03) alebo po plánované ukončenie, o ktoré sa požiada (kanál 0x04). SNAC nemôže byť prenášaný iným kanálom než 0x02.
Z prichádzajúceho FLAP príkazu (paketu) sa ako prvá prečíta hlavička (FLAP header), ktorá má veľkosť 6 bajtov. Z nich zistíme, koľko ešte bajtov je treba prečítať, aby sa príkaz dokončil a koľko je potrebné alokovať (zabezpečiť, prideliť) pamäte pre uloženie. Nikdy by sa nemalo čítať viac, či menej bajtov, než je špecifikovaných v hlavičke, inak môže byť výsledok skrátený alebo vznikne neinterpretovateľný príkaz. (Ak prečítate viac než treba, určite prečítate začiatok ďalšieho príkazu, čo je veľmi nebezpečné. Strata dát je nežiaduca.)

Pretože musí byť každý príkaz spracovaný podľa smernice, je doporučené použiť nízko-úrovňovú rutinu, ktorá zabezpečí pridávanie FLAP hlavičiek. Toto je najlepšia cesta, ako sa vyhnúť posielaniu chybných dát, resp. eliminovať fatálnu chybu.
FLAP hlavička zapísaná v objektovom Pascale má nasledovnú štruktúru:
[FONT=Courier New]
//Flap header
type
[/FONT] [FONT=Courier New] PFlapHdr = ^TFlapHdr;
[/FONT] [FONT=Courier New] TFlapHdr = record
[/FONT] [FONT=Courier New] Ident: Byte;
[/FONT] [FONT=Courier New] ChID: Byte;
[/FONT] [FONT=Courier New] Seq: Word;
[/FONT] [FONT=Courier New] DataLen: Word;
[/FONT] [FONT=Courier New] end;

[/FONT] 6.2.2 SNAC


SNAC je základnou komunikačnou jednotkou, ktorá prúdi medzi klientmi a servermi. Komunikačná vrstva SNAC sedí na vrchu FLAP vrstvy. SNAC je normálna súčasť FLAP dátového poľa (data field) pre kanál 0x02. SNAC je posielaný len cez kanál 0x02. Dáta posielané inými kanálmi sa nepovažujú za SNAC. Môže byť len jediný SNAC pre FLAP rámec (frame). Nasledovný obr. 6.2 zobrazuje SNAC formát.



Obr. 6.2 SNAC formát


Neexistuje formálna deklarácia dĺžky pre SNAC dávku dát (data portion; táto informácia musí byť prevzatá z FLAP hlavičky). Rodiny, sú identifikované pomocou položky family ID number a ustanovujú skupiny služieb. Subtypy vznikajú delením rodín. Každé ID skupiny (identifikačné číslo) je jedinečné a určuje špecifickú službu alebo informáciu stanovenú v sekcii dát (data section).

Požadované ID
(request id – reqid; identifikačné číslo) je 32 bitová hodnota, ktorá identifikuje základnú informáciu. Klient môže generovať úplne ľubovoľné reqid, v závislosti od požiadavky. Môže sa stať, že SNAC je irelevantný a reqid môže byť zabudnuté. Avšak počas vyžiadania si informácií (information-requestion SNAC) je nutné si zaslané reqid pamätať, pretože je to jediná možnosť, ako sa dožadovať odpovede. Ak by sa tak nestalo, nebolo by možné poslať ďalšie požiadavky pre ten istý SNAC subtyp.

Príznaky
(flags) sú tvoria hlavné vlastnosti pre SNAC. Ak je prvý bit príznaku = 1, tak bolo poslaných viac SNAC pre danú požiadavku (reqid). Ak sa šestnásty bit = 1 znamená to, že SNAC obsahuje neznáme informácie na začiatku (prvá je dĺžka ďalších dát, a až potom nasledujú samotné dáta).
SNAC hlavička zapísaná v objektovom Pascale má nasledovnú štruktúru:
[FONT="]
[FONT=Courier New]//Snac header[/FONT][/FONT][FONT=Courier New]
type
[/FONT] [FONT=Courier New] PSnacHdr = ^TSnacHdr;
[/FONT] [FONT=Courier New] TSnacHdr = record
[/FONT] [FONT=Courier New] Family: Word;
[/FONT] [FONT=Courier New] SubType: Word;
[/FONT] [FONT=Courier New] Flags: Word;
[/FONT] [FONT=Courier New] ReqID: LongWord;
[/FONT] [FONT=Courier New] end;
[/FONT]
6.2.3 TLV (Typ–Length–Value)


TLV je veľmi vhodnou a efektívnou metódou na vloženie dát do usporiadaného formátu, najmä ak sa jedná o reťazce bajtov premenlivej dĺžky. TLV doslovne značí „Typ, Dĺžka, Hodnota“. A to je presne čím je: 16 bitový Typ kód, 16 bitová hodnota pre dĺžku položky Hodnota a dáta v položke Hodnota (premenlivej dĺžky). TLV formát znázorňuje obr. 6.3.



Obr. 6.3 TLV formát


SNAC môže obsahovať TLV, nie je to však pravidlom. TLV sú často používané priamo v FLAP dátovej položke, ale bežne sú vo vnútri SNAC. Viacej TLV každého Typu môže existovať v jednoduchom FLAP príkaze. TLV musí dodržiavať striktné pravidlá, inak sa nejedná o TLV, ale o nespracované dáta (raw data).

Raw paket
zapísaný v objektovom Pascale má nasledovnú štruktúru:

[FONT=Courier New]//Raw packet
type
PRawPkt = ^TRawPkt;
TRawPkt = record
Data: array[0..MAX_DATA_LEN - 1] of Byte; // const MAX_DATA_LEN = 8192
// ak je paket >= 8192, treba zabezpečiť zlúčenie ďalších paketov
Len: Word;
end;[/FONT]


TLV sú veľmi užitočné na posielanie reťazcov s variabilnou dĺžkou. Reťazec bajtov sám o sebe (nepliesť s položkou typu asciiz str, viď príklad zaslanie SMS správy) v tomto protokole nikdy nie je ukončený nulou (NULL-terminated).

6.3 Praktická implementácia poznatkov


6.3.1 Zaslanie SMS správy (CLI_SEND_SMS)


Užívateľ zasiela nasledovné dáta na server, ak žiada o zaslanie SMS správy na mobilný telefón. Server mu dá odpoveď, buď nastala chyba, prípadne oznámi, že SMS správa bola úspešne vložená do fronty operátora a bude v krátkom čase doručená.

Z položiek SNAC možno vyčítať, že sa jedná o rodinu 0x0015, subtyp (tiež aj command) 0x0002. Pre bežného človeka tento zápis nie je vôbec zrozumiteľný, ale podľa dokumentácie možno vyčítať, že sa jedná o rodinu ICQ specific extensions service, čiže služby, ktoré využíva klient na vyhľadávanie užívateľov, získavanie ich osobných údajov, ktoré majú uložené na servere. Táto rodina definuje aj posielanie SMS správ. Z položky subtyp možno vyčítať, že sa jedná o Meta information request (požiadavky), ktoré zasiela klient. Príznaky sú nastavené na 0x0000, čiže sa pre túto požiadavku neurčujú. Požadované identifikačné číslo rozlišuje dáta patriace odlišným paketom.



Obr. 6.4 SNAC formát (CLI_SEND_SMS)


SNAC zapuzdruje položky TLV a to typ a dĺžku. Typ je nastavený na 1, čo určuje význam dát, ktoré obsahuje. Dáta sú v tomto TLV rozdelené na viacero sekcií. Všetky čísla sú tzv. little-endian (LE), čiže bajty s nižšími rádmi sa uložia na nižšiu adresu (little-end-first), čo využívajú procesory Intel, AMD a väčšina sieťového hardware. Tento spôsob rieši problém, ako sa rôzne druhy procesorov dokážu vysporiadať s ukladaním viacbajtových numerických sekvencií. Názorné vysvetlenie možno nájsť napr. na internetovej adrese [odkaz, pro zobrazení se přihlaste].
Veľkosť dávky dát je logicky menšia o dva než TLV dĺžka, je to vlastne odpočítaná veľkosť typu, ktorú má veľkosť dávky dát, čiže dva bajty. Táto hodnota určuje veľkosť nasledujúcich dát. Sú nimi UIN, čiže identifikačné číslo užívateľa, pod ktorým je registrovaný v sieti ICQ. Toto číslo je pre každého unikátne. Dátový typ označuje, resp. nesie kód, ktorý špecifikuje požiadavku. Sekvenčné číslo (tiež aj reference) žiadateľa začína od čísla 2 a inkrementuje sa nahor o jednotku. Podľa tohto čísla klient vie, že server dal odpoveď práve na túto požiadavku. Takže, ak bolo poslaných viacej SMS správ naraz, potom server vráti odpoveď (sekvenčné číslo žiadateľa je v nej zahrnuté) na každú z nich a klient tieto odpovede rozlíši len na základe tohto čísla. Položka dátový subtyp kóduje typ požiadavky, v tomto prípade sa jedná o zaslanie SMS správy.

Nasledujú rezervované dáta a dôležitá položka dĺžka zasielaných dát (xml request strlen). Je to dvojbajtové celé kladné číslo (rozsah 0.. 65535), ktoré nesie dĺžku zasielaného xml reťazca.
TLV je ukončený zasielanými reťazcom (xml request string) končiacim v tomto prípade nulou - , ktoré definujú jednotlivé položky pre server vo formáte (v tomto prípade sa jedná o eXtensible Markup Language formát, (bližšie informácie možno nájsť na adrese http://www.php.sk/php_tutor/tut_10-1.php), aby ten dokázal vyčítať nasledovné prvky:
[code]
Medzinárodné telefónne číslo
SMS správa
Kódovacia stránka
Odosielateľove UIN
Odosielateľova prezývka
Yes/No


[/code]



Obr. 6.5 Stromová štruktúra paketu požiadavky CLI_SEND_SMS


Medzinárodne zapísané číslo by malo mať formát napr. +421907218670, kódovacia stránka je aktuálna ANSI kódovacia stránka identifikovaná systémom. Položka delivery_receipt by mala byť vždy nastavená na Yes, aby mohol server odoslať užívateľovi potvrdenie, že adresát danú SMS správu prijal.

Obr. 6.5 zobrazuje stromovú štruktúru jednotlivých položiek celého paketu (vrátane FLAP hlavičky), ktorý je zaslaný na server, ktorý ho po obdržaní rozloží a vyčíta z jeho položiek, že sa jedná o požiadavku u zaslanie SMS správy na mobilný telefón.

Hexadecimálny výpis celého paketu (dump) vyzerá nasledovne:
[code]2A 02 20 5A 01 6A 00 15-00 02 00 00 00 00 00 00 *. Z.j..........
00 01 01 5C 5A 01 34 EC-59 0A D0 07 03 00 82 14 ...\Z.4.Y.......
00 01 00 16 00 00 00 00-00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 01 39-3C 69 63 71 5F 73 6D 73 .......8 5F 6D 65 73 73 61 67 65-3E 3C 64 65 73 74 69 6E _message> 61 74 69 6F 6E 3E 2B 34-32 31 39 30 37 32 31 38 ation>+421907218
36 37 30 3C 2F 64 65 73-74 69 6E 61 74 69 6F 6E 670 3E 3C 74 65 78 74 3E 43-61 66 2C 20 6A 61 6B 20 >Caf, jak
74 6F 20 6A 64 65 20 76-20 43 6F 74 74 62 75 73 to jde v Cottbus
65 3F 20 54 6F 20 55 49-4E 20 6A 65 20 72 65 76 e? To UIN je rev
65 72 7A 6E 65 3F 3C 2F-74 65 78 74 3E 3C 63 6F erzne?
64 65 70 61 67 65 3E 31-32 35 30 3C 2F 63 6F 64 depage>1250 65 70 61 67 65 3E 3C 73-65 6E 64 65 72 73 5F 55 epage> 49 4E 3E 31 37 33 36 36-35 33 33 32 3C 2F 73 65 IN>173665332 6E 64 65 72 73 5F 55 49-4E 3E 3C 73 65 6E 64 65 nders_UIN> 72 73 5F 6E 61 6D 65 3E-54 49 43 51 43 6C 69 65 rs_name>TICQClie
6E 74 3C 2F 73 65 6E 64-65 72 73 5F 6E 61 6D 65 nt 3E 3C 64 65 6C 69 76 65-72 79 5F 72 65 63 65 69 > 70 74 3E 59 65 73 3C 2F-64 65 6C 69 76 65 72 79 pt>Yes 5F 72 65 63 65 69 70 74-3E 3C 74 69 6D 65 3E 30 _receipt> 69 63 71 5F 73 6D 73 5F-6D 65 73 73 61 67 65 3E icq_sms_message>
00 .
[/code]Názorná ukážka implementácie do objektového Pascalu môže byť nasledovná:
[code]procedure CreateCLI_SENDSMS(Pkt: PRawPkt; UIN: LongWord; const Destination, Text: String; CodePage: Word; const Time: String; var Seq, Seq2: Word);
var
lpkt: TRawPkt; // pomocný tzv. surový (raw) paket
S: String; // xml zasielaný reťazec
begin
PktInitRaw(@lpkt); // inicializuje raw paket
PktInt(@lpkt, $8214, 2); // CLI_SENDSMS Kanál: 2, SNAC(15,02)/07D0/1482
PktInt(@lpkt, $0001, 2); // PktInt pridáva dáta do raw paketu
PktInt(@lpkt, $0016, 2);
PktInt(@lpkt, 0, 4);
PktInt(@lpkt, 0, 4);
PktInt(@lpkt, 0, 4);
PktInt(@lpkt, 0, 4);
S := ''
+ '' + Destination + ''
+ '' + StrToUTF8(Text) + ''
+ '' + IntToStr(CodePage) + ''
+ '' + IntToStr(UIN) + ''
+ 'TICQClient'
+ 'Yes'
+ ''
+ '
'
+ #0;
PktTLV(@lpkt, 0, S); // vytvorí TLV, pridá Typ, Dĺžku, Hodnotu

// kompletizuje paket, FLAP, SNAC, TLV štruktúra
CreateCLI_TOICQSRV(Pkt, UIN, $07D0, @lpkt, lpkt.Len, Seq, Seq2);
end;
[/code]Po vykonaní procedúry dostávajú dáta žiadanú štruktúru a sú pripravené na odoslanie priamo na server. Na uskutočnenie odoslania sa používa funkcia send(), ktorá je definovaná vo WinSock. Až také jednoduché to však nie je, treba byť najskôr pripojený na server. Toto realizuje celá rada WinSock funkcií.

6.3.2 Realizácia pripojenia na vzdialený server


Aplikácia, ktorá chce pomocou protokolu TCP/IP komunikovať so serverom ICQ, musí splniť nasledujúce kroky:
  • Pripojiť sa na port 5190 servera, ktorý poskytuje ICQ služby.
  • Prijímať/posielať dáta
  • Uzavrieť spojenie
Prvú funkciu, ktorú musí volať každý program, ktorý chce použiť soketové rozhranie Windows, je WSAStartup(): [FONT=Courier New]
var
WSAData: TWSAData;

WSAStartup(MAKEWORD(2, 0), WSAData) // inicializuje knižnicu wsock32.dll
[/FONT]
Prvý parameter definuje WinSock verziu 2.0. Po vykonaní funkcie obsahuje štruktúra WSAData informácie o implementácii rozhrania Windows Sockets.

Ďalej musí aplikácia volať funkciu socket():
[FONT="][FONT=Courier New]
var
FSocket: TSocket;

FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP); // vytvorí socket[/FONT]
[/FONT]
Prvým parametrom je adresová rodina, v tomto prípade pôjde o nejakú internetovú adresu. Druhý parameter hovorí, že dáta majú byť predávané ako prúd (stream). Posledným parametrom je protokol, kedy používame protokol IP. Návratová hodnota funkcie socket() sa uloží v premennej typu TSocket, ktorá sa potom používa pri všetkých ďalších volaniach.

Ďalšou funkciou rozhrania WinSock, ktorú aplikácia volá, je funkcia connect(). Táto funkcia vyžaduje štruktúru adresy soketu, ktorá môže byť pre rôzne protokoly iná. Aplikácia používa štruktúru určenú pre protokoly TCP/IP:

[FONT=Courier New]type
[/FONT] [FONT=Courier New] sockaddr_in = record
[/FONT] [FONT=Courier New] (sin_family: u_short;
[/FONT] [FONT=Courier New] sin_port: u_short;
[/FONT] [FONT=Courier New] sin_addr: TInAddr;
[/FONT] [FONT=Courier New] sin_zero: array[0..7] of Char);
[/FONT] [FONT=Courier New] end;
[/FONT]
kde položka sin_addr je tzv. unión umožňujúci zadať IP adresu ako štvoricu bajtov, ako dvojicu bezznamienkových typov u_short (Word) alebo ako u_long (Longint).

Program nastavuje položku sin_family na AF_INET, čím sa definuje adresová rodina. Položka sin_port sa nastavuje na číslo portu. Toto číslo sa však nemôže nastaviť jednoducho na 5190. Rovnako ako väčšina čísiel prenášaných po Internete, musí byť číslo portu uvedené pre ukladanie „big-endian“, čo znamená, že najvýznamnejší bajt musí byť uvedený ako prvý. Mikroprocesory Intel a AMD však používajú, ako bolo už uvedené, ukladanie „little-endian“. Našťastie existuje funkcia htons() („host-to-network shor“), ktorá prehodí poradie bajtov. Do položky sin_addr sa uloží IP adresa servera, ktorá sa získa, buď jej zadaním v podobe reťazca (napr. 64.12.161.153) alebo prevodom doménového mena (napr. login.icq.com). Slúži na to vlastná funkcia Resolve():
[code]function Resolve(const Host: String): Longint;
var
he: PHostEnt;
begin
Result := inet_addr(PChar(Host));
if DWord(Result) = DWord(INADDR_NONE) then
begin
he := gethostbyname(PChar(Host));
if he = nil then Exit;
Result := PLongint(he^.h_addr_list^)^;
end;
end;
[/code] pričom, ak zlyhá funkcia inet_addr, ktorá slúži na konverziu IP adresy uloženej ako reťazec, na 32 bitové číslo, tak sa jedná o doménové meno a treba z neho získať IP adresu. Na toto slúži funkcia gethostbyname(), ktorá uloží návratovú hodnotu do typu PHostEnt, v ktorej položka h_addr_list obsahuje zoznam hosťovských adries.
Ak sú splnené podmienky, resp. ak sú naplnené položky štruktúry sockaddr_in, môže sa zavolať funkcia connect():
[FONT="]
[FONT=Courier New]var[/FONT][/FONT]
[FONT=Courier New] sin: sockaddr_in;
[/FONT] [FONT=Courier New] FIp: Integer;
[/FONT] [FONT=Courier New] FHost: String = 'login.icq.com';
[/FONT] [FONT=Courier New] FPort: Word = 5190;

[/FONT] [FONT=Courier New] FIp := Resolve(FHost);
[/FONT] [FONT=Courier New] sin.sin_family := PF_INET;
[/FONT] [FONT=Courier New] sin.sin_addr.S_addr := FIp;
[/FONT] [FONT=Courier New] sin.sin_port := htons(FPort);

[/FONT] [FONT=Courier New] connect(FSocket, sin, SizeOf(sin));
[/FONT]
Prvým parametrom funkcie connect() je deskriptor identifikujúci zatiaľ nepripojený soket, druhý parameter predstavuje štruktúru adresy soketu a tretí je veľkosť štruktúry adresy soketu.
Následne už stačí zabezpečiť príjem a zasielanie dát. Slúžia na to opäť funkcie WinSock a to funkcia recv() a send():[code]const
CNetPktLen = $FFFF; // veľkosť sieťového paketu

var
buf: array[0..CNetPktLen - 1] of Char; // zásobník (buffer) dát
ret: Integer; // dĺžka dát v zásobníku

recv(FSocket, buf, SizeOf(buf), 0); // príjem dát
send(FSocket, buf, ret, 0) // zasielanie dát
[/code] Po ukončení aplikácie, resp. pri odpojení sa, je nutné uzatvoriť soket a uvoľniť používanú knižnicu s WinSock funkciami:
[FONT="]
[FONT=Courier New]closesocket(FSocket);[/FONT][/FONT] [FONT=Courier New] WSACleanUp();
[/FONT]
crasher.km (919)|4.10.2007 18:53
Thx a lot všem :)) Zvláště teda Eraser :)

Nemáte ještě něco ?:)