Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-20 21:40:06 +01:00
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren