summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWesley Wolfe <weswolf@aol.com>2012-07-26 01:17:09 -0500
committerWesley Wolfe <weswolf@aol.com>2012-07-26 01:17:09 -0500
commita4d7691299d86edc46931b3978de62a60576ba0d (patch)
tree1274fb8cf86a813e2870e19e8791529772bf1ef0 /src
parentb00de5f1768e14238f8660b63eb3fd5d744fc0a9 (diff)
downloadcraftbukkit-a4d7691299d86edc46931b3978de62a60576ba0d.tar
craftbukkit-a4d7691299d86edc46931b3978de62a60576ba0d.tar.gz
craftbukkit-a4d7691299d86edc46931b3978de62a60576ba0d.tar.lz
craftbukkit-a4d7691299d86edc46931b3978de62a60576ba0d.tar.xz
craftbukkit-a4d7691299d86edc46931b3978de62a60576ba0d.zip
Detect and disconnect 1.3 clients properly. Fixes BUKKIT-1952
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/minecraft/server/NetLoginHandler.java6
-rw-r--r--src/main/java/net/minecraft/server/NetworkManager.java19
2 files changed, 24 insertions, 1 deletions
diff --git a/src/main/java/net/minecraft/server/NetLoginHandler.java b/src/main/java/net/minecraft/server/NetLoginHandler.java
index 436f7de4..89404afd 100644
--- a/src/main/java/net/minecraft/server/NetLoginHandler.java
+++ b/src/main/java/net/minecraft/server/NetLoginHandler.java
@@ -55,6 +55,12 @@ public class NetLoginHandler extends NetHandler {
}
public void a(Packet2Handshake packet2handshake) {
+ // CraftBukkit start - 1.3 detection
+ if (packet2handshake.a == null) {
+ disconnect("Outdated server!");
+ return;
+ }
+ // CraftBukkit end
// CraftBukkit start
int i = packet2handshake.a.indexOf(';');
if (i == -1) {
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index 003fe74e..58a4f813 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -52,7 +52,7 @@ public class NetworkManager {
try {
// CraftBukkit start - cant compile these outside the try
socket.setSoTimeout(30000);
- this.input = new DataInputStream(socket.getInputStream());
+ this.input = new DataInputStream(new java.io.BufferedInputStream(socket.getInputStream(), 2)); // Remove buffered input after 1.3
this.output = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream(), 5120));
} catch (java.io.IOException socketexception) {
// CraftBukkit end
@@ -146,6 +146,23 @@ public class NetworkManager {
boolean flag = false;
try {
+ // CraftBukkit start - 1.3 detection
+ this.input.mark(2);
+ if (this.input.read() == 2 && this.input.read() != 0) {
+ Packet.a(this.input, 16);
+ Packet.a(this.input, 255);
+ this.input.readInt();
+
+ if (this.q) {
+ return true;
+ }
+
+ this.m.clear();
+ this.m.add(new Packet2Handshake(null));
+ return true;
+ }
+ this.input.reset();
+ // CraftBukkit end
Packet packet = Packet.a(this.input, this.packetListener.c());
if (packet != null) {