+fun sendSockPerm (bio, p) =
+ case p of
+ Any => OpenSSL.writeInt (bio, 0)
+ | Client => OpenSSL.writeInt (bio, 1)
+ | Server => OpenSSL.writeInt (bio, 2)
+ | Nada => OpenSSL.writeInt (bio, 3)
+
+fun recvSockPerm bio =
+ case OpenSSL.readInt bio of
+ SOME 0 => SOME Any
+ | SOME 1 => SOME Client
+ | SOME 2 => SOME Server
+ | SOME 3 => SOME Nada
+ | _ => NONE
+
+fun sendQuery (bio, q) =
+ case q of
+ QApt s => (OpenSSL.writeInt (bio, 0);
+ OpenSSL.writeString (bio, s))
+ | QCron s => (OpenSSL.writeInt (bio, 1);
+ OpenSSL.writeString (bio, s))
+ | QFtp s => (OpenSSL.writeInt (bio, 2);
+ OpenSSL.writeString (bio, s))
+ | QTrustedPath s => (OpenSSL.writeInt (bio, 3);
+ OpenSSL.writeString (bio, s))
+ | QSocket s => (OpenSSL.writeInt (bio, 4);
+ OpenSSL.writeString (bio, s))
+ | QFirewall s => (OpenSSL.writeInt (bio, 5);
+ OpenSSL.writeString (bio, s))
+
+fun recvQuery bio =
+ case OpenSSL.readInt bio of
+ SOME n =>
+ (case n of
+ 0 => Option.map QApt (OpenSSL.readString bio)
+ | 1 => Option.map QCron (OpenSSL.readString bio)
+ | 2 => Option.map QFtp (OpenSSL.readString bio)
+ | 3 => Option.map QTrustedPath (OpenSSL.readString bio)
+ | 4 => Option.map QSocket (OpenSSL.readString bio)
+ | 5 => Option.map QFirewall (OpenSSL.readString bio)
+ | _ => NONE)
+ | NONE => NONE
+