S Palm Piloty na internet snadno a rychle (5)

Pátým dílem se vracíme k naší malé sérii na téma Palm a internet. Dnes si uvedeme příklad použití funkce vyhledávající počítač podle jména.

Errata: do minulého dílu se dostala chyba: délka adresy IPv6 je 128 bitů, nikoliv 48 bitů, jak jsem uvedl. Děkuji všem pokročilým čtenářům, kteří i přes varování četli část pro začátečníky a na chybu mne upozornili.


Nalezení IP adresy počítače

Numerickou hodnotu IP adresy v síti internet zjistíme dotazem u DNS serveru (zkratka z Domain Name Service = Správa jmen v doméně), který nám určil poskytovatel internetových služeb. Panel síťového nastavení počítačů Palm Pilot dovoluje zadat adresy hned dvou DNS serverů.

Nebudeme si uvádět detailní popis toho, jak přesně probíhá výměna dat mezi operačním systémem PalmOS a DNS servery, protože to vše je "uzavřeno" ve funkci NetLibGetHostByName(). Soustředíme se na použití funkce NetLibGetHostByName() v naší aplikaci.

Zavoláme-li funkci NetLibGetHostByName(), je zaslán dotaz se jménem počítače oběma nastaveným DNS serverům a funkce čeká určitou dobu (podle parametru timeout) na odpověď. Pokud během nastavené doby přijde alespoň od jednoho DNS serveru kladná odpověď, funkce NetLibGetHostByName() vrátí nenulovou hodnotu a ve struktuře NetHostInfoBufPtr, jejíž adresu jsme funkci předali, je uložena nalezená IP adresa.

Vrátí-li funkce NetLibGetHostByName() nulovou hodnotu, došlo k chybě při vyhledávání počítače a v proměnné chyba je uložen kód chyby. Typické volání funkce NetLibGetHostByName() je následující:

NetHostInfoPtr hostinfo;
NetHostInfoBufType buffer;
Err chyba;
    
hostinfo = NetLibGetHostByName(gNetLibReference, jmeno, &buffer, 5 * sysTicksPerSecond, &chyba);

if(hostinfo)
{
    for(i = 0; i < netDNSMaxAddresses; i++)
    {
        if(buffer.address[i] != NULL && buffer.address[i] != -1L)
        {
            IP_adresa = buffer.address[i];
        }
    }
}

Parametr timeout označuje dobu čekání na odpověď DNS serveru jako počet tiknutí vnitřních hodin počítačů Palm Pilot (100x za vteřinu). Je pružnější uvádět hodnotu čekání ve vteřinách; proto je v hlavičkových souborech definována konstanta sysTicksPerSecond; výraz 5*sysTicksPerSecond označuje pět vteřin.

Parametr buf ukazuje na strukturu NetHostInfoBufType, ve které jsou uloženy nalezené informace o hledaném počítači. Z důvodu kompatibility s operačním systémem UNIX obsahuej tato struktura dvě základní části:

  1. vnořenou strukturu NetHostInfoType, která je kompatibilní se strukturou hostent v hlavičkových souborech operačního systému UNIX
  2. - oficiální jméno hledaného počítače v poli name
    - další jména tohoto počítače (aliasy) v polích aliasList a aliases
    - IP adresy hledaného počítače vrácené oběma DNS servery uložené v poli address[netDNSMaxAddresses]

Funkce NetLibGetHostByName() vrací ukazatel na strukturu NetHostInfoType z důvodu snadného přenosu programů z operačního systému UNIX. Tuto strukturu vyplní PalmOS ukazateli na data uložená ve struktuře NetHostInfoBufType.

V našich programech, které jsou psány pouze pro PalmOS, budeme využívat - tam, kde to bude možné - funkce a struktury, které jsou specifické pro PalmOS. Zájemce o programování internetových aplikací na Palm Pilotech znovu odkazuji na základní manuály programování sockets v operačním systému UNIX/Linux - funkce i použití jsou zcela stejné.

V praxi však potřebujeme funkci pro hledání počítače ještě rozšířit. Uživatel totiž do políčka pro jméno počítače může zadat přímo IP adresu. V takovém případě by volání funkce NetLibGetHostByName() skončilo neúspěchem. Proto musíme ještě předtím otestovat, zda v políčku není přímo IP adresa. Nemusíme sami programovat funkci na čtení IP adres, tato funkce je již v PalmOS obsažena.

NetIPAddr NetLibAddrAToIN(UInt16 refCislo, Char *adresa)

Pokusí se převést IP adresu z textové podoby na číselnou

Vstupní parametry
  • refCislo - referenční číslo knihovny Net.lib
  • adresa - textová proměnná, obsahující IP adresu - čtyři čísla oddělená tečkami (například 62.23.34.10)
Vrácená hodnota
  • -1 - v parametru adresa nebyla uložena platná IP adresa počítače
  • numerickou hodnotu IP adresy, která byla v parametru adresa

Protipólem funkce NetLibAddrAToIN() je funkce NetLibAddrINToA(), která převede numerickou IP adresu do její textové podoby. Použití obou funkcí je jednoduché a neskrývá žádné záludnosti.

Char* NetLibAddrINToA(UInt16 refCislo, NetIPAddr adresa, Char *buf)

Převede IP adresu z numerické do textové podoby.

Vstupní parametry
  • refCislo - referenční číslo knihovny Net.lib
  • adresa - proměnná obsahující numerickou hodnotu IP adresy
Výstupní parametry
  • buf - textová proměnná, do které bude uložen výsledek; tato proměnná musí mít délku nejméně 16 znaků
Vrácená hodnota
  • ukazatel na parametr buf

Zpracováváme-li data z políčka označeného jako "adresa počítače", musíme nejprve zkontrolovat voláním funkce NetLibAddrAToIN(), zda uživatel do políčka nezadal přímo IP adresu. Až pokud funkce NetLibAddrAToIN() vrátí hodnotu -1, budeme volat funkci NetLibGetHostByName(), která se dotazuje DNS serverů na IP adresu počítače.


Příště si vytvoříme druhý program - program na nalezení IP adresy počítače na internetu.

  • Nejčtenější

V květnu se zřejmě vrátí ikonická Nokia 3210, kdysi to byl přelomový model

24. března 2024  8:01

Současný vlastník značky Nokia na poli mobilních telefonů, firma HMD (Human Mobile Devices –...

Banka spustila mobilní datové balíčky. Funguje to i zákazníkům z Česka

26. března 2024  12:06

Virtuální banka Revolut spouští virtuálního celosvětového operátora. Zákazníci si mohou kupovat...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Z bídného začátku roku se radují. Vypadá to na velký návrat

21. března 2024  7:02

Zřejmě to vypadá na velký návrat. Huawei začíná drtit své domácí konkurenty, přitom jeho produkty...

Trvalo to. Nový nejlepší fotomobil světa konečně koupíte i v Česku

26. března 2024  7:02

Konečně nastává situace, že nejlepší fotomobil v žebříčku DxO Mark je dostupný i na našem trhu....

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Pochlubili se, že se pochlubí. Značky ze sebe dělají slibotechny

25. března 2024  7:02

Jedním z trochu nečekaných trendů veletrhu MWC v Barceloně se stala oznámení o tom, že firmy nějaké...

Nová cenově dostupná stylovka vás může dostat na fotbalové Euro

29. března 2024

Vivo má nový smartphone střední třídy, který má velké ambice. Za rozumnou cenu nabídne nejen dobrou...

Toho telefonu je pouze pro Čínu škoda. Udělal by parádu i u nás

28. března 2024  12:06

Xiaomi má nový trhák. Model Civi 4 Pro trhá předprodejní rekordy, ale jen na domácím čínském trhu....

U foťáků se blýská na lepší časy, naznačuje výsledek testu nového xiaomi

28. března 2024  7:02

Čínská značka Xiaomi trochu na poli fotomobilů v uplynulých letech tápala. Ukazuje to mimo jiné...

Kartónek Steva Jobse se vydražil za neuvěřitelnou sumu

28. března 2024

Vizitku slavného ředitele společnosti Apple si někdo pořídil za pořádný balík peněz. Přidanou...

Akční letáky
Akční letáky

Všechny akční letáky na jednom místě!

Smoljak nechtěl Sobotu v Jáchymovi. Zničil jsi nám film, řekl mu

Příběh naivního vesnického mladíka Františka, který získá v Praze díky kondiciogramu nejen pracovní místo, ale i...

Rejžo, jdu do naha! Balzerová vzpomínala na nahou scénu v Zlatých úhořích

Eliška Balzerová (74) v 7 pádech Honzy Dědka přiznala, že dodnes neví, ve který den se narodila. Kromě toho, že...

Pliveme vám do piva. Centrum Málagy zaplavily nenávistné vzkazy turistům

Mezi turisticky oblíbené destinace se dlouhá léta řadí i španělská Málaga. Přístavní město na jihu země láká na...

Kam pro filmy bez Ulož.to? Přinášíme další várku streamovacích služeb do TV

S vhodnou aplikací na vás mohou v televizoru na stisk tlačítka čekat tisíce filmů, seriálů nebo divadelních...

Stále víc hráčů dobrovolně opouští Survivor. Je znamením doby zhýčkanost?

Letošní ročník reality show Survivor je zatím nejkritizovanějším v celé historii soutěže. Může za to fakt, že už...