Skip to content

Commit 73ce01b

Browse files
committed
Make packet logging more robust
1 parent b30628f commit 73ce01b

File tree

1 file changed

+77
-67
lines changed

1 file changed

+77
-67
lines changed

modules/ProtocolLib/src/main/java/com/comphenix/protocol/PacketLogging.java

Lines changed: 77 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -73,81 +73,89 @@ public class PacketLogging implements CommandExecutor, PacketListener {
7373
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
7474
PacketType type = null;
7575

76-
if (args.length > 2) {
77-
Protocol protocol;
76+
try {
77+
if (args.length > 2) {
78+
Protocol protocol;
7879

79-
try {
80-
protocol = Protocol.valueOf(args[0].toUpperCase());
81-
} catch (IllegalArgumentException ex) {
82-
sender.sendMessage(ChatColor.RED + "Unknown protocol " + args[0]);
83-
return true;
84-
}
80+
try {
81+
protocol = Protocol.valueOf(args[0].toUpperCase());
82+
} catch (IllegalArgumentException ex) {
83+
sender.sendMessage(ChatColor.RED + "Unknown protocol " + args[0]);
84+
return true;
85+
}
8586

86-
Sender pSender;
87+
Sender pSender;
8788

88-
try {
89-
pSender = Sender.valueOf(args[1].toUpperCase());
90-
} catch (IllegalArgumentException ex) {
91-
sender.sendMessage(ChatColor.RED + "Unknown sender: " + args[1]);
92-
return true;
93-
}
89+
try {
90+
pSender = Sender.valueOf(args[1].toUpperCase());
91+
} catch (IllegalArgumentException ex) {
92+
sender.sendMessage(ChatColor.RED + "Unknown sender: " + args[1]);
93+
return true;
94+
}
9495

95-
try {
9696
try {
97-
int id = Integer.parseInt(args[2]);
98-
type = PacketType.findCurrent(protocol, pSender, id);
99-
} catch (NumberFormatException ex) {
100-
String name = args[2];
101-
outer: for (PacketType packet : PacketType.values()) {
102-
if (packet.getProtocol() == protocol &&
103-
packet.getSender() == pSender) {
104-
if (packet.name().equalsIgnoreCase(name)) {
105-
type = packet;
106-
break outer;
107-
}
108-
for (String className : packet.getClassNames()) {
109-
if (className.equalsIgnoreCase(name)) {
97+
try {
98+
int id = Integer.parseInt(args[2]);
99+
type = PacketType.findCurrent(protocol, pSender, id);
100+
} catch (NumberFormatException ex) {
101+
String name = args[2];
102+
outer: for (PacketType packet : PacketType.values()) {
103+
if (packet.getProtocol() == protocol && packet.getSender() == pSender) {
104+
if (packet.name().equalsIgnoreCase(name)) {
110105
type = packet;
111106
break outer;
112107
}
108+
for (String className : packet.getClassNames()) {
109+
if (className.equalsIgnoreCase(name)) {
110+
type = packet;
111+
break outer;
112+
}
113+
}
113114
}
114115
}
115116
}
117+
} catch (IllegalArgumentException ex) {
118+
type = null;
116119
}
117-
} catch (IllegalArgumentException ex) {
118-
sender.sendMessage(ChatColor.RED + "Unknown packet: " + PacketType.format(protocol, pSender, args[2]));
119-
return true;
120-
}
121120

122-
if (args.length > 3) {
123-
if (args[3].equalsIgnoreCase("console")) {
124-
this.location = LogLocation.CONSOLE;
125-
} else {
126-
this.location = LogLocation.FILE;
121+
if (type == null) {
122+
sender.sendMessage(ChatColor.RED + "Unknown packet: " + args[2]);
123+
return true;
127124
}
128-
}
129125

130-
if (pSender == Sender.CLIENT) {
131-
if (receivingTypes.contains(type)) {
132-
receivingTypes.remove(type);
133-
} else {
134-
receivingTypes.add(type);
126+
if (args.length > 3) {
127+
if (args[3].equalsIgnoreCase("console")) {
128+
this.location = LogLocation.CONSOLE;
129+
} else {
130+
this.location = LogLocation.FILE;
131+
}
135132
}
136-
} else {
137-
if (sendingTypes.contains(type)) {
138-
sendingTypes.remove(type);
133+
134+
if (pSender == Sender.CLIENT) {
135+
if (receivingTypes.contains(type)) {
136+
receivingTypes.remove(type);
137+
} else {
138+
receivingTypes.add(type);
139+
}
139140
} else {
140-
sendingTypes.add(type);
141+
if (sendingTypes.contains(type)) {
142+
sendingTypes.remove(type);
143+
} else {
144+
sendingTypes.add(type);
145+
}
141146
}
147+
148+
startLogging();
149+
sender.sendMessage(ChatColor.GREEN + "Now logging " + type.getPacketClass().getSimpleName());
150+
return true;
142151
}
143152

144-
startLogging();
145-
sender.sendMessage(ChatColor.GREEN + "Now logging " + type.getPacketClass().getSimpleName());
153+
sender.sendMessage(ChatColor.RED + "Invalid syntax: /packetlog <protocol> <sender> <packet> [location]");
154+
return true;
155+
} catch (Throwable ex) {
156+
sender.sendMessage(ChatColor.RED + "Failed to parse command: " + ex.toString());
146157
return true;
147158
}
148-
149-
sender.sendMessage(ChatColor.RED + "Invalid syntax: /packetlog <protocol> <sender> <packet> [location]");
150-
return true;
151159
}
152160

153161
private void startLogging() {
@@ -199,24 +207,26 @@ private static String hexDump(byte[] bytes) throws IOException {
199207
}
200208

201209
private void log(PacketEvent event) {
202-
String hexDump;
203-
204210
try {
205211
WirePacket packet = WirePacket.fromPacket(event.getPacket());
206-
hexDump = hexDump(packet.getBytes());
212+
String hexDump = hexDump(packet.getBytes());
213+
214+
if (location == LogLocation.FILE) {
215+
fileLogger.log(Level.INFO, event.getPacketType() + ":");
216+
fileLogger.log(Level.INFO, hexDump);
217+
fileLogger.log(Level.INFO, "");
218+
} else {
219+
System.out.println(event.getPacketType() + ":");
220+
System.out.println(hexDump);
221+
System.out.println();
222+
}
207223
} catch (Throwable ex) {
208-
fileLogger.log(Level.WARNING, "Failed to dump packet: " + ex.toString());
209-
return;
210-
}
224+
plugin.getLogger().log(Level.WARNING, "Failed to log packet " + event.getPacketType() + ":", ex);
225+
plugin.getLogger().log(Level.WARNING, "Clearing packet logger...");
211226

212-
if (location == LogLocation.FILE) {
213-
fileLogger.log(Level.INFO, event.getPacketType() + ":");
214-
fileLogger.log(Level.INFO, hexDump);
215-
fileLogger.log(Level.INFO, "");
216-
} else {
217-
System.out.println(event.getPacketType() + ":");
218-
System.out.println(hexDump);
219-
System.out.println();
227+
sendingTypes.clear();
228+
receivingTypes.clear();
229+
startLogging();
220230
}
221231
}
222232

0 commit comments

Comments
 (0)