smtplog
[hcoop/domtool2.git] / src / msg.sml
index 6fdda0a..cf7edbf 100644 (file)
@@ -76,6 +76,18 @@ fun recvOption f bio =
           | NONE => NONE)
       | _ => NONE
 
+fun sendBool (bio, b) =
+    if b then
+       OpenSSL.writeInt (bio, 1)
+    else
+       OpenSSL.writeInt (bio, 0)
+
+fun recvBool bio =
+    case OpenSSL.readInt bio of
+       SOME 0 => SOME false
+      | SOME 1 => SOME true
+      | _ => NONE
+
 fun send (bio, m) =
     case m of
        MsgOk => OpenSSL.writeInt (bio, 1)
@@ -139,7 +151,21 @@ fun send (bio, m) =
         OpenSSL.writeString (bio, domain))
       | MsgMailboxes users =>
        (OpenSSL.writeInt (bio, 22);
-        sendList OpenSSL.writeString (bio, users))
+        sendList (fn (bio, {user, mailbox}) =>
+                           (OpenSSL.writeString (bio, user);
+                            OpenSSL.writeString (bio, mailbox)))
+        (bio, users))
+      | MsgSaQuery addr => (OpenSSL.writeInt (bio, 23);
+                           OpenSSL.writeString (bio, addr))
+      | MsgSaStatus b => (OpenSSL.writeInt (bio, 24);
+                         sendBool (bio, b))
+      | MsgSaSet (addr, b) => (OpenSSL.writeInt (bio, 25);
+                              OpenSSL.writeString (bio, addr);
+                              sendBool (bio, b))
+      | MsgSmtpLogReq domain => (OpenSSL.writeInt (bio, 26);
+                                OpenSSL.writeString (bio, domain))
+      | MsgSmtpLogRes domain => (OpenSSL.writeInt (bio, 27);
+                                OpenSSL.writeString (bio, domain))
 
 fun checkIt v =
     case v of
@@ -215,7 +241,21 @@ fun recv bio =
                                SOME (MsgRmMailbox {domain = domain, user = user})
                              | _ => NONE)
                   | 21 => Option.map MsgListMailboxes (OpenSSL.readString bio)
-                  | 22 => Option.map MsgMailboxes (recvList OpenSSL.readString bio)
+                  | 22 => Option.map MsgMailboxes (recvList
+                                                       (fn bio =>
+                                                           case (OpenSSL.readString bio,
+                                                                 OpenSSL.readString bio) of
+                                                               (SOME user, SOME mailbox) =>
+                                                               SOME {user = user, mailbox = mailbox}
+                                                             | _ => NONE)
+                                                       bio)
+                  | 23 => Option.map MsgSaQuery (OpenSSL.readString bio)
+                  | 24 => Option.map MsgSaStatus (recvBool bio)
+                  | 25 => (case (OpenSSL.readString bio, recvBool bio) of
+                               (SOME user, SOME b) => SOME (MsgSaSet (user, b))
+                             | _ => NONE)
+                  | 26 => Option.map MsgSmtpLogReq (OpenSSL.readString bio)
+                  | 27 => Option.map MsgSmtpLogRes (OpenSSL.readString bio)
                   | _ => NONE)
         
 end