WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-api

[Xen-API] [PATCH] [http-svr] parse the content-type of the request and s

To: xen-api@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-API] [PATCH] [http-svr] parse the content-type of the request and store that information in the request structure
From: Thomas Gazagnaire <thomas.gazagnaire@xxxxxxxxxx>
Date: Fri, 8 Jan 2010 13:45:12 +0000
Delivery-date: Fri, 08 Jan 2010 05:45:13 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Thomas Gazagnaire <thomas.gazagnaire@xxxxxxxxxx>
[http-svr] parse the content-type of the request and store that information in 
the request structure

Signed-off-by: Thomas Gazagnaire <thomas.gazagnaire@xxxxxxxxxx>

diff -r e1c6ccfb5f5d http-svr/http.ml
--- a/http-svr/http.ml  Tue Jan 05 19:42:29 2010 +0000
+++ b/http-svr/http.ml  Wed Jan 06 10:25:28 2010 +0000
@@ -76,6 +76,8 @@
 
 let subtask_of_hdr = "Subtask-of"
 
+let content_type_hdr = "Content-Type"
+
 let user_agent_hdr = "User-Agent"
 
 let myprint fmt = debug fmt
@@ -114,7 +116,8 @@
                 auth: authorization option;
                 cookie: (string * string) list;
                 task: string option;
-     subtask_of: string option;
+                subtask_of: string option;
+                content_type: string option;
                 user_agent: string option;
                 close: bool ref;
                 headers: string list;}
@@ -128,7 +131,8 @@
                auth=None;
                cookie=[];
                task=None;
-    subtask_of=None;
+               subtask_of=None;
+               content_type = None;
                user_agent = None;
                close= ref true;
                headers=[];}
@@ -214,12 +218,12 @@
       let uri, query = parse_uri uri in
       { m = method_t_of_string m; uri = uri; query = query; 
        content_length = None; transfer_encoding = None;
-       version = version; cookie = []; auth = None; task = None; subtask_of = 
None; user_agent = None; close=ref false; headers=[] } 
+       version = version; cookie = []; auth = None; task = None; subtask_of = 
None; content_type = None; user_agent = None; close=ref false; headers=[] } 
   | _ -> raise Http_parse_failure
 
 let pretty_string_of_request x =
   let kvpairs x = String.concat "; " (List.map (fun (k, v) -> k ^ "=" ^ v) x) 
in
-  Printf.sprintf "{ method = %s; uri = %s; query = [ %s ]; content_length = [ 
%s ]; transfer encoding = %s; version = %s; cookie = [ %s ]; task = %s; 
subtask_of = [ %s]; user_agent = %s }" 
+  Printf.sprintf "{ method = %s; uri = %s; query = [ %s ]; content_length = [ 
%s ]; transfer encoding = %s; version = %s; cookie = [ %s ]; task = %s; 
subtask_of = %s; content-type = %s; user_agent = %s }" 
     (string_of_method_t x.m) x.uri 
     (kvpairs x.query)
     (default "" (may Int64.to_string x.content_length))
@@ -228,6 +232,7 @@
     (kvpairs x.cookie)
     (default "" x.task)
     (default "" x.subtask_of)
+    (default "" x.content_type)
     (default "" x.user_agent)
 
 let escape uri =
diff -r e1c6ccfb5f5d http-svr/http.mli
--- a/http-svr/http.mli Tue Jan 05 19:42:29 2010 +0000
+++ b/http-svr/http.mli Wed Jan 06 10:25:28 2010 +0000
@@ -25,19 +25,22 @@
     | UnknownAuth of string
 
 (** Parsed form of the HTTP request line plus cookie info *)
-type request = { m: method_t; 
-                uri: string; 
-                query: (string*string) list; 
-                version: string; 
-                transfer_encoding: string option;
-                content_length: int64 option;
-                auth: authorization option;
-                cookie: (string * string) list;
-                task: string option;
-     subtask_of: string option;
-                user_agent: string option;
-                close: bool ref;
-                 headers: string list;}
+type request = {
+       m: method_t; 
+       uri: string; 
+       query: (string*string) list; 
+       version: string; 
+       transfer_encoding: string option;
+       content_length: int64 option;
+       auth: authorization option;
+       cookie: (string * string) list;
+       task: string option;
+       subtask_of: string option;
+       content_type: string option;
+       user_agent: string option;
+       close: bool ref;
+    headers: string list;
+}
  
 val nullreq : request
 val authorization_of_string : string -> authorization
@@ -64,6 +67,8 @@
 (** Header used for User-Agent string *)
 val user_agent_hdr : string
 
+val content_type_hdr : string
+
 val output_http : Unix.file_descr -> string list -> unit
 
 val strip_cr : string -> string
diff -r e1c6ccfb5f5d http-svr/http_svr.ml
--- a/http-svr/http_svr.ml      Tue Jan 05 19:42:29 2010 +0000
+++ b/http-svr/http_svr.ml      Wed Jan 06 10:25:28 2010 +0000
@@ -170,6 +170,7 @@
     let auth = ref None in
     let task = ref None in
     let subtask_of = ref None in
+       let content_type = ref None in
     let user_agent = ref None in
     
     content_length := -1L;
@@ -199,6 +200,7 @@
        let auth_hdr = "authorization: " in
        let task_hdr = String.lowercase Http.task_id_hdr ^ ": " in
        let subtask_of_hdr = String.lowercase Http.subtask_of_hdr ^ ": " in
+       let content_type_hdr = String.lowercase Http.content_type_hdr ^ ": " in
        let user_agent_hdr = String.lowercase Http.user_agent_hdr ^ ": " in
        let r = Buf_io.input_line ~timeout:Buf_io.infinite_timeout ic in
        let r = strip_cr r in
@@ -218,6 +220,8 @@
        then task := Some (end_of_string r (String.length task_hdr));
        if String.startswith subtask_of_hdr lowercase_r
        then subtask_of := Some (end_of_string r (String.length 
subtask_of_hdr));
+       if String.startswith content_type_hdr lowercase_r
+       then content_type := Some (end_of_string r (String.length 
content_type_hdr));
        if String.startswith user_agent_hdr lowercase_r
        then user_agent := Some (end_of_string r (String.length 
user_agent_hdr));
        if String.startswith connection_hdr lowercase_r 
@@ -243,15 +247,17 @@
                    auth = !auth;
                    task = !task;
                    subtask_of = !subtask_of;
+                       content_type = !content_type;
                    user_agent = !user_agent;
                    headers = headers;
                } in
       let ty = Http.string_of_method_t req.m in
-      D.debug "HTTP %s %s %s%s%s%s"
+      D.debug "HTTP %s %s %s%s%s%s%s"
        ty req.uri 
        (Opt.default " " (Opt.map (fun x -> Printf.sprintf " (Content-length: 
%Ld)" x) req.content_length))
        (Opt.default " " (Opt.map (fun x -> Printf.sprintf " (Task: %s)" x) 
req.task))
        (Opt.default " " (Opt.map (fun x -> Printf.sprintf " (Subtask-of: %s)" 
x) req.subtask_of))
+       (Opt.default " " (Opt.map (fun x -> Printf.sprintf " (Content-Type: 
%s)" x) req.content_type))
        (Opt.default " " (Opt.map (fun x -> Printf.sprintf " (User-agent: %s)" 
x) req.user_agent));
       let table = handler_table req.m in
       (* Find a specific handler: the last one whose URI is a prefix of the 
received

Attachment: api-libs-http-svr-reads-the-content-type
Description: Text document

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-API] [PATCH] [http-svr] parse the content-type of the request and store that information in the request structure, Thomas Gazagnaire <=