diff --git a/Lidgren.Network/NetEncryption.cs b/Lidgren.Network/NetEncryption.cs
deleted file mode 100644
index f7b65f8..0000000
--- a/Lidgren.Network/NetEncryption.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright (c) 2010 Michael Lidgren
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-and associated documentation files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom
-the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or
-substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-using System;
-using System.Security.Cryptography;
-using System.Text;
-using System.Security;
-
-namespace Lidgren.Network
-{
- ///
- /// Methods to encrypt and decrypt data using the XTEA algorith
- ///
- public sealed class NetXtea
- {
- private const int m_blockSize = 8;
- private const int m_keySize = 16;
- private const int m_delta = unchecked((int)0x9E3779B9);
-
- private readonly int m_numRounds;
-
- private uint[] m_sum0;
- private uint[] m_sum1;
-
- ///
- /// 16 byte key
- ///
- public NetXtea(byte[] key, int rounds)
- {
- if (key.Length < 16)
- throw new NetException("Key too short!");
-
- m_numRounds = rounds;
- m_sum0 = new uint[m_numRounds];
- m_sum1 = new uint[m_numRounds];
- uint[] tmp = new uint[8];
-
- int num2;
- int index = num2 = 0;
- while (index < 4)
- {
- tmp[index] = BitConverter.ToUInt32(key, num2);
- index++;
- num2 += 4;
- }
- for (index = num2 = 0; index < 32; index++)
- {
- m_sum0[index] = ((uint)num2) + tmp[num2 & 3];
- num2 += -1640531527;
- m_sum1[index] = ((uint)num2) + tmp[(num2 >> 11) & 3];
- }
- }
-
- ///
- /// 16 byte key
- ///
- public NetXtea(byte[] key)
- : this(key, 32)
- {
- }
-
- ///
- /// String to hash for key
- ///
- public NetXtea(string key)
- : this(SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key)), 32)
- {
- }
-
- public void EncryptBlock(
- byte[] inBytes,
- int inOff,
- byte[] outBytes,
- int outOff)
- {
- uint v0 = BytesToUInt(inBytes, inOff);
- uint v1 = BytesToUInt(inBytes, inOff + 4);
-
- for (int i = 0; i != m_numRounds; i++)
- {
- v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ m_sum0[i];
- v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ m_sum1[i];
- }
-
- UIntToBytes(v0, outBytes, outOff);
- UIntToBytes(v1, outBytes, outOff + 4);
-
- return;
- }
-
- public void DecryptBlock(
- byte[] inBytes,
- int inOff,
- byte[] outBytes,
- int outOff)
- {
- // Pack bytes into integers
- uint v0 = BytesToUInt(inBytes, inOff);
- uint v1 = BytesToUInt(inBytes, inOff + 4);
-
- for (int i = m_numRounds - 1; i >= 0; i--)
- {
- v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ m_sum1[i];
- v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ m_sum0[i];
- }
-
- UIntToBytes(v0, outBytes, outOff);
- UIntToBytes(v1, outBytes, outOff + 4);
-
- return;
- }
-
- private static uint BytesToUInt(byte[] bytes, int offset)
- {
- uint retval = (uint)(bytes[offset] << 24);
- retval |= (uint)(bytes[++offset] << 16);
- retval |= (uint)(bytes[++offset] << 8);
- return (retval | bytes[++offset]);
- }
-
- private static void UIntToBytes(uint value, byte[] destination, int destinationOffset)
- {
- destination[destinationOffset++] = (byte)(value >> 24);
- destination[destinationOffset++] = (byte)(value >> 16);
- destination[destinationOffset++] = (byte)(value >> 8);
- destination[destinationOffset++] = (byte)value;
- }
- }
-}
diff --git a/Lidgren.Network/NetPeer.Recycling.cs b/Lidgren.Network/NetPeer.Recycling.cs
deleted file mode 100644
index 5198812..0000000
--- a/Lidgren.Network/NetPeer.Recycling.cs
+++ /dev/null
@@ -1,282 +0,0 @@
-/* Copyright (c) 2010 Michael Lidgren
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-and associated documentation files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom
-the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or
-substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-*/
-using System.Collections.Generic;
-using System;
-
-namespace Lidgren.Network
-{
- public partial class NetPeer
- {
- internal int m_storedBytes;
- private int m_maxStoredBytes;
- private readonly List m_storagePool = new List();
- private readonly NetQueue m_incomingMessagesPool = new NetQueue(16);
- private readonly NetQueue m_outgoingMessagesPool = new NetQueue(16);
-
- private void InitializeRecycling()
- {
- m_storagePool.Clear();
- m_storedBytes = 0;
- m_maxStoredBytes = m_configuration.m_maxRecycledBytesKept;
- m_incomingMessagesPool.Clear();
- m_outgoingMessagesPool.Clear();
- }
-
- internal byte[] GetStorage(int requiredBytes)
- {
- if (m_storagePool.Count < 1)
- {
- m_statistics.m_bytesAllocated += requiredBytes;
- return new byte[requiredBytes];
- }
-
- lock (m_storagePool)
- {
- // search from end to start
- for (int i = m_storagePool.Count - 1; i >= 0; i--)
- {
- byte[] retval = m_storagePool[i];
- if (retval.Length >= requiredBytes)
- {
- m_storagePool.RemoveAt(i);
- m_storedBytes -= retval.Length;
-
- return retval;
- }
- }
- }
-
- m_statistics.m_bytesAllocated += requiredBytes;
- return new byte[requiredBytes];
- }
-
- ///
- /// Creates a new message for sending
- ///
- public NetOutgoingMessage CreateMessage()
- {
- return CreateMessage(m_configuration.DefaultOutgoingMessageCapacity);
- }
-
- ///
- /// Creates a new message for sending
- ///
- /// initial capacity in bytes
- public NetOutgoingMessage CreateMessage(int initialCapacity)
- {
- NetOutgoingMessage retval;
- if (m_outgoingMessagesPool.TryDequeue(out retval))
- retval.Reset();
- else
- retval = new NetOutgoingMessage();
-
- byte[] storage = GetStorage(initialCapacity);
- retval.m_data = storage;
-
- return retval;
- }
-
- internal NetOutgoingMessage CreateLibraryMessage(NetMessageLibraryType tp, string content)
- {
- NetOutgoingMessage retval = CreateMessage(1 + (content == null ? 0 : content.Length));
- retval.m_libType = tp;
- retval.Write((content == null ? "" : content));
- return retval;
- }
-
- ///
- /// Recycle the message to the library for reuse
- ///
- public void Recycle(NetIncomingMessage msg)
- {
- if (msg == null)
- throw new ArgumentNullException("msg");
-
- if (msg.m_status != NetIncomingMessageReleaseStatus.ReleasedToApplication)
- throw new NetException("Message not under application control; recycled more than once?");
-
- msg.m_status = NetIncomingMessageReleaseStatus.RecycledByApplication;
- if (msg.m_data != null)
- {
- lock (m_storagePool)
- {
-#if DEBUG
- if (m_storagePool.Contains(msg.m_data))
- throw new NetException("Storage pool object recycled twice!");
-#endif
- m_storedBytes += msg.m_data.Length;
- m_storagePool.Add(msg.m_data);
- }
- msg.m_data = null;
- }
- m_incomingMessagesPool.Enqueue(msg);
- }
-
- ///
- /// Recycle the message to the library for reuse
- ///
- internal void Recycle(NetOutgoingMessage msg)
- {
- VerifyNetworkThread();
-
-#if DEBUG
- lock (m_connections)
- {
- foreach (NetConnection conn in m_connections)
- {
- for (int i = 0; i < conn.m_unsentMessages.Count; i++)
- {
- NetSending send = conn.m_unsentMessages.TryPeek(i);
- if (send != null && send.Message == msg)
- throw new NetException("Ouch! Recycling unsent message!");
-
- foreach (NetSending asend in conn.m_unackedSends)
- if (asend.Message == msg)
- throw new NetException("Ouch! Recycling stored message!");
- }
- }
- }
-#endif
- NetException.Assert(msg.m_numUnfinishedSendings == 0, "Recycling m_numUnfinishedSendings is " + msg.m_numUnfinishedSendings + " (expected 0)");
-
- if (msg.m_data != null)
- {
- lock (m_storagePool)
- {
- if (!m_storagePool.Contains(msg.m_data))
- {
- m_storedBytes += msg.m_data.Length;
- m_storagePool.Add(msg.m_data);
- }
- }
- msg.m_data = null;
- }
- m_outgoingMessagesPool.Enqueue(msg);
- }
-
- ///
- /// Call to check if storage pool should be reduced
- ///
- private void ReduceStoragePool()
- {
- VerifyNetworkThread();
-
- if (m_storedBytes < m_configuration.m_maxRecycledBytesKept)
- return; // never mind threading, no big deal if storage is larger than config setting for a frame
-
- int wasStoredBytes;
- int reduceTo;
- lock (m_storagePool)
- {
- // since newly stored message at added to the end; remove from the start
- wasStoredBytes = m_storedBytes;
- reduceTo = m_maxStoredBytes / 2;
-
- int remove = 0;
- while (m_storedBytes > reduceTo && remove < m_storagePool.Count)
- {
- byte[] arr = m_storagePool[0];
- m_storedBytes -= arr.Length;
- remove++;
- }
- if (remove > 0)
- m_storagePool.RemoveRange(0, remove);
- }
-
- // done
- LogDebug("Reduced recycled bytes pool from " + wasStoredBytes + " bytes to " + m_storedBytes + " bytes (target " + reduceTo + ")");
-
- return;
- }
-
- ///
- /// Creates an incoming message with the required capacity for releasing to the application
- ///
- internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, string contents)
- {
- NetIncomingMessage retval;
- if (string.IsNullOrEmpty(contents))
- {
- retval = CreateIncomingMessage(tp, 1);
- retval.Write("");
- return retval;
- }
-
- byte[] bytes = System.Text.Encoding.UTF8.GetBytes(contents);
- retval = CreateIncomingMessage(tp, bytes.Length + (bytes.Length > 127 ? 2 : 1));
- retval.Write(contents);
-
- return retval;
- }
-
- ///
- /// Creates an incoming message with the required capacity for releasing to the application
- ///
- internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, int requiredCapacity)
- {
- NetIncomingMessage retval;
- if (m_incomingMessagesPool.TryDequeue(out retval))
- retval.Reset();
- else
- retval = new NetIncomingMessage();
-
- NetException.Assert(retval.m_status == NetIncomingMessageReleaseStatus.NotReleased);
-
- retval.m_incomingType = tp;
- retval.m_senderConnection = null;
- retval.m_senderEndpoint = null;
- retval.m_status = NetIncomingMessageReleaseStatus.NotReleased;
-
- if (requiredCapacity > 0)
- {
- byte[] storage = GetStorage(requiredCapacity);
- retval.m_data = storage;
- }
- else
- {
- retval.m_data = null;
- }
-
- return retval;
- }
-
- internal NetIncomingMessage CreateIncomingMessage(NetIncomingMessageType tp, byte[] copyFrom, int offset, int copyLength)
- {
- NetIncomingMessage retval;
- if (m_incomingMessagesPool.TryDequeue(out retval))
- retval.Reset();
- else
- retval = new NetIncomingMessage();
-
- NetException.Assert(retval.m_status == NetIncomingMessageReleaseStatus.NotReleased);
-
- retval.m_data = GetStorage(copyLength);
- Buffer.BlockCopy(copyFrom, offset, retval.m_data, 0, copyLength);
-
- retval.m_bitLength = copyLength * 8;
- retval.m_incomingType = tp;
- retval.m_senderConnection = null;
- retval.m_senderEndpoint = null;
-
- return retval;
- }
-
- }
-}