src/Pure/System/system_channel.scala
changeset 69572 09a6a7c04b45
parent 69463 6439c9024dcc
child 73340 0ffcad1f6130
equal deleted inserted replaced
69571:676182f2e375 69572:09a6a7c04b45
    18 
    18 
    19 class System_Channel private
    19 class System_Channel private
    20 {
    20 {
    21   private val server = new ServerSocket(0, 50, Server.localhost)
    21   private val server = new ServerSocket(0, 50, Server.localhost)
    22 
    22 
    23   val server_name: String = Server.print_address(server.getLocalPort)
    23   val address: String = Server.print_address(server.getLocalPort)
    24   override def toString: String = server_name
    24   val password: String = UUID.random().toString
       
    25 
       
    26   override def toString: String = address
       
    27 
       
    28   def shutdown() { server.close }
    25 
    29 
    26   def rendezvous(): (OutputStream, InputStream) =
    30   def rendezvous(): (OutputStream, InputStream) =
    27   {
    31   {
    28     val socket = server.accept
    32     val socket = server.accept
    29     (socket.getOutputStream, socket.getInputStream)
    33     try {
       
    34       val out_stream = socket.getOutputStream
       
    35       val in_stream = socket.getInputStream
       
    36 
       
    37       if (Byte_Message.read_line(in_stream).map(_.text) == Some(password)) (out_stream, in_stream)
       
    38       else {
       
    39         out_stream.close
       
    40         in_stream.close
       
    41         error("Failed to connect system channel: bad password")
       
    42       }
       
    43     }
       
    44     finally { shutdown() }
    30   }
    45   }
    31 
       
    32   def accepted() { server.close }
       
    33 }
    46 }