From fa9de6dad5f28f4fcc22e02949fdd3856cf96539 Mon Sep 17 00:00:00 2001 From: "Tristan B. Velloza Kildaire" Date: Sat, 25 Mar 2023 14:11:03 +0200 Subject: [PATCH] ConnectionInfo - Made field `nickname` public - Added public fields `username` and `realname` - Updated constructor to take in additional parameters `username` and `realname` Client - Calling `connect()` on a `Client` object will now call `doAuth()` which will do `/NICK` and `/USER` for you automatically (no need to do it manually anymore) - The newly added `doAuth()` will take `hostname=username` from `connInfo.username`, it will set `servername` to `"bogus.net"` and `realname==connInfo.realname` - Added `user(username, hostname, servername, realname)` --- source/birchwood/client/client.d | 39 +++++++++++++++++++++++++----- source/birchwood/config/conninfo.d | 24 +++++++++++++----- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/source/birchwood/client/client.d b/source/birchwood/client/client.d index 0a5c0e9..bd97bc2 100644 --- a/source/birchwood/client/client.d +++ b/source/birchwood/client/client.d @@ -813,6 +813,9 @@ public class Client : Thread /* Start the socket read-decode loop */ this.start(); + + // TODO: We should add a call to NICK followed by USER here + doAuth(); } catch(SocketOSException e) { @@ -826,6 +829,26 @@ public class Client : Thread } } + private void doAuth() + { + Thread.sleep(dur!("seconds")(2)); + nick(connInfo.nickname); + + Thread.sleep(dur!("seconds")(2)); + // TODO: Note I am making hostname the same as username always (is this okay?) + // TODO: Note I am making the servername always bogus.net + user(connInfo.username, connInfo.username, "bogus.net", connInfo.realname); + } + + public void user(string username, string hostname, string servername, string realname) + { + // TODO: Implement me properly with all required checks + + /* User message */ + Message userMessage = new Message("", "USER", username~" "~hostname~" "~servername~" "~":"~realname); + sendMessage(userMessage); + } + /** * Adds a given message onto the receieve queue for @@ -1067,7 +1090,7 @@ public class Client : Thread //freenode: 149.28.246.185 //snootnet: 178.62.125.123 //bonobonet: fd08:8441:e254::5 - ConnectionInfo connInfo = ConnectionInfo.newConnection("worcester.community.networks.deavmi.assigned.network", 6667, "testBirchwood"); + ConnectionInfo connInfo = ConnectionInfo.newConnection("worcester.community.networks.deavmi.assigned.network", 6667, "birchwood", "doggie", "Tristan B. Kildaire"); // // Set the fakelag to 1 second // connInfo.setFakeLag(1); @@ -1080,12 +1103,16 @@ public class Client : Thread // TODO: The below should all be automatic, maybe once IRCV3 is done // ... we should automate sending in NICK and USER stuff - Thread.sleep(dur!("seconds")(2)); - // client.command(new Message("", "NICK", "birchwood")); // TODO: add nickcommand - client.nick("birchwood"); + // Thread.sleep(dur!("seconds")(2)); + // client.nick("birchwood"); + + // Thread.sleep(dur!("seconds")(2)); + // client.command(new Message("", "USER", "doggie doggie irc.frdeenode.net :Tristan B. Kildaire")); + // client.user("doggie", "doggie", "irc.frdeenode.net", "Tristan B. Kildaire"); + + + - Thread.sleep(dur!("seconds")(2)); - client.command(new Message("", "USER", "doggie doggie irc.frdeenode.net :Tristan B. Kildaire")); Thread.sleep(dur!("seconds")(4)); // client.command(new Message("", "JOIN", "#birchwood")); diff --git a/source/birchwood/config/conninfo.d b/source/birchwood/config/conninfo.d index a4427fe..cd0f50a 100644 --- a/source/birchwood/config/conninfo.d +++ b/source/birchwood/config/conninfo.d @@ -21,7 +21,17 @@ public shared struct ConnectionInfo /** * Nickname to use */ - private string nickname; + public string nickname; + + /** + * Username + */ + public string username; + + /** + * Real name + */ + public string realname; /** * Size to use to dequeue bytes @@ -59,11 +69,13 @@ public shared struct ConnectionInfo * bulkReadSize = the dequeue read size * quitMessage = the message to use when quitting */ - private this(Address addrInfo, string nickname, ulong bulkReadSize = 20, string quitMessage = "birchwood client disconnecting...") + private this(Address addrInfo, string nickname, string username, string realname, ulong bulkReadSize = 20, string quitMessage = "birchwood client disconnecting...") { // NOTE: Not sure if much mutable in Address anyways this.addrInfo = cast(shared Address)addrInfo; this.nickname = nickname; + this.username = username; + this.realname = realname; this.bulkReadSize = bulkReadSize; this.quitMessage = quitMessage; @@ -167,7 +179,7 @@ public shared struct ConnectionInfo * * Returns: ConnectionInfo for this server */ - public static ConnectionInfo newConnection(string hostname, ushort port, string nickname) + public static ConnectionInfo newConnection(string hostname, ushort port, string nickname, string username, string realname) { try { @@ -183,7 +195,7 @@ public shared struct ConnectionInfo /* TODO: Add feature to choose which address to use, prefer v4 or v6 type of thing */ Address chosenAddress = addrInfo[0]; - return ConnectionInfo(chosenAddress, nickname); + return ConnectionInfo(chosenAddress, nickname, username, realname); } catch(SocketException e) { @@ -201,7 +213,7 @@ public shared struct ConnectionInfo { try { - newConnection("1.", 21, "deavmi"); + newConnection("1.", 21, "deavmi", "thedeavmi", "Tristan Brice Birchwood Kildaire"); assert(false); } catch(BirchwoodException e) @@ -211,7 +223,7 @@ public shared struct ConnectionInfo try { - newConnection("1.1.1.1", 21, ""); + newConnection("1.1.1.1", 21, "", "thedeavmi", "Tristan Brice Birchwood Kildaire"); assert(false); } catch(BirchwoodException e)