src/Pure/System/system_channel.scala
changeset 69572 09a6a7c04b45
parent 69463 6439c9024dcc
child 73340 0ffcad1f6130
--- a/src/Pure/System/system_channel.scala	Wed Jan 02 12:50:32 2019 +0100
+++ b/src/Pure/System/system_channel.scala	Wed Jan 02 20:20:01 2019 +0100
@@ -20,14 +20,27 @@
 {
   private val server = new ServerSocket(0, 50, Server.localhost)
 
-  val server_name: String = Server.print_address(server.getLocalPort)
-  override def toString: String = server_name
+  val address: String = Server.print_address(server.getLocalPort)
+  val password: String = UUID.random().toString
+
+  override def toString: String = address
+
+  def shutdown() { server.close }
 
   def rendezvous(): (OutputStream, InputStream) =
   {
     val socket = server.accept
-    (socket.getOutputStream, socket.getInputStream)
-  }
+    try {
+      val out_stream = socket.getOutputStream
+      val in_stream = socket.getInputStream
 
-  def accepted() { server.close }
+      if (Byte_Message.read_line(in_stream).map(_.text) == Some(password)) (out_stream, in_stream)
+      else {
+        out_stream.close
+        in_stream.close
+        error("Failed to connect system channel: bad password")
+      }
+    }
+    finally { shutdown() }
+  }
 }