diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 388bdab2..dd3fc56e 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -93,7 +93,6 @@ - diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index e0cb7421..219e2df1 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -43,14 +43,11 @@ namespace FFXIVClassic_Lobby_Server if (packet.header.isEncrypted == 0x01) BasePacket.decryptPacket(client.blowfish, ref packet); - packet.debugPrintPacket(); - List subPackets = packet.getSubpackets(); foreach (SubPacket subpacket in subPackets) { if (subpacket.header.type == 0x01) - { - BasePacket init = InitPacket.buildPacket(0, Utils.UnixTimeStampUTC()); + { BasePacket reply2 = new BasePacket("./packets/login/login2.bin"); //Already Handshaked @@ -65,7 +62,7 @@ namespace FFXIVClassic_Lobby_Server } } - client.queuePacket(init); + client.queuePacket(reply2); break; } @@ -121,13 +118,13 @@ namespace FFXIVClassic_Lobby_Server //Get Character info //Create player actor - client.queuePacket(init); client.queuePacket(reply2); break; } - else if (subpacket.header.type == 0x08) + else if (subpacket.header.type == 0x07) { - + BasePacket init = InitPacket.buildPacket(BitConverter.ToUInt32(packet.data, 0x10), Utils.UnixTimeStampUTC()); + client.queuePacket(init); } else if (subpacket.header.type == 0x03) { diff --git a/FFXIVClassic Map Server/Server.cs b/FFXIVClassic Map Server/Server.cs index 009305d6..d20bf7e5 100644 --- a/FFXIVClassic Map Server/Server.cs +++ b/FFXIVClassic Map Server/Server.cs @@ -62,6 +62,8 @@ namespace FFXIVClassic_Lobby_Server Console.WriteLine("{0}:{1}", (mServerSocket.LocalEndPoint as IPEndPoint).Address, (mServerSocket.LocalEndPoint as IPEndPoint).Port); Console.ForegroundColor = ConsoleColor.Gray; + mProcessor = new PacketProcessor(mConnectedPlayerList, mConnectionList); + //mGameThread = new Thread(new ThreadStart(mProcessor.update)); //mGameThread.Start(); return true; @@ -69,6 +71,7 @@ namespace FFXIVClassic_Lobby_Server private void acceptCallback(IAsyncResult result) { + Log.conn("TEST."); ClientConnection conn = null; Socket socket = (System.Net.Sockets.Socket)result.AsyncState; @@ -133,7 +136,7 @@ namespace FFXIVClassic_Lobby_Server //Build packets until can no longer or out of data while(true) { - BasePacket basePacket = buildPacket(ref offset, conn.buffer); + BasePacket basePacket = buildPacket(ref offset, conn.buffer, bytesRead); //If can't build packet, break, else process another if (basePacket == null) break; @@ -142,13 +145,13 @@ namespace FFXIVClassic_Lobby_Server } //Not all bytes consumed, transfer leftover to beginning - if (offset <= bytesRead) + if (offset < bytesRead) Array.Copy(conn.buffer, offset, conn.buffer, 0, bytesRead - offset); //Build any queued subpackets into basepackets and send conn.flushQueuedSendPackets(); - if (offset <= bytesRead) + if (offset < bytesRead) //Need offset since not all bytes consumed conn.socket.BeginReceive(conn.buffer, bytesRead - offset, conn.buffer.Length - (bytesRead - offset), SocketFlags.None, new AsyncCallback(receiveCallback), conn); else @@ -185,18 +188,21 @@ namespace FFXIVClassic_Lobby_Server /// Current offset in buffer. /// Incoming buffer. /// Returns either a BasePacket or null if not enough data. - public BasePacket buildPacket(ref int offset, byte[] buffer) + public BasePacket buildPacket(ref int offset, byte[] buffer, int bytesRead) { BasePacket newPacket = null; //Too small to even get length - if (buffer.Length <= offset + 1) + if (bytesRead <= offset) return null; ushort packetSize = BitConverter.ToUInt16(buffer, offset); //Too small to whole packet - if (buffer.Length <= offset + packetSize) + if (bytesRead < offset + packetSize) + return null; + + if (buffer.Length < offset + packetSize) return null; newPacket = new BasePacket(buffer, ref offset); diff --git a/FFXIVClassic Map Server/packets/SubPacket.cs b/FFXIVClassic Map Server/packets/SubPacket.cs index 40ff4094..8ef5c83d 100644 --- a/FFXIVClassic Map Server/packets/SubPacket.cs +++ b/FFXIVClassic Map Server/packets/SubPacket.cs @@ -127,7 +127,7 @@ namespace FFXIVClassic_Lobby_Server.packets if (header.type == 0x3) Array.Copy(getGameMessageBytes(), 0, outBytes, SUBPACKET_SIZE, GAMEMESSAGE_SIZE); - Array.Copy(data, 0, outBytes, SUBPACKET_SIZE + header.type == 0x3 ? GAMEMESSAGE_SIZE : 0, data.Length); + Array.Copy(data, 0, outBytes, SUBPACKET_SIZE + (header.type == 0x3 ? GAMEMESSAGE_SIZE : 0), data.Length); return outBytes; } diff --git a/FFXIVClassic Map Server/packets/send/login/InitPacket.cs b/FFXIVClassic Map Server/packets/send/login/InitPacket.cs index 2ffa98ab..38b8f033 100644 --- a/FFXIVClassic Map Server/packets/send/login/InitPacket.cs +++ b/FFXIVClassic Map Server/packets/send/login/InitPacket.cs @@ -10,7 +10,7 @@ namespace FFXIVClassic_Map_Server.packets.send.login { class InitPacket { - public static BasePacket buildPacket(uint unknown, uint time) + public static BasePacket buildPacket(uint actorID, uint time) { byte[] data = new byte[0x18]; @@ -26,7 +26,7 @@ namespace FFXIVClassic_Map_Server.packets.send.login binWriter.Write((uint)0); binWriter.Write((uint)0xFFFFFD7F); - binWriter.Write((uint)unknown); + binWriter.Write((uint)actorID); binWriter.Write((uint)time); } catch (Exception)