Example #1
0
 internal static bool SendPacket(TcpClient client, Packet packet)
 {
     return Utils.Network.SendPacket(client, packet.ToBytes());
 }
Example #2
0
 /// <summary>
 /// Decompresses a *.kcam file. Version 1.42 and higher.
 /// </summary>
 /// <param name="FilePath"></param>
 /// <returns></returns>
 internal static List<Packet> DecompressCamToPackets(string filePath)
 {
     try
     {
         MemoryStream uncompressedStream = new MemoryStream();
         FileInfo fi = new FileInfo(filePath);
         using (FileStream inFile = fi.OpenRead())
         {
             using (DeflateStream Decompress = new DeflateStream(inFile,
                 CompressionMode.Decompress))
             {
                 byte[] buffer = new byte[4096];
                 int numRead = 0;
                 while ((numRead =
                     Decompress.Read(buffer, 0, buffer.Length)) != 0)
                 {
                     uncompressedStream.Write(buffer, 0, numRead);
                 }
             }
         }
         uncompressedStream.Position = 0;
         List<Packet> DecompressedList = new List<Packet>();
         BinaryReader binReader = new BinaryReader(uncompressedStream);
         byte[] tempBuffer = binReader.ReadBytes(8); // 2 bytes TibiaVersion, 2 bytes CamVersion, 4 bytes RunningLength(ms)
         DecompressedList.Add(new Packet(new byte[] { tempBuffer[0], tempBuffer[1] }));
         DecompressedList.Add(new Packet(new byte[] { tempBuffer[2], tempBuffer[3] }));
         DecompressedList.Add(new Packet(new byte[] { tempBuffer[4], tempBuffer[5], tempBuffer[6], tempBuffer[7] }));
         while (binReader.BaseStream.Length > binReader.BaseStream.Position)
         {
             Packet p = new Packet();
             p.AddUInt32(binReader.ReadUInt32()); // delay
             uint len = binReader.ReadUInt32();
             p.AddUInt32(len);
             p.AddBytes(binReader.ReadBytes((int)len)); // package
             DecompressedList.Add(p);
         }
         binReader.Close();
         return DecompressedList;
     }
     catch (Exception ex) { }
     return new List<Packet>();
 }
Example #3
0
        private static void HandleServerComm()
        {
            try
            {
                NetworkStream streamServer = tcpServer.GetStream();
                bool ConnectToGameServer = false;
                byte[] message = new byte[4096];
                int bytesRead, connection = 0;
                uint[] XTEAKey = new uint[4];

                while (true)
                {
                    bytesRead = 0;
                    try
                    {
                        //blocks until a server sends a message
                        bytesRead = streamServer.Read(message, 0, 4096);
                    }
                    catch { break; }

                    if (bytesRead > 0)
                    {
                        byte[] packet = new byte[bytesRead];
                        Array.Copy(message, packet, bytesRead);
                        if (connection != 8)
                        {
                            connection = Memory.ReadByte(Addresses.Client.Connection);
                        }
                        if (Recording && connection > 5)
                        {
                            if (RecordedPackets.Count == 3)
                            {
                                stopwatchRecordingStarted.Reset();
                                stopwatchRecordingStarted.Start();
                            }
                            TimeRecorded = stopwatchRecordingStarted.ElapsedMilliseconds;
                            Packet p = new Packet();
                            p.AddUInt32((uint)TimeRecorded);
                            p.AddUInt32((uint)bytesRead);
                            p.AddBytes(packet);
                            RecordedPackets.Add(p);
                        }
                        if (connection == 3)
                        {
                            ConnectToGameServer = true;
                            Memory.WriteByte(Addresses.Charlist.NumberOfCharacters, 0);
                        }
                        Utils.Network.SendPacket(tcpClient, packet);
                    }

                    else if (bytesRead == 0) { break; }
                }
                tcpServer.Close();
                if (tcpClient.Connected) { tcpClient.Close(); }
                if (ConnectToGameServer)
                {
                    for (int i = 0; i < 100; i++)
                    {
                        if (Memory.ReadInt(Addresses.Client.DialogOpen) > 0 &&
                            Memory.ReadByte(Addresses.Charlist.NumberOfCharacters) > 0)
                        {
                            characterList = Characterlist.Players;
                            Client.Charlist.WriteIP("127.0.0.1");
                            if (!listenThread.IsAlive)
                            {
                                listenerLocal = new TcpListener(IPAddress.Parse("127.0.0.1"), ServerPort);
                                listenThread = new Thread(new ThreadStart(ListenForClients));
                                listenThread.Start();
                            }
                            break;
                        }
                        else if (Memory.ReadInt(Addresses.Client.DialogOpen) > 0 &&
                                 Client.Misc.DialogTitle == "Enter Game")
                        {
                            break;
                        }
                        Thread.Sleep(100);
                    }
                    ConnectToGameServer = false;
                }
                if (Client.Player.Connected && Recording)
                {
                    if (!listenThread.IsAlive)
                    {
                        listenerLocal = new TcpListener(IPAddress.Parse("127.0.0.1"), ServerPort);
                        listenThread = new Thread(new ThreadStart(ListenForClients));
                        listenThread.Start();
                    }
                    tcpClient.Close();
                }
            }
            catch { }
        }
Example #4
0
 internal static void SaveTibiaCam(List<Packet> packets, string fileName)
 {
     if (packets.Count > Proxy.MinimumRecordedPackets)
     {
         if (!fileName.EndsWith(".kcam"))
         {
             fileName += ".kcam";
         }
         else if (fileName.EndsWith(".kcam.kcam"))
         {
             fileName = fileName.Replace(".kcam.kcam", ".kcam");
         }
         while (File.Exists(fileName))
         {
             fileName = "Unnamed-" + Utils.RandomizeInt(0, 9999) + ".kcam";
         }
         Packet LastPacket = packets[packets.Count - 1];
         packets[2] = new Packet(BitConverter.GetBytes(LastPacket.GetUInt32()));
         Utils.CompressCam(packets, fileName);
         Proxy.ClearTibiaCamBuffer();
     }
 }