Web51 - http server |
Ponořme se nyní blíže do zdrojových textů http serveru, uvedených v souboru http.a51 a osvětleme si jak zpracování http požadavku funguje.Nejprve je v požadavek od klienta, pomocí stavového automatu řízeného tabulkou state80table, prohledáván na výskyt textu "GET ". Po jeho nalezení přejde automat do stavu port80s0, kdy do proměnné fileID počítá sumu ze jména stránky požadované klientem. V souladu s popisem souborového systému, jsou při výpočtu sumy brány v úvahu tři řídicí znaky. Prvním řídicím znakem je znak "/", nulující sumu (souborový systém ignoruje adresáře, sumu počítá pouze ze jména souboru). Druhý a třetí řídicí znak " " a "?" ukončují prohledávání požadavku a předávají nalezenou sumu proceduře exeurl. Ta na základě získané sumy prohledá souborový systém.
Je-li nalezen soubor s odpovídajícím hashem je podle typu souboru v adresářové položce odeslána na výstup příslušná identifikační http hlavička a přepnut mód činnosti cgi/binary. Po odeslání hlavičky je v případě binárního módu vyslán klientovi pomocí httpchar/sendchar celý příslušející soubor.
Troch jinak je tomu v cgi módu. Vstupující soubor je prohledíván na výskyt znaku "'". Po jeho nalezení je aktivován další stavový automat, řízený tabulkou http80table. Ten zkontroluje znak za tímto startujícím znakem zda to není dvojznak "''", reprezentovaný výstupním "'". Druhým kontrolovaným znakem je "?" řídicí prostřednictvím flagIFcgi zpracování sekvence "text1{text2}" Automat se snaží najít opět jméno souboru, tj. počítá sumu za znaků čtených z html souboru. Jméno souboru musí mít koncovku ".cgi". Za touto koncovkou se hledá ukončující znak "'" nebo znak "?" následovaný jedním bytem parametru předávaným přes proměnnou state80. Podle spočítaného hashe je v souborovém systému vyhledán příslušný CGI soubor a je předáno jeho zpracování p-code interpretru.
execgi: lcall searchfile ;r4 file type ;dptr file start ;r2r3 file end jc cginotfound mov workreg,dph mov workreg+1,dpl lcall pcode ;start p-code interpreter .pcode pcall @workreg .byte 0 ;stop p-code interpreter cginotfound: ;end of exe cgi retUkažme nyní zpracování CGI souboru testP3 na jednoduchém příkladu (z příkladu LED1)
;testP3.cgi .pcode testP3 .pcode pret ; testP3: mov a,P3 clr Zflag anl a,state80 jnz retP3 setb Zflag retP3: retRozviňme volání CGI procedury testP3 do ekvivalentu v assembleru, tak jak je rozvine interpretr p-code.
;; lcall pcode ;;start p-code interpreter ;; .pcode pcall @workreg ;;call @workreg mov R6,#high workreg mov R7,#low workreg ;;IND1 mov a,R7 mov R0,a mov a,@R0 mov R6,a inc R0 mov a,@R0 mov R7,a "push pcall" ret ;jmp pcall ;;pcall "push pcodepointer" mov DPH,R6 ;new Pcode pointer mov DPL,R7 ......V dptr je nyní nový ukazatel, ukazující na testP3.cgi (dptr = workreg = searchfile("testP3.cgi")). Interpreter p-code nyní načte další příkaz.
;; lcall pcode ;; .pcode testP3 "push testP3" ret ;jmp testP3 testP3: mov a,P3 clr Zflag anl a,state80 jnz retP3 setb Zflag retP3: ret ;ret to p-code interpreter ;; lcall pcode ;start p-code interpreter ;; .pcode pret "push pret" ret ;jmp pret ;;pret "pop pcodepointer" ;; lcall pcode ;; .byte 0 ;stop p-code interpreter ret ;return to asm cginotfound:Zdrojové texty http serveru jsou v souboru http.a51. Příklad html stránek a použití CGI skriptů jsou uvedeny ve vzorových projektech.
POPIS Web51 | NOVINKY | FAQ | OBJEDNÁVKA | DOWNLOAD |
(c)Copyright 2000, 2001, HW server & Radek Benedikt
Web51@HW.cz, Web51.HW.cz Final applications of the Web51 : www.HWgroup.cz |