Added RemoteControlSession for diff visibility.
Dieser Commit ist enthalten in:
Ursprung
77cc225b83
Commit
282fcb44ed
145
src/main/java/net/minecraft/server/RemoteControlSession.java
Normale Datei
145
src/main/java/net/minecraft/server/RemoteControlSession.java
Normale Datei
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
In neuem Issue referenzieren
Einen Benutzer sperren