Make httpd more correct.
This commit is contained in:
@ -30,17 +30,6 @@ sockaddr httpd-port sockaddr client variable client-len
|
|||||||
: client-emit ( ch -- ) >r rp@ 1 client-type rdrop ;
|
: client-emit ( ch -- ) >r rp@ 1 client-type rdrop ;
|
||||||
: client-cr 13 client-emit nl client-emit ;
|
: client-cr 13 client-emit nl client-emit ;
|
||||||
|
|
||||||
: handleClient
|
|
||||||
clientfd close-file drop
|
|
||||||
-1 to clientfd
|
|
||||||
sockfd client client-len sockaccept
|
|
||||||
dup 0< if drop 0 exit then
|
|
||||||
to clientfd
|
|
||||||
chunk chunk-size erase
|
|
||||||
chunk chunk-size clientfd read-file throw to chunk-filled
|
|
||||||
-1
|
|
||||||
;
|
|
||||||
|
|
||||||
: server ( port -- )
|
: server ( port -- )
|
||||||
httpd-port ->port! ." Listening on port " httpd-port ->port@ . cr
|
httpd-port ->port! ." Listening on port " httpd-port ->port@ . cr
|
||||||
AF_INET SOCK_STREAM 0 socket to sockfd
|
AF_INET SOCK_STREAM 0 socket to sockfd
|
||||||
@ -67,12 +56,37 @@ variable goal variable goal#
|
|||||||
repeat drop chunk 0
|
repeat drop chunk 0
|
||||||
;
|
;
|
||||||
: body ( -- a n )
|
: body ( -- a n )
|
||||||
|
( TODO: Fix to handle body bigger than chunk size )
|
||||||
0 nl skipover
|
0 nl skipover
|
||||||
begin dup end< while
|
begin dup end< while
|
||||||
dup crnl= if 2 + chunk-filled over - swap chunk + swap exit then
|
dup crnl= if 2 + chunk-filled over - swap chunk + swap exit then
|
||||||
nl skipover
|
nl skipover
|
||||||
repeat drop chunk 0
|
repeat drop chunk 0
|
||||||
;
|
;
|
||||||
|
: completed? ( -- f )
|
||||||
|
0 begin dup end< while
|
||||||
|
dup crnl= if drop -1 exit then
|
||||||
|
nl skipover
|
||||||
|
repeat drop 0
|
||||||
|
;
|
||||||
|
: read-headers
|
||||||
|
0 to chunk-filled
|
||||||
|
begin completed? 0= while
|
||||||
|
chunk chunk-filled + chunk-size chunk-filled -
|
||||||
|
clientfd read-file throw +to chunk-filled
|
||||||
|
repeat
|
||||||
|
;
|
||||||
|
|
||||||
|
: handleClient
|
||||||
|
clientfd close-file drop
|
||||||
|
-1 to clientfd
|
||||||
|
sockfd client client-len sockaccept
|
||||||
|
dup 0< if drop 0 exit then
|
||||||
|
to clientfd
|
||||||
|
chunk chunk-size erase
|
||||||
|
read-headers
|
||||||
|
-1
|
||||||
|
;
|
||||||
|
|
||||||
: hasHeader ( a n -- f ) 2drop header 0 0 str= 0= ;
|
: hasHeader ( a n -- f ) 2drop header 0 0 str= 0= ;
|
||||||
: method ( -- a n ) 0 bl eat rot drop ;
|
: method ( -- a n ) 0 bl eat rot drop ;
|
||||||
|
|||||||
Reference in New Issue
Block a user