X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Firc%2FConnection.java;h=530b0c7e8f2698e57d693627fa4f7b7c24394358;hb=db7e9612fa189cee9f4b9086e00d87c4d6c58bbf;hp=58e53657e6a35825f65f2fd3825f0a76e09a7784;hpb=0170d22612daa69a9dba87238a9aaa9772a7353a;p=xudocci.git diff --git a/src/main/java/net/pterodactylus/irc/Connection.java b/src/main/java/net/pterodactylus/irc/Connection.java index 58e5365..530b0c7 100644 --- a/src/main/java/net/pterodactylus/irc/Connection.java +++ b/src/main/java/net/pterodactylus/irc/Connection.java @@ -44,6 +44,7 @@ import net.pterodactylus.irc.event.ChannelMessageReceived; import net.pterodactylus.irc.event.ChannelNicknames; import net.pterodactylus.irc.event.ChannelNotJoined; import net.pterodactylus.irc.event.ChannelNotJoined.Reason; +import net.pterodactylus.irc.event.ChannelNoticeReceived; import net.pterodactylus.irc.event.ChannelTopic; import net.pterodactylus.irc.event.ClientQuit; import net.pterodactylus.irc.event.ConnectionClosed; @@ -56,6 +57,7 @@ import net.pterodactylus.irc.event.NicknameChanged; import net.pterodactylus.irc.event.NicknameInUseReceived; import net.pterodactylus.irc.event.NoNicknameGivenReceived; import net.pterodactylus.irc.event.PrivateMessageReceived; +import net.pterodactylus.irc.event.PrivateNoticeReceived; import net.pterodactylus.irc.event.UnknownReplyReceived; import net.pterodactylus.irc.util.RandomNickname; @@ -332,34 +334,23 @@ public class Connection extends AbstractExecutionThreadService implements Servic String message = parameters.get(1); if (message.startsWith("\u0001") && message.endsWith("\u0001")) { /* CTCP! */ - String[] messageWords = message.substring(1, message.length() - 1).split(" +"); - String ctcpCommand = messageWords[0]; - if (ctcpCommand.equalsIgnoreCase("DCC")) { - if (messageWords[1].equalsIgnoreCase("SEND")) { - Optional inetAddress = parseInetAddress(messageWords[3]); - Optional port = Optional.fromNullable(Ints.tryParse(messageWords[4])); - long fileSize = Optional.fromNullable(Longs.tryParse(messageWords[5])).or(-1L); - if (inetAddress.isPresent() && port.isPresent()) { - eventBus.post(new DccSendReceived(this, reply.source().get(), messageWords[2], inetAddress.get(), port.get(), fileSize)); - } else { - logger.warning(String.format("Received malformed DCC SEND: “%s”", message)); - } - } else if (messageWords[1].equalsIgnoreCase("ACCEPT")) { - Optional port = Optional.fromNullable(Ints.tryParse(messageWords[3])); - long position = Optional.fromNullable(Longs.tryParse(messageWords[4])).or(-1L); - if (port.isPresent()) { - eventBus.post(new DccAcceptReceived(this, reply.source().get(), messageWords[2], port.get(), position)); - } else { - logger.warning(String.format("Received malformed DCC ACCEPT: “%s”", message)); - } - } - } + handleCtcp(reply.source().get(), message); } else if (!channelTypes.contains(recipient.charAt(0))) { eventBus.post(new PrivateMessageReceived(this, reply.source().get(), message)); } else { eventBus.post(new ChannelMessageReceived(this, recipient, reply.source().get(), message)); } + } else if (command.equalsIgnoreCase("NOTICE")) { + String recipient = parameters.get(0); + String message = parameters.get(1); + if (message.startsWith("\u0001") && message.endsWith("\u0001")) { + /* CTCP! */ + handleCtcp(reply.source().get(), message); + } else if (!channelTypes.contains(recipient.charAt(0))) { + eventBus.post(new PrivateNoticeReceived(this, reply)); + } else { + eventBus.post(new ChannelNoticeReceived(this, reply.source().get(), recipient, message)); } /* 43x replies are for nick change errors. */ @@ -488,6 +479,39 @@ public class Connection extends AbstractExecutionThreadService implements Servic // /** + * Handles a CTCP message. + * + * @param client + * The client sending the message + * @param message + * The message + */ + private void handleCtcp(Source client, String message) { + String[] messageWords = message.substring(1, message.length() - 1).split(" +"); + String ctcpCommand = messageWords[0]; + if (ctcpCommand.equalsIgnoreCase("DCC")) { + if (messageWords[1].equalsIgnoreCase("SEND")) { + Optional inetAddress = parseInetAddress(messageWords[3]); + Optional port = Optional.fromNullable(Ints.tryParse(messageWords[4])); + long fileSize = Optional.fromNullable(Longs.tryParse(messageWords[5])).or(-1L); + if (inetAddress.isPresent() && port.isPresent()) { + eventBus.post(new DccSendReceived(this, client, messageWords[2], inetAddress.get(), port.get(), fileSize)); + } else { + logger.warning(String.format("Received malformed DCC SEND: “%s”", message)); + } + } else if (messageWords[1].equalsIgnoreCase("ACCEPT")) { + Optional port = Optional.fromNullable(Ints.tryParse(messageWords[3])); + long position = Optional.fromNullable(Longs.tryParse(messageWords[4])).or(-1L); + if (port.isPresent()) { + eventBus.post(new DccAcceptReceived(this, client, messageWords[2], port.get(), position)); + } else { + logger.warning(String.format("Received malformed DCC ACCEPT: “%s”", message)); + } + } + } + } + + /** * Returns an item from the list, or {@link Optional#absent()} if the list is * shorter than required for the given index. *