Make httpd more correct.

This commit is contained in:
Brad Nelson
2022-08-28 20:07:23 -07:00
parent 3c2677c4fe
commit cdc3b03fe9

View File

@ -30,17 +30,6 @@ sockaddr httpd-port sockaddr client variable client-len
: client-emit ( ch -- ) >r rp@ 1 client-type rdrop ;
: 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 -- )
httpd-port ->port! ." Listening on port " httpd-port ->port@ . cr
AF_INET SOCK_STREAM 0 socket to sockfd
@ -67,12 +56,37 @@ variable goal variable goal#
repeat drop chunk 0
;
: body ( -- a n )
( TODO: Fix to handle body bigger than chunk size )
0 nl skipover
begin dup end< while
dup crnl= if 2 + chunk-filled over - swap chunk + swap exit then
nl skipover
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= ;
: method ( -- a n ) 0 bl eat rot drop ;