summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvilSeph <evilseph@gmail.com>2012-06-08 20:23:26 -0400
committerEvilSeph <evilseph@gmail.com>2012-06-08 20:23:44 -0400
commit282fcb44ede671eb9217f45f9e4d1df692042ac7 (patch)
tree0efc7bc6d8bb0485a7e6e7c3fc9d2fcfb0836b2a
parent77cc225b830d9e0e57640838972ef851bbf11fd5 (diff)
downloadcraftbukkit-282fcb44ede671eb9217f45f9e4d1df692042ac7.tar
craftbukkit-282fcb44ede671eb9217f45f9e4d1df692042ac7.tar.gz
craftbukkit-282fcb44ede671eb9217f45f9e4d1df692042ac7.tar.lz
craftbukkit-282fcb44ede671eb9217f45f9e4d1df692042ac7.tar.xz
craftbukkit-282fcb44ede671eb9217f45f9e4d1df692042ac7.zip
Added RemoteControlSession for diff visibility.
-rw-r--r--src/main/java/net/minecraft/server/RemoteControlSession.java145
1 files changed, 145 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/RemoteControlSession.java b/src/main/java/net/minecraft/server/RemoteControlSession.java
new file mode 100644
index 00000000..3467220a
--- /dev/null
+++ b/src/main/java/net/minecraft/server/RemoteControlSession.java
@@ -0,0 +1,145 @@
+package net.minecraft.server;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+
+public class RemoteControlSession extends RemoteConnectionThread {
+
+ private boolean g = false;
+ private Socket h;
+ private byte[] i = new byte[1460];
+ private String j;
+
+ RemoteControlSession(IMinecraftServer iminecraftserver, Socket socket) {
+ super(iminecraftserver);
+ this.h = socket;
+ this.j = iminecraftserver.a("rcon.password", "");
+ this.info("Rcon connection from: " + socket.getInetAddress());
+ }
+
+ public void run() {
+ while (true) {
+ try {
+ if (!this.running) {
+ return;
+ }
+
+ try {
+ BufferedInputStream bufferedinputstream = new BufferedInputStream(this.h.getInputStream());
+ int i = bufferedinputstream.read(this.i, 0, 1460);
+
+ if (10 <= i) {
+ byte b0 = 0;
+ int j = StatusChallengeUtils.b(this.i, 0, i);
+
+ if (j != i - 4) {
+ return;
+ }
+
+ int k = b0 + 4;
+ int l = StatusChallengeUtils.b(this.i, k, i);
+
+ k += 4;
+ int i1 = StatusChallengeUtils.a(this.i, k);
+
+ k += 4;
+ switch (i1) {
+ case 2:
+ if (this.g) {
+ String s = StatusChallengeUtils.a(this.i, k, i);
+
+ try {
+ this.a(l, this.server.d(s));
+ } catch (Exception exception) {
+ this.a(l, "Error executing: " + s + " (" + exception.getMessage() + ")");
+ }
+ continue;
+ }
+
+ this.e();
+ continue;
+
+ case 3:
+ String s1 = StatusChallengeUtils.a(this.i, k, i);
+ int j1 = k + s1.length();
+
+ if (0 != s1.length() && s1.equals(this.j)) {
+ this.g = true;
+ this.a(l, 2, "");
+ continue;
+ }
+
+ this.g = false;
+ this.e();
+ continue;
+
+ default:
+ this.a(l, String.format("Unknown request %s", new Object[] { Integer.toHexString(i1)}));
+ continue;
+ }
+ }
+ } catch (SocketTimeoutException sockettimeoutexception) {
+ continue;
+ } catch (IOException ioexception) {
+ if (this.running) {
+ this.info("IO: " + ioexception.getMessage());
+ }
+ continue;
+ }
+ } catch (Exception exception1) {
+ System.out.println(exception1);
+ return;
+ } finally {
+ this.f();
+ }
+
+ return;
+ }
+ }
+
+ private void a(int i, int j, String s) {
+ ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(1248);
+ DataOutputStream dataoutputstream = new DataOutputStream(bytearrayoutputstream);
+
+ dataoutputstream.writeInt(Integer.reverseBytes(s.length() + 10));
+ dataoutputstream.writeInt(Integer.reverseBytes(i));
+ dataoutputstream.writeInt(Integer.reverseBytes(j));
+ dataoutputstream.writeBytes(s);
+ dataoutputstream.write(0);
+ dataoutputstream.write(0);
+ this.h.getOutputStream().write(bytearrayoutputstream.toByteArray());
+ }
+
+ private void e() {
+ this.a(-1, 2, "");
+ }
+
+ private void a(int i, String s) {
+ int j = s.length();
+
+ do {
+ int k = 4096 <= j ? 4096 : j;
+
+ this.a(i, 0, s.substring(0, k));
+ s = s.substring(k);
+ j = s.length();
+ } while (0 != j);
+
+ }
+
+ private void f() {
+ if (null != this.h) {
+ try {
+ this.h.close();
+ } catch (IOException ioexception) {
+ this.warning("IO: " + ioexception.getMessage());
+ }
+
+ this.h = null;
+ }
+ }
+}