make mime parsing return a single hashtable instead of several different ones

db4
Doug Coleman 2009-01-26 15:23:49 -06:00
parent 6f12877418
commit 43830f5fcc
3 changed files with 12 additions and 14 deletions

View File

@ -42,7 +42,7 @@ ERROR: no-boundary ;
";" split1 nip
"=" split1 nip [ no-boundary ] unless* ;
: read-multipart-data ( request -- form-variables uploaded-files )
: read-multipart-data ( request -- mime-parts )
[ "content-type" header ]
[ "content-length" header string>number ] bi
unlimit-input
@ -55,7 +55,7 @@ ERROR: no-boundary ;
: parse-content ( request content-type -- post-data )
[ <post-data> swap ] keep {
{ "multipart/form-data" [ read-multipart-data assoc-union >>params ] }
{ "multipart/form-data" [ read-multipart-data >>params ] }
{ "application/x-www-form-urlencoded" [ read-content query>assoc >>params ] }
[ drop read-content >>data ]
} case ;

View File

@ -20,11 +20,11 @@ IN: mime.multipart.tests
[ t ] [
mime-test-stream [ upload-separator parse-multipart ] with-input-stream
nip "\"up.txt\"" swap key?
"\"up.txt\"" swap key?
] unit-test
[ t ] [
mime-test-stream [ upload-separator parse-multipart ] with-input-stream
drop "\"text1\"" swap key?
"\"text1\"" swap key?
] unit-test

View File

@ -16,8 +16,7 @@ header
content-disposition bytes
filename temp-file
name name-content
uploaded-files
form-variables ;
mime-parts ;
TUPLE: mime-file headers filename temporary-path ;
TUPLE: mime-variable headers key value ;
@ -25,8 +24,7 @@ TUPLE: mime-variable headers key value ;
: <multipart> ( mime-separator -- multipart )
multipart new
swap >>mime-separator
H{ } clone >>uploaded-files
H{ } clone >>form-variables ;
H{ } clone >>mime-parts ;
ERROR: bad-header bytes ;
@ -87,16 +85,16 @@ ERROR: end-of-stream multipart ;
] [
[ [ header>> ] [ filename>> ] [ temp-file>> ] tri mime-file boa ]
[ filename>> ]
[ uploaded-files>> set-at ] tri
[ mime-parts>> set-at ] tri
] if ;
: save-form-variable ( multipart -- )
: save-mime-part ( multipart -- )
dup name>> empty-name? [
drop
] [
[ [ header>> ] [ name>> ] [ name-content>> ] tri mime-variable boa ]
[ name>> ]
[ form-variables>> set-at ] tri
[ mime-parts>> set-at ] tri
] if ;
: dump-mime-file ( multipart filename -- multipart )
@ -124,7 +122,7 @@ ERROR: unknown-content-disposition multipart ;
] [
"name" lookup-disposition [
[ dup mime-separator>> dump-string >>name-content ] dip
>>name dup save-form-variable
>>name dup save-mime-part
] [
unknown-content-disposition
] if*
@ -157,6 +155,6 @@ ERROR: no-content-disposition multipart ;
read-header
dup end-of-stream?>> [ process-header parse-multipart-loop ] unless ;
: parse-multipart ( separator -- form-variables uploaded-files )
: parse-multipart ( separator -- mime-parts )
<multipart> parse-beginning parse-multipart-loop
[ form-variables>> ] [ uploaded-files>> ] bi ;
mime-parts>> ;