and did you change this ? :D
net/sf/l2j/gameserver/GameServer.java
- _selectorThread = new SelectorThread<L2GameClient>(sc, gph, gph, gph, null);
+ _selectorThread = new SelectorThread<L2GameClient>(sc, gph, gph, gph, new IPv4Filter());
net/sf/l2j/loginserver/SelectorHelper.java
package net.sf.l2j.loginserver;
-import java.net.InetAddress;
import java.nio.channels.SocketChannel;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map.Entry;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import net.sf.l2j.loginserver.serverpackets.Init;
+import net.sf.l2j.util.IPv4Filter;
import org.mmocore.network.IAcceptFilter;
import org.mmocore.network.IClientFactory;
@@ -33,18 +30,15 @@
*
* @author KenM
*/
-public class SelectorHelper extends Thread implements IMMOExecutor<L2LoginClient>,
+public class SelectorHelper implements IMMOExecutor<L2LoginClient>,
IClientFactory<L2LoginClient>, IAcceptFilter
{
- private HashMap<Integer, Flood> _ipFloodMap;
private ThreadPoolExecutor _generalPacketsThreadPool;
+ private IPv4Filter _ipv4filter;
public SelectorHelper()
{
- _generalPacketsThreadPool = new ThreadPoolExecutor(4, 6, 15L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
- _ipFloodMap = new HashMap<Integer, Flood>();
- super.setDaemon(true);
- super.start();
+ _ipv4filter = new IPv4Filter();
}
/**
@@ -73,110 +67,6 @@
*/
public boolean accept(SocketChannel sc)
{
- InetAddress addr = sc.socket().getInetAddress();
- int h = hash(addr.getAddress());
-
- long current = System.currentTimeMillis();
- Flood f;
- synchronized (_ipFloodMap)
- {
- f = _ipFloodMap.get(h);
- }
- if (f != null)
- {
- if (f.trys == -1)
- {
- f.lastAccess = current;
- return false;
- }
-
- if (f.lastAccess + 1000 > current)
- {
- f.lastAccess = current;
-
- if (f.trys >= 3)
- {
- f.trys = -1;
- return false;
- }
-
- f.trys++;
- }
- else
- {
- f.lastAccess = current;
- }
- }
- else
- {
- synchronized (_ipFloodMap)
- {
- _ipFloodMap.put(h, new Flood());
- }
- }
- return !LoginController.getInstance().isBannedAddress(addr);
+ return _ipv4filter.accept(sc) && !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
}
-
- /**
- *
- * @param ip
- * @return
- */
- private int hash(byte[] ip)
- {
- return ip[0] & 0xFF | ip[1] << 8 & 0xFF00 | ip[2] << 16 & 0xFF0000 | ip[3] << 24
- & 0xFF000000;
- }
-
- private class Flood
- {
- long lastAccess;
- int trys;
-
- Flood()
- {
- lastAccess = System.currentTimeMillis();
- trys = 0;
- }
- }
-
- /**
- *
- * @see java.lang.Thread#run()
- */
- @Override
- public void run()
- {
- while (true)
- {
- long reference = System.currentTimeMillis() - (1000 * 300);
- ArrayList<Integer> toRemove = new ArrayList<Integer>(50);
- synchronized (_ipFloodMap)
- {
- for (Entry<Integer, Flood> e : _ipFloodMap.entrySet())
- {
- Flood f = e.getValue();
- if (f.lastAccess < reference)
- toRemove.add(e.getKey());
- }
- }
-
- synchronized (_ipFloodMap)
- {
- for (Integer i : toRemove)
- {
- _ipFloodMap.remove(i);
- }
- }
-
- try
- {
- Thread.sleep(5000);
- }
- catch (InterruptedException e)
- {
-
- }
- }
- }
}