Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Eclipse Workspace Patch 1.0
- #P aCis_gameserver
- Index: java/net/sf/l2j/loginserver/network/loginserverpackets/PlayerAuthResponse.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/network/loginserverpackets/PlayerAuthResponse.java (revision 9)
- +++ java/net/sf/l2j/loginserver/network/loginserverpackets/PlayerAuthResponse.java (working copy)
- @@ -4,11 +4,12 @@
- public class PlayerAuthResponse extends ServerBasePacket
- {
- - public PlayerAuthResponse(String account, boolean response)
- + public PlayerAuthResponse(String account, boolean response, String realIp)
- {
- writeC(0x03);
- writeS(account);
- writeC(response ? 1 : 0);
- + writeS(realIp);
- }
- @Override
- Index: java/net/sf/l2j/loginserver/data/xml/L2ProxyData.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/data/xml/L2ProxyData.java (nonexistent)
- +++ java/net/sf/l2j/loginserver/data/xml/L2ProxyData.java (working copy)
- @@ -0,0 +1,77 @@
- +package net.sf.l2j.loginserver.data.xml;
- +
- +import net.sf.l2j.commons.data.xml.IXmlReader;
- +import net.sf.l2j.commons.logging.CLogger;
- +import net.sf.l2j.loginserver.model.L2Proxy;
- +import org.w3c.dom.Document;
- +
- +import java.net.UnknownHostException;
- +import java.nio.file.Path;
- +import java.util.Collection;
- +import java.util.HashMap;
- +import java.util.Map;
- +
- +public class L2ProxyData implements IXmlReader
- +{
- + private static final CLogger LOGGER = new CLogger(L2ProxyData.class.getName());
- + private final Map<Integer, L2Proxy> _proxyServers = new HashMap<>();
- +
- + public L2Proxy getProxyById(int proxyId)
- + {
- + return _proxyServers.get(proxyId);
- + }
- +
- + public Collection<L2Proxy> getProxies()
- + {
- + return _proxyServers.values();
- + }
- +
- + @Override
- + public void load()
- + {
- + parseFile("./config/proxy.xml");
- + LOGGER.info("Loaded {} proxy servers.", _proxyServers.size());
- + }
- +
- + @Override
- + public void parseDocument(Document doc, Path path)
- + {
- + forEach(doc, "list", listNode ->
- + {
- + forEach(listNode, "gameserver", gameserverNode ->
- + {
- + final var gameserverSet = parseAttributes(gameserverNode);
- + var serverId = gameserverSet.getInteger("serverId");
- + var hidesGameserver = gameserverSet.getBool("hide");
- +
- + forEach(gameserverNode, "proxy", proxyNode -> {
- + final var proxySet = parseAttributes(proxyNode);
- + try
- + {
- + final var proxy = new L2Proxy(
- + serverId,
- + proxySet.getInteger("proxyServerId"),
- + proxySet.getString("proxyHost"),
- + proxySet.getInteger("proxyPort"),
- + hidesGameserver);
- + _proxyServers.put(proxySet.getInteger("proxyServerId"), proxy);
- + }
- + catch (UnknownHostException ex)
- + {
- + LOGGER.warn("Failed to process proxy due to badly formatted proxy host", ex);
- + }
- + });
- + });
- + });
- + }
- +
- + public static L2ProxyData getInstance()
- + {
- + return L2ProxyData.SingletonHolder.INSTANCE;
- + }
- +
- + private static class SingletonHolder
- + {
- + protected static final L2ProxyData INSTANCE = new L2ProxyData();
- + }
- +}
- \ No newline at end of file
- Index: config/proxy.xml
- ===================================================================
- --- config/proxy.xml (nonexistent)
- +++ config/proxy.xml (working copy)
- @@ -0,0 +1,6 @@
- +<?xml version='1.0' encoding='utf-8'?>
- +<list>
- + <gameserver serverId="1" hide="true">
- + <proxy proxyServerId="2" proxyHost="127.0.0.1" proxyPort="7778"/>
- + </gameserver>
- +</list>
- \ No newline at end of file
- Index: java/net/sf/l2j/gameserver/network/GameClient.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/GameClient.java (revision 9)
- +++ java/net/sf/l2j/gameserver/network/GameClient.java (working copy)
- @@ -93,6 +93,7 @@
- protected final ScheduledFuture<?> _autoSaveInDB;
- protected ScheduledFuture<?> _cleanupTask;
- + private String _realIpAddress;
- public GameClient(MMOConnection<GameClient> con)
- {
- @@ -330,6 +331,16 @@
- return _sessionId;
- }
- + public String getRealIpAddress()
- + {
- + return _realIpAddress;
- + }
- +
- + public void setRealIpAddress(String realIpAddress)
- + {
- + _realIpAddress = realIpAddress;
- + }
- +
- public void sendPacket(L2GameServerPacket gsp)
- {
- if (_isDetached)
- Index: build.xml
- ===================================================================
- --- build.xml (revision 9)
- +++ build.xml (working copy)
- @@ -43,6 +43,9 @@
- <mkdir dir="${build.dist.game}/log" />
- <mkdir dir="${build.dist.login}/log" />
- <mkdir dir="${build.dist.game}/config" />
- + <mkdir dir="${build.dist.game}/config/customs" />
- + <mkdir dir="${build.dist.game}/config/en" />
- + <mkdir dir="${build.dist.game}/config/en/customs" />
- <mkdir dir="${build.dist.login}/config" />
- <copy todir="${build.dist.game}/config">
- <fileset dir="config">
- @@ -51,11 +54,27 @@
- <exclude name="loginserver.properties" />
- </fileset>
- </copy>
- + <copy todir="${build.dist.game}/config/customs">
- + <fileset dir="config/customs">
- + <include name="*.properties" />
- + </fileset>
- + </copy>
- + <copy todir="${build.dist.game}/config/en">
- + <fileset dir="config/en">
- + <include name="*.properties" />
- + </fileset>
- + </copy>
- + <copy todir="${build.dist.game}/config/en/customs">
- + <fileset dir="config/customs">
- + <include name="*.properties" />
- + </fileset>
- + </copy>
- <copy todir="${build.dist.login}/config">
- <fileset dir="config">
- <include name="banned_ips.properties" />
- <include name="logging.properties" />
- <include name="loginserver.properties" />
- + <include name="proxy.xml" />
- </fileset>
- </copy>
- <mkdir dir="${build.dist.game}/data" />
- Index: java/net/sf/l2j/gameserver/network/loginserverpackets/PlayerAuthResponse.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/network/loginserverpackets/PlayerAuthResponse.java (revision 9)
- +++ java/net/sf/l2j/gameserver/network/loginserverpackets/PlayerAuthResponse.java (working copy)
- @@ -4,6 +4,7 @@
- {
- private final String _account;
- private final boolean _authed;
- + private final String _realIpAddress;
- public PlayerAuthResponse(byte[] decrypt)
- {
- @@ -11,6 +12,7 @@
- _account = readS();
- _authed = readC() != 0;
- + _realIpAddress = readS();
- }
- public String getAccount()
- @@ -22,4 +24,9 @@
- {
- return _authed;
- }
- +
- + public String getRealIpAddress()
- + {
- + return _realIpAddress;
- + }
- }
- \ No newline at end of file
- Index: java/net/sf/l2j/loginserver/LoginServer.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/LoginServer.java (revision 9)
- +++ java/net/sf/l2j/loginserver/LoginServer.java (working copy)
- @@ -18,6 +18,7 @@
- import net.sf.l2j.loginserver.data.manager.GameServerManager;
- import net.sf.l2j.loginserver.data.manager.IpBanManager;
- import net.sf.l2j.loginserver.data.sql.AccountTable;
- +import net.sf.l2j.loginserver.data.xml.L2ProxyData;
- import net.sf.l2j.loginserver.network.LoginClient;
- import net.sf.l2j.loginserver.network.LoginPacketHandler;
- @@ -64,6 +65,9 @@
- StringUtil.printSection("GameServerManager");
- GameServerManager.getInstance();
- + StringUtil.printSection("L2Proxy");
- + L2ProxyData.getInstance().load();
- +
- StringUtil.printSection("Ban List");
- IpBanManager.getInstance();
- Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java (revision 9)
- +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java (working copy)
- @@ -571,7 +571,7 @@
- html.replace("%nextai%", targetPlayer.getAI().getNextIntention().getType().toString());
- html.replace("%loc%", targetPlayer.getPosition().toString());
- html.replace("%account%", targetPlayer.getAccountName());
- - html.replace("%ip%", (targetPlayer.getClient().isDetached()) ? "Disconnected" : targetPlayer.getClient().getConnection().getInetAddress().getHostAddress());
- + html.replace("%ip%", (targetPlayer.getClient().isDetached()) ? "Disconnected" : targetPlayer.getClient().getRealIpAddress());
- }
- /**
- Index: java/net/sf/l2j/gameserver/LoginServerThread.java
- ===================================================================
- --- java/net/sf/l2j/gameserver/LoginServerThread.java (revision 9)
- +++ java/net/sf/l2j/gameserver/LoginServerThread.java (working copy)
- @@ -225,6 +225,7 @@
- final GameClient client = _clients.get(par.getAccount());
- if (client != null)
- {
- + client.setRealIpAddress(par.getRealIpAddress());
- if (par.isAuthed())
- {
- sendPacket(new PlayerInGame(par.getAccount()));
- Index: java/net/sf/l2j/loginserver/model/Account.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/model/Account.java (revision 9)
- +++ java/net/sf/l2j/loginserver/model/Account.java (working copy)
- @@ -4,6 +4,7 @@
- import net.sf.l2j.loginserver.data.manager.GameServerManager;
- import net.sf.l2j.loginserver.data.sql.AccountTable;
- +import net.sf.l2j.loginserver.data.xml.L2ProxyData;
- public final class Account
- {
- @@ -42,7 +43,12 @@
- public final boolean isLoginPossible(int serverId)
- {
- - final GameServerInfo gsi = GameServerManager.getInstance().getRegisteredGameServers().get(serverId);
- + GameServerInfo gsi = GameServerManager.getInstance().getRegisteredGameServers().get(serverId);
- + L2Proxy proxy = L2ProxyData.getInstance().getProxyById(serverId);
- +
- + if(gsi == null && proxy != null)
- + gsi = GameServerManager.getInstance().getRegisteredGameServers().get(proxy.getGameserverId());
- +
- if (gsi == null || !gsi.isAuthed())
- return false;
- Index: java/net/sf/l2j/loginserver/network/serverpackets/ServerList.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/network/serverpackets/ServerList.java (revision 9)
- +++ java/net/sf/l2j/loginserver/network/serverpackets/ServerList.java (working copy)
- @@ -3,13 +3,17 @@
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- import java.util.ArrayList;
- +import java.util.Comparator;
- import java.util.List;
- +import java.util.stream.Collectors;
- import net.sf.l2j.commons.network.ServerType;
- import net.sf.l2j.loginserver.data.manager.GameServerManager;
- +import net.sf.l2j.loginserver.data.xml.L2ProxyData;
- import net.sf.l2j.loginserver.model.Account;
- import net.sf.l2j.loginserver.model.GameServerInfo;
- +import net.sf.l2j.loginserver.model.L2Proxy;
- import net.sf.l2j.loginserver.model.ServerData;
- public final class ServerList extends L2LoginServerPacket
- @@ -16,6 +20,8 @@
- {
- private final List<ServerData> _servers = new ArrayList<>();
- + private static final Comparator<ServerData> SERVER_DATA_COMPARATOR = Comparator.comparingInt(ServerData::getServerId);
- +
- private final int _lastServer;
- public ServerList(Account account)
- @@ -27,7 +33,20 @@
- final ServerType type = (account.getAccessLevel() < 0 || (gsi.getType() == ServerType.GM_ONLY && account.getAccessLevel() <= 0)) ? ServerType.DOWN : gsi.getType();
- final String hostName = gsi.getHostName();
- - _servers.add(new ServerData(type, hostName, gsi));
- + var proxiesForGameserver = L2ProxyData.getInstance().getProxies().stream()
- + .filter(x -> x.getGameserverId() == gsi.getId()).collect(Collectors.toList());
- +
- + if(proxiesForGameserver.stream().noneMatch(L2Proxy::hidesGameserver))
- + {
- + _servers.add(new ServerData(type, hostName, gsi));
- + }
- +
- + proxiesForGameserver.forEach(l2Proxy ->
- + {
- + _servers.add(new ServerData(type, l2Proxy.getProxyServerId(), l2Proxy.getProxyAddress().getHostAddress(), l2Proxy.getProxyPort(), gsi));
- + });
- +
- + _servers.sort(SERVER_DATA_COMPARATOR);
- }
- }
- Index: java/net/sf/l2j/loginserver/data/xml/L2ProxyData.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/data/xml/L2ProxyData.java (nonexistent)
- +++ java/net/sf/l2j/loginserver/data/xml/L2ProxyData.java (working copy)
- @@ -0,0 +1,77 @@
- +package net.sf.l2j.loginserver.data.xml;
- +
- +import net.sf.l2j.commons.data.xml.IXmlReader;
- +import net.sf.l2j.commons.logging.CLogger;
- +import net.sf.l2j.loginserver.model.L2Proxy;
- +import org.w3c.dom.Document;
- +
- +import java.net.UnknownHostException;
- +import java.nio.file.Path;
- +import java.util.Collection;
- +import java.util.HashMap;
- +import java.util.Map;
- +
- +public class L2ProxyData implements IXmlReader
- +{
- + private static final CLogger LOGGER = new CLogger(L2ProxyData.class.getName());
- + private final Map<Integer, L2Proxy> _proxyServers = new HashMap<>();
- +
- + public L2Proxy getProxyById(int proxyId)
- + {
- + return _proxyServers.get(proxyId);
- + }
- +
- + public Collection<L2Proxy> getProxies()
- + {
- + return _proxyServers.values();
- + }
- +
- + @Override
- + public void load()
- + {
- + parseFile("./config/proxy.xml");
- + LOGGER.info("Loaded {} proxy servers.", _proxyServers.size());
- + }
- +
- + @Override
- + public void parseDocument(Document doc, Path path)
- + {
- + forEach(doc, "list", listNode ->
- + {
- + forEach(listNode, "gameserver", gameserverNode ->
- + {
- + final var gameserverSet = parseAttributes(gameserverNode);
- + var serverId = gameserverSet.getInteger("serverId");
- + var hidesGameserver = gameserverSet.getBool("hide");
- +
- + forEach(gameserverNode, "proxy", proxyNode -> {
- + final var proxySet = parseAttributes(proxyNode);
- + try
- + {
- + final var proxy = new L2Proxy(
- + serverId,
- + proxySet.getInteger("proxyServerId"),
- + proxySet.getString("proxyHost"),
- + proxySet.getInteger("proxyPort"),
- + hidesGameserver);
- + _proxyServers.put(proxySet.getInteger("proxyServerId"), proxy);
- + }
- + catch (UnknownHostException ex)
- + {
- + LOGGER.warn("Failed to process proxy due to badly formatted proxy host", ex);
- + }
- + });
- + });
- + });
- + }
- +
- + public static L2ProxyData getInstance()
- + {
- + return L2ProxyData.SingletonHolder.INSTANCE;
- + }
- +
- + private static class SingletonHolder
- + {
- + protected static final L2ProxyData INSTANCE = new L2ProxyData();
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/loginserver/model/L2Proxy.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/model/L2Proxy.java (nonexistent)
- +++ java/net/sf/l2j/loginserver/model/L2Proxy.java (working copy)
- @@ -0,0 +1,47 @@
- +package net.sf.l2j.loginserver.model;
- +
- +import java.net.InetAddress;
- +import java.net.UnknownHostException;
- +
- +public class L2Proxy
- +{
- + private final int _gameserverId;
- + private final int _proxyServerId;
- + private final InetAddress _proxyAddress;
- + private final int _proxyPort;
- + private final boolean _hidesGameserver;
- +
- + public L2Proxy(int gameserverId, int proxyServerId, String proxyHost, int proxyPort, boolean hidesGameserver) throws UnknownHostException
- + {
- + _gameserverId = gameserverId;
- + _proxyServerId = proxyServerId;
- + _proxyAddress = InetAddress.getByName(proxyHost);
- + _proxyPort = proxyPort;
- + _hidesGameserver = hidesGameserver;
- + }
- +
- + public int getGameserverId()
- + {
- + return _gameserverId;
- + }
- +
- + public int getProxyServerId()
- + {
- + return _proxyServerId;
- + }
- +
- + public InetAddress getProxyAddress()
- + {
- + return _proxyAddress;
- + }
- +
- + public int getProxyPort()
- + {
- + return _proxyPort;
- + }
- +
- + public boolean hidesGameserver()
- + {
- + return _hidesGameserver;
- + }
- +}
- \ No newline at end of file
- Index: java/net/sf/l2j/loginserver/model/ServerData.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/model/ServerData.java (revision 9)
- +++ java/net/sf/l2j/loginserver/model/ServerData.java (working copy)
- @@ -33,6 +33,21 @@
- _isShowingClock = gsi.isShowingClock();
- }
- + public ServerData(ServerType type, int serverId, String hostName, int port, GameServerInfo gsi)
- + {
- + _type = type;
- + _hostName = hostName;
- + _serverId = serverId;
- + _port = port;
- + _currentPlayers = gsi.getCurrentPlayerCount();
- + _maxPlayers = gsi.getMaxPlayers();
- + _ageLimit = gsi.getAgeLimit();
- + _isPvp = gsi.isPvp();
- + _isTestServer = gsi.isTestServer();
- + _isShowingBrackets = gsi.isShowingBrackets();
- + _isShowingClock = gsi.isShowingClock();
- + }
- +
- public ServerType getType()
- {
- return _type;
- Index: java/net/sf/l2j/loginserver/GameServerThread.java
- ===================================================================
- --- java/net/sf/l2j/loginserver/GameServerThread.java (revision 9)
- +++ java/net/sf/l2j/loginserver/GameServerThread.java (working copy)
- @@ -249,14 +249,16 @@
- {
- final PlayerAuthRequest par = new PlayerAuthRequest(data);
- final SessionKey key = LoginController.getInstance().getKeyForAccount(par.getAccount());
- + var authedClient = LoginController.getInstance().getAuthedClient(par.getAccount());
- + var ipAddress = authedClient != null ? authedClient.getConnection().getInetAddress().getHostAddress() : "";
- if (key != null && key.equals(par.getKey()))
- {
- LoginController.getInstance().removeAuthedLoginClient(par.getAccount());
- - sendPacket(new PlayerAuthResponse(par.getAccount(), true));
- + sendPacket(new PlayerAuthResponse(par.getAccount(), true, ipAddress));
- }
- else
- - sendPacket(new PlayerAuthResponse(par.getAccount(), false));
- + sendPacket(new PlayerAuthResponse(par.getAccount(), false, ipAddress));
- }
- else
- forceClose(LoginServerFail.NOT_AUTHED);
Advertisement
Add Comment
Please, Sign In to add comment