Skip to content
Snippets Groups Projects
Commit 3a37b0e5 authored by Marcus Comstedt's avatar Marcus Comstedt
Browse files

Put header parsing in a separate function.

Rev: src/modules/MIME/module.pmod.in:1.6
parent fb5aad80
No related branches found
No related tags found
No related merge requests found
/* /*
* $Id: module.pmod.in,v 1.5 1997/08/14 17:18:00 marcus Exp $ * $Id: module.pmod.in,v 1.6 1997/08/23 23:04:03 marcus Exp $
* *
* RFC1521 functionality for Pike * RFC1521 functionality for Pike
* *
...@@ -110,6 +110,31 @@ class support { ...@@ -110,6 +110,31 @@ class support {
return 0; return 0;
} }
array(mapping(string:string)|string) parse_headers(string message)
{
mapping(string:string) headers = ([ ]);
string head, body, header, hname, hcontents;
int mesgsep;
int mesgsep1 = search(message, "\r\n\r\n");
int mesgsep2 = search(message, "\n\n");
mesgsep = (mesgsep1<0? mesgsep2 :
(mesgsep2<0? mesgsep1 :
(mesgsep1<mesgsep2? mesgsep1 : mesgsep2)));
if (mesgsep<0) {
head = message;
body = "";
} else {
head = (mesgsep>0? message[..mesgsep-1]:"");
body = message[mesgsep+(message[mesgsep]=='\r'? 4:2)..];
}
foreach( replace(head, ({"\r", "\n ", "\n\t"}),
({"", " ", " "}))/"\n", header ) {
if(4==sscanf(header, "%[!-9;-~]%*[ \t]:%*[ \t]%s", hname, hcontents))
headers[lower_case(hname)] = hcontents;
}
return ({ headers, body });
}
}; };
inherit support; inherit support;
...@@ -292,28 +317,9 @@ class Message { ...@@ -292,28 +317,9 @@ class Message {
headers[lower_case(hname)] = hdrs[hname]; headers[lower_case(hname)] = hdrs[hname];
body_parts = parts; body_parts = parts;
} else if (message) { } else if (message) {
string head, body, header, hname, hcontents; array(mapping(string:string)|string) h = parse_headers(message);
int mesgsep; headers = h[0];
{ encoded_data = h[1];
int mesgsep1 = search(message, "\r\n\r\n");
int mesgsep2 = search(message, "\n\n");
mesgsep = (mesgsep1<0? mesgsep2 :
(mesgsep2<0? mesgsep1 :
(mesgsep1<mesgsep2? mesgsep1 : mesgsep2)));
}
if (mesgsep<0) {
head = message;
body = "";
} else {
head = (mesgsep>0? message[..mesgsep-1]:"");
body = message[mesgsep+(message[mesgsep]=='\r'? 4:2)..];
}
foreach( replace(head, ({"\r", "\n ", "\n\t"}),
({"", " ", " "}))/"\n", header ) {
if(4==sscanf(header, "%[!-9;-~]%*[ \t]:%*[ \t]%s", hname, hcontents))
headers[lower_case(hname)] = hcontents;
}
encoded_data = body;
} }
if (headers["content-type"]) { if (headers["content-type"]) {
array(array(string|int)) arr = array(array(string|int)) arr =
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment