diff --git a/Lidgren.Network/Encryption/NetAESEncryption.cs b/Lidgren.Network/Encryption/NetAESEncryption.cs
index 8f74ce3..5ed5582 100644
--- a/Lidgren.Network/Encryption/NetAESEncryption.cs
+++ b/Lidgren.Network/Encryption/NetAESEncryption.cs
@@ -1,180 +1,26 @@
using System;
-using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
-using System.Text;
namespace Lidgren.Network
{
- ///
- /// AES encryption
- ///
- public class NetAESEncryption : NetEncryption
+ public class NetAESEncryption : NetCryptoProviderBase
{
- private readonly byte[] m_key;
- private readonly byte[] m_iv;
- private readonly int m_bitSize;
- private static readonly List s_keysizes;
- private static readonly List s_blocksizes;
-
- static NetAESEncryption()
+ public NetAESEncryption(NetPeer peer)
+ : base(peer, new AesCryptoServiceProvider())
{
-#if !IOS && !__ANDROID__ && !UNITY_4_5
- AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
- List temp = new List();
- foreach (KeySizes keysize in aes.LegalKeySizes)
- {
- for (int i = keysize.MinSize; i <= keysize.MaxSize; i += keysize.SkipSize)
- {
- if (!temp.Contains(i))
- temp.Add(i);
- if (i == keysize.MaxSize)
- break;
- }
- }
- s_keysizes = temp;
- temp = new List();
- foreach (KeySizes keysize in aes.LegalBlockSizes)
- {
- for (int i = keysize.MinSize; i <= keysize.MaxSize; i += keysize.SkipSize)
- {
-
- if (!temp.Contains(i))
- temp.Add(i);
- if (i == keysize.MaxSize)
- break;
- }
- }
- s_blocksizes = temp;
-#endif
}
- ///
- /// NetAESEncryption constructor
- ///
- public NetAESEncryption(NetPeer peer, byte[] key, byte[] iv)
- : base(peer)
- {
- if (!s_keysizes.Contains(key.Length * 8))
- throw new NetException(string.Format("Not a valid key size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_keysizes)));
-
- if (!s_blocksizes.Contains(iv.Length * 8))
- throw new NetException(string.Format("Not a valid iv size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_blocksizes)));
-
- m_key = key;
- m_iv = iv;
- m_bitSize = m_key.Length * 8;
- }
-
- ///
- /// NetAESEncryption constructor
- ///
- public NetAESEncryption(NetPeer peer, string key, int bitsize)
- : base(peer)
- {
- if (!s_keysizes.Contains(bitsize))
- throw new NetException(string.Format("Not a valid key size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_keysizes)));
-
- byte[] entropy = Encoding.UTF32.GetBytes(key);
- // I know hardcoding salts is bad, but in this case I think it is acceptable.
- HMACSHA512 hmacsha512 = new HMACSHA512(Convert.FromBase64String("i88NEiez3c50bHqr3YGasDc4p8jRrxJAaiRiqixpvp4XNAStP5YNoC2fXnWkURtkha6M8yY901Gj07IRVIRyGL=="));
- hmacsha512.Initialize();
- for (int i = 0; i < 1000; i++)
- {
- entropy = hmacsha512.ComputeHash(entropy);
- }
- int keylen = bitsize / 8;
- m_key = new byte[keylen];
- Buffer.BlockCopy(entropy, 0, m_key, 0, keylen);
- m_iv = new byte[s_blocksizes[0] / 8];
-
- Buffer.BlockCopy(entropy, entropy.Length - m_iv.Length - 1, m_iv, 0, m_iv.Length);
- m_bitSize = bitsize;
- }
-
- ///
- /// NetAESEncryption constructor
- ///
public NetAESEncryption(NetPeer peer, string key)
- : this(peer, key, s_keysizes[0])
+ : base(peer, new AesCryptoServiceProvider())
{
+ SetKey(key);
}
- ///
- /// Encrypt outgoing message
- ///
- public override bool Encrypt(NetOutgoingMessage msg)
+ public NetAESEncryption(NetPeer peer, byte[] data, int offset, int count)
+ : base(peer, new AesCryptoServiceProvider())
{
-#if !IOS && !__ANDROID__ && !UNITY_4_5
- try
- {
- using (AesCryptoServiceProvider aesCryptoServiceProvider = new AesCryptoServiceProvider { KeySize = m_bitSize, Mode = CipherMode.CBC })
- {
- using (ICryptoTransform cryptoTransform = aesCryptoServiceProvider.CreateEncryptor(m_key, m_iv))
- {
- var memoryStream = new MemoryStream();
- using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
- {
- cryptoStream.Write(msg.m_data, 0, msg.m_data.Length);
- cryptoStream.Close();
-
- m_peer.Recycle(msg.m_data);
- var arr = memoryStream.ToArray();
- msg.m_data = arr;
- msg.m_bitLength = arr.Length * 8;
- }
- }
- }
-
- }
- catch(Exception ex)
- {
- m_peer.LogWarning("Encryption failed: " + ex);
- return false;
- }
- return true;
-#else
- return false;
-#endif
- }
-
- ///
- /// Decrypt incoming message
- ///
- public override bool Decrypt(NetIncomingMessage msg)
- {
-#if !IOS && !__ANDROID__ && !UNITY_4_5
- try
- {
- // nested usings are fun!
- using (AesCryptoServiceProvider aesCryptoServiceProvider = new AesCryptoServiceProvider { KeySize = m_bitSize, Mode = CipherMode.CBC })
- {
- using (ICryptoTransform cryptoTransform = aesCryptoServiceProvider.CreateDecryptor(m_key, m_iv))
- {
- var memoryStream = new MemoryStream();
- using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
- {
- cryptoStream.Write(msg.m_data, 0, msg.m_data.Length);
- cryptoStream.Close();
-
- m_peer.Recycle(msg.m_data);
- var arr = memoryStream.ToArray();
- msg.m_data = arr;
- msg.m_bitLength = arr.Length * 8;
- }
- }
- }
-
- }
- catch (Exception ex)
- {
- m_peer.LogWarning("Decryption failed: " + ex);
- return false;
- }
- return true;
-#else
- return false;
-#endif
+ SetKey(data, offset, count);
}
}
}
diff --git a/Lidgren.Network/Encryption/NetDESEncryption.cs b/Lidgren.Network/Encryption/NetDESEncryption.cs
index 396e49a..2af117a 100644
--- a/Lidgren.Network/Encryption/NetDESEncryption.cs
+++ b/Lidgren.Network/Encryption/NetDESEncryption.cs
@@ -1,170 +1,26 @@
using System;
-using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
-using System.Text;
namespace Lidgren.Network
{
- ///
- /// DES encryption
- ///
- public class NetDESEncryption : NetEncryption
+ public class NetDESEncryption : NetCryptoProviderBase
{
- private readonly byte[] m_key;
- private readonly byte[] m_iv;
- private readonly int m_bitSize;
- private static readonly List s_keysizes;
- private static readonly List s_blocksizes;
-
- static NetDESEncryption()
+ public NetDESEncryption(NetPeer peer)
+ : base(peer, new DESCryptoServiceProvider())
{
-
- DESCryptoServiceProvider des = new DESCryptoServiceProvider();
- List temp = new List();
- foreach (KeySizes keysize in des.LegalKeySizes)
- {
- for (int i = keysize.MinSize; i <= keysize.MaxSize; i += keysize.SkipSize)
- {
- if (!temp.Contains(i))
- temp.Add(i);
- if (i == keysize.MaxSize)
- break;
- }
- }
- s_keysizes = temp;
- temp = new List();
- foreach (KeySizes keysize in des.LegalBlockSizes)
- {
- for (int i = keysize.MinSize; i <= keysize.MaxSize; i += keysize.SkipSize)
- {
-
- if (!temp.Contains(i))
- temp.Add(i);
- if (i == keysize.MaxSize)
- break;
- }
- }
- s_blocksizes = temp;
}
- ///
- /// NetDESEncryption constructor
- ///
- public NetDESEncryption(NetPeer peer, byte[] key, byte[] iv)
- : base(peer)
- {
- if (!s_keysizes.Contains(key.Length * 8))
- throw new NetException(string.Format("Not a valid key size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_keysizes)));
-
- if (!s_blocksizes.Contains(iv.Length * 8))
- throw new NetException(string.Format("Not a valid iv size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_blocksizes)));
-
- m_key = key;
- m_iv = iv;
- m_bitSize = m_key.Length * 8;
- }
-
- ///
- /// NetDESEncryption constructor
- ///
- public NetDESEncryption(NetPeer peer, string key, int bitsize)
- : base(peer)
- {
- if (!s_keysizes.Contains(bitsize))
- throw new NetException(string.Format("Not a valid key size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_keysizes)));
-
- byte[] entropy = Encoding.UTF32.GetBytes(key);
- // I know hardcoding salts is bad, but in this case I think it is acceptable.
- HMACSHA512 hmacsha512 = new HMACSHA512(Convert.FromBase64String("i88NEiez3c50bHqr3YGasDc4p8jRrxJAaiRiqixpvp4XNAStP5YNoC2fXnWkURtkha6M8yY901Gj07IRVIRyGL=="));
- hmacsha512.Initialize();
- for (int i = 0; i < 1000; i++)
- {
- entropy = hmacsha512.ComputeHash(entropy);
- }
- int keylen = bitsize / 8;
- m_key = new byte[keylen];
- Buffer.BlockCopy(entropy, 0, m_key, 0, keylen);
- m_iv = new byte[s_blocksizes[0] / 8];
-
- Buffer.BlockCopy(entropy, entropy.Length - m_iv.Length - 1, m_iv, 0, m_iv.Length);
- m_bitSize = bitsize;
- }
-
- ///
- /// NetDESEncryption constructor
- ///
public NetDESEncryption(NetPeer peer, string key)
- : this(peer, key, s_keysizes[0])
+ : base(peer, new DESCryptoServiceProvider())
{
+ SetKey(key);
}
- ///
- /// Encrypt outgoing message
- ///
- public override bool Encrypt(NetOutgoingMessage msg)
+ public NetDESEncryption(NetPeer peer, byte[] data, int offset, int count)
+ : base(peer, new DESCryptoServiceProvider())
{
- try
- {
- using (DESCryptoServiceProvider desCryptoServiceProvider = new DESCryptoServiceProvider { KeySize = m_bitSize, Mode = CipherMode.CBC })
- {
- using (ICryptoTransform cryptoTransform = desCryptoServiceProvider.CreateEncryptor(m_key, m_iv))
- {
- var memoryStream = new MemoryStream();
- using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
- {
- cryptoStream.Write(msg.m_data, 0, msg.m_data.Length);
- cryptoStream.Close();
-
- m_peer.Recycle(msg.m_data);
- var arr = memoryStream.ToArray();
- msg.m_data = arr;
- msg.m_bitLength = arr.Length * 8;
- }
- }
- }
-
- }
- catch (Exception ex)
- {
- m_peer.LogWarning("Encryption failed: " + ex);
- return false;
- }
- return true;
- }
-
- ///
- /// Decrypt incoming message
- ///
- public override bool Decrypt(NetIncomingMessage msg)
- {
- try
- {
- using (DESCryptoServiceProvider desCryptoServiceProvider = new DESCryptoServiceProvider { KeySize = m_bitSize, Mode = CipherMode.CBC })
- {
- using (ICryptoTransform cryptoTransform = desCryptoServiceProvider.CreateDecryptor(m_key, m_iv))
- {
- var memoryStream = new MemoryStream();
- using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
- {
- cryptoStream.Write(msg.m_data, 0, msg.m_data.Length);
- cryptoStream.Close();
-
- m_peer.Recycle(msg.m_data);
- var arr = memoryStream.ToArray();
- msg.m_data = arr;
- msg.m_bitLength = arr.Length * 8;
- }
- }
- }
-
- }
- catch (Exception ex)
- {
- m_peer.LogWarning("Decryption failed: " + ex);
- return false;
- }
- return true;
+ SetKey(data, offset, count);
}
}
-}
\ No newline at end of file
+}
diff --git a/Lidgren.Network/Encryption/NetEncryption.cs b/Lidgren.Network/Encryption/NetEncryption.cs
index 80e3942..7a7f0ee 100644
--- a/Lidgren.Network/Encryption/NetEncryption.cs
+++ b/Lidgren.Network/Encryption/NetEncryption.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Security.Cryptography;
namespace Lidgren.Network
{
@@ -23,6 +24,14 @@ namespace Lidgren.Network
m_peer = peer;
}
+ public void SetKey(string str)
+ {
+ var bytes = System.Text.Encoding.ASCII.GetBytes(str);
+ SetKey(bytes, 0, bytes.Length);
+ }
+
+ public abstract void SetKey(byte[] data, int offset, int count);
+
///
/// Encrypt an outgoing message in place
///
diff --git a/Lidgren.Network/Encryption/NetRC2Encryption.cs b/Lidgren.Network/Encryption/NetRC2Encryption.cs
index 3886ccb..eccb972 100644
--- a/Lidgren.Network/Encryption/NetRC2Encryption.cs
+++ b/Lidgren.Network/Encryption/NetRC2Encryption.cs
@@ -1,173 +1,26 @@
using System;
-using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
-using System.Text;
namespace Lidgren.Network
{
- ///
- /// RC2 encryption
- ///
- public class NetRC2Encryption : NetEncryption
+ public class NetRC2Encryption : NetCryptoProviderBase
{
- private readonly byte[] m_key;
- private readonly byte[] m_iv;
- private readonly int m_bitSize;
- private static readonly List s_keysizes;
- private static readonly List s_blocksizes;
-
- static NetRC2Encryption()
+ public NetRC2Encryption(NetPeer peer)
+ : base(peer, new RC2CryptoServiceProvider())
{
-
- RC2CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();
- List temp = new List();
- foreach (KeySizes keysize in rc2.LegalKeySizes)
- {
- for (int i = keysize.MinSize; i <= keysize.MaxSize; i += keysize.SkipSize)
- {
- if (!temp.Contains(i))
- temp.Add(i);
- if (i == keysize.MaxSize)
- break;
- }
- }
- s_keysizes = temp;
- temp = new List();
- foreach (KeySizes keysize in rc2.LegalBlockSizes)
- {
- for (int i = keysize.MinSize; i <= keysize.MaxSize; i += keysize.SkipSize)
- {
-
- if (!temp.Contains(i))
- temp.Add(i);
- if (i == keysize.MaxSize)
- break;
- }
- }
- s_blocksizes = temp;
}
- ///
- /// NetRC2Encryption constructor
- ///
- public NetRC2Encryption(NetPeer peer, byte[] key, byte[] iv)
- : base(peer)
- {
- if (!s_keysizes.Contains(key.Length * 8))
- throw new NetException(string.Format("Not a valid key size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_keysizes)));
-
- if (!s_blocksizes.Contains(iv.Length * 8))
- throw new NetException(string.Format("Not a valid iv size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_blocksizes)));
-
- m_key = key;
- m_iv = iv;
- m_bitSize = m_key.Length * 8;
- }
-
- ///
- /// NetRC2Encryption constructor
- ///
- public NetRC2Encryption(NetPeer peer, string key, int bitsize)
- : base(peer)
- {
- if (!s_keysizes.Contains(bitsize))
- throw new NetException(string.Format("Not a valid key size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_keysizes)));
-
- byte[] entropy = Encoding.UTF32.GetBytes(key);
- // I know hardcoding salts is bad, but in this case I think it is acceptable.
- HMACSHA512 hmacsha512 = new HMACSHA512(Convert.FromBase64String("i88NEiez3c50bHqr3YGasDc4p8jRrxJAaiRiqixpvp4XNAStP5YNoC2fXnWkURtkha6M8yY901Gj07IRVIRyGL=="));
- hmacsha512.Initialize();
- for (int i = 0; i < 1000; i++)
- {
- entropy = hmacsha512.ComputeHash(entropy);
- }
- int keylen = bitsize / 8;
- m_key = new byte[keylen];
- Buffer.BlockCopy(entropy, 0, m_key, 0, keylen);
- m_iv = new byte[s_blocksizes[0] / 8];
-
- Buffer.BlockCopy(entropy, entropy.Length - m_iv.Length - 1, m_iv, 0, m_iv.Length);
- m_bitSize = bitsize;
- }
-
- ///
- /// NetRC2Encryption constructor
- ///
- ///
- ///
public NetRC2Encryption(NetPeer peer, string key)
- : this(peer, key, s_keysizes[0])
+ : base(peer, new RC2CryptoServiceProvider())
{
+ SetKey(key);
}
- ///
- /// Encrypt outgoing message
- ///
- public override bool Encrypt(NetOutgoingMessage msg)
+ public NetRC2Encryption(NetPeer peer, byte[] data, int offset, int count)
+ : base(peer, new RC2CryptoServiceProvider())
{
- try
- {
- using (RC2CryptoServiceProvider rc2CryptoServiceProvider = new RC2CryptoServiceProvider { KeySize = m_bitSize, Mode = CipherMode.CBC })
- {
- using (ICryptoTransform cryptoTransform = rc2CryptoServiceProvider.CreateEncryptor(m_key, m_iv))
- {
- var memoryStream = new MemoryStream();
- using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
- {
- cryptoStream.Write(msg.m_data, 0, msg.m_data.Length);
- cryptoStream.Close();
-
- m_peer.Recycle(msg.m_data);
- var arr = memoryStream.ToArray();
- msg.m_data = arr;
- msg.m_bitLength = arr.Length * 8;
- }
- }
- }
-
- }
- catch (Exception ex)
- {
- m_peer.LogWarning("Encryption failed: " + ex);
- return false;
- }
- return true;
- }
-
- ///
- /// Decrypt incoming message
- ///
- public override bool Decrypt(NetIncomingMessage msg)
- {
- try
- {
- // nested usings are fun!
- using (RC2CryptoServiceProvider rc2CryptoServiceProvider = new RC2CryptoServiceProvider { KeySize = m_bitSize, Mode = CipherMode.CBC })
- {
- using (ICryptoTransform cryptoTransform = rc2CryptoServiceProvider.CreateDecryptor(m_key, m_iv))
- {
- var memoryStream = new MemoryStream();
- using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
- {
- cryptoStream.Write(msg.m_data, 0, msg.m_data.Length);
- cryptoStream.Close();
-
- m_peer.Recycle(msg.m_data);
- var arr = memoryStream.ToArray();
- msg.m_data = arr;
- msg.m_bitLength = arr.Length * 8;
- }
- }
- }
-
- }
- catch (Exception ex)
- {
- m_peer.LogWarning("Decryption failed: " + ex);
- return false;
- }
- return true;
+ SetKey(data, offset, count);
}
}
-}
\ No newline at end of file
+}
diff --git a/Lidgren.Network/Encryption/NetTripleDESEncryption.cs b/Lidgren.Network/Encryption/NetTripleDESEncryption.cs
index ed64c5b..4debafc 100644
--- a/Lidgren.Network/Encryption/NetTripleDESEncryption.cs
+++ b/Lidgren.Network/Encryption/NetTripleDESEncryption.cs
@@ -1,170 +1,26 @@
using System;
-using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
-using System.Text;
namespace Lidgren.Network
{
- ///
- /// Triple DES encryption
- ///
- public class NetTripleDESEncryption : NetEncryption
+ public class NetTripleDESEncryption : NetCryptoProviderBase
{
- private readonly byte[] m_key;
- private readonly byte[] m_iv;
- private readonly int m_bitSize;
- private static readonly List s_keysizes;
- private static readonly List s_blocksizes;
-
- static NetTripleDESEncryption()
+ public NetTripleDESEncryption(NetPeer peer)
+ : base(peer, new TripleDESCryptoServiceProvider())
{
- TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
- List temp = new List();
- foreach (KeySizes keysize in tripleDES.LegalKeySizes)
- {
- for (int i = keysize.MinSize; i <= keysize.MaxSize; i += keysize.SkipSize)
- {
- if (!temp.Contains(i))
- temp.Add(i);
- if (i == keysize.MaxSize)
- break;
- }
- }
- s_keysizes = temp;
- temp = new List();
- foreach (KeySizes keysize in tripleDES.LegalBlockSizes)
- {
- for (int i = keysize.MinSize; i <= keysize.MaxSize; i += keysize.SkipSize)
- {
-
- if (!temp.Contains(i))
- temp.Add(i);
- if (i == keysize.MaxSize)
- break;
- }
- }
- s_blocksizes = temp;
}
- ///
- /// NetTriplsDESEncryption constructor
- ///
- public NetTripleDESEncryption(NetPeer peer, byte[] key, byte[] iv)
- : base(peer)
- {
- if (!s_keysizes.Contains(key.Length * 8))
- throw new NetException(string.Format("Not a valid key size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_keysizes)));
-
- if (!s_blocksizes.Contains(iv.Length * 8))
- throw new NetException(string.Format("Not a valid iv size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_blocksizes)));
-
- m_key = key;
- m_iv = iv;
- m_bitSize = m_key.Length * 8;
- }
-
- ///
- /// NetTriplsDESEncryption constructor
- ///
- public NetTripleDESEncryption(NetPeer peer, string key, int bitsize)
- : base(peer)
- {
- if (!s_keysizes.Contains(bitsize))
- throw new NetException(string.Format("Not a valid key size. (Valid values are: {0})", NetUtility.MakeCommaDelimitedList(s_keysizes)));
-
- byte[] entropy = Encoding.UTF32.GetBytes(key);
- // I know hardcoding salts is bad, but in this case I think it is acceptable.
- HMACSHA512 hmacsha512 = new HMACSHA512(Convert.FromBase64String("i88NEiez3c50bHqr3YGasDc4p8jRrxJAaiRiqixpvp4XNAStP5YNoC2fXnWkURtkha6M8yY901Gj07IRVIRyGL=="));
- hmacsha512.Initialize();
- for (int i = 0; i < 1000; i++)
- {
- entropy = hmacsha512.ComputeHash(entropy);
- }
- int keylen = bitsize / 8;
- m_key = new byte[keylen];
- Buffer.BlockCopy(entropy, 0, m_key, 0, keylen);
- m_iv = new byte[s_blocksizes[0] / 8];
-
- Buffer.BlockCopy(entropy, entropy.Length - m_iv.Length - 1, m_iv, 0, m_iv.Length);
- m_bitSize = bitsize;
- }
-
- ///
- /// NetTriplsDESEncryption constructor
- ///
public NetTripleDESEncryption(NetPeer peer, string key)
- : this(peer, key, s_keysizes[0])
+ : base(peer, new TripleDESCryptoServiceProvider())
{
+ SetKey(key);
}
- ///
- /// Encrypt outgoing message
- ///
- public override bool Encrypt(NetOutgoingMessage msg)
+ public NetTripleDESEncryption(NetPeer peer, byte[] data, int offset, int count)
+ : base(peer, new TripleDESCryptoServiceProvider())
{
- try
- {
- using (TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider { KeySize = m_bitSize, Mode = CipherMode.CBC })
- {
- using (ICryptoTransform cryptoTransform = tripleDESCryptoServiceProvider.CreateEncryptor(m_key, m_iv))
- {
- var memoryStream = new MemoryStream();
- using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
- {
- cryptoStream.Write(msg.m_data, 0, msg.m_data.Length);
- cryptoStream.Close();
-
- m_peer.Recycle(msg.m_data);
- var arr = memoryStream.ToArray();
- msg.m_data = arr;
- msg.m_bitLength = arr.Length * 8;
- }
- }
- }
-
- }
- catch (Exception ex)
- {
- m_peer.LogWarning("Encryption failed: " + ex);
- return false;
- }
- return true;
- }
-
- ///
- /// Decrypt incoming message
- ///
- public override bool Decrypt(NetIncomingMessage msg)
- {
- try
- {
- // nested usings are fun!
- using (TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider { KeySize = m_bitSize, Mode = CipherMode.CBC })
- {
- using (ICryptoTransform cryptoTransform = tripleDESCryptoServiceProvider.CreateDecryptor(m_key, m_iv))
- {
- var memoryStream = new MemoryStream();
- using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
- {
- cryptoStream.Write(msg.m_data, 0, msg.m_data.Length);
- cryptoStream.Close();
-
- m_peer.Recycle(msg.m_data);
- var arr = memoryStream.ToArray();
- msg.m_data = arr;
- msg.m_bitLength = arr.Length * 8;
- }
- }
- }
-
- }
- catch (Exception ex)
- {
- m_peer.LogWarning("Decryption failed: " + ex);
- return false;
- }
- return true;
+ SetKey(data, offset, count);
}
}
-}
\ No newline at end of file
+}
diff --git a/Lidgren.Network/Encryption/NetXorEncryption.cs b/Lidgren.Network/Encryption/NetXorEncryption.cs
index b94b337..eea53f2 100644
--- a/Lidgren.Network/Encryption/NetXorEncryption.cs
+++ b/Lidgren.Network/Encryption/NetXorEncryption.cs
@@ -20,6 +20,12 @@ namespace Lidgren.Network
m_key = key;
}
+ public override void SetKey(byte[] data, int offset, int count)
+ {
+ m_key = new byte[count];
+ Array.Copy(data, offset, m_key, 0, count);
+ }
+
///
/// NetXorEncryption constructor
///
diff --git a/Lidgren.Network/Encryption/NetXteaEncryption.cs b/Lidgren.Network/Encryption/NetXteaEncryption.cs
index 69cd347..ed1d0ee 100644
--- a/Lidgren.Network/Encryption/NetXteaEncryption.cs
+++ b/Lidgren.Network/Encryption/NetXteaEncryption.cs
@@ -87,6 +87,13 @@ namespace Lidgren.Network
{
}
+ public override void SetKey(byte[] data, int offset, int length)
+ {
+ var key = NetUtility.CreateSHA1Hash(data, offset, length);
+ NetException.Assert(key.Length == 16);
+ SetKey(key, 0, 16);
+ }
+
///
/// Encrypts a block of bytes
///
diff --git a/Lidgren.Network/Lidgren.Network.csproj b/Lidgren.Network/Lidgren.Network.csproj
index 1eb59ff..4ee2910 100644
--- a/Lidgren.Network/Lidgren.Network.csproj
+++ b/Lidgren.Network/Lidgren.Network.csproj
@@ -59,12 +59,15 @@
-
-
-
+
+ Code
+
+
Code
+
+
Code
diff --git a/Lidgren.Network/NetConnection.MTU.cs b/Lidgren.Network/NetConnection.MTU.cs
index 6de22fe..d8d1b88 100644
--- a/Lidgren.Network/NetConnection.MTU.cs
+++ b/Lidgren.Network/NetConnection.MTU.cs
@@ -24,6 +24,11 @@ namespace Lidgren.Network
internal int m_currentMTU;
+ ///
+ /// Gets the current MTU in bytes. If PeerConfiguration.AutoExpandMTU is false, this will be PeerConfiguration.MaximumTransmissionUnit.
+ ///
+ public int CurrentMTU { get { return m_currentMTU; } }
+
internal void InitExpandMTU(double now)
{
m_lastSentMTUAttemptTime = now + m_peerConfiguration.m_expandMTUFrequency + 1.5f + m_averageRoundtripTime; // wait a tiny bit before starting to expand mtu
@@ -150,7 +155,7 @@ namespace Lidgren.Network
bool connectionReset;
m_peer.SendPacket(len, m_remoteEndPoint, 1, out connectionReset);
- // m_peer.LogDebug("Received MTU expand request for " + size + " bytes");
+ //m_peer.LogDebug("Received MTU expand request for " + size + " bytes");
m_statistics.PacketSent(len, 1);
}
diff --git a/Lidgren.Network/NetConnection.cs b/Lidgren.Network/NetConnection.cs
index d634671..2a46903 100644
--- a/Lidgren.Network/NetConnection.cs
+++ b/Lidgren.Network/NetConnection.cs
@@ -279,24 +279,36 @@ namespace Lidgren.Network
m_peer.VerifyNetworkThread();
int sz = om.GetEncodedSize();
- if (sz > m_currentMTU)
- m_peer.LogWarning("Message larger than MTU! Fragmentation must have failed!");
+ //if (sz > m_currentMTU)
+ // m_peer.LogWarning("Message larger than MTU! Fragmentation must have failed!");
+ bool connReset; // TODO: handle connection reset
+
+ // can fit this message together with previously written to buffer?
if (m_sendBufferWritePtr + sz > m_currentMTU)
{
- bool connReset; // TODO: handle connection reset
- NetException.Assert(m_sendBufferWritePtr > 0 && m_sendBufferNumMessages > 0); // or else the message should have been fragmented earlier
+ if (m_sendBufferWritePtr > 0 && m_sendBufferNumMessages > 0)
+ {
+ // previous message in buffer; send these first
+ m_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connReset);
+ m_statistics.PacketSent(m_sendBufferWritePtr, m_sendBufferNumMessages);
+ m_sendBufferWritePtr = 0;
+ m_sendBufferNumMessages = 0;
+ }
+ }
+
+ // encode it into buffer regardless if it (now) fits within MTU or not
+ m_sendBufferWritePtr = om.Encode(m_peer.m_sendBuffer, m_sendBufferWritePtr, seqNr);
+ m_sendBufferNumMessages++;
+
+ if (m_sendBufferWritePtr > m_currentMTU)
+ {
+ // send immediately; we're already over MTU
m_peer.SendPacket(m_sendBufferWritePtr, m_remoteEndPoint, m_sendBufferNumMessages, out connReset);
m_statistics.PacketSent(m_sendBufferWritePtr, m_sendBufferNumMessages);
m_sendBufferWritePtr = 0;
m_sendBufferNumMessages = 0;
}
-
- m_sendBufferWritePtr = om.Encode(m_peer.m_sendBuffer, m_sendBufferWritePtr, seqNr);
- m_sendBufferNumMessages++;
-
- NetException.Assert(m_sendBufferWritePtr > 0, "Encoded zero size message?");
- NetException.Assert(m_sendBufferNumMessages > 0);
}
///
@@ -325,12 +337,12 @@ namespace Lidgren.Network
if (chan == null)
chan = CreateSenderChannel(tp);
- if (msg.GetEncodedSize() > m_currentMTU)
- m_peer.ThrowOrLog("Message too large! Fragmentation failure?");
+ if ((method != NetDeliveryMethod.Unreliable && method != NetDeliveryMethod.UnreliableSequenced) && msg.GetEncodedSize() > m_currentMTU)
+ m_peer.ThrowOrLog("Reliable message too large! Fragmentation failure?");
var retval = chan.Enqueue(msg);
- if (retval == NetSendResult.Sent && m_peerConfiguration.m_autoFlushSendQueue == false)
- retval = NetSendResult.Queued; // queued since we're not autoflushing
+ //if (retval == NetSendResult.Sent && m_peerConfiguration.m_autoFlushSendQueue == false)
+ // retval = NetSendResult.Queued; // queued since we're not autoflushing
return retval;
}
@@ -522,6 +534,15 @@ namespace Lidgren.Network
return;
}
+ public bool CanSendImmediately(NetDeliveryMethod method, int sequenceChannel)
+ {
+ int channelSlot = (int)method - 1 + sequenceChannel;
+ var chan = m_sendChannels[channelSlot];
+ if (chan == null)
+ return true;
+ return (chan.GetAllowedSends() - chan.m_queuedSends.Count) > 0;
+ }
+
internal void Shutdown(string reason)
{
ExecuteDisconnect(reason, true);
diff --git a/Lidgren.Network/NetConnectionStatistics.cs b/Lidgren.Network/NetConnectionStatistics.cs
index 88498ff..9eb9ab3 100644
--- a/Lidgren.Network/NetConnectionStatistics.cs
+++ b/Lidgren.Network/NetConnectionStatistics.cs
@@ -45,6 +45,7 @@ namespace Lidgren.Network
internal int m_sentMessages;
internal int m_receivedMessages;
+ internal int m_receivedFragments;
internal int m_sentBytes;
internal int m_receivedBytes;
@@ -62,8 +63,13 @@ namespace Lidgren.Network
{
m_sentPackets = 0;
m_receivedPackets = 0;
+ m_sentMessages = 0;
+ m_receivedMessages = 0;
+ m_receivedFragments = 0;
m_sentBytes = 0;
m_receivedBytes = 0;
+ m_resentMessagesDueToDelay = 0;
+ m_resentMessagesDueToHole = 0;
}
///
@@ -122,12 +128,13 @@ namespace Lidgren.Network
}
#else
[Conditional("DEBUG")]
- internal void PacketReceived(int numBytes, int numMessages)
+ internal void PacketReceived(int numBytes, int numMessages, int numFragments)
{
NetException.Assert(numBytes > 0 && numMessages > 0);
m_receivedPackets++;
m_receivedBytes += numBytes;
m_receivedMessages += numMessages;
+ m_receivedFragments += numFragments;
}
#endif
@@ -157,8 +164,9 @@ namespace Lidgren.Network
{
StringBuilder bdr = new StringBuilder();
//bdr.AppendLine("Average roundtrip time: " + NetTime.ToReadable(m_connection.m_averageRoundtripTime));
+ bdr.AppendLine("Current MTU: " + m_connection.m_currentMTU);
bdr.AppendLine("Sent " + m_sentBytes + " bytes in " + m_sentMessages + " messages in " + m_sentPackets + " packets");
- bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages in " + m_receivedPackets + " packets");
+ bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages (of which " + m_receivedFragments + " fragments) in " + m_receivedPackets + " packets");
if (m_resentMessagesDueToDelay > 0)
bdr.AppendLine("Resent messages (delay): " + m_resentMessagesDueToDelay);
diff --git a/Lidgren.Network/NetPeer.Fragmentation.cs b/Lidgren.Network/NetPeer.Fragmentation.cs
index 5062c8f..f407176 100644
--- a/Lidgren.Network/NetPeer.Fragmentation.cs
+++ b/Lidgren.Network/NetPeer.Fragmentation.cs
@@ -18,7 +18,7 @@ namespace Lidgren.Network
private Dictionary> m_receivedFragmentGroups;
// on user thread
- private void SendFragmentedMessage(NetOutgoingMessage msg, IList recipients, NetDeliveryMethod method, int sequenceChannel)
+ private NetSendResult SendFragmentedMessage(NetOutgoingMessage msg, IList recipients, NetDeliveryMethod method, int sequenceChannel)
{
// Note: this group id is PER SENDING/NetPeer; ie. same id is sent to all recipients;
// this should be ok however; as long as recipients differentiate between same id but different sender
@@ -44,6 +44,8 @@ namespace Lidgren.Network
if (numChunks * bytesPerChunk < totalBytes)
numChunks++;
+ NetSendResult retval = NetSendResult.Sent;
+
int bitsPerChunk = bytesPerChunk * 8;
int bitsLeft = msg.LengthBits;
for (int i = 0; i < numChunks; i++)
@@ -63,12 +65,16 @@ namespace Lidgren.Network
Interlocked.Add(ref chunk.m_recyclingCount, recipients.Count);
foreach (NetConnection recipient in recipients)
- recipient.EnqueueMessage(chunk, method, sequenceChannel);
+ {
+ var res = recipient.EnqueueMessage(chunk, method, sequenceChannel);
+ if ((int)res > (int)retval)
+ retval = res; // return "worst" result
+ }
bitsLeft -= bitsPerChunk;
}
- return;
+ return retval;
}
private void HandleReleasedFragment(NetIncomingMessage im)
diff --git a/Lidgren.Network/NetPeer.Internal.cs b/Lidgren.Network/NetPeer.Internal.cs
index ffdca0b..35bd824 100644
--- a/Lidgren.Network/NetPeer.Internal.cs
+++ b/Lidgren.Network/NetPeer.Internal.cs
@@ -99,7 +99,16 @@ namespace Lidgren.Network
if (m_receiveCallbacks != null)
{
foreach (var tuple in m_receiveCallbacks)
- tuple.Item1.Post(tuple.Item2, this);
+ {
+ try
+ {
+ tuple.Item1.Post(tuple.Item2, this);
+ }
+ catch (Exception ex)
+ {
+ LogWarning("Receive callback exception:" + ex);
+ }
+ }
}
}
@@ -473,6 +482,7 @@ namespace Lidgren.Network
// parse packet into messages
//
int numMessages = 0;
+ int numFragments = 0;
int ptr = 0;
while ((bytesReceived - ptr) >= NetConstants.HeaderByteSize)
{
@@ -492,6 +502,8 @@ namespace Lidgren.Network
bool isFragment = ((low & 1) == 1);
ushort sequenceNumber = (ushort)((low >> 1) | (((int)high) << 7));
+ numFragments++;
+
ushort payloadBitLength = (ushort)(m_receiveBuffer[ptr++] | (m_receiveBuffer[ptr++] << 8));
int payloadByteLength = NetUtility.BytesToHoldBits(payloadBitLength);
@@ -561,9 +573,9 @@ namespace Lidgren.Network
ptr += payloadByteLength;
}
- m_statistics.PacketReceived(bytesReceived, numMessages);
+ m_statistics.PacketReceived(bytesReceived, numMessages, numFragments);
if (sender != null)
- sender.m_statistics.PacketReceived(bytesReceived, numMessages);
+ sender.m_statistics.PacketReceived(bytesReceived, numMessages, numFragments);
} while (m_socket.Available > 0);
}
diff --git a/Lidgren.Network/NetPeer.Send.cs b/Lidgren.Network/NetPeer.Send.cs
index c051463..e42a317 100644
--- a/Lidgren.Network/NetPeer.Send.cs
+++ b/Lidgren.Network/NetPeer.Send.cs
@@ -46,8 +46,10 @@ namespace Lidgren.Network
throw new NetException("This message has already been sent! Use NetPeer.SendMessage() to send to multiple recipients efficiently");
msg.m_isSent = true;
+ bool suppressFragmentation = (method == NetDeliveryMethod.Unreliable || method == NetDeliveryMethod.UnreliableSequenced) && m_configuration.UnreliableSizeBehaviour != NetUnreliableSizeBehaviour.NormalFragmentation;
+
int len = NetConstants.UnfragmentedMessageHeaderSize + msg.LengthBytes; // headers + length, faster than calling msg.GetEncodedSize
- if (len <= recipient.m_currentMTU)
+ if (len <= recipient.m_currentMTU || suppressFragmentation)
{
Interlocked.Increment(ref msg.m_recyclingCount);
return recipient.EnqueueMessage(msg, method, sequenceChannel);
@@ -57,8 +59,7 @@ namespace Lidgren.Network
// message must be fragmented!
if (recipient.m_status != NetConnectionStatus.Connected)
return NetSendResult.FailedNotConnected;
- SendFragmentedMessage(msg, new NetConnection[] { recipient }, method, sequenceChannel);
- return NetSendResult.Queued; // could be different for each connection; Queued is "most true"
+ return SendFragmentedMessage(msg, new NetConnection[] { recipient }, method, sequenceChannel);
}
}
diff --git a/Lidgren.Network/NetPeerConfiguration.cs b/Lidgren.Network/NetPeerConfiguration.cs
index c2c90db..c5ed3e5 100644
--- a/Lidgren.Network/NetPeerConfiguration.cs
+++ b/Lidgren.Network/NetPeerConfiguration.cs
@@ -56,6 +56,7 @@ namespace Lidgren.Network
internal float m_connectionTimeout;
internal bool m_enableUPnP;
internal bool m_autoFlushSendQueue;
+ private NetUnreliableSizeBehaviour m_unreliableSizeBehaviour;
internal NetIncomingMessageType m_disabledTypes;
internal int m_port;
@@ -114,6 +115,7 @@ namespace Lidgren.Network
m_autoExpandMTU = false;
m_expandMTUFrequency = 2.0f;
m_expandMTUFailAttempts = 5;
+ m_unreliableSizeBehaviour = NetUnreliableSizeBehaviour.IgnoreMTU;
m_loss = 0.0f;
m_minimumOneWayLatency = 0.0f;
@@ -171,6 +173,15 @@ namespace Lidgren.Network
return !((m_disabledTypes & type) == type);
}
+ ///
+ /// Gets or sets the behaviour of unreliable sends above MTU
+ ///
+ public NetUnreliableSizeBehaviour UnreliableSizeBehaviour
+ {
+ get { return m_unreliableSizeBehaviour; }
+ set { m_unreliableSizeBehaviour = value; }
+ }
+
///
/// Gets or sets the name of the library network thread. Cannot be changed once NetPeer is initialized.
///
@@ -474,4 +485,25 @@ namespace Lidgren.Network
return retval;
}
}
+
+ ///
+ /// Behaviour of unreliable sends above MTU
+ ///
+ public enum NetUnreliableSizeBehaviour
+ {
+ ///
+ /// Sending an unreliable message will ignore MTU and send everything in a single packet; this is the new default
+ ///
+ IgnoreMTU = 0,
+
+ ///
+ /// Old behaviour; use normal fragmentation for unreliable messages - if a fragment is dropped, memory for received fragments are never reclaimed!
+ ///
+ NormalFragmentation = 1,
+
+ ///
+ /// Alternate behaviour; just drops unreliable messages above MTU
+ ///
+ DropAboveMTU = 2,
+ }
}
diff --git a/Lidgren.Network/NetPeerStatistics.cs b/Lidgren.Network/NetPeerStatistics.cs
index 9c245fc..de6b81d 100644
--- a/Lidgren.Network/NetPeerStatistics.cs
+++ b/Lidgren.Network/NetPeerStatistics.cs
@@ -39,6 +39,7 @@ namespace Lidgren.Network
internal int m_sentMessages;
internal int m_receivedMessages;
+ internal int m_receivedFragments;
internal int m_sentBytes;
internal int m_receivedBytes;
@@ -58,6 +59,7 @@ namespace Lidgren.Network
m_sentMessages = 0;
m_receivedMessages = 0;
+ m_receivedFragments = 0;
m_sentBytes = 0;
m_receivedBytes = 0;
@@ -131,11 +133,12 @@ namespace Lidgren.Network
}
#else
[Conditional("DEBUG")]
- internal void PacketReceived(int numBytes, int numMessages)
+ internal void PacketReceived(int numBytes, int numMessages, int numFragments)
{
m_receivedPackets++;
m_receivedBytes += numBytes;
m_receivedMessages += numMessages;
+ m_receivedFragments += numFragments;
}
#endif
@@ -148,7 +151,7 @@ namespace Lidgren.Network
bdr.AppendLine(m_peer.ConnectionsCount.ToString() + " connections");
#if DEBUG || USE_RELEASE_STATISTICS
bdr.AppendLine("Sent " + m_sentBytes + " bytes in " + m_sentMessages + " messages in " + m_sentPackets + " packets");
- bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages in " + m_receivedPackets + " packets");
+ bdr.AppendLine("Received " + m_receivedBytes + " bytes in " + m_receivedMessages + " messages (of which " + m_receivedFragments + " fragments) in " + m_receivedPackets + " packets");
#else
bdr.AppendLine("Sent (n/a) bytes in (n/a) messages in (n/a) packets");
bdr.AppendLine("Received (n/a) bytes in (n/a) messages in (n/a) packets");
diff --git a/Lidgren.Network/NetUnreliableSenderChannel.cs b/Lidgren.Network/NetUnreliableSenderChannel.cs
index f1553af..7303f9e 100644
--- a/Lidgren.Network/NetUnreliableSenderChannel.cs
+++ b/Lidgren.Network/NetUnreliableSenderChannel.cs
@@ -46,8 +46,11 @@ namespace Lidgren.Network
{
int queueLen = m_queuedSends.Count + 1;
int left = GetAllowedSends();
- if (queueLen > left)
+ if (queueLen > left || (message.LengthBytes > m_connection.m_currentMTU && m_connection.m_peerConfiguration.UnreliableSizeBehaviour == NetUnreliableSizeBehaviour.DropAboveMTU))
+ {
+ m_connection.Peer.Recycle(message);
return NetSendResult.Dropped;
+ }
m_queuedSends.Enqueue(message);
return NetSendResult.Sent;
diff --git a/Lidgren.Network/NetUtility.cs b/Lidgren.Network/NetUtility.cs
index 2ff5235..4ce9e45 100644
--- a/Lidgren.Network/NetUtility.cs
+++ b/Lidgren.Network/NetUtility.cs
@@ -263,13 +263,21 @@ namespace Lidgren.Network
///
public static string ToHexString(byte[] data)
{
- char[] c = new char[data.Length * 2];
+ return ToHexString(data, 0, data.Length);
+ }
+
+ ///
+ /// Create a hex string from an array of bytes
+ ///
+ public static string ToHexString(byte[] data, int offset, int length)
+ {
+ char[] c = new char[length * 2];
byte b;
- for (int i = 0; i < data.Length; ++i)
+ for (int i = 0; i < length; ++i)
{
- b = ((byte)(data[i] >> 4));
+ b = ((byte)(data[offset + i] >> 4));
c[i * 2] = (char)(b > 9 ? b + 0x37 : b + 0x30);
- b = ((byte)(data[i] & 0xF));
+ b = ((byte)(data[offset + i] & 0xF));
c[i * 2 + 1] = (char)(b > 9 ? b + 0x37 : b + 0x30);
}
return new string(c);
@@ -611,5 +619,14 @@ namespace Lidgren.Network
using (var sha = new SHA1CryptoServiceProvider())
return sha.ComputeHash(data);
}
+
+ ///
+ /// Create a SHA1 digest from a byte buffer
+ ///
+ public static byte[] CreateSHA1Hash(byte[] data, int offset, int count)
+ {
+ using (var sha = new SHA1CryptoServiceProvider())
+ return sha.ComputeHash(data, offset, count);
+ }
}
}
\ No newline at end of file
diff --git a/Samples/File stream sample/FileStreamClient/FileStreamClient.csproj b/Samples/File stream sample/FileStreamClient/FileStreamClient.csproj
index 554aa71..5143018 100644
--- a/Samples/File stream sample/FileStreamClient/FileStreamClient.csproj
+++ b/Samples/File stream sample/FileStreamClient/FileStreamClient.csproj
@@ -63,7 +63,6 @@
Resources.resx
True
-
SettingsSingleFileGenerator
Settings.Designer.cs
diff --git a/Samples/File stream sample/FileStreamServer/FileStreamServer.csproj b/Samples/File stream sample/FileStreamServer/FileStreamServer.csproj
index 9ed1067..dd8f2c1 100644
--- a/Samples/File stream sample/FileStreamServer/FileStreamServer.csproj
+++ b/Samples/File stream sample/FileStreamServer/FileStreamServer.csproj
@@ -64,7 +64,6 @@
Resources.resx
True
-
SettingsSingleFileGenerator
Settings.Designer.cs
diff --git a/Samples/File stream sample/FileStreamServer/StreamingClient.cs b/Samples/File stream sample/FileStreamServer/StreamingClient.cs
index 9269019..52f064e 100644
--- a/Samples/File stream sample/FileStreamServer/StreamingClient.cs
+++ b/Samples/File stream sample/FileStreamServer/StreamingClient.cs
@@ -26,9 +26,7 @@ namespace FileStreamServer
if (m_inputStream == null)
return;
- int windowSize, freeWindowSlots;
- m_connection.GetSendQueueInfo(NetDeliveryMethod.ReliableOrdered, 1, out windowSize, out freeWindowSlots);
- if (freeWindowSlots > 0)
+ if (m_connection.CanSendImmediately(NetDeliveryMethod.ReliableOrdered, 1))
{
// send another part of the file!
long remaining = m_inputStream.Length - m_sentOffset;
diff --git a/Samples/ImageSample/ImageClient/ImageClient.csproj b/Samples/ImageSample/ImageClient/ImageClient.csproj
index 5e9fb7a..e8c4765 100644
--- a/Samples/ImageSample/ImageClient/ImageClient.csproj
+++ b/Samples/ImageSample/ImageClient/ImageClient.csproj
@@ -70,7 +70,6 @@
Resources.resx
True
-
SettingsSingleFileGenerator
Settings.Designer.cs
diff --git a/Samples/ImageSample/ImageServer/ImageServer.csproj b/Samples/ImageSample/ImageServer/ImageServer.csproj
index 5d3209b..3cefc11 100644
--- a/Samples/ImageSample/ImageServer/ImageServer.csproj
+++ b/Samples/ImageSample/ImageServer/ImageServer.csproj
@@ -61,7 +61,6 @@
Resources.resx
True
-
SettingsSingleFileGenerator
Settings.Designer.cs
diff --git a/Samples/LibraryTestSamples/DurableSample/DurableClient/DurableClient.csproj b/Samples/LibraryTestSamples/DurableSample/DurableClient/DurableClient.csproj
index 3220e3b..d30091f 100644
--- a/Samples/LibraryTestSamples/DurableSample/DurableClient/DurableClient.csproj
+++ b/Samples/LibraryTestSamples/DurableSample/DurableClient/DurableClient.csproj
@@ -61,7 +61,6 @@
Resources.resx
True
-
SettingsSingleFileGenerator
Settings.Designer.cs
diff --git a/Samples/LibraryTestSamples/DurableSample/DurableServer/DurableServer.csproj b/Samples/LibraryTestSamples/DurableSample/DurableServer/DurableServer.csproj
index d8cb17d..8d5d845 100644
--- a/Samples/LibraryTestSamples/DurableSample/DurableServer/DurableServer.csproj
+++ b/Samples/LibraryTestSamples/DurableSample/DurableServer/DurableServer.csproj
@@ -61,7 +61,6 @@
Resources.resx
True
-
SettingsSingleFileGenerator
Settings.Designer.cs
diff --git a/UnitTests/EncryptionTests.cs b/UnitTests/EncryptionTests.cs
index cf0bfbd..50848b5 100644
--- a/UnitTests/EncryptionTests.cs
+++ b/UnitTests/EncryptionTests.cs
@@ -14,14 +14,14 @@ namespace UnitTests
//
// Test encryption
//
- List algos = new List();
+ List algos = new List();
- algos.Add(new NetXorEncryption("TopSecret"));
- algos.Add(new NetXtea("TopSecret"));
- algos.Add(new NetAESEncryption("TopSecret"));
- algos.Add(new NetRC2Encryption("TopSecret"));
- algos.Add(new NetDESEncryption("TopSecret"));
- algos.Add(new NetTripleDESEncryption("TopSecret"));
+ algos.Add(new NetXorEncryption(peer, "TopSecret"));
+ algos.Add(new NetXtea(peer, "TopSecret"));
+ algos.Add(new NetAESEncryption(peer, "TopSecret"));
+ algos.Add(new NetRC2Encryption(peer, "TopSecret"));
+ algos.Add(new NetDESEncryption(peer, "TopSecret"));
+ algos.Add(new NetTripleDESEncryption(peer, "TopSecret"));
foreach (var algo in algos)
{
@@ -31,7 +31,7 @@ namespace UnitTests
om.Write(5, 5);
om.Write(true);
om.Write("kokos");
- int trueLen = om.LengthBits;
+ int unencLen = om.LengthBits;
om.Encrypt(algo);
// convert to incoming message
@@ -41,10 +41,11 @@ namespace UnitTests
im.Decrypt(algo);
- if (im.Data == null || im.Data.Length == 0 || im.LengthBits != trueLen)
+ if (im.Data == null || im.Data.Length == 0 || im.LengthBits != unencLen)
throw new NetException("Length fail");
- if (im.ReadString() != "Hallon")
+ var str = im.ReadString();
+ if (str != "Hallon")
throw new NetException("fail");
if (im.ReadInt32() != 42)
throw new NetException("fail");
@@ -92,7 +93,7 @@ namespace UnitTests
throw new NetException("SRP non matching session values!");
}
- var test = NetSRP.CreateEncryption(Ss);
+ var test = NetSRP.CreateEncryption(peer, Ss);
}
Console.WriteLine("Message encryption OK");