Web51 - http server

Web 51 - WEB51 TCP sockets  software.html  Web 51 - Souborovy system
Základní charakteristiky jednoduchého www serveru, obsaženého ve vzorových příkladech :

Možnosti vložení CGI skriptů do html kódu stránky

Popis implementace

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
	ret

Ukaž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:  ret

Rozviň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.





Sponzored by LPhard Ltd. Graphics by GIMP Created by EasyPad

(c)Copyright 2000, 2001, HW server & Radek Benedikt
Web51@HW.cz, Web51.HW.cz

Final applications of the Web51 : www.HWgroup.cz
Web 51 - WEB51 TCP sockets  Obsah  Web 51 - Souborovy system