mirror of
https://github.com/Rogiel/l2jserver2
synced 2025-12-06 07:32:46 +00:00
Fixed cryptography issue preventing connection to the game
Signed-off-by: Rogiel <rogiel@rogiel.com>
This commit is contained in:
@@ -29,7 +29,7 @@ import com.l2jserver.db.dao.mysql5.MySQL5ItemDAO;
|
||||
*
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public class DAOModuleMySQL5 extends AbstractModule {
|
||||
public class MySQL5DAOModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(CharacterDAO.class).to(MySQL5CharacterDAO.class).in(
|
||||
@@ -18,7 +18,7 @@ package com.l2jserver;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Module;
|
||||
import com.l2jserver.db.dao.DAOModuleMySQL5;
|
||||
import com.l2jserver.db.dao.MySQL5DAOModule;
|
||||
import com.l2jserver.model.id.factory.IDFactoryModule;
|
||||
import com.l2jserver.service.ServiceModule;
|
||||
|
||||
@@ -32,6 +32,6 @@ public class GameServerModule extends AbstractModule {
|
||||
protected void configure() {
|
||||
install(new ServiceModule());
|
||||
install(new IDFactoryModule());
|
||||
install(new DAOModuleMySQL5());
|
||||
install(new MySQL5DAOModule());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package com.l2jserver.game.net;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* Manages the cryptography key used to write/read packets. This class also
|
||||
* updates the key once data has been sent/received.
|
||||
@@ -77,6 +79,6 @@ public class Lineage2CryptographyKey {
|
||||
}
|
||||
|
||||
public Lineage2CryptographyKey copy() {
|
||||
return new Lineage2CryptographyKey(key);
|
||||
return new Lineage2CryptographyKey(Arrays.copyOf(key, key.length));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,12 +54,12 @@ public class Lineage2Encrypter extends OneToOneEncoder {
|
||||
|
||||
final int offset = buffer.readerIndex() + 2; // skip header
|
||||
final int size = buffer.readableBytes() - 2;
|
||||
int temp = 0;
|
||||
int temp = 0, temp2 = 0;
|
||||
synchronized (key) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
int temp2 = buffer.getByte(offset + i) & 0xFF;
|
||||
buffer.setByte(offset + i, (byte) (temp2 ^ key.get(i) ^ temp));
|
||||
temp = temp2;
|
||||
temp2 = buffer.getByte(offset + i) & 0xFF;
|
||||
temp = temp2 ^ key.get(i) ^ temp;
|
||||
buffer.setByte(offset + i, (byte) temp);
|
||||
}
|
||||
key.update(size);
|
||||
}
|
||||
|
||||
@@ -61,10 +61,10 @@ public class Lineage2PacketWriter extends OneToOneEncoder {
|
||||
final ChannelBuffer buffer = ChannelBuffers.dynamicBuffer(
|
||||
ByteOrder.LITTLE_ENDIAN, 10);
|
||||
final ServerPacket packet = (ServerPacket) msg;
|
||||
buffer.writeShort(0x0000);
|
||||
buffer.writeShort(0);
|
||||
buffer.writeByte(packet.getOpcode()); // packet opcode
|
||||
packet.write(null, buffer);
|
||||
|
||||
packet.write(connection, buffer);
|
||||
|
||||
log.debug("Writing message {}", ChannelBuffers.hexDump(buffer));
|
||||
|
||||
return buffer;
|
||||
|
||||
@@ -25,7 +25,7 @@ import com.l2jserver.db.dao.CharacterDAO;
|
||||
import com.l2jserver.game.net.Lineage2Connection;
|
||||
import com.l2jserver.game.net.Lineage2Session;
|
||||
import com.l2jserver.game.net.packet.AbstractClientPacket;
|
||||
import com.l2jserver.game.net.packet.server.CharacterEnterWorldPacket;
|
||||
import com.l2jserver.game.net.packet.server.CharacterSelectionListPacket;
|
||||
import com.l2jserver.model.id.AccountID;
|
||||
import com.l2jserver.model.id.factory.AccountIDFactory;
|
||||
import com.l2jserver.model.world.L2Character;
|
||||
@@ -86,10 +86,10 @@ public class AuthLoginPacket extends AbstractClientPacket {
|
||||
loginKey1, loginKey2));
|
||||
|
||||
final List<L2Character> chars = characterDao.selectByAccount(accountId);
|
||||
// conn.write(CharacterSelectionListPacket.fromL2Session(
|
||||
// conn.getSession(), chars.toArray(new L2Character[0])));
|
||||
conn.setCharacterID(chars.get(0).getID());
|
||||
conn.write(new CharacterEnterWorldPacket(chars.get(0), playKey1));
|
||||
conn.write(CharacterSelectionListPacket.fromL2Session(
|
||||
conn.getSession(), chars.get(0)));
|
||||
// conn.setCharacterID(chars.get(0).getID());
|
||||
// conn.write(new CharacterEnterWorldPacket(chars.get(0), playKey1));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,7 +48,6 @@ import com.l2jserver.game.net.Lineage2Session;
|
||||
import com.l2jserver.game.net.packet.AbstractServerPacket;
|
||||
import com.l2jserver.model.world.Item;
|
||||
import com.l2jserver.model.world.L2Character;
|
||||
import com.l2jserver.model.world.actor.ActorExperience;
|
||||
import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll;
|
||||
import com.l2jserver.util.BufferUtils;
|
||||
|
||||
@@ -100,7 +99,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
// Can prevent players from creating new characters (if 0);
|
||||
// if 1 the client will ask if chars may be created
|
||||
// (RequestCharacterTemplatesPacket) Response: (CharacterTemplatePacket)
|
||||
buffer.writeInt(0x07); // max chars
|
||||
buffer.writeInt(7); // max chars
|
||||
buffer.writeByte(0x00);
|
||||
|
||||
// int i = 0;
|
||||
@@ -116,7 +115,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
// }
|
||||
buffer.writeInt(0x00); // ??
|
||||
|
||||
buffer.writeInt(0x01); // sex
|
||||
buffer.writeInt(character.getSex().option); // sex
|
||||
buffer.writeInt(character.getRace().id); // race
|
||||
|
||||
// if (character.getClassId() == character.getBaseClassId())
|
||||
@@ -125,7 +124,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
// else
|
||||
// buffer.writeInt(character.getBaseClassId());
|
||||
|
||||
buffer.writeInt(0x01); // active ??
|
||||
buffer.writeInt(1); // active ??
|
||||
|
||||
buffer.writeInt(-71338); // x
|
||||
buffer.writeInt(258271); // y
|
||||
@@ -134,9 +133,9 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
buffer.writeDouble(20); // hp cur
|
||||
buffer.writeDouble(20); // mp cur
|
||||
|
||||
buffer.writeInt(0x00); // sp
|
||||
buffer.writeLong(ActorExperience.LEVEL_1.experience); // exp
|
||||
buffer.writeInt(ActorExperience.LEVEL_1.level); // level
|
||||
buffer.writeInt(320); // sp
|
||||
buffer.writeLong(4640); // exp
|
||||
buffer.writeInt(5); // level
|
||||
|
||||
buffer.writeInt(0x00); // karma
|
||||
buffer.writeInt(0x00); // pk
|
||||
@@ -181,10 +180,10 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
|
||||
// hair style
|
||||
// buffer.writeInt(character.getAppearance().getHairStyle().option);
|
||||
buffer.writeInt(0x02);
|
||||
buffer.writeInt(0x00);
|
||||
// hair color
|
||||
// buffer.writeInt(character.getAppearance().getHairColor().option);
|
||||
buffer.writeInt(0x03);
|
||||
buffer.writeInt(0x00);
|
||||
// face
|
||||
// buffer.writeInt(character.getAppearance().getFace().option);
|
||||
buffer.writeInt(0x00);
|
||||
@@ -194,7 +193,7 @@ public class CharacterSelectionListPacket extends AbstractServerPacket {
|
||||
|
||||
buffer.writeInt(0x0); // seconds left before delete
|
||||
buffer.writeInt(character.getCharacterClass().id); // class
|
||||
buffer.writeInt(0x01); // c3 auto-select char
|
||||
buffer.writeInt(1); // c3 auto-select char
|
||||
|
||||
buffer.writeByte(0x00); // enchant effect
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.model.world.actor;
|
||||
package com.l2jserver.model.world.actor.event;
|
||||
|
||||
import com.l2jserver.model.world.capability.Actor;
|
||||
import com.l2jserver.service.game.world.event.WorldEvent;
|
||||
@@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with l2jserver. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.l2jserver.model.world.actor;
|
||||
package com.l2jserver.model.world.actor.event;
|
||||
|
||||
import com.l2jserver.model.world.capability.Actor;
|
||||
import com.l2jserver.service.game.world.event.WorldListener;
|
||||
@@ -19,9 +19,9 @@ package com.l2jserver.model.world.capability;
|
||||
import com.l2jserver.model.id.object.ActorID;
|
||||
import com.l2jserver.model.world.AbstractObject;
|
||||
import com.l2jserver.model.world.actor.ActorEffects;
|
||||
import com.l2jserver.model.world.actor.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.ActorListener;
|
||||
import com.l2jserver.model.world.actor.ActorSkillContainer;
|
||||
import com.l2jserver.model.world.actor.event.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.event.ActorListener;
|
||||
|
||||
/**
|
||||
* Defines an {@link AbstractObject} that defines an Actor (NPC, player, pet,
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
package com.l2jserver.model.world.player.event;
|
||||
|
||||
import com.l2jserver.model.world.Player;
|
||||
import com.l2jserver.model.world.actor.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.event.ActorEvent;
|
||||
|
||||
/**
|
||||
* Base event for {@link Player} objects
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
*/
|
||||
package com.l2jserver.model.world.player.event;
|
||||
|
||||
import com.l2jserver.model.world.actor.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.ActorListener;
|
||||
import com.l2jserver.model.world.actor.event.ActorEvent;
|
||||
import com.l2jserver.model.world.actor.event.ActorListener;
|
||||
import com.l2jserver.service.game.world.event.WorldEvent;
|
||||
import com.l2jserver.service.game.world.event.WorldListener;
|
||||
|
||||
|
||||
@@ -24,5 +24,5 @@ import com.l2jserver.service.Service;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public interface GMService extends Service {
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -58,6 +58,6 @@ public class BufferUtils {
|
||||
buffer.writeChar(str.charAt(i));
|
||||
}
|
||||
}
|
||||
buffer.writeChar('\000');
|
||||
buffer.writeShort(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ import org.junit.Test;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.l2jserver.db.dao.DAOModuleMySQL5;
|
||||
import com.l2jserver.db.dao.MySQL5DAOModule;
|
||||
import com.l2jserver.model.id.ID;
|
||||
import com.l2jserver.model.id.object.CharacterID;
|
||||
import com.l2jserver.model.id.object.factory.CharacterIDFactory;
|
||||
@@ -36,7 +36,7 @@ import com.l2jserver.service.game.template.TemplateService;
|
||||
|
||||
public class IDFactoryTest {
|
||||
private final Injector injector = Guice.createInjector(new ServiceModule(),
|
||||
new DAOModuleMySQL5(), new IDFactoryModule());
|
||||
new MySQL5DAOModule(), new IDFactoryModule());
|
||||
private final CharacterIDFactory charIdFactory = injector
|
||||
.getInstance(CharacterIDFactory.class);
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.junit.Test;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.l2jserver.db.dao.CharacterFriendDAO;
|
||||
import com.l2jserver.db.dao.DAOModuleMySQL5;
|
||||
import com.l2jserver.db.dao.MySQL5DAOModule;
|
||||
import com.l2jserver.model.id.factory.IDFactoryModule;
|
||||
import com.l2jserver.model.id.object.CharacterID;
|
||||
import com.l2jserver.model.id.object.factory.CharacterIDFactory;
|
||||
@@ -37,7 +37,7 @@ import com.l2jserver.service.game.template.TemplateService;
|
||||
|
||||
public class CharacterFriendListTest {
|
||||
private final Injector injector = Guice.createInjector(new ServiceModule(),
|
||||
new DAOModuleMySQL5(), new IDFactoryModule());
|
||||
new MySQL5DAOModule(), new IDFactoryModule());
|
||||
private final CharacterIDFactory charIdFactory = injector
|
||||
.getInstance(CharacterIDFactory.class);
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ import script.template.item.AdenaItemTemplate;
|
||||
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.l2jserver.db.dao.DAOModuleMySQL5;
|
||||
import com.l2jserver.db.dao.MySQL5DAOModule;
|
||||
import com.l2jserver.model.id.factory.IDFactoryModule;
|
||||
import com.l2jserver.model.id.template.factory.ItemTemplateIDFactory;
|
||||
import com.l2jserver.service.ServiceModule;
|
||||
@@ -30,7 +30,7 @@ import com.l2jserver.service.ServiceStartException;
|
||||
|
||||
public class StaticTemplateServiceTest {
|
||||
private final Injector injector = Guice.createInjector(new ServiceModule(),
|
||||
new IDFactoryModule(), new DAOModuleMySQL5());
|
||||
new IDFactoryModule(), new MySQL5DAOModule());
|
||||
private final TemplateService service = injector
|
||||
.getInstance(TemplateService.class);
|
||||
private final ItemTemplateIDFactory factory = injector
|
||||
|
||||
@@ -27,7 +27,7 @@ import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Scopes;
|
||||
import com.l2jserver.db.dao.DAOModuleMySQL5;
|
||||
import com.l2jserver.db.dao.MySQL5DAOModule;
|
||||
import com.l2jserver.model.id.factory.IDFactoryModule;
|
||||
import com.l2jserver.model.id.object.factory.CharacterIDFactory;
|
||||
import com.l2jserver.model.id.object.factory.ItemIDFactory;
|
||||
@@ -56,7 +56,7 @@ public class WorldEventDispatcherImplTest {
|
||||
@Before
|
||||
public void tearUp() throws ServiceStartException {
|
||||
Injector injector = Guice.createInjector(new ServiceModule(),
|
||||
new DAOModuleMySQL5(), new IDFactoryModule(),
|
||||
new MySQL5DAOModule(), new IDFactoryModule(),
|
||||
new AbstractModule() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
|
||||
Reference in New Issue
Block a user