open Http_common;;
open Http_daemon;;
+open Printf;;
exception Invalid_status_line of string
exception Header_not_found of string
(* "version code reason_phrase" *)
let status_line_re = Pcre.regexp "^(HTTP/\d\.\d) (\d{3}) (.*)$" in
object (self)
- val mutable version = Http_common.http_version
+ val mutable version = http_version
val mutable code = default_code
val mutable reason: string option = None
val contentsBuf = Buffer.create 1024
method setStatusLine s =
try
let subs = Pcre.extract ~rex:status_line_re s in
- self#setVersion (Http_common.version_of_string subs.(1));
+ self#setVersion (version_of_string subs.(1));
self#setCode (int_of_string subs.(2));
self#setReason subs.(3)
with Not_found ->
(* FIXME duplication of code between this and send_basic_headers *)
method addBasicHeaders =
self#addHeader ~name:"Date" ~value:(Http_misc.date_822 ());
- self#addHeader ~name:"Server" ~value:(Http_common.server_string)
+ self#addHeader ~name:"Server" ~value:server_string
method replaceHeader ~name ~value = Hashtbl.replace headers name value
method removeHeader ~name = hashtbl_remove_all headers name
method hasHeader ~name = Hashtbl.mem headers name
method server = self#header "Server"
method setServer s = self#replaceHeader "Server" s
+ method toString =
+ sprintf
+ "%s%s%s%s%s"
+ self#statusLine (* status line *)
+ crlf
+ (String.concat (* headers, crlf terminated *)
+ ""
+ (List.map (fun (h,v) -> h ^ ": " ^ v ^ crlf) self#headers))
+ crlf
+ (Buffer.contents contentsBuf) (* body *)
method serialize outchan =
+ output_string outchan self#toString;
+ flush outchan
+(*
+ (* OLD VERSION *)
output_string outchan self#statusLine;
send_CRLF outchan;
send_headers self#headers outchan;
send_CRLF outchan;
Buffer.output_buffer outchan contentsBuf;
flush outchan
+*)
end