Fixed server IO errors / Fixed kick IP tracing
This commit is contained in:
@@ -344,8 +344,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
boolean checkPass(){
|
boolean checkPass(){
|
||||||
if(votes >= votesRequired()){
|
if(votes >= votesRequired()){
|
||||||
Call.sendMessage(Strings.format("[orange]Vote passed.[scarlet] @[orange] will be banned from the server for @ minutes.", target.name, (kickDuration / 60)));
|
Call.sendMessage(Strings.format("[orange]Vote passed.[scarlet] @[orange] will be banned from the server for @ minutes.", target.name, (kickDuration / 60)));
|
||||||
target.getInfo().lastKicked = Time.millis() + kickDuration * 1000;
|
Groups.player.each(p -> p.uuid().equals(target.uuid()), p -> p.kick(KickReason.vote, kickDuration * 1000));
|
||||||
Groups.player.each(p -> p.uuid().equals(target.uuid()), p -> p.kick(KickReason.vote));
|
|
||||||
map[0] = null;
|
map[0] = null;
|
||||||
task.cancel();
|
task.cancel();
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -238,6 +238,10 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
|
|||||||
con.kick(reason);
|
con.kick(reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void kick(KickReason reason, long duration){
|
||||||
|
con.kick(reason, duration);
|
||||||
|
}
|
||||||
|
|
||||||
void kick(String reason){
|
void kick(String reason){
|
||||||
con.kick(reason);
|
con.kick(reason);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import arc.struct.*;
|
|||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.net.Administration.*;
|
|
||||||
import mindustry.net.Packets.*;
|
import mindustry.net.Packets.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@@ -37,38 +36,39 @@ public abstract class NetConnection{
|
|||||||
|
|
||||||
/** Kick with a special, localized reason. Use this if possible. */
|
/** Kick with a special, localized reason. Use this if possible. */
|
||||||
public void kick(KickReason reason){
|
public void kick(KickReason reason){
|
||||||
if(kicked) return;
|
kick(reason, (reason == KickReason.kick || reason == KickReason.banned || reason == KickReason.vote) ? 30 * 1000 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
Log.info("Kicking connection @ / @; Reason: @", address, uuid, reason.name());
|
/** Kick with a special, localized reason. Use this if possible. */
|
||||||
|
public void kick(KickReason reason, long kickDuration){
|
||||||
if((reason == KickReason.kick || reason == KickReason.banned || reason == KickReason.vote)){
|
kick(null, reason, kickDuration);
|
||||||
PlayerInfo info = netServer.admins.getInfo(uuid);
|
|
||||||
info.timesKicked++;
|
|
||||||
info.lastKicked = Math.max(Time.millis() + 30 * 1000, info.lastKicked);
|
|
||||||
}
|
|
||||||
|
|
||||||
Call.kick(this, reason);
|
|
||||||
|
|
||||||
close();
|
|
||||||
|
|
||||||
netServer.admins.save();
|
|
||||||
kicked = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Kick with an arbitrary reason. */
|
/** Kick with an arbitrary reason. */
|
||||||
public void kick(String reason){
|
public void kick(String reason){
|
||||||
kick(reason, 30 * 1000);
|
kick(reason, null, 30 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Kick with an arbitrary reason. */
|
||||||
|
public void kick(String reason, long duration){
|
||||||
|
kick(reason, null, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Kick with an arbitrary reason, and a kick duration in milliseconds. */
|
/** Kick with an arbitrary reason, and a kick duration in milliseconds. */
|
||||||
public void kick(String reason, long kickDuration){
|
private void kick(String reason, KickReason kickType, long kickDuration){
|
||||||
if(kicked) return;
|
if(kicked) return;
|
||||||
|
|
||||||
Log.info("Kicking connection @ / @; Reason: @", address, uuid, reason.replace("\n", " "));
|
Log.info("Kicking connection @ / @; Reason: @", address, uuid, reason == null ? kickType.name() : reason.replace("\n", " "));
|
||||||
|
|
||||||
netServer.admins.handleKicked(uuid, address, kickDuration);
|
if(kickDuration > 0){
|
||||||
|
netServer.admins.handleKicked(uuid, address, kickDuration);
|
||||||
|
}
|
||||||
|
|
||||||
Call.kick(this, reason);
|
if(reason == null){
|
||||||
|
Call.kick(this, kickType);
|
||||||
|
}else{
|
||||||
|
Call.kick(this, reason);
|
||||||
|
}
|
||||||
|
|
||||||
close();
|
close();
|
||||||
|
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ kapt.include.compile.classpath=false
|
|||||||
kotlin.stdlib.default.dependency=false
|
kotlin.stdlib.default.dependency=false
|
||||||
#needed for android compilation
|
#needed for android compilation
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
archash=4b1c4b4565f24298c9c5c7e9b40d94957d4aa226
|
archash=52cd02b71205949b68e9b620b6a02fed3622bac0
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import mindustry.maps.*;
|
|||||||
import mindustry.mod.*;
|
import mindustry.mod.*;
|
||||||
import mindustry.mod.Mods.*;
|
import mindustry.mod.Mods.*;
|
||||||
import mindustry.net.*;
|
import mindustry.net.*;
|
||||||
|
import mindustry.net.Packets.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.storage.*;
|
import mindustry.world.blocks.storage.*;
|
||||||
@@ -134,6 +135,7 @@ public class ApplicationTests{
|
|||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@NullSource
|
@NullSource
|
||||||
@ValueSource(strings = {
|
@ValueSource(strings = {
|
||||||
|
"a",
|
||||||
"asd asd asd asd asdagagasasjakbgeah;jwrej 23424234",
|
"asd asd asd asd asdagagasasjakbgeah;jwrej 23424234",
|
||||||
"这个服务器可以用自己的语言说话",
|
"这个服务器可以用自己的语言说话",
|
||||||
"\uD83D\uDEA3"
|
"\uD83D\uDEA3"
|
||||||
@@ -161,6 +163,28 @@ public class ApplicationTests{
|
|||||||
pack.handled();
|
pack.handled();
|
||||||
|
|
||||||
assertEquals(string, pack.message);
|
assertEquals(string, pack.message);
|
||||||
|
|
||||||
|
buffer.position(0);
|
||||||
|
Writes writes = new Writes(new ByteBufferOutput(buffer));
|
||||||
|
TypeIO.writeString(writes, string);
|
||||||
|
|
||||||
|
buffer.position(0);
|
||||||
|
|
||||||
|
assertEquals(string, TypeIO.readString(new Reads(new ByteBufferInput(buffer))));
|
||||||
|
|
||||||
|
buffer.position(0);
|
||||||
|
ConnectPacket con = new ConnectPacket();
|
||||||
|
con.name = string;
|
||||||
|
con.uuid = "AAAAAAAA";
|
||||||
|
con.usid = "AAAAAAAA";
|
||||||
|
con.mods = new Seq<>();
|
||||||
|
con.write(new Writes(new ByteBufferOutput(buffer)));
|
||||||
|
|
||||||
|
con.name = "INVALID";
|
||||||
|
buffer.position(0);
|
||||||
|
con.read(new Reads(new ByteBufferInput(buffer)));
|
||||||
|
|
||||||
|
assertEquals(string, con.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user