equal
deleted
inserted
replaced
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 } |