diff --git a/src/modules/MIME/module.pmod.in b/src/modules/MIME/module.pmod.in index 4d3a0b84d493c55e455af364424b30cb25b64cdb..51d8001543d0dca4f49a67df446bcdf9f827eeca 100644 --- a/src/modules/MIME/module.pmod.in +++ b/src/modules/MIME/module.pmod.in @@ -1,5 +1,5 @@ /* - * $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 * @@ -110,6 +110,31 @@ class support { 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; @@ -292,28 +317,9 @@ class Message { headers[lower_case(hname)] = hdrs[hname]; body_parts = parts; } else if (message) { - 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; - } - encoded_data = body; + array(mapping(string:string)|string) h = parse_headers(message); + headers = h[0]; + encoded_data = h[1]; } if (headers["content-type"]) { array(array(string|int)) arr =