]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/ocaml-http/http_types.ml
ocaml 3.09 transition
[helm.git] / helm / DEVEL / ocaml-http / http_types.ml
index 18e2a88ab43851a5be00efc900afbdcc4d7dbd4c..5c88b212ed010990015a936355824685f6d737d8 100644 (file)
@@ -2,30 +2,27 @@
 (*
   OCaml HTTP - do it yourself (fully OCaml) HTTP daemon
 
-  Copyright (C) <2002> Stefano Zacchiroli <zack@cs.unibo.it>
+  Copyright (C) <2002-2005> Stefano Zacchiroli <zack@cs.unibo.it>
 
   This program is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
+  it under the terms of the GNU Library General Public License as
+  published by the Free Software Foundation, version 2.
 
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
+  GNU Library General Public License for more details.
 
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  You should have received a copy of the GNU Library General Public
+  License along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
+  USA
 *)
 
-type version =
-  [ `HTTP_1_0
-  | `HTTP_1_1
-  ]
-
-type meth = [ `GET ]
+(** Type definitions *)
 
+type version = [ `HTTP_1_0 | `HTTP_1_1 ]
+type meth = [ `GET | `POST ]
 type daemon_mode = [ `Single | `Fork | `Thread ]
 
 type tcp_server =
@@ -33,11 +30,14 @@ type tcp_server =
   (in_channel -> out_channel -> unit) ->
     unit
 
+type auth_info =
+  [ `Basic of string * string (* username, password *)
+  ]
+
 type informational_substatus =
   [ `Continue
   | `Switching_protocols
   ]
-
 type success_substatus =
   [ `OK
   | `Created
@@ -47,7 +47,6 @@ type success_substatus =
   | `Reset_content
   | `Partial_content
   ]
-
 type redirection_substatus =
   [ `Multiple_choices
   | `Moved_permanently
@@ -57,7 +56,6 @@ type redirection_substatus =
   | `Use_proxy
   | `Temporary_redirect
   ]
-
 type client_error_substatus =
   [ `Bad_request
   | `Unauthorized
@@ -78,7 +76,6 @@ type client_error_substatus =
   | `Requested_range_not_satisfiable
   | `Expectation_failed
   ]
-
 type server_error_substatus =
   [ `Internal_server_error
   | `Not_implemented
@@ -87,18 +84,15 @@ type server_error_substatus =
   | `Gateway_time_out
   | `HTTP_version_not_supported
   ]
-
 type informational_status = [ `Informational of informational_substatus ]
 type success_status = [ `Success of success_substatus ]
 type redirection_status = [ `Redirection of redirection_substatus ]
 type client_error_status = [ `Client_error of client_error_substatus ]
 type server_error_status = [ `Server_error of server_error_substatus ]
-
 type error_status =
   [ client_error_status
   | server_error_status
   ]
-
 type status =
   [ informational_status
   | success_status
@@ -107,10 +101,72 @@ type status =
   | server_error_status
   ]
 
-class type response =
-  object
-    method version: version
+type status_code = [ `Code of int | `Status of status ]
+
+type file_source =
+  | FileSrc of string
+  | InChanSrc of in_channel
+
+exception Invalid_header of string
+exception Invalid_header_name of string
+exception Invalid_header_value of string
+exception Invalid_HTTP_version of string
+exception Invalid_HTTP_method of string
+exception Invalid_code of int
+exception Malformed_URL of string
+exception Malformed_query of string
+exception Malformed_query_part of string * string
+exception Malformed_request_URI of string
+exception Malformed_request of string
+exception Malformed_response of string
+exception Param_not_found of string
+exception Invalid_status_line of string
+exception Header_not_found of string
+exception Quit
+exception Unauthorized of string
+
+class type message = object
+    method version: version option
     method setVersion: version -> unit
+    method body: string
+    method setBody: string -> unit
+    method bodyBuf: Buffer.t
+    method setBodyBuf: Buffer.t -> unit
+    method addBody: string -> unit
+    method addBodyBuf: Buffer.t -> unit
+    method addHeader: name:string -> value:string -> unit
+    method addHeaders: (string * string) list -> unit
+    method replaceHeader: name:string -> value:string -> unit
+    method replaceHeaders: (string * string) list -> unit
+    method removeHeader: name:string -> unit
+    method hasHeader: name:string -> bool
+    method header: name:string -> string
+    method headers: (string * string) list
+    method clientSockaddr: Unix.sockaddr
+    method clientAddr: string
+    method clientPort: int
+    method serverSockaddr: Unix.sockaddr
+    method serverAddr: string
+    method serverPort: int
+    method toString: string
+    method serialize: out_channel -> unit
+  end
+
+class type request = object
+    inherit message
+    method meth: meth
+    method uri: string
+    method path: string
+    method param: ?meth:meth -> ?default:string -> string -> string
+    method paramAll: ?meth:meth -> string -> string list
+    method params: (string * string) list
+    method params_GET: (string * string) list
+    method params_POST: (string * string) list
+    method authorization: auth_info option
+  end
+
+class type response = object
+    inherit message
     method code: int
     method setCode: int -> unit
     method status: status
@@ -125,19 +181,7 @@ class type response =
     method isClientError: bool
     method isServerError: bool
     method isError: bool
-    method contents: string
-    method setContents: string -> unit
-    method contentsBuf: Buffer.t
-    method setContentsBuf: Buffer.t -> unit
-    method addContents: string -> unit
-    method addContentsBuf: Buffer.t -> unit
-    method addHeader: name:string -> value:string -> unit
     method addBasicHeaders: unit
-    method replaceHeader: name:string -> value:string -> unit
-    method removeHeader: name:string -> unit
-    method hasHeader: name:string -> bool
-    method header: name:string -> string
-    method headers: (string * string) list
     method contentType: string
     method setContentType: string -> unit
     method contentEncoding: string
@@ -148,14 +192,28 @@ class type response =
     method setExpires: string -> unit
     method server: string
     method setServer: string -> unit
-    method toString: string
-    method serialize: out_channel -> unit
   end
-class type request =
+
+class type connection =
   object
-    method uri: string
-    method path: string
-    method param: string -> string
-    method param_all: string -> string list
-    method params: (string * string) list
+    method getRequest: request option
+    method respond_with: response -> unit
+    method close: unit
+  end
+class type daemon =
+  object
+    method accept: connection
+    method getRequest: request * connection
   end
+
+type daemon_spec = {
+  address: string;
+  auth: (string * auth_info) option;
+  callback: request -> out_channel -> unit;
+  mode: daemon_mode;
+  port: int;
+  root_dir: string option;
+  exn_handler: (exn -> out_channel -> unit) option;
+  timeout: int option;
+}
+