Password prompts for MySQL adduser
[hcoop/domtool2.git] / src / msg.sml
index aa5cf35..53dfbfa 100644 (file)
@@ -61,6 +61,21 @@ fun recvList f bio =
        loop []
     end
 
+fun sendOption f (bio, opt) =
+    case opt of
+       NONE => OpenSSL.writeInt (bio, 0)
+      | SOME x => (OpenSSL.writeInt (bio, 1);
+                  f (bio, x))
+
+fun recvOption f bio =
+    case OpenSSL.readInt bio of
+       SOME 0 => SOME NONE
+      | SOME 1 =>
+       (case f bio of
+            SOME x => SOME (SOME x)
+          | NONE => NONE)
+      | _ => NONE
+
 fun send (bio, m) =
     case m of
        MsgOk => OpenSSL.writeInt (bio, 1)
@@ -93,8 +108,17 @@ fun send (bio, m) =
                                    sendList OpenSSL.writeString (bio, users))
       | MsgMultiConfig codes => (OpenSSL.writeInt (bio, 12);
                                 sendList OpenSSL.writeString (bio, codes))
-      | MsgRmdom dom => (OpenSSL.writeInt (bio, 13);
-                        OpenSSL.writeString (bio, dom))
+      | MsgRmdom doms => (OpenSSL.writeInt (bio, 13);
+                         sendList OpenSSL.writeString (bio, doms))
+      | MsgRegenerate => OpenSSL.writeInt (bio, 14)
+      | MsgRmuser dom => (OpenSSL.writeInt (bio, 15);
+                         OpenSSL.writeString (bio, dom))
+      | MsgCreateDbUser {dbtype, passwd} => (OpenSSL.writeInt (bio, 16);
+                                            OpenSSL.writeString (bio, dbtype);
+                                            sendOption OpenSSL.writeString (bio, passwd))
+      | MsgCreateDbTable {dbtype, dbname} => (OpenSSL.writeInt (bio, 17);
+                                             OpenSSL.writeString (bio, dbtype);
+                                             OpenSSL.writeString (bio, dbname))
 
 fun checkIt v =
     case v of
@@ -142,7 +166,17 @@ fun recv bio =
                           (recvList OpenSSL.readString bio)
                   | 12 => Option.map MsgMultiConfig
                           (recvList OpenSSL.readString bio)
-                  | 13 => Option.map MsgRmdom (OpenSSL.readString bio)
+                  | 13 => Option.map MsgRmdom (recvList OpenSSL.readString bio)
+                  | 14 => SOME MsgRegenerate
+                  | 15 => Option.map MsgRmuser (OpenSSL.readString bio)
+                  | 16 => (case (OpenSSL.readString bio, recvOption OpenSSL.readString bio) of
+                               (SOME dbtype, SOME passwd) =>
+                               SOME (MsgCreateDbUser {dbtype = dbtype, passwd = passwd})
+                             | _ => NONE)
+                  | 17 => (case (OpenSSL.readString bio, OpenSSL.readString bio) of
+                               (SOME dbtype, SOME dbname) =>
+                               SOME (MsgCreateDbTable {dbtype = dbtype, dbname = dbname})
+                             | _ => NONE)
                   | _ => NONE)
         
 end