Ran successful client/server interaction on deleuze
[hcoop/domtool2.git] / src / main.sml
index 734b10a..9f01855 100644 (file)
@@ -53,7 +53,7 @@ fun basis () =
                    loop files
 
        val files = loop []
-       val files = Order.order files
+       val (_, files) = Order.order files
     in
        if !ErrorMsg.anyErrors then
            Env.empty
@@ -63,6 +63,12 @@ fun basis () =
 
 fun check fname =
     let
+       val uid = Posix.ProcEnv.getuid ()
+       val user = Posix.SysDB.Passwd.name (Posix.SysDB.getpwuid uid)
+
+       val () = Acl.read Config.aclFile
+       val () = Domain.setUser user
+
        val _ = ErrorMsg.reset ()
        val _ = Env.preTycheck ()
 
@@ -133,13 +139,11 @@ fun hostname () =
 
 fun request fname =
     let
+       val _ = check fname
+
        val uid = Posix.ProcEnv.getuid ()
        val user = Posix.SysDB.Passwd.name (Posix.SysDB.getpwuid uid)
 
-       val () = Acl.read Config.aclFile
-       val () = Domain.setUser user
-       val _ = check fname
-
        val context = OpenSSL.context (Config.certDir ^ "/" ^ user ^ ".pem",
                                       Config.keyDir ^ "/" ^ user ^ ".pem",
                                       Config.trustStore)
@@ -234,6 +238,7 @@ fun service () =
                    cmdLoop ()
                end
     in
+       print "Listening for connections....\n";
        loop ();
        OpenSSL.shutdown sock
     end
@@ -277,10 +282,35 @@ fun slave () =
                            OpenSSL.close bio;
                            loop ()
                        end
-               end
+               end handle OpenSSL.OpenSSL s =>
+                          (print ("OpenSSL error: "^ s ^ "\n");
+                           OpenSSL.close bio
+                                         handle OpenSSL.OpenSSL _ => ();
+                           loop ())
     in
        loop ();
        OpenSSL.shutdown sock
     end
 
+fun autodocBasis outdir =
+    let
+       val dir = Posix.FileSys.opendir Config.libRoot
+
+       fun loop files =
+           case Posix.FileSys.readdir dir of
+               NONE => (Posix.FileSys.closedir dir;
+                        files)
+             | SOME fname =>
+               if String.isSuffix ".dtl" fname then
+                   loop (OS.Path.joinDirFile {dir = Config.libRoot,
+                                              file = fname}
+                         :: files)
+               else
+                   loop files
+
+       val files = loop []
+    in
+       Autodoc.autodoc {outdir = outdir, infiles = files}
+    end
+
 end