C-SaCzech Procedura EncodeHTTP

Tato procedura zajišťuje položení příslušného dotazu svému vlastnímu serveru a změnu kódu jeho odpovědi.

Na začátku se inicializuje řada různých proměnných na základě proměnných prostředí, nastavených serverem při spuštění programu. Poté následuje otevření soketu, který bude použit pro komunikaci s WWW serverem. To se odehraje příkazem:

sock=connect_server( host, port );
Po jeho provedení proměnná sock obsahuje deskriptor vytvořeného socketu. Pokud se operace nepovedla, vypíše se zpráva: "Chyba v komunikaci" a program skončí. Pro přesnost, procedura http_perr slouží k tomu, aby vypsala chybovou hlášku tak, aby ji browser zobrazil, tzn. napíše
Content-type: text/html

obsah chybového hlášení

Jestliže s otevíráním nebyly potíže, program si otevře pro deskriptor tohoto socketu stream ( => programátorsky snadněj a hlavně rychlejší zpracování přicházejících dat), položí dotaz WWW serveru a začne zpracovávat odpověď. Její zpracování je rozloženo do dvou cyklů while. V prvním se vyhodnocují hlavičky odpovědi a hledá se v nich Content-Type. Obsah příslušné hlavičky je pak porovnán s obsahem pole ext, což dělá makro ISMIME, a pokud je v něm příslušný typ obsažen, nastaví se proměnná convert na hodnotu 1 => obsah odpovědi má být překódován. Tato činnost se provádí jen v tom případě, pokud server odpovídá protokolem HTTP verze alespoň 1.0. Odpovědi starších serverů nebudou překódovány. Zjištění verze protokolu, ve kterém server odpovídá, zajišťuje test

if ( !str_prefix( buf, "HTTP/" ) )
Máte-li server s protokolem HTTP verze 0.9 a chcete, aby jeho odpovědi byly kódovány, vložte do else-větve tohoto příkazu
convert=1;
Ovšem v tom případě budou kódovány všechny odpovědi, procházející procedurou EncodeHTTP bez ohledu na jejich typ! Fatální zejména u obrázků.

Hlavní část skriptu je uzavřena do podmíněného příkazu

if ( convert )
Jeho else-větev nedělá nic. Pouze opíše svůj vstup do výstupu. Pokud se má kódovat, je činnost totožná s funkcí odpovídající části podprogramu EncodeFile.


ZPET Zpět

Tato stránka je součástí dokumentace programu C-SaCzech.