X-Git-Url: http://git.onelab.eu/?p=vsys.git;a=blobdiff_plain;f=frontend.ml;h=cf53b9b713737cba57ec5453448133d06c526b88;hp=9341633ff2ee67529cc037beb2a5041263b122a0;hb=c83cc6c663566b82531b670f8b492c6ff1e1f18f;hpb=7ad0cf224f27f797262e2cae6e5eba7e9212acee diff --git a/frontend.ml b/frontend.ml index 9341633..cf53b9b 100644 --- a/frontend.ml +++ b/frontend.ml @@ -4,6 +4,7 @@ open Printf open Unix open Globals open Directfifowatcher +open Unixsocketwatcher (** frontendhandler class: Methods to create and unlink pipes and directories @param root_dir vsys directory inside a slice @@ -12,9 +13,16 @@ class frontendHandler (root_dir,slice_name) = object(this) (** regex indicating that the script passes fds around *) - val fd_regex = Str.regexp "^fd_" + val fd_regex = Str.regexp "fd_" + + method is_fd_passer fname = + try let _ = Str.search_forward fd_regex fname 0 + in + true + with + | Not_found -> false + | _ -> false - method is_fd_passer fname = Str.string_match fd_regex fname 0 method get_slice_name () = slice_name (** A new script was copied into the backend, make a corresponding entry in the frontend. @@ -25,24 +33,25 @@ object(this) let realperm = perm land (lnot 0o111) in match rp with Relpath(rel) -> let fqp = String.concat "/" [root_dir;rel] in - let res = Directfifowatcher.mkentry fqp abspath realperm slice_name in - begin - match res with - | Success -> - Directfifowatcher.openentry root_dir fqp (abspath,slice_name) - | _ -> - logprint "Could not create entry %s" abspath - end; - if (is_fd_passer rel) then + if (this#is_fd_passer rel) then let res = Unixsocketwatcher.mkentry fqp abspath realperm slice_name in begin match res with | Success -> - Unixsocketwatcher.openentry root_dir fqp (abspath, slice_name) + () | _ -> logprint "Could not create entry %s" abspath end - + else + let res = Directfifowatcher.mkentry fqp abspath realperm slice_name in + begin + match res with + | Success -> + Directfifowatcher.openentry root_dir fqp (abspath,slice_name) + | _ -> + logprint "Could not create entry %s" abspath + end + @@ -75,12 +84,25 @@ object(this) let fqp = String.concat "/" [root_dir;rel] in let fqp_in = String.concat "." [fqp;"in"] in let fqp_out = String.concat "." [fqp;"out"] in - Directfifowatcher.closeentry fqp; - try - Unix.unlink fqp_in; - Unix.unlink fqp_out - with _ -> - logprint "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ()) + let fqp_control = String.concat "." [fqp;"out"] in + + if (this#is_fd_passer rel) then + begin + Unixsocketwatcher.closeentry fqp; + try + Unix.unlink fqp_control + with _ -> + logprint "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ()) + end + else + begin + Directfifowatcher.closeentry fqp; + try + Unix.unlink fqp_in; + Unix.unlink fqp_out + with _ -> + logprint "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ()) + end method rmdir rp = match rp with Relpath(rel) ->