Na za‡ tku se inicializuje ©ada r–zn˜ch promˆnn˜ch - ‡ stˆ‡nˆ na z kladˆ promˆnn˜ch prost©ed¡, ‡ ste‡nˆ na z kladˆ nejr–znˆj¨¡ch syst‚mov˜ch slu‘eb. Zaj¡mav je p©edev¨¡m promˆnn $request, ve kter‚ se vytv ©¡ URL dotazu, kter˜ bude polo‘en serveru. Je zkombinov n z obsahu promˆnn˜ch prost©ed¡ (dle CGI specifikace) PATH_INFO a QUERY_STRING. Pokud byla p©i instalaci zapnuta volna decodequery, p©ev d¡ se obsah druh‚ z nich nav¡c do z kladn¡ho k¢du serveru.
Pot‚ n sleduje otev©en¡ soketu, kter˜ bude pou‘it pro komunikaci s WWW serverem. To se odehraje v ‡ sti, za‡¡naj¡c¡ © dkem
$ok=socket(...);Po jej¡m proveden¡ promˆnn $ok signalizuje £spˆ¨nost ‡i ne£spˆ¨nost cel‚ operace. Pokud nedopadlo dob©e, skon‡¡ skript zpr vou "Chyba v komunikaci" (tuto ‡ st najdete a‘ na konci podprogramu).
Jestli‘e s otev¡r n¡m nebyly pot¡‘e, p©epne skript v¨echny soubory do bin rn¡ho re‘imu (t¡m se snad odstran¡ probl‚my s konverzemi, kter‚ Perl prov d¡ v neunixov˜ch opera‡n¡ch syst‚mech) a polo‘¡ dotaz. Za n¡m n sleduje p©ed v n¡ hlavi‡ek v cyklu, zah jen‚m
foreach $key ( keys %ENV )Saczech se zde sna‘¡ do dotazu vlo‘it stejn‚ HTTP hlavi‡ky, jak‚ dostal od s m. Jestli‘e by SaCzech vyvol n HTTP metodou POST, n sleduje p©ed n¡ informac¡ o tˆle dotazu a vlastn¡ho tˆla. To je opˆt p©ek¢dov no do z kladn¡ho k¢du serveru (pokud byla p©i instalaci zapnuta volba decodequery).
T¡m je dotaz zad n a SaCzech za‡ne zpracov vat odpovˆƒ. Jej¡ zpracov n¡ je rozlo‘eno do dvou cykl– se shodnou podm¡nkou
while ( < FS > )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 %mime 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 ( m!^HTTP/\d\.\d\s+\d+\s+! )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 (je vyzna‡ena koment ©em HTTP/0.9)
$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!
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, vol se nav¡c podprogram EncodeLine.
Tato str nka je sou‡ st¡ on-line dokumentace programu SaCzech.Pavel Satrapa
29. kvˆtna 1996