From: christinaa Date: Thu, 14 Sep 2017 14:39:32 +0000 (-0700) Subject: encap snomask support for acid as well as protocol support for 5 arg svsmode needed... X-Git-Url: https://jfr.im/git/irc/rizon/acid.git/commitdiff_plain/a3c9064749fb0a864bf64721dbc55093cba69293 encap snomask support for acid as well as protocol support for 5 arg svsmode needed to send extarg --- diff --git a/acid/src/main/java/net/rizon/acid/core/Protocol.java b/acid/src/main/java/net/rizon/acid/core/Protocol.java index 205c80e..666c516 100644 --- a/acid/src/main/java/net/rizon/acid/core/Protocol.java +++ b/acid/src/main/java/net/rizon/acid/core/Protocol.java @@ -177,6 +177,11 @@ public class Protocol encap("*", "SVSMODE", u.getUID(), u.getNickTS(), modes); } + public static void svsmode(User u, final String modes, final String extarg) + { + encap("*", "SVSMODE", u.getUID(), u.getNickTS(), modes, extarg); + } + public static void chgident(User u, final String host) { encap("*", "CHGIDENT", u.getUID(), host); diff --git a/acid/src/main/java/net/rizon/acid/core/User.java b/acid/src/main/java/net/rizon/acid/core/User.java index 784c293..fce3e60 100644 --- a/acid/src/main/java/net/rizon/acid/core/User.java +++ b/acid/src/main/java/net/rizon/acid/core/User.java @@ -21,7 +21,7 @@ public class User implements Comparable private static final Logger log = LoggerFactory.getLogger(User.class); private String nick, user, host, vhost, name, identnick, modes, UID, ip, - certfp, authflags, su; + certfp, authflags, su, snomask; private String cloakedIp, cloakedHost; private int nickTS, conTS; private Server server; @@ -71,6 +71,16 @@ public class User implements Comparable this.certfp = ""; this.authflags = ""; this.su = ""; + + /* + * i'm not sure if this is just how plexus handles it + * or if it's irc protocol for empty snomasks. + * + * -!- Mode change [-s] for user kristina + * -!- + Server notice mask + */ + this.snomask = "+"; + oldNicks = new ArrayList(); chans = new Hashtable>(); chanList = new HashSet(); @@ -86,6 +96,20 @@ public class User implements Comparable return this.ip.equals("255.255.255.255") || this.ip.equals("0"); } + public void setSnomask(String s) + { + /* see comment in ctor */ + if (s.isEmpty()) + snomask = "+"; + else + snomask = s; + } + + public String getSnomask() + { + return snomask; + } + public void onQuit() { for (Iterator it = chanList.iterator(); it.hasNext();) diff --git a/acid/src/main/java/net/rizon/acid/messages/Encap.java b/acid/src/main/java/net/rizon/acid/messages/Encap.java index 53a08aa..533f31f 100644 --- a/acid/src/main/java/net/rizon/acid/messages/Encap.java +++ b/acid/src/main/java/net/rizon/acid/messages/Encap.java @@ -8,9 +8,13 @@ import net.rizon.acid.core.Message; import net.rizon.acid.core.Server; import net.rizon.acid.core.User; import net.rizon.acid.util.Util; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Encap extends Message { + private static final Logger log = LoggerFactory.getLogger(Encap.class); + public Encap() { super("ENCAP"); @@ -109,6 +113,18 @@ public class Encap extends Message user.setCertFP(params[3]); } + else if (params[1].equals("SNOMASK")) + { + User user = User.findUser(params[2]); + if (user == null) + { + log.warn("SNOMASK: Unable to find user {}", params[2]); + return; + } + + user.setSnomask(params[3]); + log.debug("Snomask for {} changed to {}", user.getNick(), user.getSnomask()); + } else if (params[1].equals("AUTHFLAGS")) { User user = User.findUser(params[2]);