Roxen.git/
server/
protocols/
http.pike
Branch:
Tag:
Non-build tags
All tags
No tags
1997-08-14
1997-08-14 17:22:47 by Marcus Comstedt <marcus@mc.pp.se>
57d41d2ea98dd858d25893b078c146f19cc8ec17 (
54
lines) (+
14
/-
40
)
[
Show
|
Annotate
]
Branch:
5.2
Fixed multipart/form-data handling.
Rev: server/protocols/http.pike:1.36
1:
// This is a roxen module. (c) Informationsvävarna AB 1996.
-
string cvs_version = "$Id: http.pike,v 1.
35
1997/08/
13
10
:
24
:
15
grubba
Exp $";
+
string cvs_version = "$Id: http.pike,v 1.
36
1997/08/
14
17
:
22
:
47
marcus
Exp $";
// HTTP protocol module. #include <config.h> private inherit "roxenlib";
383:
break; case "multipart/form-data":
-
string boundary;
+
// perror("Multipart/form-data post detected\n");
-
sscanf(misc["content-type"],
"%*sboundary
=
%s",boundary);
-
foreach
(
(
data
/("--"+boundary))-({"--"
,
""}),
contents
)
-
{
-
string pre, metainfo,post
;
-
if
(
sscanf(contents,
-
"%[\r\n]%*[Cc]ontent
-
%*[dD]isposition:%[^\r\n]%[\r\n]%s"
,
-
pre,metainfo,post,contents
)
>4)
-
{
-
mapping info=([]);
-
if(
!strlen(contents))
-
continue;
-
while(contents[
-
1]=='
-
'
)
-
contents=contents[..strlen(contents)-2];
-
if(contents
[-
1]=='\r')contents=contents[..strlen(contents)
-
2
]
;
-
if(contents[-1]
=
='\n')contents=contents[..strlen(contents)
-
2];
-
if
(
contents[-1]=='\r'
)
contents=contents[..strlen(contents)-2]
;
-
foreach(metainfo/";", v)
-
{
-
sscanf(v, "%*
[
\t]%s", v); v=reverse(v);
-
sscanf(v, "%*[ \t]%s", v); v=reverse(v);
-
if(lower_case(v)!="form
-
data")
-
{
-
string var, value;
-
if(sscanf(v, "%s=\"%s\"", var, value))
-
info[lower
_
case(var)]=value;
-
}
-
}
-
if(info
->filename
)
-
{
-
variables[info->name
]=
contents;
-
variables[info
->
name+".filename"]=info
->filename;
+
object
messg
=
MIME.Message
(data,
misc
);
+
foreach
(
messg
-
>body_parts
,
object
part
) {
+
if(
part
-
>disp_params
-
>filename
)
{
+
variables
[
part
-
>disp_params
-
>name
]=
part
-
>getdata
();
+
variables
[
part
-
>disp
_
params
->
name+".
filename
"
]=
+
part
->
disp_params
->filename;
if(!misc->files)
-
misc->files = ({
info
->name });
+
misc->files = ({
part
->
disp_params->
name });
else
-
misc->files += ({
info
->name });
+
misc->files += ({
part
->
disp_params->
name });
} else {
-
variables[
info
->name]=
contents
;
+
variables[
part
->
disp_params->
name]=
part->getdata()
;
} }
-
}
+
break; } }