From a9c2ee3c3c4a8791529b9ea448ed96d9aa7b03da Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Mon, 18 Nov 2024 13:39:06 -0500 Subject: il: connect() --- src/main/java/derms/net/il/IL.java | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/derms/net/il/IL.java (limited to 'src/main/java/derms/net/il/IL.java') diff --git a/src/main/java/derms/net/il/IL.java b/src/main/java/derms/net/il/IL.java new file mode 100644 index 0000000..56c8b40 --- /dev/null +++ b/src/main/java/derms/net/il/IL.java @@ -0,0 +1,37 @@ +package derms.net.il; + +import java.io.IOException; +import java.net.DatagramSocket; +import java.net.InetAddress; + +public class IL { + public static Connection listen(InetAddress laddr, int lport) { + // TODO + } + + public static Connection connect(InetAddress raddr, int rport) throws IOException { + DatagramSocket sock = new DatagramSocket(); + sock.connect(raddr, rport); + InetAddress laddr = sock.getLocalAddress(); + int lport = sock.getLocalPort(); + Connection conn = new Connection(laddr, lport, raddr, rport, sock); + + conn.sendCtl(Type.sync, conn.id0, 0); + conn.state.set(State.syncer); + conn.start(); + while (conn.state.get() == State.syncer) + Thread.yield(); + + State state = conn.state.get(); + switch (state) { + case established: + return conn; + case closed: + conn.close(); + throw new IOException("failed to connect to " + raddr + ":" + rport); + default: + conn.close(); + throw new IllegalStateException("illegal connection state: " + state); + } + } +} -- cgit v1.2.3