From de353c9909a9da5e96e9993a3da2d45c2ee52bad Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sat, 5 Dec 2015 18:58:06 -0500 Subject: [PATCH] Added null option for status update packet to send empty list. Added 0x1CF response for FL list to packet processor. Exception reason will now be printed when can't send packet by console. --- .../FFXIVClassic Map Server.csproj | 9 ++--- FFXIVClassic Map Server/PacketProcessor.cs | 22 +++++++++++++ FFXIVClassic Map Server/Program.cs | 2 +- .../receive/social/FriendlistRequestPacket.cs | 33 +++++++++++++++++++ .../packets/send/social/FriendStatusPacket.cs | 11 +++++-- 5 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 FFXIVClassic Map Server/packets/receive/social/FriendlistRequestPacket.cs diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 9b27b474..393f317c 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -93,10 +93,8 @@ - - - - + + @@ -145,6 +143,9 @@ + + + diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 423b3b74..de1346bf 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -22,6 +22,8 @@ using FFXIVClassic_Map_Server.packets.send.script; using FFXIVClassic_Map_Server.packets.send.player; using FFXIVClassic_Map_Server.dataobjects.chara; using FFXIVClassic_Map_Server.packets.send.supportdesk; +using FFXIVClassic_Map_Server.packets.receive.social; +using FFXIVClassic_Map_Server.packets.send.social; namespace FFXIVClassic_Lobby_Server { @@ -336,6 +338,26 @@ namespace FFXIVClassic_Lobby_Server case 0x012F: subpacket.debugPrintSubPacket(); break; + /* SOCIAL STUFF */ + case 0x01C9: + AddRemoveSocialPacket addBlackList = new AddRemoveSocialPacket(subpacket.data); + client.queuePacket(BasePacket.createPacket(BlacklistAddedPacket.buildPacket(player.actorID, true, addBlackList.name), true, false)); + break; + case 0x01CA: + AddRemoveSocialPacket removeBlackList = new AddRemoveSocialPacket(subpacket.data); + client.queuePacket(BasePacket.createPacket(BlacklistRemovedPacket.buildPacket(player.actorID, true, removeBlackList.name), true, false)); + break; + case 0x01CC: + AddRemoveSocialPacket addFriendList = new AddRemoveSocialPacket(subpacket.data); + client.queuePacket(BasePacket.createPacket(FriendlistAddedPacket.buildPacket(player.actorID, true, (uint)10, true, addFriendList.name), true, false)); + break; + case 0x01CD: + AddRemoveSocialPacket removeFriendList = new AddRemoveSocialPacket(subpacket.data); + client.queuePacket(BasePacket.createPacket(FriendlistRemovedPacket.buildPacket(player.actorID, true, removeFriendList.name), true, false)); + break; + case 0x01CF: + client.queuePacket(BasePacket.createPacket(FriendStatusPacket.buildPacket(player.actorID, null), true, false)); + break; /* SUPPORT DESK STUFF */ //Request for FAQ/Info List case 0x01D0: diff --git a/FFXIVClassic Map Server/Program.cs b/FFXIVClassic Map Server/Program.cs index 9d9742db..1d407f11 100644 --- a/FFXIVClassic Map Server/Program.cs +++ b/FFXIVClassic Map Server/Program.cs @@ -83,7 +83,7 @@ namespace FFXIVClassic_Lobby_Server } catch (Exception e) { - Log.error("Could not load packet"); + Log.error("Could not load packet: " + e); } } else if (split[0].Equals("property")) diff --git a/FFXIVClassic Map Server/packets/receive/social/FriendlistRequestPacket.cs b/FFXIVClassic Map Server/packets/receive/social/FriendlistRequestPacket.cs new file mode 100644 index 00000000..39fbda78 --- /dev/null +++ b/FFXIVClassic Map Server/packets/receive/social/FriendlistRequestPacket.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.packets.receive.social +{ + class FriendlistRequestPacket + { + public bool invalidPacket = false; + public uint num1; + public uint num2; + + public FriendlistRequestPacket(byte[] data) + { + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryReader binReader = new BinaryReader(mem)) + { + try{ + num1 = binReader.ReadUInt32(); + num2 = binReader.ReadUInt32(); + } + catch (Exception){ + invalidPacket = true; + } + } + } + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/social/FriendStatusPacket.cs b/FFXIVClassic Map Server/packets/send/social/FriendStatusPacket.cs index 816ddce5..0a7b48f0 100644 --- a/FFXIVClassic Map Server/packets/send/social/FriendStatusPacket.cs +++ b/FFXIVClassic Map Server/packets/send/social/FriendStatusPacket.cs @@ -24,10 +24,15 @@ namespace FFXIVClassic_Map_Server.packets.send.social binWriter.Write((UInt32)0); int max; - if (friendStatus.Length <= 200) - max = friendStatus.Length; + if (friendStatus != null) + { + if (friendStatus.Length <= 200) + max = friendStatus.Length; + else + max = 200; + } else - max = 200; + max = 0; binWriter.Write((UInt32)max);