diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-07-08 03:25:24 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-07-08 03:25:24 -0400 |
| commit | 71eb9f143fa85fac8b76857c054217cab3aa9536 (patch) | |
| tree | a095849d99d339c40ebf7d6e7f53883ab33489f7 /Emby.Common.Implementations/IO/SharpCifs/Util | |
| parent | a7187180bfba4117e01837a6b40c775e00c04b1b (diff) | |
update sharpcifs
Diffstat (limited to 'Emby.Common.Implementations/IO/SharpCifs/Util')
67 files changed, 5087 insertions, 5780 deletions
diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Base64.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Base64.cs index 8a869ce21..4770f1354 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Base64.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Base64.cs @@ -19,96 +19,92 @@ using System.Text; namespace SharpCifs.Util { - public class Base64 - { - private static readonly string Alphabet - = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + public class Base64 + { + private static readonly string Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - /// <summary>Base-64 encodes the supplied block of data.</summary> - /// <remarks> - /// Base-64 encodes the supplied block of data. Line wrapping is not - /// applied on output. - /// </remarks> - /// <param name="bytes">The block of data that is to be Base-64 encoded.</param> - /// <returns>A <code>String</code> containing the encoded data.</returns> - public static string Encode(byte[] bytes) - { - int length = bytes.Length; - if (length == 0) - { - return string.Empty; - } - StringBuilder buffer = new StringBuilder((int)Math.Ceiling(length / 3d) * 4); - int remainder = length % 3; - length -= remainder; - int block; - int i = 0; - while (i < length) - { - block = ((bytes[i++] & unchecked(0xff)) << 16) | ((bytes[i++] & unchecked( - 0xff)) << 8) | (bytes[i++] & unchecked(0xff)); - buffer.Append(Alphabet[(int)(((uint)block) >> 18)]); - buffer.Append(Alphabet[((int)(((uint)block) >> 12)) & unchecked(0x3f)]); - buffer.Append(Alphabet[((int)(((uint)block) >> 6)) & unchecked(0x3f)]); - buffer.Append(Alphabet[block & unchecked(0x3f)]); - } - if (remainder == 0) - { - return buffer.ToString(); - } - if (remainder == 1) - { - block = (bytes[i] & unchecked(0xff)) << 4; - buffer.Append(Alphabet[(int)(((uint)block) >> 6)]); - buffer.Append(Alphabet[block & unchecked(0x3f)]); - buffer.Append("=="); - return buffer.ToString(); - } - block = (((bytes[i++] & unchecked(0xff)) << 8) | ((bytes[i]) & unchecked(0xff))) << 2; - buffer.Append(Alphabet[(int)(((uint)block) >> 12)]); - buffer.Append(Alphabet[((int)(((uint)block) >> 6)) & unchecked(0x3f)]); - buffer.Append(Alphabet[block & unchecked(0x3f)]); - buffer.Append("="); - return buffer.ToString(); - } + /// <summary>Base-64 encodes the supplied block of data.</summary> + /// <remarks> + /// Base-64 encodes the supplied block of data. Line wrapping is not + /// applied on output. + /// </remarks> + /// <param name="bytes">The block of data that is to be Base-64 encoded.</param> + /// <returns>A <code>String</code> containing the encoded data.</returns> + public static string Encode(byte[] bytes) + { + int length = bytes.Length; + if (length == 0) + { + return string.Empty; + } + StringBuilder buffer = new StringBuilder((int)Math.Ceiling(length / 3d) * 4); + int remainder = length % 3; + length -= remainder; + int block; + int i = 0; + while (i < length) + { + block = ((bytes[i++] & unchecked(0xff)) << 16) | ((bytes[i++] & unchecked( + 0xff)) << 8) | (bytes[i++] & unchecked(0xff)); + buffer.Append(Alphabet[(int)(((uint)block) >> 18)]); + buffer.Append(Alphabet[((int)(((uint)block) >> 12)) & unchecked(0x3f)]); + buffer.Append(Alphabet[((int)(((uint)block) >> 6)) & unchecked(0x3f)]); + buffer.Append(Alphabet[block & unchecked(0x3f)]); + } + if (remainder == 0) + { + return buffer.ToString(); + } + if (remainder == 1) + { + block = (bytes[i] & unchecked(0xff)) << 4; + buffer.Append(Alphabet[(int)(((uint)block) >> 6)]); + buffer.Append(Alphabet[block & unchecked(0x3f)]); + buffer.Append("=="); + return buffer.ToString(); + } + block = (((bytes[i++] & unchecked(0xff)) << 8) | ((bytes[i]) & unchecked(0xff))) << 2; + buffer.Append(Alphabet[(int)(((uint)block) >> 12)]); + buffer.Append(Alphabet[((int)(((uint)block) >> 6)) & unchecked(0x3f)]); + buffer.Append(Alphabet[block & unchecked(0x3f)]); + buffer.Append("="); + return buffer.ToString(); + } - /// <summary>Decodes the supplied Base-64 encoded string.</summary> - /// <remarks>Decodes the supplied Base-64 encoded string.</remarks> - /// <param name="string">The Base-64 encoded string that is to be decoded.</param> - /// <returns>A <code>byte[]</code> containing the decoded data block.</returns> - public static byte[] Decode(string @string) - { - int length = @string.Length; - if (length == 0) - { - return new byte[0]; - } - int pad = (@string[length - 2] == '=') ? 2 : (@string[length - 1] == '=') ? 1 : 0; - int size = length * 3 / 4 - pad; - byte[] buffer = new byte[size]; - int block; - int i = 0; - int index = 0; - while (i < length) - { - block = (Alphabet.IndexOf(@string[i++]) & unchecked(0xff)) << 18 - | (Alphabet.IndexOf(@string[i++]) & unchecked(0xff)) << 12 - | (Alphabet.IndexOf(@string[i++]) & unchecked(0xff)) << 6 - | (Alphabet.IndexOf(@string[i++]) & unchecked(0xff)); - buffer[index++] = unchecked((byte)((int)(((uint)block) >> 16))); - if (index < size) - { - buffer[index++] = unchecked( - (byte)( - ((int)(((uint)block) >> 8)) & unchecked(0xff)) - ); - } - if (index < size) - { - buffer[index++] = unchecked((byte)(block & unchecked(0xff))); - } - } - return buffer; - } - } + /// <summary>Decodes the supplied Base-64 encoded string.</summary> + /// <remarks>Decodes the supplied Base-64 encoded string.</remarks> + /// <param name="string">The Base-64 encoded string that is to be decoded.</param> + /// <returns>A <code>byte[]</code> containing the decoded data block.</returns> + public static byte[] Decode(string @string) + { + int length = @string.Length; + if (length == 0) + { + return new byte[0]; + } + int pad = (@string[length - 2] == '=') ? 2 : (@string[length - 1] == '=') ? 1 : 0; + int size = length * 3 / 4 - pad; + byte[] buffer = new byte[size]; + int block; + int i = 0; + int index = 0; + while (i < length) + { + block = (Alphabet.IndexOf(@string[i++]) & unchecked(0xff)) << 18 | (Alphabet + .IndexOf(@string[i++]) & unchecked(0xff)) << 12 | (Alphabet.IndexOf(@string + [i++]) & unchecked(0xff)) << 6 | (Alphabet.IndexOf(@string[i++]) & unchecked( + 0xff)); + buffer[index++] = unchecked((byte)((int)(((uint)block) >> 16))); + if (index < size) + { + buffer[index++] = unchecked((byte)(((int)(((uint)block) >> 8)) & unchecked(0xff))); + } + if (index < size) + { + buffer[index++] = unchecked((byte)(block & unchecked(0xff))); + } + } + return buffer; + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/DES.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/DES.cs index fb4c8e5a2..c23b14cf8 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/DES.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/DES.cs @@ -18,665 +18,551 @@ using System; namespace SharpCifs.Util { - /// <summary> - /// This code is derived from the above source - /// JCIFS API - /// Norbert Hranitzky - /// <p>and modified again by Michael B. - /// </summary> - /// <remarks> - /// This code is derived from the above source - /// JCIFS API - /// Norbert Hranitzky - /// <p>and modified again by Michael B. Allen - /// </remarks> - public class DES - { - private int[] _encryptKeys = new int[32]; + /// <summary> + /// This code is derived from the above source + /// JCIFS API + /// Norbert Hranitzky + /// <p>and modified again by Michael B. + /// </summary> + /// <remarks> + /// This code is derived from the above source + /// JCIFS API + /// Norbert Hranitzky + /// <p>and modified again by Michael B. Allen + /// </remarks> + public class DES + { + private int[] _encryptKeys = new int[32]; - private int[] _decryptKeys = new int[32]; + private int[] _decryptKeys = new int[32]; - private int[] _tempInts = new int[2]; + private int[] _tempInts = new int[2]; - public DES() - { - } + public DES() + { + } - public DES(byte[] key) - { - // DesCipher - the DES encryption method - // - // The meat of this code is by Dave Zimmerman <dzimm@widget.com>, and is: - // - // Copyright (c) 1996 Widget Workshop, Inc. All Rights Reserved. - // - // Permission to use, copy, modify, and distribute this software - // and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and - // without fee is hereby granted, provided that this copyright notice is kept - // intact. - // - // WIDGET WORKSHOP MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY - // OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED - // TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A - // PARTICULAR PURPOSE, OR NON-INFRINGEMENT. WIDGET WORKSHOP SHALL NOT BE LIABLE - // FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - // DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. - // - // THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE - // CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE - // PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT - // NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE - // SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE - // SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE - // PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). WIDGET WORKSHOP - // SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR - // HIGH RISK ACTIVITIES. - // - // - // The rest is: - // - // Copyright (C) 1996 by Jef Poskanzer <jef@acme.com>. All rights reserved. - // - // Copyright (C) 1996 by Wolfgang Platzer - // email: wplatzer@iaik.tu-graz.ac.at - // - // All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions - // are met: - // 1. Redistributions of source code must retain the above copyright - // notice, this list of conditions and the following disclaimer. - // 2. Redistributions in binary form must reproduce the above copyright - // notice, this list of conditions and the following disclaimer in the - // documentation and/or other materials provided with the distribution. - // - // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - // ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - // SUCH DAMAGE. - // - // Constructor, byte-array key. - if (key.Length == 7) - { - byte[] key8 = new byte[8]; - MakeSmbKey(key, key8); - SetKey(key8); - } - else - { - SetKey(key); - } - } + public DES(byte[] key) + { + // DesCipher - the DES encryption method + // + // The meat of this code is by Dave Zimmerman <dzimm@widget.com>, and is: + // + // Copyright (c) 1996 Widget Workshop, Inc. All Rights Reserved. + // + // Permission to use, copy, modify, and distribute this software + // and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and + // without fee is hereby granted, provided that this copyright notice is kept + // intact. + // + // WIDGET WORKSHOP MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY + // OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + // TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + // PARTICULAR PURPOSE, OR NON-INFRINGEMENT. WIDGET WORKSHOP SHALL NOT BE LIABLE + // FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + // DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. + // + // THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE + // CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE + // PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT + // NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE + // SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE + // SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE + // PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). WIDGET WORKSHOP + // SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR + // HIGH RISK ACTIVITIES. + // + // + // The rest is: + // + // Copyright (C) 1996 by Jef Poskanzer <jef@acme.com>. All rights reserved. + // + // Copyright (C) 1996 by Wolfgang Platzer + // email: wplatzer@iaik.tu-graz.ac.at + // + // All rights reserved. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions + // are met: + // 1. Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // 2. Redistributions in binary form must reproduce the above copyright + // notice, this list of conditions and the following disclaimer in the + // documentation and/or other materials provided with the distribution. + // + // THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + // ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + // SUCH DAMAGE. + // + // Constructor, byte-array key. + if (key.Length == 7) + { + byte[] key8 = new byte[8]; + MakeSmbKey(key, key8); + SetKey(key8); + } + else + { + SetKey(key); + } + } - public static void MakeSmbKey(byte[] key7, byte[] key8) - { - int i; - key8[0] = unchecked((byte)((key7[0] >> 1) & unchecked(0xff))); - key8[1] = unchecked((byte)((((key7[0] & unchecked(0x01)) << 6) - | (((key7[1] & unchecked(0xff)) >> 2) & unchecked(0xff))) & unchecked(0xff))); - key8[2] = unchecked((byte)((((key7[1] & unchecked(0x03)) << 5) - | (((key7[2] & unchecked(0xff)) >> 3) & unchecked(0xff))) & unchecked(0xff))); - key8[3] = unchecked((byte)((((key7[2] & unchecked(0x07)) << 4) - | (((key7[3] & unchecked(0xff)) >> 4) & unchecked(0xff))) & unchecked(0xff))); - key8[4] = unchecked((byte)((((key7[3] & unchecked(0x0F)) << 3) - | (((key7[4] & unchecked(0xff)) >> 5) & unchecked(0xff))) & unchecked(0xff))); - key8[5] = unchecked((byte)((((key7[4] & unchecked(0x1F)) << 2) - | (((key7[5] & unchecked(0xff)) >> 6) & unchecked(0xff))) & unchecked(0xff))); - key8[6] = unchecked((byte)((((key7[5] & unchecked(0x3F)) << 1) - | (((key7[6] & unchecked(0xff)) >> 7) & unchecked(0xff))) & unchecked(0xff))); - key8[7] = unchecked((byte)(key7[6] & unchecked(0x7F))); - for (i = 0; i < 8; i++) - { - key8[i] = unchecked((byte)(key8[i] << 1)); - } - } + public static void MakeSmbKey(byte[] key7, byte[] key8) + { + int i; + key8[0] = unchecked((byte)((key7[0] >> 1) & unchecked(0xff))); + key8[1] = unchecked((byte)((((key7[0] & unchecked(0x01)) << 6) | (((key7[1 + ] & unchecked(0xff)) >> 2) & unchecked(0xff))) & unchecked(0xff))); + key8[2] = unchecked((byte)((((key7[1] & unchecked(0x03)) << 5) | (((key7[2 + ] & unchecked(0xff)) >> 3) & unchecked(0xff))) & unchecked(0xff))); + key8[3] = unchecked((byte)((((key7[2] & unchecked(0x07)) << 4) | (((key7[3 + ] & unchecked(0xff)) >> 4) & unchecked(0xff))) & unchecked(0xff))); + key8[4] = unchecked((byte)((((key7[3] & unchecked(0x0F)) << 3) | (((key7[4 + ] & unchecked(0xff)) >> 5) & unchecked(0xff))) & unchecked(0xff))); + key8[5] = unchecked((byte)((((key7[4] & unchecked(0x1F)) << 2) | (((key7[5 + ] & unchecked(0xff)) >> 6) & unchecked(0xff))) & unchecked(0xff))); + key8[6] = unchecked((byte)((((key7[5] & unchecked(0x3F)) << 1) | (((key7[6 + ] & unchecked(0xff)) >> 7) & unchecked(0xff))) & unchecked(0xff))); + key8[7] = unchecked((byte)(key7[6] & unchecked(0x7F))); + for (i = 0; i < 8; i++) + { + key8[i] = unchecked((byte)(key8[i] << 1)); + } + } - /// Set the key. - public virtual void SetKey(byte[] key) - { - // CHECK PAROTY TBD - Deskey(key, true, _encryptKeys); - Deskey(key, false, _decryptKeys); - } + /// Set the key. + public virtual void SetKey(byte[] key) + { + // CHECK PAROTY TBD + Deskey(key, true, _encryptKeys); + Deskey(key, false, _decryptKeys); + } - // Turn an 8-byte key into internal keys. - private void Deskey(byte[] keyBlock, bool encrypting, int[] knL) - { - int i; - int j; - int l; - int m; - int n; - int[] pc1M = new int[56]; - int[] pcr = new int[56]; - int[] kn = new int[32]; - for (j = 0; j < 56; ++j) - { - l = _pc1[j]; - m = l & 0x7; - pc1M[j] = ((keyBlock[(int)(((uint)l) >> 3)] & _bytebit[m]) != 0) ? 1 : 0; - } - for (i = 0; i < 16; ++i) - { - if (encrypting) - { - m = i << 1; - } - else - { - m = (15 - i) << 1; - } - n = m + 1; - kn[m] = kn[n] = 0; - for (j = 0; j < 28; ++j) - { - l = j + _totrot[i]; - if (l < 28) - { - pcr[j] = pc1M[l]; - } - else - { - pcr[j] = pc1M[l - 28]; - } - } - for (j = 28; j < 56; ++j) - { - l = j + _totrot[i]; - if (l < 56) - { - pcr[j] = pc1M[l]; - } - else - { - pcr[j] = pc1M[l - 28]; - } - } - for (j = 0; j < 24; ++j) - { - if (pcr[_pc2[j]] != 0) - { - kn[m] |= _bigbyte[j]; - } - if (pcr[_pc2[j + 24]] != 0) - { - kn[n] |= _bigbyte[j]; - } - } - } - Cookey(kn, knL); - } + // Turn an 8-byte key into internal keys. + private void Deskey(byte[] keyBlock, bool encrypting, int[] knL) + { + int i; + int j; + int l; + int m; + int n; + int[] pc1M = new int[56]; + int[] pcr = new int[56]; + int[] kn = new int[32]; + for (j = 0; j < 56; ++j) + { + l = _pc1[j]; + m = l & 0x7; + pc1M[j] = ((keyBlock[(int)(((uint)l) >> 3)] & _bytebit[m]) != 0) ? 1 : 0; + } + for (i = 0; i < 16; ++i) + { + if (encrypting) + { + m = i << 1; + } + else + { + m = (15 - i) << 1; + } + n = m + 1; + kn[m] = kn[n] = 0; + for (j = 0; j < 28; ++j) + { + l = j + _totrot[i]; + if (l < 28) + { + pcr[j] = pc1M[l]; + } + else + { + pcr[j] = pc1M[l - 28]; + } + } + for (j = 28; j < 56; ++j) + { + l = j + _totrot[i]; + if (l < 56) + { + pcr[j] = pc1M[l]; + } + else + { + pcr[j] = pc1M[l - 28]; + } + } + for (j = 0; j < 24; ++j) + { + if (pcr[_pc2[j]] != 0) + { + kn[m] |= _bigbyte[j]; + } + if (pcr[_pc2[j + 24]] != 0) + { + kn[n] |= _bigbyte[j]; + } + } + } + Cookey(kn, knL); + } - private void Cookey(int[] raw, int[] knL) - { - int raw0; - int raw1; - int rawi; - int knLi; - int i; - for (i = 0, rawi = 0, knLi = 0; i < 16; ++i) - { - raw0 = raw[rawi++]; - raw1 = raw[rawi++]; - knL[knLi] = (raw0 & unchecked(0x00fc0000)) << 6; - knL[knLi] |= (raw0 & unchecked(0x00000fc0)) << 10; - knL[knLi] |= (int)(((uint)(raw1 & unchecked(0x00fc0000))) >> 10); - knL[knLi] |= (int)(((uint)(raw1 & unchecked(0x00000fc0))) >> 6); - ++knLi; - knL[knLi] = (raw0 & unchecked(0x0003f000)) << 12; - knL[knLi] |= (raw0 & unchecked(0x0000003f)) << 16; - knL[knLi] |= (int)(((uint)(raw1 & unchecked(0x0003f000))) >> 4); - knL[knLi] |= (raw1 & unchecked(0x0000003f)); - ++knLi; - } - } + private void Cookey(int[] raw, int[] knL) + { + int raw0; + int raw1; + int rawi; + int knLi; + int i; + for (i = 0, rawi = 0, knLi = 0; i < 16; ++i) + { + raw0 = raw[rawi++]; + raw1 = raw[rawi++]; + knL[knLi] = (raw0 & unchecked(0x00fc0000)) << 6; + knL[knLi] |= (raw0 & unchecked(0x00000fc0)) << 10; + knL[knLi] |= (int)(((uint)(raw1 & unchecked(0x00fc0000))) >> 10); + knL[knLi] |= (int)(((uint)(raw1 & unchecked(0x00000fc0))) >> 6); + ++knLi; + knL[knLi] = (raw0 & unchecked(0x0003f000)) << 12; + knL[knLi] |= (raw0 & unchecked(0x0000003f)) << 16; + knL[knLi] |= (int)(((uint)(raw1 & unchecked(0x0003f000))) >> 4); + knL[knLi] |= (raw1 & unchecked(0x0000003f)); + ++knLi; + } + } - /// Encrypt a block of eight bytes. - private void Encrypt(byte[] clearText, int clearOff, byte[] cipherText, int cipherOff) - { - SquashBytesToInts(clearText, clearOff, _tempInts, 0, 2); - Des(_tempInts, _tempInts, _encryptKeys); - SpreadIntsToBytes(_tempInts, 0, cipherText, cipherOff, 2); - } + /// Encrypt a block of eight bytes. + private void Encrypt(byte[] clearText, int clearOff, byte[] cipherText, int cipherOff + ) + { + SquashBytesToInts(clearText, clearOff, _tempInts, 0, 2); + Des(_tempInts, _tempInts, _encryptKeys); + SpreadIntsToBytes(_tempInts, 0, cipherText, cipherOff, 2); + } - /// Decrypt a block of eight bytes. - private void Decrypt(byte[] cipherText, int cipherOff, byte[] clearText, int clearOff) - { - SquashBytesToInts(cipherText, cipherOff, _tempInts, 0, 2); - Des(_tempInts, _tempInts, _decryptKeys); - SpreadIntsToBytes(_tempInts, 0, clearText, clearOff, 2); - } + /// Decrypt a block of eight bytes. + private void Decrypt(byte[] cipherText, int cipherOff, byte[] clearText, int clearOff + ) + { + SquashBytesToInts(cipherText, cipherOff, _tempInts, 0, 2); + Des(_tempInts, _tempInts, _decryptKeys); + SpreadIntsToBytes(_tempInts, 0, clearText, clearOff, 2); + } - // The DES function. - private void Des(int[] inInts, int[] outInts, int[] keys) - { - int fval; - int work; - int right; - int leftt; - int round; - int keysi = 0; - leftt = inInts[0]; - right = inInts[1]; - work = (((int)(((uint)leftt) >> 4)) ^ right) & unchecked(0x0f0f0f0f); - right ^= work; - leftt ^= (work << 4); - work = (((int)(((uint)leftt) >> 16)) ^ right) & unchecked(0x0000ffff); - right ^= work; - leftt ^= (work << 16); - work = (((int)(((uint)right) >> 2)) ^ leftt) & unchecked(0x33333333); - leftt ^= work; - right ^= (work << 2); - work = (((int)(((uint)right) >> 8)) ^ leftt) & unchecked(0x00ff00ff); - leftt ^= work; - right ^= (work << 8); - right = (right << 1) | (((int)(((uint)right) >> 31)) & 1); - work = (leftt ^ right) & unchecked((int)(0xaaaaaaaa)); - leftt ^= work; - right ^= work; - leftt = (leftt << 1) | (((int)(((uint)leftt) >> 31)) & 1); - for (round = 0; round < 8; ++round) - { - work = (right << 28) | ((int)(((uint)right) >> 4)); - work ^= keys[keysi++]; - fval = _sp7[work & unchecked(0x0000003f)]; - fval |= _sp5[((int)(((uint)work) >> 8)) & unchecked(0x0000003f)]; - fval |= _sp3[((int)(((uint)work) >> 16)) & unchecked(0x0000003f)]; - fval |= _sp1[((int)(((uint)work) >> 24)) & unchecked(0x0000003f)]; - work = right ^ keys[keysi++]; - fval |= _sp8[work & unchecked(0x0000003f)]; - fval |= _sp6[((int)(((uint)work) >> 8)) & unchecked(0x0000003f)]; - fval |= _sp4[((int)(((uint)work) >> 16)) & unchecked(0x0000003f)]; - fval |= _sp2[((int)(((uint)work) >> 24)) & unchecked(0x0000003f)]; - leftt ^= fval; - work = (leftt << 28) | ((int)(((uint)leftt) >> 4)); - work ^= keys[keysi++]; - fval = _sp7[work & unchecked(0x0000003f)]; - fval |= _sp5[((int)(((uint)work) >> 8)) & unchecked(0x0000003f)]; - fval |= _sp3[((int)(((uint)work) >> 16)) & unchecked(0x0000003f)]; - fval |= _sp1[((int)(((uint)work) >> 24)) & unchecked(0x0000003f)]; - work = leftt ^ keys[keysi++]; - fval |= _sp8[work & unchecked(0x0000003f)]; - fval |= _sp6[((int)(((uint)work) >> 8)) & unchecked(0x0000003f)]; - fval |= _sp4[((int)(((uint)work) >> 16)) & unchecked(0x0000003f)]; - fval |= _sp2[((int)(((uint)work) >> 24)) & unchecked(0x0000003f)]; - right ^= fval; - } - right = (right << 31) | ((int)(((uint)right) >> 1)); - work = (leftt ^ right) & unchecked((int)(0xaaaaaaaa)); - leftt ^= work; - right ^= work; - leftt = (leftt << 31) | ((int)(((uint)leftt) >> 1)); - work = (((int)(((uint)leftt) >> 8)) ^ right) & unchecked(0x00ff00ff); - right ^= work; - leftt ^= (work << 8); - work = (((int)(((uint)leftt) >> 2)) ^ right) & unchecked(0x33333333); - right ^= work; - leftt ^= (work << 2); - work = (((int)(((uint)right) >> 16)) ^ leftt) & unchecked(0x0000ffff); - leftt ^= work; - right ^= (work << 16); - work = (((int)(((uint)right) >> 4)) ^ leftt) & unchecked(0x0f0f0f0f); - leftt ^= work; - right ^= (work << 4); - outInts[0] = right; - outInts[1] = leftt; - } + // The DES function. + private void Des(int[] inInts, int[] outInts, int[] keys) + { + int fval; + int work; + int right; + int leftt; + int round; + int keysi = 0; + leftt = inInts[0]; + right = inInts[1]; + work = (((int)(((uint)leftt) >> 4)) ^ right) & unchecked(0x0f0f0f0f); + right ^= work; + leftt ^= (work << 4); + work = (((int)(((uint)leftt) >> 16)) ^ right) & unchecked(0x0000ffff); + right ^= work; + leftt ^= (work << 16); + work = (((int)(((uint)right) >> 2)) ^ leftt) & unchecked(0x33333333); + leftt ^= work; + right ^= (work << 2); + work = (((int)(((uint)right) >> 8)) ^ leftt) & unchecked(0x00ff00ff); + leftt ^= work; + right ^= (work << 8); + right = (right << 1) | (((int)(((uint)right) >> 31)) & 1); + work = (leftt ^ right) & unchecked((int)(0xaaaaaaaa)); + leftt ^= work; + right ^= work; + leftt = (leftt << 1) | (((int)(((uint)leftt) >> 31)) & 1); + for (round = 0; round < 8; ++round) + { + work = (right << 28) | ((int)(((uint)right) >> 4)); + work ^= keys[keysi++]; + fval = _sp7[work & unchecked(0x0000003f)]; + fval |= _sp5[((int)(((uint)work) >> 8)) & unchecked(0x0000003f)]; + fval |= _sp3[((int)(((uint)work) >> 16)) & unchecked(0x0000003f)]; + fval |= _sp1[((int)(((uint)work) >> 24)) & unchecked(0x0000003f)]; + work = right ^ keys[keysi++]; + fval |= _sp8[work & unchecked(0x0000003f)]; + fval |= _sp6[((int)(((uint)work) >> 8)) & unchecked(0x0000003f)]; + fval |= _sp4[((int)(((uint)work) >> 16)) & unchecked(0x0000003f)]; + fval |= _sp2[((int)(((uint)work) >> 24)) & unchecked(0x0000003f)]; + leftt ^= fval; + work = (leftt << 28) | ((int)(((uint)leftt) >> 4)); + work ^= keys[keysi++]; + fval = _sp7[work & unchecked(0x0000003f)]; + fval |= _sp5[((int)(((uint)work) >> 8)) & unchecked(0x0000003f)]; + fval |= _sp3[((int)(((uint)work) >> 16)) & unchecked(0x0000003f)]; + fval |= _sp1[((int)(((uint)work) >> 24)) & unchecked(0x0000003f)]; + work = leftt ^ keys[keysi++]; + fval |= _sp8[work & unchecked(0x0000003f)]; + fval |= _sp6[((int)(((uint)work) >> 8)) & unchecked(0x0000003f)]; + fval |= _sp4[((int)(((uint)work) >> 16)) & unchecked(0x0000003f)]; + fval |= _sp2[((int)(((uint)work) >> 24)) & unchecked(0x0000003f)]; + right ^= fval; + } + right = (right << 31) | ((int)(((uint)right) >> 1)); + work = (leftt ^ right) & unchecked((int)(0xaaaaaaaa)); + leftt ^= work; + right ^= work; + leftt = (leftt << 31) | ((int)(((uint)leftt) >> 1)); + work = (((int)(((uint)leftt) >> 8)) ^ right) & unchecked(0x00ff00ff); + right ^= work; + leftt ^= (work << 8); + work = (((int)(((uint)leftt) >> 2)) ^ right) & unchecked(0x33333333); + right ^= work; + leftt ^= (work << 2); + work = (((int)(((uint)right) >> 16)) ^ leftt) & unchecked(0x0000ffff); + leftt ^= work; + right ^= (work << 16); + work = (((int)(((uint)right) >> 4)) ^ leftt) & unchecked(0x0f0f0f0f); + leftt ^= work; + right ^= (work << 4); + outInts[0] = right; + outInts[1] = leftt; + } - /// Encrypt a block of bytes. - public virtual void Encrypt(byte[] clearText, byte[] cipherText) - { - Encrypt(clearText, 0, cipherText, 0); - } + /// Encrypt a block of bytes. + public virtual void Encrypt(byte[] clearText, byte[] cipherText) + { + Encrypt(clearText, 0, cipherText, 0); + } - /// Decrypt a block of bytes. - public virtual void Decrypt(byte[] cipherText, byte[] clearText) - { - Decrypt(cipherText, 0, clearText, 0); - } + /// Decrypt a block of bytes. + public virtual void Decrypt(byte[] cipherText, byte[] clearText) + { + Decrypt(cipherText, 0, clearText, 0); + } - /// <summary>encrypts an array where the length must be a multiple of 8</summary> - public virtual byte[] Encrypt(byte[] clearText) - { - int length = clearText.Length; - if (length % 8 != 0) - { - Console.Out.WriteLine("Array must be a multiple of 8"); - return null; - } - byte[] cipherText = new byte[length]; - int count = length / 8; - for (int i = 0; i < count; i++) - { - Encrypt(clearText, i * 8, cipherText, i * 8); - } - return cipherText; - } + /// <summary>encrypts an array where the length must be a multiple of 8</summary> + public virtual byte[] Encrypt(byte[] clearText) + { + int length = clearText.Length; + if (length % 8 != 0) + { + Console.Out.WriteLine("Array must be a multiple of 8"); + return null; + } + byte[] cipherText = new byte[length]; + int count = length / 8; + for (int i = 0; i < count; i++) + { + Encrypt(clearText, i * 8, cipherText, i * 8); + } + return cipherText; + } - /// <summary>decrypts an array where the length must be a multiple of 8</summary> - public virtual byte[] Decrypt(byte[] cipherText) - { - int length = cipherText.Length; - if (length % 8 != 0) - { - Console.Out.WriteLine("Array must be a multiple of 8"); - return null; - } - byte[] clearText = new byte[length]; - int count = length / 8; - for (int i = 0; i < count; i++) - { - Encrypt(cipherText, i * 8, clearText, i * 8); - } - return clearText; - } + /// <summary>decrypts an array where the length must be a multiple of 8</summary> + public virtual byte[] Decrypt(byte[] cipherText) + { + int length = cipherText.Length; + if (length % 8 != 0) + { + Console.Out.WriteLine("Array must be a multiple of 8"); + return null; + } + byte[] clearText = new byte[length]; + int count = length / 8; + for (int i = 0; i < count; i++) + { + Encrypt(cipherText, i * 8, clearText, i * 8); + } + return clearText; + } - private static byte[] _bytebit = - { - unchecked(unchecked(0x80)), - unchecked(unchecked(0x40)), - unchecked(unchecked(0x20)), - unchecked(unchecked(0x10)), - unchecked(unchecked(0x08)), - unchecked(unchecked(0x04)), - unchecked(unchecked(0x02)), - unchecked(unchecked(0x01)) - }; + private static byte[] _bytebit = { unchecked(unchecked(0x80)), unchecked(unchecked(0x40)), unchecked(unchecked(0x20)), unchecked(unchecked(0x10)), unchecked(unchecked(0x08)), unchecked(unchecked(0x04)), unchecked(unchecked(0x02)), unchecked(unchecked(0x01)) }; - private static int[] _bigbyte = - { - unchecked(0x800000), unchecked(0x400000), unchecked(0x200000), - unchecked(0x100000), unchecked(0x080000), unchecked(0x040000), - unchecked(0x020000), unchecked(0x010000), unchecked(0x008000), - unchecked(0x004000), unchecked(0x002000), unchecked(0x001000), - unchecked(0x000800), unchecked(0x000400), unchecked(0x000200), - unchecked(0x000100), unchecked(0x000080), unchecked(0x000040), - unchecked(0x000020), unchecked(0x000010), unchecked(0x000008), - unchecked(0x000004), unchecked(0x000002), unchecked(0x000001) - }; + private static int[] _bigbyte = { unchecked(0x800000), unchecked( + 0x400000), unchecked(0x200000), unchecked(0x100000), unchecked( + 0x080000), unchecked(0x040000), unchecked(0x020000), unchecked( + 0x010000), unchecked(0x008000), unchecked(0x004000), unchecked( + 0x002000), unchecked(0x001000), unchecked(0x000800), unchecked( + 0x000400), unchecked(0x000200), unchecked(0x000100), unchecked( + 0x000080), unchecked(0x000040), unchecked(0x000020), unchecked( + 0x000010), unchecked(0x000008), unchecked(0x000004), unchecked( + 0x000002), unchecked(0x000001) }; - private static byte[] _pc1 = - { - unchecked(56), unchecked(48), unchecked(40), unchecked(32), - unchecked(24), unchecked(16), unchecked(8), unchecked(0), - unchecked(57), unchecked(49), unchecked(41), unchecked(33), - unchecked(25), unchecked(17), unchecked(9), unchecked(1), - unchecked(58), unchecked(50), unchecked(42), unchecked(34), - unchecked(26), unchecked(18), unchecked(10), unchecked(2), - unchecked(59), unchecked(51), unchecked(43), unchecked(35), - unchecked(62), unchecked(54), unchecked(46), unchecked(38), - unchecked(30), unchecked(22), unchecked(14), unchecked(6), - unchecked(61), unchecked(53), unchecked(45), unchecked(37), - unchecked(29), unchecked(21), unchecked(13), unchecked(5), - unchecked(60), unchecked(52), unchecked(44), unchecked(36), - unchecked(28), unchecked(20), unchecked(12), unchecked(4), - unchecked(27), unchecked(19), unchecked(11), unchecked(3) - }; + private static byte[] _pc1 = { unchecked(56), unchecked(48) + , unchecked(40), unchecked(32), unchecked(24), unchecked(16), unchecked(8), unchecked(0), unchecked(57), unchecked(49), unchecked(41), unchecked(33), unchecked(25), unchecked(17), unchecked(9), unchecked(1), unchecked(58), unchecked( + 50), unchecked(42), unchecked(34), unchecked(26), unchecked( + 18), unchecked(10), unchecked(2), unchecked(59), unchecked( + 51), unchecked(43), unchecked(35), unchecked(62), unchecked( + 54), unchecked(46), unchecked(38), unchecked(30), unchecked( + 22), unchecked(14), unchecked(6), unchecked(61), unchecked( + 53), unchecked(45), unchecked(37), unchecked(29), unchecked( + 21), unchecked(13), unchecked(5), unchecked(60), unchecked( + 52), unchecked(44), unchecked(36), unchecked(28), unchecked( + 20), unchecked(12), unchecked(4), unchecked(27), unchecked( + 19), unchecked(11), unchecked(3) }; - private static int[] _totrot - = { 1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28 }; + private static int[] _totrot = { 1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, + 21, 23, 25, 27, 28 }; - private static byte[] _pc2 = - { - unchecked(13), unchecked(16), unchecked(10), unchecked(23), - unchecked(0), unchecked(4), unchecked(2), unchecked(27), - unchecked(14), unchecked(5), unchecked(20), unchecked(9), - unchecked(22), unchecked(18), unchecked(11), unchecked(3), - unchecked(25), unchecked(7), unchecked(15), unchecked(6), - unchecked(26), unchecked(19), unchecked(12), unchecked(1), - unchecked(40), unchecked(51), unchecked(30), unchecked(36), - unchecked(46), unchecked(54), unchecked(29), unchecked(39), - unchecked(50), unchecked(44), unchecked(32), unchecked(47), - unchecked(43), unchecked(48), unchecked(38), unchecked(55), - unchecked(33), unchecked(52), unchecked(45), unchecked(41), - unchecked(49), unchecked(35), unchecked(28), unchecked(31) - }; + private static byte[] _pc2 = { unchecked(13), unchecked(16) + , unchecked(10), unchecked(23), unchecked(0), unchecked(4), unchecked(2), unchecked(27), unchecked(14), unchecked(5), unchecked(20), unchecked(9), unchecked(22), unchecked(18), unchecked(11), unchecked(3), unchecked(25), unchecked(7), unchecked(15), unchecked(6), unchecked(26), unchecked(19), unchecked(12), unchecked(1), unchecked(40), unchecked(51), unchecked(30), unchecked(36), unchecked(46), unchecked(54), unchecked(29), unchecked(39), unchecked(50), unchecked( + 44), unchecked(32), unchecked(47), unchecked(43), unchecked( + 48), unchecked(38), unchecked(55), unchecked(33), unchecked( + 52), unchecked(45), unchecked(41), unchecked(49), unchecked( + 35), unchecked(28), unchecked(31) }; - private static int[] _sp1 = - { - unchecked(0x01010400), unchecked(0x00000000), unchecked(0x00010000), - unchecked(0x01010404), unchecked(0x01010004), unchecked(0x00010404), - unchecked(0x00000004), unchecked(0x00010000), unchecked(0x00000400), - unchecked(0x01010400), unchecked(0x01010404), unchecked(0x00000400), - unchecked(0x01000404), unchecked(0x01010004), unchecked(0x01000000), - unchecked(0x00000004), unchecked(0x00000404), unchecked(0x01000400), - unchecked(0x01000400), unchecked(0x00010400), unchecked(0x00010400), - unchecked(0x01010000), unchecked(0x01010000), unchecked(0x01000404), - unchecked(0x00010004), unchecked(0x01000004), unchecked(0x01000004), - unchecked(0x00010004), unchecked(0x00000000), unchecked(0x00000404), - unchecked(0x00010404), unchecked(0x01000000), unchecked(0x00010000), - unchecked(0x01010404), unchecked(0x00000004), unchecked(0x01010000), - unchecked(0x01010400), unchecked(0x01000000), unchecked(0x01000000), - unchecked(0x00000400), unchecked(0x01010004), unchecked(0x00010000), - unchecked(0x00010400), unchecked(0x01000004), unchecked(0x00000400), - unchecked(0x00000004), unchecked(0x01000404), unchecked(0x00010404), - unchecked(0x01010404), unchecked(0x00010004), unchecked(0x01010000), - unchecked(0x01000404), unchecked(0x01000004), unchecked(0x00000404), - unchecked(0x00010404), unchecked(0x01010400), unchecked(0x00000404), - unchecked(0x01000400), unchecked(0x01000400), unchecked(0x00000000), - unchecked(0x00010004), unchecked(0x00010400), - unchecked(0x00000000), unchecked(0x01010004) - }; + private static int[] _sp1 = { unchecked(0x01010400), unchecked(0x00000000), unchecked(0x00010000), unchecked(0x01010404), unchecked( + 0x01010004), unchecked(0x00010404), unchecked(0x00000004), + unchecked(0x00010000), unchecked(0x00000400), unchecked(0x01010400), unchecked(0x01010404), unchecked(0x00000400), unchecked(0x01000404), unchecked(0x01010004), unchecked(0x01000000), unchecked( + 0x00000004), unchecked(0x00000404), unchecked(0x01000400), + unchecked(0x01000400), unchecked(0x00010400), unchecked(0x00010400), unchecked(0x01010000), unchecked(0x01010000), unchecked(0x01000404), unchecked(0x00010004), unchecked(0x01000004), unchecked( + 0x01000004), unchecked(0x00010004), unchecked(0x00000000), + unchecked(0x00000404), unchecked(0x00010404), unchecked(0x01000000), unchecked(0x00010000), unchecked(0x01010404), unchecked(0x00000004), unchecked(0x01010000), unchecked(0x01010400), unchecked( + 0x01000000), unchecked(0x01000000), unchecked(0x00000400), + unchecked(0x01010004), unchecked(0x00010000), unchecked(0x00010400), unchecked(0x01000004), unchecked(0x00000400), unchecked(0x00000004), unchecked(0x01000404), unchecked(0x00010404), unchecked( + 0x01010404), unchecked(0x00010004), unchecked(0x01010000), + unchecked(0x01000404), unchecked(0x01000004), unchecked(0x00000404), unchecked(0x00010404), unchecked(0x01010400), unchecked(0x00000404), unchecked(0x01000400), unchecked(0x01000400), unchecked( + 0x00000000), unchecked(0x00010004), unchecked(0x00010400), + unchecked(0x00000000), unchecked(0x01010004) }; - private static int[] _sp2 = - { - unchecked((int)(0x80108020)), unchecked((int)(0x80008000)), unchecked(0x00008000), - unchecked(0x00108020), unchecked(0x00100000), unchecked(0x00000020), - unchecked((int)(0x80100020)), unchecked((int)(0x80008020)), unchecked((int)(0x80000020)), - unchecked((int)(0x80108020)), unchecked((int)(0x80108000)), unchecked((int)(0x80000000)), - unchecked((int)(0x80008000)), unchecked(0x00100000), unchecked(0x00000020), - unchecked((int)(0x80100020)), unchecked(0x00108000), unchecked(0x00100020), - unchecked((int)(0x80008020)), unchecked(0x00000000), unchecked((int)(0x80000000)), - unchecked(0x00008000), unchecked(0x00108020), unchecked((int)(0x80100000)), - unchecked(0x00100020), unchecked((int)(0x80000020)), unchecked(0x00000000), - unchecked(0x00108000), unchecked(0x00008020), unchecked((int)(0x80108000)), - unchecked((int)(0x80100000)), unchecked(0x00008020), unchecked(0x00000000), - unchecked(0x00108020), unchecked((int)(0x80100020)), unchecked(0x00100000), - unchecked((int)(0x80008020)), unchecked((int)(0x80100000)), unchecked((int)(0x80108000)), - unchecked(0x00008000), unchecked((int)(0x80100000)), unchecked((int)(0x80008000)), - unchecked(0x00000020), unchecked((int)(0x80108020)), unchecked(0x00108020), - unchecked(0x00000020), unchecked(0x00008000), unchecked((int)(0x80000000)), - unchecked(0x00008020), unchecked((int)(0x80108000)), unchecked(0x00100000), - unchecked((int)(0x80000020)), unchecked(0x00100020), unchecked((int)(0x80008020)), - unchecked((int)(0x80000020)), unchecked(0x00100020), unchecked(0x00108000), - unchecked(0x00000000), unchecked((int)(0x80008000)), unchecked(0x00008020), - unchecked((int)(0x80000000)), unchecked((int)(0x80100020)), unchecked((int)(0x80108020)), - unchecked(0x00108000) - }; + private static int[] _sp2 = { unchecked((int)(0x80108020)), unchecked((int + )(0x80008000)), unchecked(0x00008000), unchecked(0x00108020), unchecked( + 0x00100000), unchecked(0x00000020), unchecked((int)(0x80100020)), + unchecked((int)(0x80008020)), unchecked((int)(0x80000020)), unchecked((int)(0x80108020 + )), unchecked((int)(0x80108000)), unchecked((int)(0x80000000)), unchecked((int)( + 0x80008000)), unchecked(0x00100000), unchecked(0x00000020), unchecked( + (int)(0x80100020)), unchecked(0x00108000), unchecked(0x00100020), + unchecked((int)(0x80008020)), unchecked(0x00000000), unchecked((int)(0x80000000 + )), unchecked(0x00008000), unchecked(0x00108020), unchecked((int)( + 0x80100000)), unchecked(0x00100020), unchecked((int)(0x80000020)), unchecked( + 0x00000000), unchecked(0x00108000), unchecked(0x00008020), + unchecked((int)(0x80108000)), unchecked((int)(0x80100000)), unchecked(0x00008020), unchecked(0x00000000), unchecked(0x00108020), unchecked((int)( + 0x80100020)), unchecked(0x00100000), unchecked((int)(0x80008020)), unchecked( + (int)(0x80100000)), unchecked((int)(0x80108000)), unchecked(0x00008000), + unchecked((int)(0x80100000)), unchecked((int)(0x80008000)), unchecked(0x00000020), unchecked((int)(0x80108020)), unchecked(0x00108020), unchecked(0x00000020), unchecked(0x00008000), unchecked((int)(0x80000000)), unchecked( + 0x00008020), unchecked((int)(0x80108000)), unchecked(0x00100000), + unchecked((int)(0x80000020)), unchecked(0x00100020), unchecked((int)(0x80008020 + )), unchecked((int)(0x80000020)), unchecked(0x00100020), unchecked(0x00108000), unchecked(0x00000000), unchecked((int)(0x80008000)), unchecked( + 0x00008020), unchecked((int)(0x80000000)), unchecked((int)(0x80100020)), + unchecked((int)(0x80108020)), unchecked(0x00108000) }; - private static int[] _sp3 = - { - unchecked(0x00000208), unchecked(0x08020200), unchecked(0x00000000), - unchecked(0x08020008), unchecked(0x08000200), unchecked(0x00000000), - unchecked(0x00020208), unchecked(0x08000200), unchecked(0x00020008), - unchecked(0x08000008), unchecked(0x08000008), unchecked(0x00020000), - unchecked(0x08020208), unchecked(0x00020008), unchecked(0x08020000), - unchecked(0x00000208), unchecked(0x08000000), unchecked(0x00000008), - unchecked(0x08020200), unchecked(0x00000200), unchecked(0x00020200), - unchecked(0x08020000), unchecked(0x08020008), unchecked(0x00020208), - unchecked(0x08000208), unchecked(0x00020200), unchecked(0x00020000), - unchecked(0x08000208), unchecked(0x00000008), unchecked(0x08020208), - unchecked(0x00000200), unchecked(0x08000000), unchecked(0x08020200), - unchecked(0x08000000), unchecked(0x00020008), unchecked(0x00000208), - unchecked(0x00020000), unchecked(0x08020200), unchecked(0x08000200), - unchecked(0x00000000), unchecked(0x00000200), unchecked(0x00020008), - unchecked(0x08020208), unchecked(0x08000200), unchecked(0x08000008), - unchecked(0x00000200), unchecked(0x00000000), unchecked(0x08020008), - unchecked(0x08000208), unchecked(0x00020000), unchecked(0x08000000), - unchecked(0x08020208), unchecked(0x00000008), unchecked(0x00020208), - unchecked(0x00020200), unchecked(0x08000008), unchecked(0x08020000), - unchecked(0x08000208), unchecked(0x00000208), unchecked(0x08020000), - unchecked(0x00020208), unchecked(0x00000008),unchecked(0x08020008), - unchecked(0x00020200) - }; + private static int[] _sp3 = { unchecked(0x00000208), unchecked(0x08020200), unchecked(0x00000000), unchecked(0x08020008), unchecked( + 0x08000200), unchecked(0x00000000), unchecked(0x00020208), + unchecked(0x08000200), unchecked(0x00020008), unchecked(0x08000008), unchecked(0x08000008), unchecked(0x00020000), unchecked(0x08020208), unchecked(0x00020008), unchecked(0x08020000), unchecked( + 0x00000208), unchecked(0x08000000), unchecked(0x00000008), + unchecked(0x08020200), unchecked(0x00000200), unchecked(0x00020200), unchecked(0x08020000), unchecked(0x08020008), unchecked(0x00020208), unchecked(0x08000208), unchecked(0x00020200), unchecked( + 0x00020000), unchecked(0x08000208), unchecked(0x00000008), + unchecked(0x08020208), unchecked(0x00000200), unchecked(0x08000000), unchecked(0x08020200), unchecked(0x08000000), unchecked(0x00020008), unchecked(0x00000208), unchecked(0x00020000), unchecked( + 0x08020200), unchecked(0x08000200), unchecked(0x00000000), + unchecked(0x00000200), unchecked(0x00020008), unchecked(0x08020208), unchecked(0x08000200), unchecked(0x08000008), unchecked(0x00000200), unchecked(0x00000000), unchecked(0x08020008), unchecked( + 0x08000208), unchecked(0x00020000), unchecked(0x08000000), + unchecked(0x08020208), unchecked(0x00000008), unchecked(0x00020208), unchecked(0x00020200), unchecked(0x08000008), unchecked(0x08020000), unchecked(0x08000208), unchecked(0x00000208), unchecked( + 0x08020000), unchecked(0x00020208), unchecked(0x00000008), + unchecked(0x08020008), unchecked(0x00020200) }; - private static int[] _sp4 = - { - unchecked(0x00802001), unchecked(0x00002081), unchecked(0x00002081), - unchecked(0x00000080), unchecked(0x00802080), unchecked(0x00800081), - unchecked(0x00800001), unchecked(0x00002001), unchecked(0x00000000), - unchecked(0x00802000), unchecked(0x00802000), unchecked(0x00802081), - unchecked(0x00000081), unchecked(0x00000000), unchecked(0x00800080), - unchecked(0x00800001), unchecked(0x00000001), unchecked(0x00002000), - unchecked(0x00800000), unchecked(0x00802001), unchecked(0x00000080), - unchecked(0x00800000), unchecked(0x00002001), unchecked(0x00002080), - unchecked(0x00800081), unchecked(0x00000001), unchecked(0x00002080), - unchecked(0x00800080), unchecked(0x00002000), unchecked(0x00802080), - unchecked(0x00802081), unchecked(0x00000081), unchecked(0x00800080), - unchecked(0x00800001), unchecked(0x00802000), unchecked(0x00802081), - unchecked(0x00000081), unchecked(0x00000000), unchecked(0x00000000), - unchecked(0x00802000), unchecked(0x00002080), unchecked(0x00800080), - unchecked(0x00800081), unchecked(0x00000001), unchecked(0x00802001), - unchecked(0x00002081), unchecked(0x00002081), unchecked(0x00000080), - unchecked(0x00802081), unchecked(0x00000081), unchecked(0x00000001), - unchecked(0x00002000), unchecked(0x00800001), unchecked(0x00002001), - unchecked(0x00802080), unchecked(0x00800081), unchecked(0x00002001), - unchecked(0x00002080), unchecked(0x00800000), unchecked(0x00802001), - unchecked(0x00000080), unchecked(0x00800000), unchecked(0x00002000), - unchecked(0x00802080) - }; + private static int[] _sp4 = { unchecked(0x00802001), unchecked(0x00002081), unchecked(0x00002081), unchecked(0x00000080), unchecked( + 0x00802080), unchecked(0x00800081), unchecked(0x00800001), + unchecked(0x00002001), unchecked(0x00000000), unchecked(0x00802000), unchecked(0x00802000), unchecked(0x00802081), unchecked(0x00000081), unchecked(0x00000000), unchecked(0x00800080), unchecked( + 0x00800001), unchecked(0x00000001), unchecked(0x00002000), + unchecked(0x00800000), unchecked(0x00802001), unchecked(0x00000080), unchecked(0x00800000), unchecked(0x00002001), unchecked(0x00002080), unchecked(0x00800081), unchecked(0x00000001), unchecked( + 0x00002080), unchecked(0x00800080), unchecked(0x00002000), + unchecked(0x00802080), unchecked(0x00802081), unchecked(0x00000081), unchecked(0x00800080), unchecked(0x00800001), unchecked(0x00802000), unchecked(0x00802081), unchecked(0x00000081), unchecked( + 0x00000000), unchecked(0x00000000), unchecked(0x00802000), + unchecked(0x00002080), unchecked(0x00800080), unchecked(0x00800081), unchecked(0x00000001), unchecked(0x00802001), unchecked(0x00002081), unchecked(0x00002081), unchecked(0x00000080), unchecked( + 0x00802081), unchecked(0x00000081), unchecked(0x00000001), + unchecked(0x00002000), unchecked(0x00800001), unchecked(0x00002001), unchecked(0x00802080), unchecked(0x00800081), unchecked(0x00002001), unchecked(0x00002080), unchecked(0x00800000), unchecked( + 0x00802001), unchecked(0x00000080), unchecked(0x00800000), + unchecked(0x00002000), unchecked(0x00802080) }; - private static int[] _sp5 = - { - unchecked(0x00000100), unchecked(0x02080100), unchecked(0x02080000), - unchecked(0x42000100), unchecked(0x00080000), unchecked(0x00000100), - unchecked(0x40000000), unchecked(0x02080000), unchecked(0x40080100), - unchecked(0x00080000), unchecked(0x02000100), unchecked(0x40080100), - unchecked(0x42000100), unchecked(0x42080000), unchecked(0x00080100), - unchecked(0x40000000), unchecked(0x02000000), unchecked(0x40080000), - unchecked(0x40080000), unchecked(0x00000000), unchecked(0x40000100), - unchecked(0x42080100), unchecked(0x42080100), unchecked(0x02000100), - unchecked(0x42080000), unchecked(0x40000100), unchecked(0x00000000), - unchecked(0x42000000), unchecked(0x02080100), unchecked(0x02000000), - unchecked(0x42000000), unchecked(0x00080100), unchecked(0x00080000), - unchecked(0x42000100), unchecked(0x00000100), unchecked(0x02000000), - unchecked(0x40000000), unchecked(0x02080000), unchecked(0x42000100), - unchecked(0x40080100), unchecked(0x02000100), unchecked(0x40000000), - unchecked(0x42080000), unchecked(0x02080100), unchecked(0x40080100), - unchecked(0x00000100), unchecked(0x02000000), unchecked(0x42080000), - unchecked(0x42080100), unchecked(0x00080100), unchecked(0x42000000), - unchecked(0x42080100), unchecked(0x02080000), unchecked(0x00000000), - unchecked(0x40080000), unchecked(0x42000000), unchecked(0x00080100), - unchecked(0x02000100), unchecked(0x40000100), unchecked(0x00080000), - unchecked(0x00000000), unchecked(0x40080000), unchecked(0x02080100), - unchecked(0x40000100) - }; + private static int[] _sp5 = { unchecked(0x00000100), unchecked(0x02080100), unchecked(0x02080000), unchecked(0x42000100), unchecked( + 0x00080000), unchecked(0x00000100), unchecked(0x40000000), + unchecked(0x02080000), unchecked(0x40080100), unchecked(0x00080000), unchecked(0x02000100), unchecked(0x40080100), unchecked(0x42000100), unchecked(0x42080000), unchecked(0x00080100), unchecked( + 0x40000000), unchecked(0x02000000), unchecked(0x40080000), + unchecked(0x40080000), unchecked(0x00000000), unchecked(0x40000100), unchecked(0x42080100), unchecked(0x42080100), unchecked(0x02000100), unchecked(0x42080000), unchecked(0x40000100), unchecked( + 0x00000000), unchecked(0x42000000), unchecked(0x02080100), + unchecked(0x02000000), unchecked(0x42000000), unchecked(0x00080100), unchecked(0x00080000), unchecked(0x42000100), unchecked(0x00000100), unchecked(0x02000000), unchecked(0x40000000), unchecked( + 0x02080000), unchecked(0x42000100), unchecked(0x40080100), + unchecked(0x02000100), unchecked(0x40000000), unchecked(0x42080000), unchecked(0x02080100), unchecked(0x40080100), unchecked(0x00000100), unchecked(0x02000000), unchecked(0x42080000), unchecked( + 0x42080100), unchecked(0x00080100), unchecked(0x42000000), + unchecked(0x42080100), unchecked(0x02080000), unchecked(0x00000000), unchecked(0x40080000), unchecked(0x42000000), unchecked(0x00080100), unchecked(0x02000100), unchecked(0x40000100), unchecked( + 0x00080000), unchecked(0x00000000), unchecked(0x40080000), + unchecked(0x02080100), unchecked(0x40000100) }; - private static int[] _sp6 = - { - unchecked(0x20000010), unchecked(0x20400000), unchecked(0x00004000), - unchecked(0x20404010), unchecked(0x20400000), unchecked(0x00000010), - unchecked(0x20404010), unchecked(0x00400000), unchecked(0x20004000), - unchecked(0x00404010), unchecked(0x00400000), unchecked(0x20000010), - unchecked(0x00400010), unchecked(0x20004000), unchecked(0x20000000), - unchecked(0x00004010), unchecked(0x00000000), unchecked(0x00400010), - unchecked(0x20004010), unchecked(0x00004000), unchecked(0x00404000), - unchecked(0x20004010), unchecked(0x00000010), unchecked(0x20400010), - unchecked(0x20400010), unchecked(0x00000000), unchecked(0x00404010), - unchecked(0x20404000), unchecked(0x00004010), unchecked(0x00404000), - unchecked(0x20404000), unchecked(0x20000000), unchecked(0x20004000), - unchecked(0x00000010), unchecked(0x20400010), unchecked(0x00404000), - unchecked(0x20404010), unchecked(0x00400000), unchecked(0x00004010), - unchecked(0x20000010), unchecked(0x00400000), unchecked(0x20004000), - unchecked(0x20000000), unchecked(0x00004010), unchecked(0x20000010), - unchecked(0x20404010), unchecked(0x00404000), unchecked(0x20400000), - unchecked(0x00404010), unchecked(0x20404000), unchecked(0x00000000), - unchecked(0x20400010), unchecked(0x00000010), unchecked(0x00004000), - unchecked(0x20400000), unchecked(0x00404010), unchecked(0x00004000), - unchecked(0x00400010), unchecked(0x20004010), unchecked(0x00000000), - unchecked(0x20404000), unchecked(0x20000000), unchecked(0x00400010), - unchecked(0x20004010) - }; + private static int[] _sp6 = { unchecked(0x20000010), unchecked(0x20400000), unchecked(0x00004000), unchecked(0x20404010), unchecked( + 0x20400000), unchecked(0x00000010), unchecked(0x20404010), + unchecked(0x00400000), unchecked(0x20004000), unchecked(0x00404010), unchecked(0x00400000), unchecked(0x20000010), unchecked(0x00400010), unchecked(0x20004000), unchecked(0x20000000), unchecked( + 0x00004010), unchecked(0x00000000), unchecked(0x00400010), + unchecked(0x20004010), unchecked(0x00004000), unchecked(0x00404000), unchecked(0x20004010), unchecked(0x00000010), unchecked(0x20400010), unchecked(0x20400010), unchecked(0x00000000), unchecked( + 0x00404010), unchecked(0x20404000), unchecked(0x00004010), + unchecked(0x00404000), unchecked(0x20404000), unchecked(0x20000000), unchecked(0x20004000), unchecked(0x00000010), unchecked(0x20400010), unchecked(0x00404000), unchecked(0x20404010), unchecked( + 0x00400000), unchecked(0x00004010), unchecked(0x20000010), + unchecked(0x00400000), unchecked(0x20004000), unchecked(0x20000000), unchecked(0x00004010), unchecked(0x20000010), unchecked(0x20404010), unchecked(0x00404000), unchecked(0x20400000), unchecked( + 0x00404010), unchecked(0x20404000), unchecked(0x00000000), + unchecked(0x20400010), unchecked(0x00000010), unchecked(0x00004000), unchecked(0x20400000), unchecked(0x00404010), unchecked(0x00004000), unchecked(0x00400010), unchecked(0x20004010), unchecked( + 0x00000000), unchecked(0x20404000), unchecked(0x20000000), + unchecked(0x00400010), unchecked(0x20004010) }; - private static int[] _sp7 = - { - unchecked(0x00200000), unchecked(0x04200002), unchecked(0x04000802), - unchecked(0x00000000), unchecked(0x00000800), unchecked(0x04000802), - unchecked(0x00200802), unchecked(0x04200800), unchecked(0x04200802), - unchecked(0x00200000), unchecked(0x00000000), unchecked(0x04000002), - unchecked(0x00000002), unchecked(0x04000000), unchecked(0x04200002), - unchecked(0x00000802), unchecked(0x04000800), unchecked(0x00200802), - unchecked(0x00200002), unchecked(0x04000800), unchecked(0x04000002), - unchecked(0x04200000), unchecked(0x04200800), unchecked(0x00200002), - unchecked(0x04200000), unchecked(0x00000800), unchecked(0x00000802), - unchecked(0x04200802), unchecked(0x00200800), unchecked(0x00000002), - unchecked(0x04000000), unchecked(0x00200800), unchecked(0x04000000), - unchecked(0x00200800), unchecked(0x00200000), unchecked(0x04000802), - unchecked(0x04000802), unchecked(0x04200002), unchecked(0x04200002), - unchecked(0x00000002), unchecked(0x00200002), unchecked(0x04000000), - unchecked(0x04000800), unchecked(0x00200000), unchecked(0x04200800), - unchecked(0x00000802), unchecked(0x00200802), unchecked(0x04200800), - unchecked(0x00000802), unchecked(0x04000002), unchecked(0x04200802), - unchecked(0x04200000), unchecked(0x00200800), unchecked(0x00000000), - unchecked(0x00000002), unchecked(0x04200802), unchecked(0x00000000), - unchecked(0x00200802), unchecked(0x04200000), unchecked(0x00000800), - unchecked(0x04000002), unchecked(0x04000800), unchecked(0x00000800), - unchecked(0x00200002) - }; + private static int[] _sp7 = { unchecked(0x00200000), unchecked(0x04200002), unchecked(0x04000802), unchecked(0x00000000), unchecked( + 0x00000800), unchecked(0x04000802), unchecked(0x00200802), + unchecked(0x04200800), unchecked(0x04200802), unchecked(0x00200000), unchecked(0x00000000), unchecked(0x04000002), unchecked(0x00000002), unchecked(0x04000000), unchecked(0x04200002), unchecked( + 0x00000802), unchecked(0x04000800), unchecked(0x00200802), + unchecked(0x00200002), unchecked(0x04000800), unchecked(0x04000002), unchecked(0x04200000), unchecked(0x04200800), unchecked(0x00200002), unchecked(0x04200000), unchecked(0x00000800), unchecked( + 0x00000802), unchecked(0x04200802), unchecked(0x00200800), + unchecked(0x00000002), unchecked(0x04000000), unchecked(0x00200800), unchecked(0x04000000), unchecked(0x00200800), unchecked(0x00200000), unchecked(0x04000802), unchecked(0x04000802), unchecked( + 0x04200002), unchecked(0x04200002), unchecked(0x00000002), + unchecked(0x00200002), unchecked(0x04000000), unchecked(0x04000800), unchecked(0x00200000), unchecked(0x04200800), unchecked(0x00000802), unchecked(0x00200802), unchecked(0x04200800), unchecked( + 0x00000802), unchecked(0x04000002), unchecked(0x04200802), + unchecked(0x04200000), unchecked(0x00200800), unchecked(0x00000000), unchecked(0x00000002), unchecked(0x04200802), unchecked(0x00000000), unchecked(0x00200802), unchecked(0x04200000), unchecked( + 0x00000800), unchecked(0x04000002), unchecked(0x04000800), + unchecked(0x00000800), unchecked(0x00200002) }; - private static int[] _sp8 = - { - unchecked(0x10001040), unchecked(0x00001000), unchecked(0x00040000), - unchecked(0x10041040), unchecked(0x10000000), unchecked(0x10001040), - unchecked(0x00000040), unchecked(0x10000000), unchecked(0x00040040), - unchecked(0x10040000), unchecked(0x10041040), unchecked(0x00041000), - unchecked(0x10041000), unchecked(0x00041040), unchecked(0x00001000), - unchecked(0x00000040), unchecked(0x10040000), unchecked(0x10000040), - unchecked(0x10001000), unchecked(0x00001040), unchecked(0x00041000), - unchecked(0x00040040), unchecked(0x10040040), unchecked(0x10041000), - unchecked(0x00001040), unchecked(0x00000000), unchecked(0x00000000), - unchecked(0x10040040), unchecked(0x10000040), unchecked(0x10001000), - unchecked(0x00041040), unchecked(0x00040000), unchecked(0x00041040), - unchecked(0x00040000), unchecked(0x10041000), unchecked(0x00001000), - unchecked(0x00000040), unchecked(0x10040040), unchecked(0x00001000), - unchecked(0x00041040), unchecked(0x10001000), unchecked(0x00000040), - unchecked(0x10000040), unchecked(0x10040000), unchecked(0x10040040), - unchecked(0x10000000), unchecked(0x00040000), unchecked(0x10001040), - unchecked(0x00000000), unchecked(0x10041040), unchecked(0x00040040), - unchecked(0x10000040), unchecked(0x10040000), unchecked(0x10001000), - unchecked(0x10001040), unchecked(0x00000000), unchecked(0x10041040), - unchecked(0x00041000), unchecked(0x00041000), unchecked(0x00001040), - unchecked(0x00001040), unchecked(0x00040040), unchecked(0x10000000), - unchecked(0x10041000) - }; + private static int[] _sp8 = { unchecked(0x10001040), unchecked(0x00001000), unchecked(0x00040000), unchecked(0x10041040), unchecked( + 0x10000000), unchecked(0x10001040), unchecked(0x00000040), + unchecked(0x10000000), unchecked(0x00040040), unchecked(0x10040000), unchecked(0x10041040), unchecked(0x00041000), unchecked(0x10041000), unchecked(0x00041040), unchecked(0x00001000), unchecked( + 0x00000040), unchecked(0x10040000), unchecked(0x10000040), + unchecked(0x10001000), unchecked(0x00001040), unchecked(0x00041000), unchecked(0x00040040), unchecked(0x10040040), unchecked(0x10041000), unchecked(0x00001040), unchecked(0x00000000), unchecked( + 0x00000000), unchecked(0x10040040), unchecked(0x10000040), + unchecked(0x10001000), unchecked(0x00041040), unchecked(0x00040000), unchecked(0x00041040), unchecked(0x00040000), unchecked(0x10041000), unchecked(0x00001000), unchecked(0x00000040), unchecked( + 0x10040040), unchecked(0x00001000), unchecked(0x00041040), + unchecked(0x10001000), unchecked(0x00000040), unchecked(0x10000040), unchecked(0x10040000), unchecked(0x10040040), unchecked(0x10000000), unchecked(0x00040000), unchecked(0x10001040), unchecked( + 0x00000000), unchecked(0x10041040), unchecked(0x00040040), + unchecked(0x10000040), unchecked(0x10040000), unchecked(0x10001000), unchecked(0x10001040), unchecked(0x00000000), unchecked(0x10041040), unchecked(0x00041000), unchecked(0x00041000), unchecked( + 0x00001040), unchecked(0x00001040), unchecked(0x00040040), + unchecked(0x10000000), unchecked(0x10041000) }; - // Tables, permutations, S-boxes, etc. - /// Squash bytes down to ints. - public static void SquashBytesToInts(byte[] inBytes, int inOff, int[] outInts, int - outOff, int intLen) - { - for (int i = 0; i < intLen; ++i) - { - outInts[outOff + i] = ((inBytes[inOff + i * 4] & unchecked(0xff)) << 24) - | ((inBytes[inOff + i * 4 + 1] & unchecked(0xff)) << 16) - | ((inBytes[inOff + i * 4 + 2] & unchecked(0xff)) << 8) - | (inBytes[inOff + i * 4 + 3] & unchecked(0xff)); - } - } + // Tables, permutations, S-boxes, etc. + /// Squash bytes down to ints. + public static void SquashBytesToInts(byte[] inBytes, int inOff, int[] outInts, int + outOff, int intLen) + { + for (int i = 0; i < intLen; ++i) + { + outInts[outOff + i] = ((inBytes[inOff + i * 4] & unchecked(0xff)) << 24) | + ((inBytes[inOff + i * 4 + 1] & unchecked(0xff)) << 16) | ((inBytes[inOff + + i * 4 + 2] & unchecked(0xff)) << 8) | (inBytes[inOff + i * 4 + 3] & unchecked( + 0xff)); + } + } - /// Spread ints into bytes. - public static void SpreadIntsToBytes(int[] inInts, int inOff, byte[] outBytes, int - outOff, int intLen) - { - for (int i = 0; i < intLen; ++i) - { - outBytes[outOff + i * 4] - = unchecked((byte)((int)(((uint)inInts[inOff + i]) >> 24))); - outBytes[outOff + i * 4 + 1] - = unchecked((byte)((int)(((uint)inInts[inOff + i]) >> 16))); - outBytes[outOff + i * 4 + 2] - = unchecked((byte)((int)(((uint)inInts[inOff + i]) >> 8))); - outBytes[outOff + i * 4 + 3] - = unchecked((byte)inInts[inOff + i]); - } - } - } + /// Spread ints into bytes. + public static void SpreadIntsToBytes(int[] inInts, int inOff, byte[] outBytes, int + outOff, int intLen) + { + for (int i = 0; i < intLen; ++i) + { + outBytes[outOff + i * 4] = unchecked((byte)((int)(((uint)inInts[inOff + i]) >> 24 + ))); + outBytes[outOff + i * 4 + 1] = unchecked((byte)((int)(((uint)inInts[inOff + i]) >> + 16))); + outBytes[outOff + i * 4 + 2] = unchecked((byte)((int)(((uint)inInts[inOff + i]) >> + 8))); + outBytes[outOff + i * 4 + 3] = unchecked((byte)inInts[inOff + i]); + } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/DbsHelper/Log.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/DbsHelper/Log.cs deleted file mode 100644 index eebf7c6b2..000000000 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/DbsHelper/Log.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - - -namespace SharpCifs.Util.DbsHelper -{ - public class Log - { - /// <summary> - /// コンソールへのログ出力を行うか否か - /// </summary> - public static bool IsActive { get; set; } = false; - - public static void Out(string message) - { - if (!Log.IsActive - || string.IsNullOrEmpty(message)) - return; - - var msg = DateTime.Now.ToString("HH:mm:ss.fff") - + ": [ThID: " - + System.Environment.CurrentManagedThreadId.ToString().PadLeft(3) - + " " - + message; - - Debug.WriteLine(msg); - Console.WriteLine(msg); - } - - /// <summary> - /// 例外のログ出力を行う。 - /// </summary> - /// <param name="ex"></param> - public static void Out(Exception ex) - { - if (!Log.IsActive - || ex == null) - return; - - Log.Out($"{ex}"); - var message = Log.GetHighlighted(Log.GetErrorString(ex)); - Log.Out(message); - } - - /// <summary> - /// Cast string-arrary to Highlighted message - /// 文字列配列を強調メッセージ形式文字列に変換する。 - /// </summary> - /// <param name="messages"></param> - /// <returns></returns> - private static string GetHighlighted(params System.String[] messages) - { - var time = DateTime.Now; - var list = new List<string>(); - - list.Add(""); - list.Add(""); - list.Add(time.ToString("HH:mm:ss.fff") + ":"); - list.Add("##################################################"); - list.Add("#"); - - foreach (string message in messages) - { - var lines = message.Replace("\r\n", "\n").Replace("\r", "\n").Trim('\n').Split('\n'); - foreach (var line in lines) - { - list.Add($"# {line}"); - } - } - - list.Add("#"); - list.Add("##################################################"); - list.Add(""); - list.Add(""); - - return string.Join("\r\n", list); - } - - /// <summary> - /// Get Formatted Exception-Info string-array - /// 例外情報を整形した文字列配列を返す。 - /// </summary> - /// <param name="ex"></param> - /// <returns></returns> - private static string[] GetErrorString(Exception ex) - { - var list = new List<string>(); - - if (ex.Message != null) - { - list.Add(ex.Message ?? ""); - list.Add(""); - } - - if (ex.StackTrace != null) - { - list.AddRange(ex.StackTrace.Split(new string[] { "場所", "at " }, - StringSplitOptions.None) - .AsEnumerable() - .Select(row => "\r\nat " + row)); - } - - if (ex.InnerException != null) - { - //InnerExceptionを再帰取得する。 - list.Add(""); - list.Add("Inner Exception"); - list.AddRange(Log.GetErrorString(ex.InnerException)); - } - - return list.ToArray(); - } - } -} diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Encdec.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Encdec.cs index b9e946b48..7e4d57705 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Encdec.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Encdec.cs @@ -20,398 +20,382 @@ using SharpCifs.Util.Sharpen; namespace SharpCifs.Util { - public class Encdec - { - public const long MillisecondsBetween1970And1601 = 11644473600000L; - - public const long SecBetweeen1904And1970 = 2082844800L; - - public const int Time1970Sec32Be = 1; - - public const int Time1970Sec32Le = 2; - - public const int Time1904Sec32Be = 3; - - public const int Time1904Sec32Le = 4; - - public const int Time1601Nanos64Le = 5; - - public const int Time1601Nanos64Be = 6; - - public const int Time1970Millis64Be = 7; - - public const int Time1970Millis64Le = 8; - - public static int Enc_uint16be(short s, byte[] dst, int di) - { - dst[di++] = unchecked((byte)((s >> 8) & unchecked(0xFF))); - dst[di] = unchecked((byte)(s & unchecked(0xFF))); - return 2; - } - - public static int Enc_uint32be(int i, byte[] dst, int di) - { - dst[di++] = unchecked((byte)((i >> 24) & unchecked(0xFF))); - dst[di++] = unchecked((byte)((i >> 16) & unchecked(0xFF))); - dst[di++] = unchecked((byte)((i >> 8) & unchecked(0xFF))); - dst[di] = unchecked((byte)(i & unchecked(0xFF))); - return 4; - } - - public static int Enc_uint16le(short s, byte[] dst, int di) - { - dst[di++] = unchecked((byte)(s & unchecked(0xFF))); - dst[di] = unchecked((byte)((s >> 8) & unchecked(0xFF))); - return 2; - } - - public static int Enc_uint32le(int i, byte[] dst, int di) - { - dst[di++] = unchecked((byte)(i & unchecked(0xFF))); - dst[di++] = unchecked((byte)((i >> 8) & unchecked(0xFF))); - dst[di++] = unchecked((byte)((i >> 16) & unchecked(0xFF))); - dst[di] = unchecked((byte)((i >> 24) & unchecked(0xFF))); - return 4; - } - - public static short Dec_uint16be(byte[] src, int si) - { - return (short)(((src[si] & unchecked(0xFF)) << 8) - | (src[si + 1] & unchecked(0xFF))); - } - - public static int Dec_uint32be(byte[] src, int si) - { - return ((src[si] & unchecked(0xFF)) << 24) - | ((src[si + 1] & unchecked(0xFF)) << 16) - | ((src[si + 2] & unchecked(0xFF)) << 8) - | (src[si + 3] & unchecked(0xFF)); - } - - public static short Dec_uint16le(byte[] src, int si) - { - return (short)((src[si] & unchecked(0xFF)) - | ((src[si + 1] & unchecked(0xFF)) << 8)); - } - - public static int Dec_uint32le(byte[] src, int si) - { - return (src[si] & unchecked(0xFF)) - | ((src[si + 1] & unchecked(0xFF)) << 8) - | ((src[si + 2] & unchecked(0xFF)) << 16) - | ((src[si + 3] & unchecked(0xFF)) << 24); - } - - public static int Enc_uint64be(long l, byte[] dst, int di) - { - Enc_uint32be((int)(l & unchecked(0xFFFFFFFFL)), dst, di + 4); - Enc_uint32be((int)((l >> 32) & unchecked(0xFFFFFFFFL)), dst, di); - return 8; - } - - public static int Enc_uint64le(long l, byte[] dst, int di) - { - Enc_uint32le((int)(l & unchecked(0xFFFFFFFFL)), dst, di); - Enc_uint32le((int)((l >> 32) & unchecked(0xFFFFFFFFL)), dst, di + 4); - return 8; - } - - public static long Dec_uint64be(byte[] src, int si) - { - long l; - l = Dec_uint32be(src, si) & unchecked(0xFFFFFFFFL); - l <<= 32; - l |= Dec_uint32be(src, si + 4) & unchecked(0xFFFFFFFFL); - return l; - } - - public static long Dec_uint64le(byte[] src, int si) - { - long l; - l = Dec_uint32le(src, si + 4) & unchecked(0xFFFFFFFFL); - l <<= 32; - l |= Dec_uint32le(src, si) & unchecked(0xFFFFFFFFL); - return l; - } - - public static int Enc_floatle(float f, byte[] dst, int di) - { - return Enc_uint32le((int)BitConverter.DoubleToInt64Bits(f), dst, di); - } - - public static int Enc_floatbe(float f, byte[] dst, int di) - { + public class Encdec + { + public const long MillisecondsBetween1970And1601 = 11644473600000L; + + public const long SecBetweeen1904And1970 = 2082844800L; + + public const int Time1970Sec32Be = 1; + + public const int Time1970Sec32Le = 2; + + public const int Time1904Sec32Be = 3; + + public const int Time1904Sec32Le = 4; + + public const int Time1601Nanos64Le = 5; + + public const int Time1601Nanos64Be = 6; + + public const int Time1970Millis64Be = 7; + + public const int Time1970Millis64Le = 8; + + public static int Enc_uint16be(short s, byte[] dst, int di) + { + dst[di++] = unchecked((byte)((s >> 8) & unchecked(0xFF))); + dst[di] = unchecked((byte)(s & unchecked(0xFF))); + return 2; + } + + public static int Enc_uint32be(int i, byte[] dst, int di) + { + dst[di++] = unchecked((byte)((i >> 24) & unchecked(0xFF))); + dst[di++] = unchecked((byte)((i >> 16) & unchecked(0xFF))); + dst[di++] = unchecked((byte)((i >> 8) & unchecked(0xFF))); + dst[di] = unchecked((byte)(i & unchecked(0xFF))); + return 4; + } + + public static int Enc_uint16le(short s, byte[] dst, int di) + { + dst[di++] = unchecked((byte)(s & unchecked(0xFF))); + dst[di] = unchecked((byte)((s >> 8) & unchecked(0xFF))); + return 2; + } + + public static int Enc_uint32le(int i, byte[] dst, int di) + { + dst[di++] = unchecked((byte)(i & unchecked(0xFF))); + dst[di++] = unchecked((byte)((i >> 8) & unchecked(0xFF))); + dst[di++] = unchecked((byte)((i >> 16) & unchecked(0xFF))); + dst[di] = unchecked((byte)((i >> 24) & unchecked(0xFF))); + return 4; + } + + public static short Dec_uint16be(byte[] src, int si) + { + return (short)(((src[si] & unchecked(0xFF)) << 8) | (src[si + 1] & unchecked( + 0xFF))); + } + + public static int Dec_uint32be(byte[] src, int si) + { + return ((src[si] & unchecked(0xFF)) << 24) | ((src[si + 1] & unchecked(0xFF)) << 16) | ((src[si + 2] & unchecked(0xFF)) << 8) | (src[si + 3] + & unchecked(0xFF)); + } + + public static short Dec_uint16le(byte[] src, int si) + { + return (short)((src[si] & unchecked(0xFF)) | ((src[si + 1] & unchecked(0xFF)) << 8)); + } + + public static int Dec_uint32le(byte[] src, int si) + { + return (src[si] & unchecked(0xFF)) | ((src[si + 1] & unchecked(0xFF + )) << 8) | ((src[si + 2] & unchecked(0xFF)) << 16) | ((src[si + 3] & unchecked( + 0xFF)) << 24); + } + + public static int Enc_uint64be(long l, byte[] dst, int di) + { + Enc_uint32be((int)(l & unchecked(0xFFFFFFFFL)), dst, di + 4); + Enc_uint32be((int)((l >> 32) & unchecked(0xFFFFFFFFL)), dst, di); + return 8; + } + + public static int Enc_uint64le(long l, byte[] dst, int di) + { + Enc_uint32le((int)(l & unchecked(0xFFFFFFFFL)), dst, di); + Enc_uint32le((int)((l >> 32) & unchecked(0xFFFFFFFFL)), dst, di + 4); + return 8; + } + + public static long Dec_uint64be(byte[] src, int si) + { + long l; + l = Dec_uint32be(src, si) & unchecked(0xFFFFFFFFL); + l <<= 32; + l |= Dec_uint32be(src, si + 4) & unchecked(0xFFFFFFFFL); + return l; + } + + public static long Dec_uint64le(byte[] src, int si) + { + long l; + l = Dec_uint32le(src, si + 4) & unchecked(0xFFFFFFFFL); + l <<= 32; + l |= Dec_uint32le(src, si) & unchecked(0xFFFFFFFFL); + return l; + } + + public static int Enc_floatle(float f, byte[] dst, int di) + { + return Enc_uint32le((int)BitConverter.DoubleToInt64Bits(f), dst, di); + } + + public static int Enc_floatbe(float f, byte[] dst, int di) + { return Enc_uint32be((int)BitConverter.DoubleToInt64Bits(f), dst, di); - } + } - public static float Dec_floatle(byte[] src, int si) - { - return (float)BitConverter.Int64BitsToDouble(Dec_uint32le(src, si)); - } + public static float Dec_floatle(byte[] src, int si) + { + return (float)BitConverter.Int64BitsToDouble(Dec_uint32le(src, si)); + } - public static float Dec_floatbe(byte[] src, int si) - { + public static float Dec_floatbe(byte[] src, int si) + { return (float)BitConverter.Int64BitsToDouble(Dec_uint32be(src, si)); - } + } - public static int Enc_doublele(double d, byte[] dst, int di) - { + public static int Enc_doublele(double d, byte[] dst, int di) + { return Enc_uint64le(BitConverter.DoubleToInt64Bits(d), dst, di); - } + } - public static int Enc_doublebe(double d, byte[] dst, int di) - { + public static int Enc_doublebe(double d, byte[] dst, int di) + { return Enc_uint64be(BitConverter.DoubleToInt64Bits(d), dst, di); - } + } - public static double Dec_doublele(byte[] src, int si) - { + public static double Dec_doublele(byte[] src, int si) + { return BitConverter.Int64BitsToDouble(Dec_uint64le(src, si)); - } + } - public static double Dec_doublebe(byte[] src, int si) - { + public static double Dec_doublebe(byte[] src, int si) + { return BitConverter.Int64BitsToDouble(Dec_uint64be(src, si)); - } - - public static int Enc_time(DateTime date, byte[] dst, int di, int enc) - { - long t; - switch (enc) - { - case Time1970Sec32Be: - { - return Enc_uint32be((int)(date.GetTime() / 1000L), dst, di); - } - - case Time1970Sec32Le: - { - return Enc_uint32le((int)(date.GetTime() / 1000L), dst, di); - } - - case Time1904Sec32Be: - { - return Enc_uint32be((int)((date.GetTime() / 1000L - + SecBetweeen1904And1970) - & unchecked((int)(0xFFFFFFFF))), - dst, - di); - } - - case Time1904Sec32Le: - { - return Enc_uint32le((int)((date.GetTime() / 1000L - + SecBetweeen1904And1970) - & unchecked((int)(0xFFFFFFFF))), - dst, - di); - } - - case Time1601Nanos64Be: - { - t = (date.GetTime() + MillisecondsBetween1970And1601) * 10000L; - return Enc_uint64be(t, dst, di); - } - - case Time1601Nanos64Le: - { - t = (date.GetTime() + MillisecondsBetween1970And1601) * 10000L; - return Enc_uint64le(t, dst, di); - } - - case Time1970Millis64Be: - { - return Enc_uint64be(date.GetTime(), dst, di); - } - - case Time1970Millis64Le: - { - return Enc_uint64le(date.GetTime(), dst, di); - } - - default: - { - throw new ArgumentException("Unsupported time encoding"); - } - } - } - - public static DateTime Dec_time(byte[] src, int si, int enc) - { - long t; - switch (enc) - { - case Time1970Sec32Be: - { - return Sharpen.Extensions.CreateDate(Dec_uint32be(src, si) * 1000L); - } - - case Time1970Sec32Le: - { - return Sharpen.Extensions.CreateDate(Dec_uint32le(src, si) * 1000L); - } - - case Time1904Sec32Be: - { - return Sharpen.Extensions.CreateDate( ( (Dec_uint32be(src, si) - & unchecked(0xFFFFFFFFL)) - - SecBetweeen1904And1970) - * 1000L ); - } - - case Time1904Sec32Le: - { - return Sharpen.Extensions.CreateDate( ( (Dec_uint32le(src, si) - & unchecked(0xFFFFFFFFL)) - - SecBetweeen1904And1970) - * 1000L); - } - - case Time1601Nanos64Be: - { - t = Dec_uint64be(src, si); - return Sharpen.Extensions.CreateDate(t / 10000L - - MillisecondsBetween1970And1601); - } - - case Time1601Nanos64Le: - { - t = Dec_uint64le(src, si); - return Sharpen.Extensions.CreateDate(t / 10000L - - MillisecondsBetween1970And1601); - } - - case Time1970Millis64Be: - { - return Sharpen.Extensions.CreateDate(Dec_uint64be(src, si)); - } - - case Time1970Millis64Le: - { - return Sharpen.Extensions.CreateDate(Dec_uint64le(src, si)); - } - - default: - { - throw new ArgumentException("Unsupported time encoding"); - } - } - } - - /// <exception cref="System.IO.IOException"></exception> - public static int Enc_utf8(string str, byte[] dst, int di, int dlim) - { - int start = di; - int ch; - int strlen = str.Length; - for (int i = 0; di < dlim && i < strlen; i++) - { - ch = str[i]; - if ((ch >= unchecked(0x0001)) && (ch <= unchecked(0x007F))) - { - dst[di++] = unchecked((byte)ch); - } - else - { - if (ch > unchecked(0x07FF)) - { - if ((dlim - di) < 3) - { - break; - } - dst[di++] = unchecked((byte)(unchecked(0xE0) | ((ch >> 12) & unchecked(0x0F)))); - dst[di++] = unchecked((byte)(unchecked(0x80) | ((ch >> 6) & unchecked(0x3F)))); - dst[di++] = unchecked((byte)(unchecked(0x80) | ((ch >> 0) & unchecked(0x3F)))); - } - else - { - if ((dlim - di) < 2) - { - break; - } - dst[di++] = unchecked((byte)(unchecked(0xC0) | ((ch >> 6) & unchecked(0x1F)))); - dst[di++] = unchecked((byte)(unchecked(0x80) | ((ch >> 0) & unchecked(0x3F)))); - } - } - } - return di - start; - } - - /// <exception cref="System.IO.IOException"></exception> - public static string Dec_utf8(byte[] src, int si, int slim) - { - char[] uni = new char[slim - si]; - int ui; - int ch; - for (ui = 0; si < slim && (ch = src[si++] & unchecked(0xFF)) != 0; ui++) - { - if (ch < unchecked(0x80)) - { - uni[ui] = (char)ch; - } - else - { - if ((ch & unchecked(0xE0)) == unchecked(0xC0)) - { - if ((slim - si) < 2) - { - break; - } - uni[ui] = (char)((ch & unchecked(0x1F)) << 6); - ch = src[si++] & unchecked(0xFF); - uni[ui] |= (char)((char)ch & unchecked(0x3F)); - if ((ch & unchecked(0xC0)) != unchecked(0x80) || uni[ui] < unchecked( - 0x80)) - { - throw new IOException("Invalid UTF-8 sequence"); - } - } - else - { - if ((ch & unchecked(0xF0)) == unchecked(0xE0)) - { - if ((slim - si) < 3) - { - break; - } - uni[ui] = (char)((ch & unchecked(0x0F)) << 12); - ch = src[si++] & unchecked(0xFF); - if ((ch & unchecked(0xC0)) != unchecked(0x80)) - { - throw new IOException("Invalid UTF-8 sequence"); - } - uni[ui] |= (char)((char)(ch & unchecked(0x3F)) << 6); - ch = src[si++] & unchecked(0xFF); - uni[ui] |= (char)((char)ch & unchecked(0x3F)); - if ((ch & unchecked(0xC0)) != unchecked(0x80) || uni[ui] < unchecked( - 0x800)) - { - throw new IOException("Invalid UTF-8 sequence"); - } - } - else - { - throw new IOException("Unsupported UTF-8 sequence"); - } - } - } - } - return new string(uni, 0, ui); - } - - /// <exception cref="System.IO.IOException"></exception> - public static string Dec_ucs2le(byte[] src, int si, int slim, char[] buf) - { - int bi; - for (bi = 0; (si + 1) < slim; bi++, si += 2) - { - buf[bi] = (char)Dec_uint16le(src, si); - if (buf[bi] == '\0') - { - break; - } - } - return new string(buf, 0, bi); - } - } + } + + public static int Enc_time(DateTime date, byte[] dst, int di, int enc) + { + long t; + switch (enc) + { + case Time1970Sec32Be: + { + return Enc_uint32be((int)(date.GetTime() / 1000L), dst, di); + } + + case Time1970Sec32Le: + { + return Enc_uint32le((int)(date.GetTime() / 1000L), dst, di); + } + + case Time1904Sec32Be: + { + return Enc_uint32be((int)((date.GetTime() / 1000L + SecBetweeen1904And1970) & + unchecked((int)(0xFFFFFFFF))), dst, di); + } + + case Time1904Sec32Le: + { + return Enc_uint32le((int)((date.GetTime() / 1000L + SecBetweeen1904And1970) & + unchecked((int)(0xFFFFFFFF))), dst, di); + } + + case Time1601Nanos64Be: + { + t = (date.GetTime() + MillisecondsBetween1970And1601) * 10000L; + return Enc_uint64be(t, dst, di); + } + + case Time1601Nanos64Le: + { + t = (date.GetTime() + MillisecondsBetween1970And1601) * 10000L; + return Enc_uint64le(t, dst, di); + } + + case Time1970Millis64Be: + { + return Enc_uint64be(date.GetTime(), dst, di); + } + + case Time1970Millis64Le: + { + return Enc_uint64le(date.GetTime(), dst, di); + } + + default: + { + throw new ArgumentException("Unsupported time encoding"); + } + } + } + + public static DateTime Dec_time(byte[] src, int si, int enc) + { + long t; + switch (enc) + { + case Time1970Sec32Be: + { + return Sharpen.Extensions.CreateDate(Dec_uint32be(src, si) * 1000L); + } + + case Time1970Sec32Le: + { + return Sharpen.Extensions.CreateDate(Dec_uint32le(src, si) * 1000L); + } + + case Time1904Sec32Be: + { + return Sharpen.Extensions.CreateDate(((Dec_uint32be(src, si) & unchecked(0xFFFFFFFFL)) - SecBetweeen1904And1970) * 1000L); + } + + case Time1904Sec32Le: + { + return Sharpen.Extensions.CreateDate(((Dec_uint32le(src, si) & unchecked(0xFFFFFFFFL)) - SecBetweeen1904And1970) * 1000L); + } + + case Time1601Nanos64Be: + { + t = Dec_uint64be(src, si); + return Sharpen.Extensions.CreateDate(t / 10000L - MillisecondsBetween1970And1601 + ); + } + + case Time1601Nanos64Le: + { + t = Dec_uint64le(src, si); + return Sharpen.Extensions.CreateDate(t / 10000L - MillisecondsBetween1970And1601 + ); + } + + case Time1970Millis64Be: + { + return Sharpen.Extensions.CreateDate(Dec_uint64be(src, si)); + } + + case Time1970Millis64Le: + { + return Sharpen.Extensions.CreateDate(Dec_uint64le(src, si)); + } + + default: + { + throw new ArgumentException("Unsupported time encoding"); + } + } + } + + /// <exception cref="System.IO.IOException"></exception> + public static int Enc_utf8(string str, byte[] dst, int di, int dlim) + { + int start = di; + int ch; + int strlen = str.Length; + for (int i = 0; di < dlim && i < strlen; i++) + { + ch = str[i]; + if ((ch >= unchecked(0x0001)) && (ch <= unchecked(0x007F))) + { + dst[di++] = unchecked((byte)ch); + } + else + { + if (ch > unchecked(0x07FF)) + { + if ((dlim - di) < 3) + { + break; + } + dst[di++] = unchecked((byte)(unchecked(0xE0) | ((ch >> 12) & unchecked(0x0F)))); + dst[di++] = unchecked((byte)(unchecked(0x80) | ((ch >> 6) & unchecked(0x3F)))); + dst[di++] = unchecked((byte)(unchecked(0x80) | ((ch >> 0) & unchecked(0x3F)))); + } + else + { + if ((dlim - di) < 2) + { + break; + } + dst[di++] = unchecked((byte)(unchecked(0xC0) | ((ch >> 6) & unchecked(0x1F)))); + dst[di++] = unchecked((byte)(unchecked(0x80) | ((ch >> 0) & unchecked(0x3F)))); + } + } + } + return di - start; + } + + /// <exception cref="System.IO.IOException"></exception> + public static string Dec_utf8(byte[] src, int si, int slim) + { + char[] uni = new char[slim - si]; + int ui; + int ch; + for (ui = 0; si < slim && (ch = src[si++] & unchecked(0xFF)) != 0; ui++) + { + if (ch < unchecked(0x80)) + { + uni[ui] = (char)ch; + } + else + { + if ((ch & unchecked(0xE0)) == unchecked(0xC0)) + { + if ((slim - si) < 2) + { + break; + } + uni[ui] = (char)((ch & unchecked(0x1F)) << 6); + ch = src[si++] & unchecked(0xFF); + uni[ui] |= (char)((char)ch & unchecked(0x3F)); + if ((ch & unchecked(0xC0)) != unchecked(0x80) || uni[ui] < unchecked( + 0x80)) + { + throw new IOException("Invalid UTF-8 sequence"); + } + } + else + { + if ((ch & unchecked(0xF0)) == unchecked(0xE0)) + { + if ((slim - si) < 3) + { + break; + } + uni[ui] = (char)((ch & unchecked(0x0F)) << 12); + ch = src[si++] & unchecked(0xFF); + if ((ch & unchecked(0xC0)) != unchecked(0x80)) + { + throw new IOException("Invalid UTF-8 sequence"); + } + uni[ui] |= (char)((char)(ch & unchecked(0x3F)) << 6); + ch = src[si++] & unchecked(0xFF); + uni[ui] |= (char)((char)ch & unchecked(0x3F)); + if ((ch & unchecked(0xC0)) != unchecked(0x80) || uni[ui] < unchecked( + 0x800)) + { + throw new IOException("Invalid UTF-8 sequence"); + } + } + else + { + throw new IOException("Unsupported UTF-8 sequence"); + } + } + } + } + return new string(uni, 0, ui); + } + + /// <exception cref="System.IO.IOException"></exception> + public static string Dec_ucs2le(byte[] src, int si, int slim, char[] buf) + { + int bi; + for (bi = 0; (si + 1) < slim; bi++, si += 2) + { + buf[bi] = (char)Dec_uint16le(src, si); + if (buf[bi] == '\0') + { + break; + } + } + return new string(buf, 0, bi); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/HMACT64.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/HMACT64.cs index fff978faf..9ab31d61b 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/HMACT64.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/HMACT64.cs @@ -19,99 +19,99 @@ using SharpCifs.Util.Sharpen; namespace SharpCifs.Util { - /// <summary>This is an implementation of the HMACT64 keyed hashing algorithm.</summary> - /// <remarks> - /// This is an implementation of the HMACT64 keyed hashing algorithm. - /// HMACT64 is defined by Luke Leighton as a modified HMAC-MD5 (RFC 2104) - /// in which the key is truncated at 64 bytes (rather than being hashed - /// via MD5). - /// </remarks> - public class Hmact64 : MessageDigest - { - private const int BlockLength = 64; - - private const byte Ipad = unchecked(unchecked(0x36)); - - private const byte Opad = unchecked(unchecked(0x5c)); - - private MessageDigest _md5; - - private byte[] _ipad = new byte[BlockLength]; - - private byte[] _opad = new byte[BlockLength]; - - /// <summary>Creates an HMACT64 instance which uses the given secret key material.</summary> - /// <remarks>Creates an HMACT64 instance which uses the given secret key material.</remarks> - /// <param name="key">The key material to use in hashing.</param> - public Hmact64(byte[] key) - { - int length = Math.Min(key.Length, BlockLength); - for (int i = 0; i < length; i++) - { - _ipad[i] = unchecked((byte)(key[i] ^ Ipad)); - _opad[i] = unchecked((byte)(key[i] ^ Opad)); - } - for (int i1 = length; i1 < BlockLength; i1++) - { - _ipad[i1] = Ipad; - _opad[i1] = Opad; - } - try - { - _md5 = GetInstance("MD5"); - } - catch (Exception ex) - { - throw new InvalidOperationException(ex.Message); - } - EngineReset(); - } - - - protected byte[] EngineDigest() - { - byte[] digest = _md5.Digest(); - _md5.Update(_opad); - return _md5.Digest(digest); - } - - protected int EngineDigest(byte[] buf, int offset, int len) - { - byte[] digest = _md5.Digest(); - _md5.Update(_opad); - _md5.Update(digest); - try - { - _md5.Digest(buf, offset, len); - - return len; - } - catch (Exception) - { - throw new InvalidOperationException(); - } - } - - protected int EngineGetDigestLength() - { - return _md5.GetDigestLength(); - } - - protected void EngineReset() - { - _md5.Reset(); - _md5.Update(_ipad); - } - - protected void EngineUpdate(byte b) - { - _md5.Update(b); - } - - protected void EngineUpdate(byte[] input, int offset, int len) - { - _md5.Update(input, offset, len); - } + /// <summary>This is an implementation of the HMACT64 keyed hashing algorithm.</summary> + /// <remarks> + /// This is an implementation of the HMACT64 keyed hashing algorithm. + /// HMACT64 is defined by Luke Leighton as a modified HMAC-MD5 (RFC 2104) + /// in which the key is truncated at 64 bytes (rather than being hashed + /// via MD5). + /// </remarks> + public class Hmact64 : MessageDigest + { + private const int BlockLength = 64; + + private const byte Ipad = unchecked(unchecked(0x36)); + + private const byte Opad = unchecked(unchecked(0x5c)); + + private MessageDigest _md5; + + private byte[] _ipad = new byte[BlockLength]; + + private byte[] _opad = new byte[BlockLength]; + + /// <summary>Creates an HMACT64 instance which uses the given secret key material.</summary> + /// <remarks>Creates an HMACT64 instance which uses the given secret key material.</remarks> + /// <param name="key">The key material to use in hashing.</param> + public Hmact64(byte[] key) + { + int length = Math.Min(key.Length, BlockLength); + for (int i = 0; i < length; i++) + { + _ipad[i] = unchecked((byte)(key[i] ^ Ipad)); + _opad[i] = unchecked((byte)(key[i] ^ Opad)); + } + for (int i1 = length; i1 < BlockLength; i1++) + { + _ipad[i1] = Ipad; + _opad[i1] = Opad; + } + try + { + _md5 = GetInstance("MD5"); + } + catch (Exception ex) + { + throw new InvalidOperationException(ex.Message); + } + EngineReset(); + } + + + protected byte[] EngineDigest() + { + byte[] digest = _md5.Digest(); + _md5.Update(_opad); + return _md5.Digest(digest); + } + + protected int EngineDigest(byte[] buf, int offset, int len) + { + byte[] digest = _md5.Digest(); + _md5.Update(_opad); + _md5.Update(digest); + try + { + _md5.Digest(buf, offset, len); + + return len; + } + catch (Exception) + { + throw new InvalidOperationException(); + } + } + + protected int EngineGetDigestLength() + { + return _md5.GetDigestLength(); + } + + protected void EngineReset() + { + _md5.Reset(); + _md5.Update(_ipad); + } + + protected void EngineUpdate(byte b) + { + _md5.Update(b); + } + + protected void EngineUpdate(byte[] input, int offset, int len) + { + _md5.Update(input, offset, len); + } public override byte[] Digest() { diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Hexdump.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Hexdump.cs index b49c55155..7e53f76e3 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Hexdump.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Hexdump.cs @@ -19,176 +19,173 @@ using System.IO; namespace SharpCifs.Util { - public class Hexdump - { - private static readonly string Nl = @"\r\n"; //Runtime.GetProperty("line.separator"); + public class Hexdump + { + private static readonly string Nl = @"\r\n"; //Runtime.GetProperty("line.separator"); - private static readonly int NlLength = Nl.Length; + private static readonly int NlLength = Nl.Length; - private static readonly char[] SpaceChars = - { - ' ', ' ', ' ', ' ', ' ' - , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' - , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' - , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' - }; + private static readonly char[] SpaceChars = { ' ', ' ', ' ', ' ', ' ' + , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' + , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' + , ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }; - public static readonly char[] HexDigits - = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + public static readonly char[] HexDigits = { '0', '1', '2', '3', '4', + '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - private static bool IsIsoControl(char c) - { - return (c >= '\u0000' && c <= '\u001F') || (c >= '\u007F' && c <= '\u009F'); - } - + private static bool IsIsoControl(char c) + { + return (c >= '\u0000' && c <= '\u001F') || (c >= '\u007F' && c <= '\u009F'); + } + /// <summary> - /// Generate "hexdump" output of the buffer at src like the following: - /// <p><blockquote><pre> - /// 00000: 04 d2 29 00 00 01 00 00 00 00 00 01 20 45 47 46 |..)......... - /// </summary> - /// <remarks> - /// Generate "hexdump" output of the buffer at src like the following: - /// <p><blockquote><pre> - /// 00000: 04 d2 29 00 00 01 00 00 00 00 00 01 20 45 47 46 |..)......... EGF| - /// 00010: 43 45 46 45 45 43 41 43 41 43 41 43 41 43 41 43 |CEFEECACACACACAC| - /// 00020: 41 43 41 43 41 43 41 43 41 43 41 41 44 00 00 20 |ACACACACACAAD.. | - /// 00030: 00 01 c0 0c 00 20 00 01 00 00 00 00 00 06 20 00 |..... ........ .| - /// 00040: ac 22 22 e1 |."". | - /// </blockquote></pre> - /// </remarks> - public static void ToHexdump(TextWriter ps, byte[] src, int srcIndex, int length) - { - if (length == 0) - { - return; - } - int s = length % 16; - int r = (s == 0) ? length / 16 : length / 16 + 1; - char[] c = new char[r * (74 + NlLength)]; - char[] d = new char[16]; - int i; - int si = 0; - int ci = 0; - do - { - ToHexChars(si, c, ci, 5); - ci += 5; - c[ci++] = ':'; - do - { - if (si == length) - { - int n = 16 - s; - Array.Copy(SpaceChars, 0, c, ci, n * 3); - ci += n * 3; - Array.Copy(SpaceChars, 0, d, s, n); - break; - } - c[ci++] = ' '; - i = src[srcIndex + si] & 0xFF; - ToHexChars(i, c, ci, 2); - ci += 2; - if (i < 0 || IsIsoControl((char)i)) - { - d[si % 16] = '.'; - } - else - { - d[si % 16] = (char)i; - } - } - while ((++si % 16) != 0); - c[ci++] = ' '; - c[ci++] = ' '; - c[ci++] = '|'; - Array.Copy(d, 0, c, ci, 16); - ci += 16; - c[ci++] = '|'; - //Sharpen.Runtime.GetCharsForString(NL, 0, NL_LENGTH, c, ci); - c = Nl.ToCharArray(0, NlLength); - ci += NlLength; - } - while (si < length); - ps.WriteLine(c); - } + /// Generate "hexdump" output of the buffer at src like the following: + /// <p><blockquote><pre> + /// 00000: 04 d2 29 00 00 01 00 00 00 00 00 01 20 45 47 46 |..)......... + /// </summary> + /// <remarks> + /// Generate "hexdump" output of the buffer at src like the following: + /// <p><blockquote><pre> + /// 00000: 04 d2 29 00 00 01 00 00 00 00 00 01 20 45 47 46 |..)......... EGF| + /// 00010: 43 45 46 45 45 43 41 43 41 43 41 43 41 43 41 43 |CEFEECACACACACAC| + /// 00020: 41 43 41 43 41 43 41 43 41 43 41 41 44 00 00 20 |ACACACACACAAD.. | + /// 00030: 00 01 c0 0c 00 20 00 01 00 00 00 00 00 06 20 00 |..... ........ .| + /// 00040: ac 22 22 e1 |."". | + /// </blockquote></pre> + /// </remarks> + public static void ToHexdump(TextWriter ps, byte[] src, int srcIndex, int length) + { + if (length == 0) + { + return; + } + int s = length % 16; + int r = (s == 0) ? length / 16 : length / 16 + 1; + char[] c = new char[r * (74 + NlLength)]; + char[] d = new char[16]; + int i; + int si = 0; + int ci = 0; + do + { + ToHexChars(si, c, ci, 5); + ci += 5; + c[ci++] = ':'; + do + { + if (si == length) + { + int n = 16 - s; + Array.Copy(SpaceChars, 0, c, ci, n * 3); + ci += n * 3; + Array.Copy(SpaceChars, 0, d, s, n); + break; + } + c[ci++] = ' '; + i = src[srcIndex + si] & 0xFF; + ToHexChars(i, c, ci, 2); + ci += 2; + if (i < 0 || IsIsoControl((char)i)) + { + d[si % 16] = '.'; + } + else + { + d[si % 16] = (char)i; + } + } + while ((++si % 16) != 0); + c[ci++] = ' '; + c[ci++] = ' '; + c[ci++] = '|'; + Array.Copy(d, 0, c, ci, 16); + ci += 16; + c[ci++] = '|'; + //Sharpen.Runtime.GetCharsForString(NL, 0, NL_LENGTH, c, ci); + c = Nl.ToCharArray(0, NlLength); + ci += NlLength; + } + while (si < length); + ps.WriteLine(c); + } - /// <summary> - /// This is an alternative to the <code>java.lang.Integer.toHexString</cod> - /// method. - /// </summary> - /// <remarks> - /// This is an alternative to the <code>java.lang.Integer.toHexString</cod> - /// method. It is an efficient relative that also will pad the left side so - /// that the result is <code>size</code> digits. - /// </remarks> - public static string ToHexString(int val, int size) - { - char[] c = new char[size]; - ToHexChars(val, c, 0, size); - return new string(c); - } + /// <summary> + /// This is an alternative to the <code>java.lang.Integer.toHexString</cod> + /// method. + /// </summary> + /// <remarks> + /// This is an alternative to the <code>java.lang.Integer.toHexString</cod> + /// method. It is an efficient relative that also will pad the left side so + /// that the result is <code>size</code> digits. + /// </remarks> + public static string ToHexString(int val, int size) + { + char[] c = new char[size]; + ToHexChars(val, c, 0, size); + return new string(c); + } - public static string ToHexString(long val, int size) - { - char[] c = new char[size]; - ToHexChars(val, c, 0, size); - return new string(c); - } + public static string ToHexString(long val, int size) + { + char[] c = new char[size]; + ToHexChars(val, c, 0, size); + return new string(c); + } - public static string ToHexString(byte[] src, int srcIndex, int size) - { - char[] c = new char[size]; - size = (size % 2 == 0) ? size / 2 : size / 2 + 1; - for (int i = 0, j = 0; i < size; i++) - { - c[j++] = HexDigits[(src[i] >> 4) & 0x0F]; - if (j == c.Length) - { - break; - } - c[j++] = HexDigits[src[i] & 0x0F]; - } - return new string(c); - } + public static string ToHexString(byte[] src, int srcIndex, int size) + { + char[] c = new char[size]; + size = (size % 2 == 0) ? size / 2 : size / 2 + 1; + for (int i = 0, j = 0; i < size; i++) + { + c[j++] = HexDigits[(src[i] >> 4) & 0x0F]; + if (j == c.Length) + { + break; + } + c[j++] = HexDigits[src[i] & 0x0F]; + } + return new string(c); + } - /// <summary> - /// This is the same as - /// <see cref="ToHexString(int, int)">ToHexString(int, int)</see> - /// but provides a more practical form when trying to avoid - /// <see cref="string">string</see> - /// concatenation and - /// <see cref="System.Text.StringBuilder">System.Text.StringBuilder</see> - /// . - /// </summary> - public static void ToHexChars(int val, char[] dst, int dstIndex, int size) - { - while (size > 0) - { - int i = dstIndex + size - 1; - if (i < dst.Length) - { - dst[i] = HexDigits[val & 0x000F]; - } - if (val != 0) - { - val = (int)(((uint)val) >> 4); - } - size--; - } - } + /// <summary> + /// This is the same as + /// <see cref="ToHexString(int, int)">ToHexString(int, int)</see> + /// but provides a more practical form when trying to avoid + /// <see cref="string">string</see> + /// concatenation and + /// <see cref="System.Text.StringBuilder">System.Text.StringBuilder</see> + /// . + /// </summary> + public static void ToHexChars(int val, char[] dst, int dstIndex, int size) + { + while (size > 0) + { + int i = dstIndex + size - 1; + if (i < dst.Length) + { + dst[i] = HexDigits[val & 0x000F]; + } + if (val != 0) + { + val = (int)(((uint)val) >> 4); + } + size--; + } + } - public static void ToHexChars(long val, char[] dst, int dstIndex, int size) - { - while (size > 0) - { - dst[dstIndex + size - 1] = HexDigits[(int)(val & 0x000FL)]; - if (val != 0) - { - val = (long)(((ulong)val) >> 4); - } - size--; - } - } - } + public static void ToHexChars(long val, char[] dst, int dstIndex, int size) + { + while (size > 0) + { + dst[dstIndex + size - 1] = HexDigits[(int)(val & 0x000FL)]; + if (val != 0) + { + val = (long)(((ulong)val) >> 4); + } + size--; + } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/LogStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/LogStream.cs index 566454e34..9dd130b50 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/LogStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/LogStream.cs @@ -24,55 +24,55 @@ using SharpCifs.Util.Sharpen; namespace SharpCifs.Util { - /// <summary> - /// 0 - nothing - /// 1 - critical [default] - /// 2 - basic info can be logged under load - /// 3 - almost everything - /// N - debugging - /// </summary> - public class LogStream : PrintWriter - { + /// <summary> + /// 0 - nothing + /// 1 - critical [default] + /// 2 - basic info can be logged under load + /// 3 - almost everything + /// N - debugging + /// </summary> + public class LogStream: PrintWriter +{ private static LogStream _inst = null; - public int Level = 1; + public int Level = 1; - public void SetLevel(int level) - { - this.Level = level; - } + public void SetLevel(int level) + { + this.Level = level; + } - public LogStream(TextWriter other) : base(other) - { + public LogStream(TextWriter other) : base(other) + { + + } - } + /// <summary> + /// This must be called before <tt>getInstance</tt> is called or + /// it will have no effect. + /// </summary> + /// <remarks> + /// This must be called before <tt>getInstance</tt> is called or + /// it will have no effect. + /// </remarks> + public static void SetInstance(TextWriter other) + { + //inst = new Jcifs.Util.LogStream(); + _inst = new LogStream(other); + } - /// <summary> - /// This must be called before <tt>getInstance</tt> is called or - /// it will have no effect. - /// </summary> - /// <remarks> - /// This must be called before <tt>getInstance</tt> is called or - /// it will have no effect. - /// </remarks> - public static void SetInstance(TextWriter other) - { - //inst = new Jcifs.Util.LogStream(); - _inst = new LogStream(other); - } - - public static LogStream GetInstance() - { - if (_inst == null) - { + public static LogStream GetInstance() + { + if (_inst == null) + { SetInstance(Console.Error); - } - return _inst; - } - - public override Encoding Encoding - { - get { throw new NotImplementedException(); } - } - } + } + return _inst; + } + + public override Encoding Encoding + { + get { throw new NotImplementedException(); } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/MD4.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/MD4.cs index 4d6dc0df1..99eb6ade6 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/MD4.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/MD4.cs @@ -19,329 +19,329 @@ using SharpCifs.Util.Sharpen; namespace SharpCifs.Util { - /// <summary>Implements the MD4 message digest algorithm in Java.</summary> - /// <remarks> - /// Implements the MD4 message digest algorithm in Java. - /// <p> - /// <b>References:</b> - /// <ol> - /// <li> Ronald L. Rivest, - /// "<a href="http://www.roxen.com/rfc/rfc1320.html"> - /// The MD4 Message-Digest Algorithm</a>", - /// IETF RFC-1320 (informational). - /// </ol> - /// <p><b>$Revision: 1.2 $</b> - /// </remarks> - /// <author>Raif S. Naffah</author> - public class Md4 : MessageDigest - { - /// <summary>The size in bytes of the input block to the tranformation algorithm.</summary> - /// <remarks>The size in bytes of the input block to the tranformation algorithm.</remarks> - private const int BlockLength = 64; + /// <summary>Implements the MD4 message digest algorithm in Java.</summary> + /// <remarks> + /// Implements the MD4 message digest algorithm in Java. + /// <p> + /// <b>References:</b> + /// <ol> + /// <li> Ronald L. Rivest, + /// "<a href="http://www.roxen.com/rfc/rfc1320.html"> + /// The MD4 Message-Digest Algorithm</a>", + /// IETF RFC-1320 (informational). + /// </ol> + /// <p><b>$Revision: 1.2 $</b> + /// </remarks> + /// <author>Raif S. Naffah</author> + public class Md4 : MessageDigest + { + /// <summary>The size in bytes of the input block to the tranformation algorithm.</summary> + /// <remarks>The size in bytes of the input block to the tranformation algorithm.</remarks> + private const int BlockLength = 64; - /// <summary>4 32-bit words (interim result)</summary> - private int[] _context = new int[4]; + /// <summary>4 32-bit words (interim result)</summary> + private int[] _context = new int[4]; - /// <summary>Number of bytes processed so far mod.</summary> - /// <remarks>Number of bytes processed so far mod. 2 power of 64.</remarks> - private long _count; + /// <summary>Number of bytes processed so far mod.</summary> + /// <remarks>Number of bytes processed so far mod. 2 power of 64.</remarks> + private long _count; - /// <summary>512 bits input buffer = 16 x 32-bit words holds until reaches 512 bits.</summary> - /// <remarks>512 bits input buffer = 16 x 32-bit words holds until reaches 512 bits.</remarks> - private byte[] _buffer = new byte[BlockLength]; + /// <summary>512 bits input buffer = 16 x 32-bit words holds until reaches 512 bits.</summary> + /// <remarks>512 bits input buffer = 16 x 32-bit words holds until reaches 512 bits.</remarks> + private byte[] _buffer = new byte[BlockLength]; - /// <summary>512 bits work buffer = 16 x 32-bit words</summary> - private int[] _x = new int[16]; + /// <summary>512 bits work buffer = 16 x 32-bit words</summary> + private int[] _x = new int[16]; - public Md4() - { - // This file is currently unlocked (change this line if you lock the file) - // - // $Log: MD4.java,v $ - // Revision 1.2 1998/01/05 03:41:19 iang - // Added references only. - // - // Revision 1.1.1.1 1997/11/03 22:36:56 hopwood - // + Imported to CVS (tagged as 'start'). - // - // Revision 0.1.0.0 1997/07/14 R. Naffah - // + original version - // - // $Endlog$ - // MD4 specific object variables - //........................................................................... - // = 512 / 8; - // Constructors - //........................................................................... - EngineReset(); - } + public Md4() + { + // This file is currently unlocked (change this line if you lock the file) + // + // $Log: MD4.java,v $ + // Revision 1.2 1998/01/05 03:41:19 iang + // Added references only. + // + // Revision 1.1.1.1 1997/11/03 22:36:56 hopwood + // + Imported to CVS (tagged as 'start'). + // + // Revision 0.1.0.0 1997/07/14 R. Naffah + // + original version + // + // $Endlog$ + // MD4 specific object variables + //........................................................................... + // = 512 / 8; + // Constructors + //........................................................................... + EngineReset(); + } - /// <summary>This constructor is here to implement cloneability of this class.</summary> - /// <remarks>This constructor is here to implement cloneability of this class.</remarks> - private Md4(Md4 md) : this() - { - _context = (int[])md._context.Clone(); - _buffer = (byte[])md._buffer.Clone(); - _count = md._count; - } + /// <summary>This constructor is here to implement cloneability of this class.</summary> + /// <remarks>This constructor is here to implement cloneability of this class.</remarks> + private Md4(Md4 md) : this() + { + _context = (int[])md._context.Clone(); + _buffer = (byte[])md._buffer.Clone(); + _count = md._count; + } - // Cloneable method implementation - //........................................................................... - /// <summary>Returns a copy of this MD object.</summary> - /// <remarks>Returns a copy of this MD object.</remarks> - public object Clone() - { - return new Md4(this); - } + // Cloneable method implementation + //........................................................................... + /// <summary>Returns a copy of this MD object.</summary> + /// <remarks>Returns a copy of this MD object.</remarks> + public object Clone() + { + return new Md4(this); + } - // JCE methods - //........................................................................... - /// <summary> - /// Resets this object disregarding any temporary data present at the - /// time of the invocation of this call. - /// </summary> - /// <remarks> - /// Resets this object disregarding any temporary data present at the - /// time of the invocation of this call. - /// </remarks> - protected void EngineReset() - { - // initial values of MD4 i.e. A, B, C, D - // as per rfc-1320; they are low-order byte first - _context[0] = unchecked(0x67452301); - _context[1] = unchecked((int)(0xEFCDAB89)); - _context[2] = unchecked((int)(0x98BADCFE)); - _context[3] = unchecked(0x10325476); - _count = 0L; - for (int i = 0; i < BlockLength; i++) - { - _buffer[i] = 0; - } - } + // JCE methods + //........................................................................... + /// <summary> + /// Resets this object disregarding any temporary data present at the + /// time of the invocation of this call. + /// </summary> + /// <remarks> + /// Resets this object disregarding any temporary data present at the + /// time of the invocation of this call. + /// </remarks> + protected void EngineReset() + { + // initial values of MD4 i.e. A, B, C, D + // as per rfc-1320; they are low-order byte first + _context[0] = unchecked(0x67452301); + _context[1] = unchecked((int)(0xEFCDAB89)); + _context[2] = unchecked((int)(0x98BADCFE)); + _context[3] = unchecked(0x10325476); + _count = 0L; + for (int i = 0; i < BlockLength; i++) + { + _buffer[i] = 0; + } + } - /// <summary>Continues an MD4 message digest using the input byte.</summary> - /// <remarks>Continues an MD4 message digest using the input byte.</remarks> - protected void EngineUpdate(byte b) - { - // compute number of bytes still unhashed; ie. present in buffer - int i = (int)(_count % BlockLength); - _count++; - // update number of bytes - _buffer[i] = b; - if (i == BlockLength - 1) - { - Transform(_buffer, 0); - } - } + /// <summary>Continues an MD4 message digest using the input byte.</summary> + /// <remarks>Continues an MD4 message digest using the input byte.</remarks> + protected void EngineUpdate(byte b) + { + // compute number of bytes still unhashed; ie. present in buffer + int i = (int)(_count % BlockLength); + _count++; + // update number of bytes + _buffer[i] = b; + if (i == BlockLength - 1) + { + Transform(_buffer, 0); + } + } - /// <summary>MD4 block update operation.</summary> - /// <remarks> - /// MD4 block update operation. - /// <p> - /// Continues an MD4 message digest operation, by filling the buffer, - /// transform(ing) data in 512-bit message block(s), updating the variables - /// context and count, and leaving (buffering) the remaining bytes in buffer - /// for the next update or finish. - /// </remarks> - /// <param name="input">input block</param> - /// <param name="offset">start of meaningful bytes in input</param> - /// <param name="len">count of bytes in input block to consider</param> - protected void EngineUpdate(byte[] input, int offset, int len) - { - // make sure we don't exceed input's allocated size/length - if (offset < 0 || len < 0 || (long)offset + len > input.Length) - { - throw new IndexOutOfRangeException(); - } - // compute number of bytes still unhashed; ie. present in buffer - int bufferNdx = (int)(_count % BlockLength); - _count += len; - // update number of bytes - int partLen = BlockLength - bufferNdx; - int i = 0; - if (len >= partLen) - { - Array.Copy(input, offset, _buffer, bufferNdx, partLen); - Transform(_buffer, 0); - for (i = partLen; i + BlockLength - 1 < len; i += BlockLength) - { - Transform(input, offset + i); - } - bufferNdx = 0; - } - // buffer remaining input - if (i < len) - { - Array.Copy(input, offset + i, _buffer, bufferNdx, len - i); - } - } + /// <summary>MD4 block update operation.</summary> + /// <remarks> + /// MD4 block update operation. + /// <p> + /// Continues an MD4 message digest operation, by filling the buffer, + /// transform(ing) data in 512-bit message block(s), updating the variables + /// context and count, and leaving (buffering) the remaining bytes in buffer + /// for the next update or finish. + /// </remarks> + /// <param name="input">input block</param> + /// <param name="offset">start of meaningful bytes in input</param> + /// <param name="len">count of bytes in input block to consider</param> + protected void EngineUpdate(byte[] input, int offset, int len) + { + // make sure we don't exceed input's allocated size/length + if (offset < 0 || len < 0 || (long)offset + len > input.Length) + { + throw new IndexOutOfRangeException(); + } + // compute number of bytes still unhashed; ie. present in buffer + int bufferNdx = (int)(_count % BlockLength); + _count += len; + // update number of bytes + int partLen = BlockLength - bufferNdx; + int i = 0; + if (len >= partLen) + { + Array.Copy(input, offset, _buffer, bufferNdx, partLen); + Transform(_buffer, 0); + for (i = partLen; i + BlockLength - 1 < len; i += BlockLength) + { + Transform(input, offset + i); + } + bufferNdx = 0; + } + // buffer remaining input + if (i < len) + { + Array.Copy(input, offset + i, _buffer, bufferNdx, len - i); + } + } - /// <summary> - /// Completes the hash computation by performing final operations such - /// as padding. - /// </summary> - /// <remarks> - /// Completes the hash computation by performing final operations such - /// as padding. At the return of this engineDigest, the MD engine is - /// reset. - /// </remarks> - /// <returns>the array of bytes for the resulting hash value.</returns> - protected byte[] EngineDigest() - { - // pad output to 56 mod 64; as RFC1320 puts it: congruent to 448 mod 512 - int bufferNdx = (int)(_count % BlockLength); - int padLen = (bufferNdx < 56) ? (56 - bufferNdx) : (120 - bufferNdx); - // padding is alwas binary 1 followed by binary 0s - byte[] tail = new byte[padLen + 8]; - tail[0] = unchecked(unchecked(0x80)); - // append length before final transform: - // save number of bits, casting the long to an array of 8 bytes - // save low-order byte first. - for (int i = 0; i < 8; i++) - { - tail[padLen + i] = unchecked((byte)((long)(((ulong)(_count * 8)) >> (8 * i)))); - } - EngineUpdate(tail, 0, tail.Length); - byte[] result = new byte[16]; - // cast this MD4's context (array of 4 ints) into an array of 16 bytes. - for (int i1 = 0; i1 < 4; i1++) - { - for (int j = 0; j < 4; j++) - { - result[i1 * 4 + j] = unchecked((byte)((int)(((uint)_context[i1]) >> (8 * j)))); - } - } - // reset the engine - EngineReset(); - return result; - } + /// <summary> + /// Completes the hash computation by performing final operations such + /// as padding. + /// </summary> + /// <remarks> + /// Completes the hash computation by performing final operations such + /// as padding. At the return of this engineDigest, the MD engine is + /// reset. + /// </remarks> + /// <returns>the array of bytes for the resulting hash value.</returns> + protected byte[] EngineDigest() + { + // pad output to 56 mod 64; as RFC1320 puts it: congruent to 448 mod 512 + int bufferNdx = (int)(_count % BlockLength); + int padLen = (bufferNdx < 56) ? (56 - bufferNdx) : (120 - bufferNdx); + // padding is alwas binary 1 followed by binary 0s + byte[] tail = new byte[padLen + 8]; + tail[0] = unchecked(unchecked(0x80)); + // append length before final transform: + // save number of bits, casting the long to an array of 8 bytes + // save low-order byte first. + for (int i = 0; i < 8; i++) + { + tail[padLen + i] = unchecked((byte)((long)(((ulong)(_count * 8)) >> (8 * i)))); + } + EngineUpdate(tail, 0, tail.Length); + byte[] result = new byte[16]; + // cast this MD4's context (array of 4 ints) into an array of 16 bytes. + for (int i1 = 0; i1 < 4; i1++) + { + for (int j = 0; j < 4; j++) + { + result[i1 * 4 + j] = unchecked((byte)((int)(((uint)_context[i1]) >> (8 * j)))); + } + } + // reset the engine + EngineReset(); + return result; + } - // own methods - //........................................................................... - /// <summary>MD4 basic transformation.</summary> - /// <remarks> - /// MD4 basic transformation. - /// <p> - /// Transforms context based on 512 bits from input block starting - /// from the offset'th byte. - /// </remarks> - /// <param name="block">input sub-array.</param> - /// <param name="offset">starting position of sub-array.</param> - private void Transform(byte[] block, int offset) - { - // encodes 64 bytes from input block into an array of 16 32-bit - // entities. Use A as a temp var. - for (int i = 0; i < 16; i++) - { - _x[i] = (block[offset++] & unchecked(0xFF)) | (block[offset++] & unchecked( - 0xFF)) << 8 | (block[offset++] & unchecked(0xFF)) << 16 | (block[offset - ++] & unchecked(0xFF)) << 24; - } - int a = _context[0]; - int b = _context[1]; - int c = _context[2]; - int d = _context[3]; - a = Ff(a, b, c, d, _x[0], 3); - d = Ff(d, a, b, c, _x[1], 7); - c = Ff(c, d, a, b, _x[2], 11); - b = Ff(b, c, d, a, _x[3], 19); - a = Ff(a, b, c, d, _x[4], 3); - d = Ff(d, a, b, c, _x[5], 7); - c = Ff(c, d, a, b, _x[6], 11); - b = Ff(b, c, d, a, _x[7], 19); - a = Ff(a, b, c, d, _x[8], 3); - d = Ff(d, a, b, c, _x[9], 7); - c = Ff(c, d, a, b, _x[10], 11); - b = Ff(b, c, d, a, _x[11], 19); - a = Ff(a, b, c, d, _x[12], 3); - d = Ff(d, a, b, c, _x[13], 7); - c = Ff(c, d, a, b, _x[14], 11); - b = Ff(b, c, d, a, _x[15], 19); - a = Gg(a, b, c, d, _x[0], 3); - d = Gg(d, a, b, c, _x[4], 5); - c = Gg(c, d, a, b, _x[8], 9); - b = Gg(b, c, d, a, _x[12], 13); - a = Gg(a, b, c, d, _x[1], 3); - d = Gg(d, a, b, c, _x[5], 5); - c = Gg(c, d, a, b, _x[9], 9); - b = Gg(b, c, d, a, _x[13], 13); - a = Gg(a, b, c, d, _x[2], 3); - d = Gg(d, a, b, c, _x[6], 5); - c = Gg(c, d, a, b, _x[10], 9); - b = Gg(b, c, d, a, _x[14], 13); - a = Gg(a, b, c, d, _x[3], 3); - d = Gg(d, a, b, c, _x[7], 5); - c = Gg(c, d, a, b, _x[11], 9); - b = Gg(b, c, d, a, _x[15], 13); - a = Hh(a, b, c, d, _x[0], 3); - d = Hh(d, a, b, c, _x[8], 9); - c = Hh(c, d, a, b, _x[4], 11); - b = Hh(b, c, d, a, _x[12], 15); - a = Hh(a, b, c, d, _x[2], 3); - d = Hh(d, a, b, c, _x[10], 9); - c = Hh(c, d, a, b, _x[6], 11); - b = Hh(b, c, d, a, _x[14], 15); - a = Hh(a, b, c, d, _x[1], 3); - d = Hh(d, a, b, c, _x[9], 9); - c = Hh(c, d, a, b, _x[5], 11); - b = Hh(b, c, d, a, _x[13], 15); - a = Hh(a, b, c, d, _x[3], 3); - d = Hh(d, a, b, c, _x[11], 9); - c = Hh(c, d, a, b, _x[7], 11); - b = Hh(b, c, d, a, _x[15], 15); - _context[0] += a; - _context[1] += b; - _context[2] += c; - _context[3] += d; - } + // own methods + //........................................................................... + /// <summary>MD4 basic transformation.</summary> + /// <remarks> + /// MD4 basic transformation. + /// <p> + /// Transforms context based on 512 bits from input block starting + /// from the offset'th byte. + /// </remarks> + /// <param name="block">input sub-array.</param> + /// <param name="offset">starting position of sub-array.</param> + private void Transform(byte[] block, int offset) + { + // encodes 64 bytes from input block into an array of 16 32-bit + // entities. Use A as a temp var. + for (int i = 0; i < 16; i++) + { + _x[i] = (block[offset++] & unchecked(0xFF)) | (block[offset++] & unchecked( + 0xFF)) << 8 | (block[offset++] & unchecked(0xFF)) << 16 | (block[offset + ++] & unchecked(0xFF)) << 24; + } + int a = _context[0]; + int b = _context[1]; + int c = _context[2]; + int d = _context[3]; + a = Ff(a, b, c, d, _x[0], 3); + d = Ff(d, a, b, c, _x[1], 7); + c = Ff(c, d, a, b, _x[2], 11); + b = Ff(b, c, d, a, _x[3], 19); + a = Ff(a, b, c, d, _x[4], 3); + d = Ff(d, a, b, c, _x[5], 7); + c = Ff(c, d, a, b, _x[6], 11); + b = Ff(b, c, d, a, _x[7], 19); + a = Ff(a, b, c, d, _x[8], 3); + d = Ff(d, a, b, c, _x[9], 7); + c = Ff(c, d, a, b, _x[10], 11); + b = Ff(b, c, d, a, _x[11], 19); + a = Ff(a, b, c, d, _x[12], 3); + d = Ff(d, a, b, c, _x[13], 7); + c = Ff(c, d, a, b, _x[14], 11); + b = Ff(b, c, d, a, _x[15], 19); + a = Gg(a, b, c, d, _x[0], 3); + d = Gg(d, a, b, c, _x[4], 5); + c = Gg(c, d, a, b, _x[8], 9); + b = Gg(b, c, d, a, _x[12], 13); + a = Gg(a, b, c, d, _x[1], 3); + d = Gg(d, a, b, c, _x[5], 5); + c = Gg(c, d, a, b, _x[9], 9); + b = Gg(b, c, d, a, _x[13], 13); + a = Gg(a, b, c, d, _x[2], 3); + d = Gg(d, a, b, c, _x[6], 5); + c = Gg(c, d, a, b, _x[10], 9); + b = Gg(b, c, d, a, _x[14], 13); + a = Gg(a, b, c, d, _x[3], 3); + d = Gg(d, a, b, c, _x[7], 5); + c = Gg(c, d, a, b, _x[11], 9); + b = Gg(b, c, d, a, _x[15], 13); + a = Hh(a, b, c, d, _x[0], 3); + d = Hh(d, a, b, c, _x[8], 9); + c = Hh(c, d, a, b, _x[4], 11); + b = Hh(b, c, d, a, _x[12], 15); + a = Hh(a, b, c, d, _x[2], 3); + d = Hh(d, a, b, c, _x[10], 9); + c = Hh(c, d, a, b, _x[6], 11); + b = Hh(b, c, d, a, _x[14], 15); + a = Hh(a, b, c, d, _x[1], 3); + d = Hh(d, a, b, c, _x[9], 9); + c = Hh(c, d, a, b, _x[5], 11); + b = Hh(b, c, d, a, _x[13], 15); + a = Hh(a, b, c, d, _x[3], 3); + d = Hh(d, a, b, c, _x[11], 9); + c = Hh(c, d, a, b, _x[7], 11); + b = Hh(b, c, d, a, _x[15], 15); + _context[0] += a; + _context[1] += b; + _context[2] += c; + _context[3] += d; + } - // The basic MD4 atomic functions. - private int Ff(int a, int b, int c, int d, int x, int s) - { - int t = a + ((b & c) | (~b & d)) + x; - return t << s | (int)(((uint)t) >> (32 - s)); - } + // The basic MD4 atomic functions. + private int Ff(int a, int b, int c, int d, int x, int s) + { + int t = a + ((b & c) | (~b & d)) + x; + return t << s | (int)(((uint)t) >> (32 - s)); + } - private int Gg(int a, int b, int c, int d, int x, int s) - { - int t = a + ((b & (c | d)) | (c & d)) + x + unchecked(0x5A827999); - return t << s | (int)(((uint)t) >> (32 - s)); - } + private int Gg(int a, int b, int c, int d, int x, int s) + { + int t = a + ((b & (c | d)) | (c & d)) + x + unchecked(0x5A827999); + return t << s | (int)(((uint)t) >> (32 - s)); + } - private int Hh(int a, int b, int c, int d, int x, int s) - { - int t = a + (b ^ c ^ d) + x + unchecked(0x6ED9EBA1); - return t << s | (int)(((uint)t) >> (32 - s)); - } + private int Hh(int a, int b, int c, int d, int x, int s) + { + int t = a + (b ^ c ^ d) + x + unchecked(0x6ED9EBA1); + return t << s | (int)(((uint)t) >> (32 - s)); + } - public override byte[] Digest() - { - return EngineDigest(); - } + public override byte[] Digest() + { + return EngineDigest(); + } - public override int GetDigestLength() - { - return EngineDigest().Length; - } + public override int GetDigestLength() + { + return EngineDigest().Length; + } - public override void Reset() - { - EngineReset(); - } + public override void Reset() + { + EngineReset(); + } - public override void Update(byte[] b) - { + public override void Update(byte[] b) + { EngineUpdate(b, 0, b.Length); - } + } - public override void Update(byte b) - { - EngineUpdate(b); - } + public override void Update(byte b) + { + EngineUpdate(b); + } - public override void Update(byte[] b, int offset, int len) - { - EngineUpdate(b, offset, len); - } - } + public override void Update(byte[] b, int offset, int len) + { + EngineUpdate(b, offset, len); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/RC4.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/RC4.cs index a28ba3afe..b17e076e7 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/RC4.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/RC4.cs @@ -16,53 +16,53 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA namespace SharpCifs.Util { - public class Rc4 - { - internal byte[] S; + public class Rc4 + { + internal byte[] S; - internal int I; + internal int I; - internal int J; + internal int J; - public Rc4() - { - } + public Rc4() + { + } - public Rc4(byte[] key) - { - Init(key, 0, key.Length); - } + public Rc4(byte[] key) + { + Init(key, 0, key.Length); + } - public virtual void Init(byte[] key, int ki, int klen) - { - S = new byte[256]; - for (I = 0; I < 256; I++) - { - S[I] = unchecked((byte)I); - } - for (I = J = 0; I < 256; I++) - { - J = (J + key[ki + I % klen] + S[I]) & unchecked(0xff); - byte t = S[I]; - S[I] = S[J]; - S[J] = t; - } - I = J = 0; - } + public virtual void Init(byte[] key, int ki, int klen) + { + S = new byte[256]; + for (I = 0; I < 256; I++) + { + S[I] = unchecked((byte)I); + } + for (I = J = 0; I < 256; I++) + { + J = (J + key[ki + I % klen] + S[I]) & unchecked(0xff); + byte t = S[I]; + S[I] = S[J]; + S[J] = t; + } + I = J = 0; + } - public virtual void Update(byte[] src, int soff, int slen, byte[] dst, int doff) - { - int slim; - slim = soff + slen; - while (soff < slim) - { - I = (I + 1) & unchecked(0xff); - J = (J + S[I]) & unchecked(0xff); - byte t = S[I]; - S[I] = S[J]; - S[J] = t; - dst[doff++] = unchecked((byte)(src[soff++] ^ S[(S[I] + S[J]) & unchecked(0xff)])); - } - } - } + public virtual void Update(byte[] src, int soff, int slen, byte[] dst, int doff) + { + int slim; + slim = soff + slen; + while (soff < slim) + { + I = (I + 1) & unchecked(0xff); + J = (J + S[I]) & unchecked(0xff); + byte t = S[I]; + S[I] = S[J]; + S[J] = t; + dst[doff++] = unchecked((byte)(src[soff++] ^ S[(S[I] + S[J]) & unchecked(0xff)])); + } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs index 45e7e2144..2868a840a 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs @@ -6,159 +6,146 @@ using System.Linq; namespace SharpCifs.Util.Sharpen { public abstract class AbstractMap<T, TU> : IDictionary<T, TU> - { - public virtual void Clear() - { - EntrySet().Clear(); - } - - public virtual bool ContainsKey(object name) - { - return EntrySet().Any(p => p.Key.Equals((T)name)); - } - - public abstract ICollection<KeyValuePair<T, TU>> EntrySet(); - - public virtual TU Get(object key) - { - return EntrySet().Where(p => p.Key.Equals(key)).Select(p => p.Value).FirstOrDefault(); - } - - protected virtual IEnumerator<KeyValuePair<T, TU>> InternalGetEnumerator() - { - return EntrySet().GetEnumerator(); - } - - public virtual bool IsEmpty() - { - return !EntrySet().Any(); - } - - public virtual TU Put(T key, TU value) - { - throw new NotSupportedException(); - } - - public virtual TU Remove(object key) - { - Iterator<TU> iterator = EntrySet() as Iterator<TU>; - if (iterator == null) - { - throw new NotSupportedException(); - } - while (iterator.HasNext()) - { - TU local = iterator.Next(); - if (local.Equals((T)key)) - { - iterator.Remove(); - return local; - } - } - return default(TU); - } - - void ICollection<KeyValuePair<T, TU>>.Add(KeyValuePair<T, TU> item) - { - Put(item.Key, item.Value); - } - - bool ICollection<KeyValuePair<T, TU>>.Contains(KeyValuePair<T, TU> item) - { - throw new NotImplementedException(); - } - - void ICollection<KeyValuePair<T, TU>>.CopyTo(KeyValuePair<T, TU>[] array, int arrayIndex) - { - EntrySet().CopyTo(array, arrayIndex); - } - - bool ICollection<KeyValuePair<T, TU>>.Remove(KeyValuePair<T, TU> item) - { - Remove(item.Key); - return true; - } - - void IDictionary<T, TU>.Add(T key, TU value) - { - Put(key, value); - } - - bool IDictionary<T, TU>.ContainsKey(T key) - { - return ContainsKey(key); - } - - bool IDictionary<T, TU>.Remove(T key) - { - if (ContainsKey(key)) - { - Remove(key); - return true; - } - return false; - } - - bool IDictionary<T, TU>.TryGetValue(T key, out TU value) - { - if (ContainsKey(key)) - { - value = Get(key); - return true; - } - value = default(TU); - return false; - } - - IEnumerator<KeyValuePair<T, TU>> IEnumerable<KeyValuePair<T, TU>>.GetEnumerator() - { - return InternalGetEnumerator(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return InternalGetEnumerator(); - } - - public virtual int Count - { - get { return EntrySet().Count; } - } - - public TU this[T key] - { - get { return Get(key); } - set { Put(key, value); } - } - - public virtual IEnumerable<T> Keys - { - get { return EntrySet().Select(p => p.Key); } - } - - int ICollection<KeyValuePair<T, TU>>.Count - { - get { return Count; } - } - - bool ICollection<KeyValuePair<T, TU>>.IsReadOnly - { - get { return false; } - } - - ICollection<T> IDictionary<T, TU>.Keys - { - get { return Keys.ToList(); } - } - - ICollection<TU> IDictionary<T, TU>.Values - { - get { return Values.ToList(); } - } - - public virtual IEnumerable<TU> Values - { - get { return EntrySet().Select(p => p.Value); } - } - } + { + public virtual void Clear () + { + EntrySet ().Clear (); + } + + public virtual bool ContainsKey (object name) + { + return EntrySet ().Any (p => p.Key.Equals ((T)name)); + } + + public abstract ICollection<KeyValuePair<T, TU>> EntrySet (); + + public virtual TU Get (object key) + { + return EntrySet ().Where (p => p.Key.Equals (key)).Select (p => p.Value).FirstOrDefault (); + } + + protected virtual IEnumerator<KeyValuePair<T, TU>> InternalGetEnumerator () + { + return EntrySet ().GetEnumerator (); + } + + public virtual bool IsEmpty () + { + return !EntrySet ().Any (); + } + + public virtual TU Put (T key, TU value) + { + throw new NotSupportedException (); + } + + public virtual TU Remove (object key) + { + Iterator<TU> iterator = EntrySet () as Iterator<TU>; + if (iterator == null) { + throw new NotSupportedException (); + } + while (iterator.HasNext ()) { + TU local = iterator.Next (); + if (local.Equals ((T)key)) { + iterator.Remove (); + return local; + } + } + return default(TU); + } + + void ICollection<KeyValuePair<T, TU>>.Add (KeyValuePair<T, TU> item) + { + Put (item.Key, item.Value); + } + + bool ICollection<KeyValuePair<T, TU>>.Contains (KeyValuePair<T, TU> item) + { + throw new NotImplementedException (); + } + + void ICollection<KeyValuePair<T, TU>>.CopyTo (KeyValuePair<T, TU>[] array, int arrayIndex) + { + EntrySet ().CopyTo (array, arrayIndex); + } + + bool ICollection<KeyValuePair<T, TU>>.Remove (KeyValuePair<T, TU> item) + { + Remove (item.Key); + return true; + } + + void IDictionary<T, TU>.Add (T key, TU value) + { + Put (key, value); + } + + bool IDictionary<T, TU>.ContainsKey (T key) + { + return ContainsKey (key); + } + + bool IDictionary<T, TU>.Remove (T key) + { + if (ContainsKey (key)) { + Remove (key); + return true; + } + return false; + } + + bool IDictionary<T, TU>.TryGetValue (T key, out TU value) + { + if (ContainsKey (key)) { + value = Get (key); + return true; + } + value = default(TU); + return false; + } + + IEnumerator<KeyValuePair<T, TU>> IEnumerable<KeyValuePair<T, TU>>.GetEnumerator () + { + return InternalGetEnumerator (); + } + + IEnumerator IEnumerable.GetEnumerator () + { + return InternalGetEnumerator (); + } + + public virtual int Count { + get { return EntrySet ().Count; } + } + + public TU this[T key] { + get { return Get (key); } + set { Put (key, value); } + } + + public virtual IEnumerable<T> Keys { + get { return EntrySet ().Select (p => p.Key); } + } + + int ICollection<KeyValuePair<T, TU>>.Count { + get { return Count; } + } + + bool ICollection<KeyValuePair<T, TU>>.IsReadOnly { + get { return false; } + } + + ICollection<T> IDictionary<T, TU>.Keys { + get { return Keys.ToList (); } + } + + ICollection<TU> IDictionary<T, TU>.Values { + get { return Values.ToList (); } + } + + public virtual IEnumerable<TU> Values { + get { return EntrySet ().Select (p => p.Value); } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Arrays.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Arrays.cs index 4771f4fa5..b3a0a85fa 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Arrays.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Arrays.cs @@ -5,57 +5,55 @@ using System.Linq; namespace SharpCifs.Util.Sharpen { public class Arrays - { - public static List<T> AsList<T>(params T[] array) - { - return array.ToList(); - } - - public static bool Equals<T>(T[] a1, T[] a2) - { - if (a1.Length != a2.Length) - { - return false; - } - return !a1.Where((t, i) => !t.Equals(a2[i])).Any(); - } - - public static void Fill<T>(T[] array, T val) - { - Fill(array, 0, array.Length, val); - } - - public static void Fill<T>(T[] array, int start, int end, T val) - { - for (int i = start; i < end; i++) - { - array[i] = val; - } - } - - public static void Sort(string[] array) - { - Array.Sort(array, (s1, s2) => string.CompareOrdinal(s1, s2)); - } - - public static void Sort<T>(T[] array) - { - Array.Sort(array); - } - - public static void Sort<T>(T[] array, IComparer<T> c) - { - Array.Sort(array, c); - } - - public static void Sort<T>(T[] array, int start, int count) - { - Array.Sort(array, start, count); - } - - public static void Sort<T>(T[] array, int start, int count, IComparer<T> c) - { - Array.Sort(array, start, count, c); - } - } + { + public static List<T> AsList<T> (params T[] array) + { + return array.ToList (); + } + + public static bool Equals<T> (T[] a1, T[] a2) + { + if (a1.Length != a2.Length) { + return false; + } + return !a1.Where((t, i) => !t.Equals(a2[i])).Any(); + } + + public static void Fill<T> (T[] array, T val) + { + Fill (array, 0, array.Length, val); + } + + public static void Fill<T> (T[] array, int start, int end, T val) + { + for (int i = start; i < end; i++) { + array[i] = val; + } + } + + public static void Sort (string[] array) + { + Array.Sort (array, (s1,s2) => string.CompareOrdinal (s1,s2)); + } + + public static void Sort<T> (T[] array) + { + Array.Sort (array); + } + + public static void Sort<T> (T[] array, IComparer<T> c) + { + Array.Sort (array, c); + } + + public static void Sort<T> (T[] array, int start, int count) + { + Array.Sort (array, start, count); + } + + public static void Sort<T> (T[] array, int start, int count, IComparer<T> c) + { + Array.Sort (array, start, count, c); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/BufferedReader.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/BufferedReader.cs index 4f29b0e9b..b3824b0d2 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/BufferedReader.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/BufferedReader.cs @@ -3,9 +3,9 @@ using System.IO; namespace SharpCifs.Util.Sharpen { public class BufferedReader : StreamReader - { - public BufferedReader(InputStreamReader r) : base(r.BaseStream) - { - } - } + { + public BufferedReader (InputStreamReader r) : base(r.BaseStream) + { + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/BufferedWriter.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/BufferedWriter.cs index b55dbae24..64a45915a 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/BufferedWriter.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/BufferedWriter.cs @@ -28,31 +28,31 @@ using System.IO; namespace SharpCifs.Util.Sharpen { - public class BufferedWriter - { - StreamWriter _writer; - - public BufferedWriter(StreamWriter w) - { - _writer = w; - } - - public void Write(string s) - { - _writer.Write(s); - } - - public void NewLine() - { - _writer.WriteLine(); - } - - public void Close() - { + public class BufferedWriter + { + StreamWriter _writer; + + public BufferedWriter (StreamWriter w) + { + _writer = w; + } + + public void Write (string s) + { + _writer.Write (s); + } + + public void NewLine () + { + _writer.WriteLine (); + } + + public void Close () + { //Stream.`Close` method deleted - //_writer.Close (); + //_writer.Close (); _writer.Dispose(); } - } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/CharBuffer.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/CharBuffer.cs index 55b7c69c2..76ca2dc95 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/CharBuffer.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/CharBuffer.cs @@ -1,19 +1,19 @@ namespace SharpCifs.Util.Sharpen { internal class CharBuffer : CharSequence - { - internal string Wrapped; + { + internal string Wrapped; - public override string ToString() - { - return Wrapped; - } + public override string ToString () + { + return Wrapped; + } - public static CharBuffer Wrap(string str) - { - CharBuffer buffer = new CharBuffer(); - buffer.Wrapped = str; - return buffer; - } - } + public static CharBuffer Wrap (string str) + { + CharBuffer buffer = new CharBuffer (); + buffer.Wrapped = str; + return buffer; + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/CharSequence.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/CharSequence.cs index 52d5e4710..fa2acf7bd 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/CharSequence.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/CharSequence.cs @@ -2,31 +2,31 @@ using System.Text; namespace SharpCifs.Util.Sharpen { - public class CharSequence - { - public static implicit operator CharSequence(string str) - { - return new StringCharSequence(str); - } - - public static implicit operator CharSequence(StringBuilder str) - { - return new StringCharSequence(str.ToString()); - } - } - - class StringCharSequence : CharSequence - { - string _str; - - public StringCharSequence(string str) - { - this._str = str; - } - - public override string ToString() - { - return _str; - } - } + public class CharSequence + { + public static implicit operator CharSequence (string str) + { + return new StringCharSequence (str); + } + + public static implicit operator CharSequence (StringBuilder str) + { + return new StringCharSequence (str.ToString ()); + } + } + + class StringCharSequence: CharSequence + { + string _str; + + public StringCharSequence (string str) + { + this._str = str; + } + + public override string ToString () + { + return _str; + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Collections.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Collections.cs index 0a531c66c..4432e62fb 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Collections.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Collections.cs @@ -5,47 +5,45 @@ using System.Collections.ObjectModel; namespace SharpCifs.Util.Sharpen { internal static class Collections<T> - { - static readonly IList<T> Empty = new T[0]; - public static IList<T> EmptySet - { - get { return Empty; } - } - - } - - public static class Collections - { - public static bool AddAll<T>(ICollection<T> list, IEnumerable toAdd) - { - foreach (T t in toAdd) - list.Add(t); - return true; - } - - public static TV Remove<TK, TV>(IDictionary<TK, TV> map, TK toRemove) where TK : class - { - TV local; - if (map.TryGetValue(toRemove, out local)) - { - map.Remove(toRemove); - return local; - } - return default(TV); - } - - - public static T[] ToArray<T>(ICollection<T> list) - { - T[] array = new T[list.Count]; - list.CopyTo(array, 0); - return array; - } + { + static readonly IList<T> Empty = new T [0]; + public static IList<T> EmptySet { + get { return Empty; } + } + + } + + public static class Collections + { + public static bool AddAll<T> (ICollection<T> list, IEnumerable toAdd) + { + foreach (T t in toAdd) + list.Add (t); + return true; + } + + public static TV Remove<TK, TV> (IDictionary<TK, TV> map, TK toRemove) where TK : class + { + TV local; + if (map.TryGetValue (toRemove, out local)) { + map.Remove (toRemove); + return local; + } + return default(TV); + } + + + public static T[] ToArray<T> (ICollection<T> list) + { + T[] array = new T[list.Count]; + list.CopyTo (array, 0); + return array; + } public static T[] ToArray<T>(List<object> list) { T[] array = new T[list.Count]; - for (int c = 0; c < list.Count; c++) + for(int c = 0; c < list.Count; c++) { array[c] = (T)list[c]; } @@ -54,97 +52,95 @@ namespace SharpCifs.Util.Sharpen } - public static TU[] ToArray<T, TU>(ICollection<T> list, TU[] res) where T : TU - { - if (res.Length < list.Count) - res = new TU[list.Count]; - - int n = 0; - foreach (T t in list) - res[n++] = t; - - if (res.Length > list.Count) - res[list.Count] = default(T); - return res; - } - - public static IDictionary<TK, TV> EmptyMap<TK, TV>() - { - return new Dictionary<TK, TV>(); - } - - public static IList<T> EmptyList<T>() - { - return Collections<T>.EmptySet; - } - - public static ICollection<T> EmptySet<T>() - { - return Collections<T>.EmptySet; - } - - public static IList<T> NCopies<T>(int n, T elem) - { - List<T> list = new List<T>(n); - while (n-- > 0) - { - list.Add(elem); - } - return list; - } - - public static void Reverse<T>(IList<T> list) - { - int end = list.Count - 1; - int index = 0; - while (index < end) - { - T tmp = list[index]; - list[index] = list[end]; - list[end] = tmp; - ++index; - --end; - } - } - - public static ICollection<T> Singleton<T>(T item) - { - List<T> list = new List<T>(1); - list.Add(item); - return list; - } - - public static IList<T> SingletonList<T>(T item) - { - List<T> list = new List<T>(1); - list.Add(item); - return list; - } - - public static IList<T> SynchronizedList<T>(IList<T> list) - { - return new SynchronizedList<T>(list); - } - - public static ICollection<T> UnmodifiableCollection<T>(ICollection<T> list) - { - return list; - } - - public static IList<T> UnmodifiableList<T>(IList<T> list) - { - return new ReadOnlyCollection<T>(list); - } - - public static ICollection<T> UnmodifiableSet<T>(ICollection<T> list) - { - return list; - } - - public static IDictionary<TK, TV> UnmodifiableMap<TK, TV>(IDictionary<TK, TV> dict) - { - return dict; - } + public static TU[] ToArray<T,TU> (ICollection<T> list, TU[] res) where T:TU + { + if (res.Length < list.Count) + res = new TU [list.Count]; + + int n = 0; + foreach (T t in list) + res [n++] = t; + + if (res.Length > list.Count) + res [list.Count] = default (T); + return res; + } + + public static IDictionary<TK,TV> EmptyMap<TK,TV> () + { + return new Dictionary<TK,TV> (); + } + + public static IList<T> EmptyList<T> () + { + return Collections<T>.EmptySet; + } + + public static ICollection<T> EmptySet<T> () + { + return Collections<T>.EmptySet; + } + + public static IList<T> NCopies<T> (int n, T elem) + { + List<T> list = new List<T> (n); + while (n-- > 0) { + list.Add (elem); + } + return list; + } + + public static void Reverse<T> (IList<T> list) + { + int end = list.Count - 1; + int index = 0; + while (index < end) { + T tmp = list [index]; + list [index] = list [end]; + list [end] = tmp; + ++index; + --end; + } + } + + public static ICollection<T> Singleton<T> (T item) + { + List<T> list = new List<T> (1); + list.Add (item); + return list; + } + + public static IList<T> SingletonList<T> (T item) + { + List<T> list = new List<T> (1); + list.Add (item); + return list; + } + + public static IList<T> SynchronizedList<T> (IList<T> list) + { + return new SynchronizedList<T> (list); + } + + public static ICollection<T> UnmodifiableCollection<T> (ICollection<T> list) + { + return list; + } + + public static IList<T> UnmodifiableList<T> (IList<T> list) + { + return new ReadOnlyCollection<T> (list); + } + + public static ICollection<T> UnmodifiableSet<T> (ICollection<T> list) + { + return list; + } + + public static IDictionary<TK,TV> UnmodifiableMap<TK,TV> (IDictionary<TK,TV> dict) + { + return dict; + } } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ConcurrentHashMap.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ConcurrentHashMap.cs index c719446e8..7f464ad36 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ConcurrentHashMap.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ConcurrentHashMap.cs @@ -3,131 +3,120 @@ using System.Collections.Generic; namespace SharpCifs.Util.Sharpen { internal class ConcurrentHashMap<T, TU> : AbstractMap<T, TU>, IConcurrentMap<T, TU> - { - private Dictionary<T, TU> _table; - - public ConcurrentHashMap() - { - _table = new Dictionary<T, TU>(); - } - - public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) - { - _table = new Dictionary<T, TU>(initialCapacity); - } - - public override void Clear() - { - lock (_table) - { - _table = new Dictionary<T, TU>(); - } - } - - public override bool ContainsKey(object name) - { - return _table.ContainsKey((T)name); - } - - public override ICollection<KeyValuePair<T, TU>> EntrySet() - { - return this; - } - - public override TU Get(object key) - { - TU local; - _table.TryGetValue((T)key, out local); - return local; - } - - protected override IEnumerator<KeyValuePair<T, TU>> InternalGetEnumerator() - { - return _table.GetEnumerator(); - } - - public override bool IsEmpty() - { - return _table.Count == 0; - } - - public override TU Put(T key, TU value) - { - lock (_table) - { - TU old = Get(key); - Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table); - newTable[key] = value; - _table = newTable; - return old; - } - } - - public TU PutIfAbsent(T key, TU value) - { - lock (_table) - { - if (!ContainsKey(key)) - { - Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table); - newTable[key] = value; - _table = newTable; - return value; - } - return Get(key); - } - } - - public override TU Remove(object key) - { - lock (_table) - { - TU old = Get((T)key); - Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table); - newTable.Remove((T)key); - _table = newTable; - return old; - } - } - - public bool Remove(object key, object value) - { - lock (_table) - { - if (ContainsKey(key) && value.Equals(Get(key))) - { - Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table); - newTable.Remove((T)key); - _table = newTable; - return true; - } - return false; - } - } - - public bool Replace(T key, TU oldValue, TU newValue) - { - lock (_table) - { - if (ContainsKey(key) && oldValue.Equals(Get(key))) - { - Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table); - newTable[key] = newValue; - _table = newTable; - return true; - } - return false; - } - } - - public override IEnumerable<T> Keys - { - get { return _table.Keys; } - } - - public override IEnumerable<TU> Values - { - get { return _table.Values; } - } - } + { + private Dictionary<T, TU> _table; + + public ConcurrentHashMap () + { + _table = new Dictionary<T, TU> (); + } + + public ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) + { + _table = new Dictionary<T, TU> (initialCapacity); + } + + public override void Clear () + { + lock (_table) { + _table = new Dictionary<T, TU> (); + } + } + + public override bool ContainsKey (object name) + { + return _table.ContainsKey ((T)name); + } + + public override ICollection<KeyValuePair<T, TU>> EntrySet () + { + return this; + } + + public override TU Get (object key) + { + TU local; + _table.TryGetValue ((T)key, out local); + return local; + } + + protected override IEnumerator<KeyValuePair<T, TU>> InternalGetEnumerator () + { + return _table.GetEnumerator (); + } + + public override bool IsEmpty () + { + return _table.Count == 0; + } + + public override TU Put (T key, TU value) + { + lock (_table) { + TU old = Get (key); + Dictionary<T, TU> newTable = new Dictionary<T, TU> (_table); + newTable[key] = value; + _table = newTable; + return old; + } + } + + public TU PutIfAbsent (T key, TU value) + { + lock (_table) { + if (!ContainsKey (key)) { + Dictionary<T, TU> newTable = new Dictionary<T, TU> (_table); + newTable[key] = value; + _table = newTable; + return value; + } + return Get (key); + } + } + + public override TU Remove (object key) + { + lock (_table) { + TU old = Get ((T)key); + Dictionary<T, TU> newTable = new Dictionary<T, TU> (_table); + newTable.Remove ((T)key); + _table = newTable; + return old; + } + } + + public bool Remove (object key, object value) + { + lock (_table) { + if (ContainsKey (key) && value.Equals (Get (key))) { + Dictionary<T, TU> newTable = new Dictionary<T, TU> (_table); + newTable.Remove ((T)key); + _table = newTable; + return true; + } + return false; + } + } + + public bool Replace (T key, TU oldValue, TU newValue) + { + lock (_table) { + if (ContainsKey (key) && oldValue.Equals (Get (key))) { + Dictionary<T, TU> newTable = new Dictionary<T, TU> (_table); + newTable[key] = newValue; + _table = newTable; + return true; + } + return false; + } + } + + public override IEnumerable<T> Keys { + get { return _table.Keys; } + } + + public override IEnumerable<TU> Values { + get { return _table.Values; } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/DateFormat.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/DateFormat.cs index 7fa9b75b2..9a3b7ec4a 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/DateFormat.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/DateFormat.cs @@ -3,35 +3,35 @@ using System.Globalization; namespace SharpCifs.Util.Sharpen { - public abstract class DateFormat - { - public const int Default = 2; - - public static DateFormat GetDateTimeInstance(int dateStyle, int timeStyle) - { - return GetDateTimeInstance(dateStyle, timeStyle, CultureInfo.CurrentCulture); - } - - public static DateFormat GetDateTimeInstance(int dateStyle, int timeStyle, CultureInfo aLocale) - { - return new SimpleDateFormat(aLocale.DateTimeFormat.FullDateTimePattern, aLocale); - } - - TimeZoneInfo _timeZone; - - public abstract DateTime Parse(string value); - - public TimeZoneInfo GetTimeZone() - { - return _timeZone; - } - - public void SetTimeZone(TimeZoneInfo timeZone) - { - this._timeZone = timeZone; - } - - public abstract string Format(DateTime time); - } + public abstract class DateFormat + { + public const int Default = 2; + + public static DateFormat GetDateTimeInstance (int dateStyle, int timeStyle) + { + return GetDateTimeInstance (dateStyle, timeStyle, CultureInfo.CurrentCulture); + } + + public static DateFormat GetDateTimeInstance (int dateStyle, int timeStyle, CultureInfo aLocale) + { + return new SimpleDateFormat (aLocale.DateTimeFormat.FullDateTimePattern, aLocale); + } + + TimeZoneInfo _timeZone; + + public abstract DateTime Parse (string value); + + public TimeZoneInfo GetTimeZone () + { + return _timeZone; + } + + public void SetTimeZone (TimeZoneInfo timeZone) + { + this._timeZone = timeZone; + } + + public abstract string Format (DateTime time); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/EnumeratorWrapper.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/EnumeratorWrapper.cs index e6fbdd411..f8efdde2a 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/EnumeratorWrapper.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/EnumeratorWrapper.cs @@ -4,55 +4,52 @@ using System.Collections.Generic; namespace SharpCifs.Util.Sharpen { internal class EnumeratorWrapper<T> : Iterator<T> - { - object _collection; - IEnumerator<T> _e; - T _lastVal; - bool _more; - bool _copied; + { + object _collection; + IEnumerator<T> _e; + T _lastVal; + bool _more; + bool _copied; - public EnumeratorWrapper(object collection, IEnumerator<T> e) - { - this._e = e; - this._collection = collection; - _more = e.MoveNext(); - } + public EnumeratorWrapper (object collection, IEnumerator<T> e) + { + this._e = e; + this._collection = collection; + _more = e.MoveNext (); + } - public override bool HasNext() - { - return _more; - } + public override bool HasNext () + { + return _more; + } - public override T Next() - { - if (!_more) - throw new NoSuchElementException(); - _lastVal = _e.Current; - _more = _e.MoveNext(); - return _lastVal; - } + public override T Next () + { + if (!_more) + throw new NoSuchElementException (); + _lastVal = _e.Current; + _more = _e.MoveNext (); + return _lastVal; + } - public override void Remove() - { - ICollection<T> col = _collection as ICollection<T>; - if (col == null) - { - throw new NotSupportedException(); - } - if (_more && !_copied) - { - // Read the remaining elements, since the current enumerator - // will be invalid after removing the element - List<T> remaining = new List<T>(); - do - { - remaining.Add(_e.Current); - } while (_e.MoveNext()); - _e = remaining.GetEnumerator(); - _e.MoveNext(); - _copied = true; - } - col.Remove(_lastVal); - } - } + public override void Remove () + { + ICollection<T> col = _collection as ICollection<T>; + if (col == null) { + throw new NotSupportedException (); + } + if (_more && !_copied) { + // Read the remaining elements, since the current enumerator + // will be invalid after removing the element + List<T> remaining = new List<T> (); + do { + remaining.Add (_e.Current); + } while (_e.MoveNext ()); + _e = remaining.GetEnumerator (); + _e.MoveNext (); + _copied = true; + } + col.Remove (_lastVal); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Exceptions.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Exceptions.cs index 4fd8e3bfa..ec88b2849 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Exceptions.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Exceptions.cs @@ -28,191 +28,190 @@ using System; namespace SharpCifs.Util.Sharpen { - public class VirtualMachineError : Error - { - } - - public class StackOverflowError : VirtualMachineError - { - } - - public class BrokenBarrierException : Exception - { - } - - internal class BufferUnderflowException : Exception - { - } - - public class CharacterCodingException : Exception - { - } - - public class DataFormatException : Exception - { - } - - public class EofException : Exception - { - public EofException() - { - } - - public EofException(string msg) : base(msg) - { - } - } - - public class Error : Exception - { - public Error() - { - } - - public Error(Exception ex) : base("Runtime Exception", ex) - { - } - - public Error(string msg) : base(msg) - { - } - - public Error(string msg, Exception ex) : base(msg, ex) - { - } - } - - public class ExecutionException : Exception - { - public ExecutionException(Exception inner) : base("Execution failed", inner) - { - } - } - - public class InstantiationException : Exception - { - } - - public class InterruptedIoException : Exception - { - public InterruptedIoException(string msg) : base(msg) - { - } - } - - public class MissingResourceException : Exception - { - } - - public class NoSuchAlgorithmException : Exception - { - } - - public class NoSuchElementException : Exception - { - } - - internal class NoSuchMethodException : Exception - { - } - - internal class OverlappingFileLockException : Exception - { - } - - public class ParseException : Exception - { - public ParseException() - { - } - - public ParseException(string msg, int errorOffset) - : base(string.Format("Msg: {0}. Error Offset: {1}", msg, errorOffset)) - { - } - } - - public class RuntimeException : Exception - { - public RuntimeException() - { - } - - public RuntimeException(Exception ex) : base("Runtime Exception", ex) - { - } - - public RuntimeException(string msg) : base(msg) - { - } - - public RuntimeException(string msg, Exception ex) : base(msg, ex) - { - } - } - - internal class StringIndexOutOfBoundsException : Exception - { - } - - public class UnknownHostException : Exception - { - public UnknownHostException() - { - } - - public UnknownHostException(string message) : base(message) - { - - } - - public UnknownHostException(Exception ex) : base("Host not found", ex) - { - } - } - - public class UnsupportedEncodingException : Exception - { - } - - internal class UriSyntaxException : Exception - { - public UriSyntaxException(string s, string msg) : base(s + " " + msg) - { - } - } - - internal class ZipException : Exception - { - } - - public class GitException : Exception - { - } - - public class ConnectException : Exception - { - public ConnectException(string msg) : base(msg) - { - } - } - - class KeyManagementException : Exception - { - } - - class IllegalCharsetNameException : Exception - { - public IllegalCharsetNameException(string msg) : base(msg) - { - } - } - - class UnsupportedCharsetException : Exception - { - public UnsupportedCharsetException(string msg) : base(msg) - { - } - } + public class VirtualMachineError : Error + { + } + + public class StackOverflowError : VirtualMachineError + { + } + + public class BrokenBarrierException : Exception + { + } + + internal class BufferUnderflowException : Exception + { + } + + public class CharacterCodingException : Exception + { + } + + public class DataFormatException : Exception + { + } + + public class EofException : Exception + { + public EofException () + { + } + + public EofException (string msg) : base(msg) + { + } + } + + public class Error : Exception + { + public Error () + { + } + + public Error (Exception ex) : base("Runtime Exception", ex) + { + } + + public Error (string msg) : base(msg) + { + } + + public Error (string msg, Exception ex) : base(msg, ex) + { + } + } + + public class ExecutionException : Exception + { + public ExecutionException (Exception inner): base ("Execution failed", inner) + { + } + } + + public class InstantiationException : Exception + { + } + + public class InterruptedIoException : Exception + { + public InterruptedIoException (string msg) : base(msg) + { + } + } + + public class MissingResourceException : Exception + { + } + + public class NoSuchAlgorithmException : Exception + { + } + + public class NoSuchElementException : Exception + { + } + + internal class NoSuchMethodException : Exception + { + } + + internal class OverlappingFileLockException : Exception + { + } + + public class ParseException : Exception + { + public ParseException () + { + } + + public ParseException (string msg, int errorOffset) : base(string.Format ("Msg: {0}. Error Offset: {1}", msg, errorOffset)) + { + } + } + + public class RuntimeException : Exception + { + public RuntimeException () + { + } + + public RuntimeException (Exception ex) : base("Runtime Exception", ex) + { + } + + public RuntimeException (string msg) : base(msg) + { + } + + public RuntimeException (string msg, Exception ex) : base(msg, ex) + { + } + } + + internal class StringIndexOutOfBoundsException : Exception + { + } + + public class UnknownHostException : Exception + { + public UnknownHostException () + { + } + + public UnknownHostException(string message) : base(message) + { + + } + + public UnknownHostException (Exception ex): base ("Host not found", ex) + { + } + } + + public class UnsupportedEncodingException : Exception + { + } + + internal class UriSyntaxException : Exception + { + public UriSyntaxException (string s, string msg) : base(s + " " + msg) + { + } + } + + internal class ZipException : Exception + { + } + + public class GitException : Exception + { + } + + public class ConnectException: Exception + { + public ConnectException (string msg): base (msg) + { + } + } + + class KeyManagementException: Exception + { + } + + class IllegalCharsetNameException: Exception + { + public IllegalCharsetNameException (string msg): base (msg) + { + } + } + + class UnsupportedCharsetException: Exception + { + public UnsupportedCharsetException (string msg): base (msg) + { + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Extensions.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Extensions.cs index 17f4971a0..1716adef7 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Extensions.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Extensions.cs @@ -5,14 +5,12 @@ using System.Globalization; using System.IO; using System.Linq; using System.Net; -using System.Net.NetworkInformation; using System.Net.Sockets; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; - //using Windows.Networking; //using Windows.Networking.Sockets; @@ -73,7 +71,7 @@ namespace SharpCifs.Util.Sharpen public static int BitCount(int val) { - uint num = (uint) val; + uint num = (uint)val; int count = 0; for (int i = 0; i < 32; i++) { @@ -126,9 +124,10 @@ namespace SharpCifs.Util.Sharpen public static Encoding GetEncoding(string name) { - //Encoding e = Encoding.GetEncoding (name, EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback); + // Encoding e = Encoding.GetEncoding (name, EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback); try { + Encoding e = Encoding.GetEncoding(name.Replace('_', '-')); if (e is UTF8Encoding) return new UTF8Encoding(false, true); @@ -205,32 +204,12 @@ namespace SharpCifs.Util.Sharpen public static int GetOffset(this TimeZoneInfo tzone, long date) { - return (int) tzone.GetUtcOffset(MillisToDateTimeOffset(date, 0).DateTime).TotalMilliseconds; - } - - public static InputStream GetResourceAsStream(this Type type, string name) - { - //Type.`Assembly` property deleted - //string str2 = type.Assembly.GetName().Name + ".resources"; - string str2 = type.GetTypeInfo().Assembly.GetName().Name + ".resources"; - string[] textArray1 = {str2, ".", type.Namespace, ".", name}; - string str = string.Concat(textArray1); - - //Type.`Assembly` property deleted - //Stream manifestResourceStream = type.Assembly.GetManifestResourceStream(str); - Stream manifestResourceStream = type.GetTypeInfo().Assembly.GetManifestResourceStream(str); - if (manifestResourceStream == null) - { - return null; - } - return InputStream.Wrap(manifestResourceStream); + return (int)tzone.GetUtcOffset(MillisToDateTimeOffset(date, 0).DateTime).TotalMilliseconds; } public static long GetTime(this DateTime dateTime) { - return - new DateTimeOffset(DateTime.SpecifyKind(dateTime, DateTimeKind.Utc), TimeSpan.Zero) - .ToMillisecondsSinceEpoch(); + return new DateTimeOffset(DateTime.SpecifyKind(dateTime, DateTimeKind.Utc), TimeSpan.Zero).ToMillisecondsSinceEpoch(); } public static void InitCause(this Exception ex, Exception cause) @@ -266,7 +245,7 @@ namespace SharpCifs.Util.Sharpen public static Iterator<T> Iterator<T>(this IEnumerable<T> col) { return new EnumeratorWrapper<T>(col, col.GetEnumerator()); - } + } public static T Last<T>(this ICollection<T> col) { @@ -291,28 +270,27 @@ namespace SharpCifs.Util.Sharpen public static DateTime CreateDate(long milliSecondsSinceEpoch) { - long num = EpochTicks + (milliSecondsSinceEpoch*10000); + long num = EpochTicks + (milliSecondsSinceEpoch * 10000); return new DateTime(num); } public static DateTime CreateDateFromUTC(long milliSecondsSinceEpoch) { - long num = EpochTicks + (milliSecondsSinceEpoch*10000); + long num = EpochTicks + (milliSecondsSinceEpoch * 10000); return new DateTime(num, DateTimeKind.Utc); } - public static DateTimeOffset MillisToDateTimeOffset(long milliSecondsSinceEpoch, - long offsetMinutes) + public static DateTimeOffset MillisToDateTimeOffset(long milliSecondsSinceEpoch, long offsetMinutes) { TimeSpan offset = TimeSpan.FromMinutes(offsetMinutes); - long num = EpochTicks + (milliSecondsSinceEpoch*10000); + long num = EpochTicks + (milliSecondsSinceEpoch * 10000); return new DateTimeOffset(num + offset.Ticks, offset); } public static int NumberOfLeadingZeros(int val) { - uint num = (uint) val; + uint num = (uint)val; int count = 0; while ((num & 0x80000000) == 0) { @@ -324,7 +302,7 @@ namespace SharpCifs.Util.Sharpen public static int NumberOfTrailingZeros(int val) { - uint num = (uint) val; + uint num = (uint)val; int count = 0; while ((num & 1) == 0) { @@ -375,7 +353,7 @@ namespace SharpCifs.Util.Sharpen { Regex rgx = new Regex(regex); - if (replacement.IndexOfAny(new[] {'\\', '$'}) != -1) + if (replacement.IndexOfAny(new[] { '\\', '$' }) != -1) { // Back references not yet supported StringBuilder sb = new StringBuilder(); @@ -394,13 +372,7 @@ namespace SharpCifs.Util.Sharpen return rgx.Replace(str, replacement); } - public static bool RegionMatches(this - string str, - bool ignoreCase, - int toOffset, - string other, - int ooffset, - int len) + public static bool RegionMatches(this string str, bool ignoreCase, int toOffset, string other, int ooffset, int len) { if (toOffset < 0 || ooffset < 0 || toOffset + len > str.Length || ooffset + len > other.Length) return false; @@ -526,19 +498,14 @@ namespace SharpCifs.Util.Sharpen { if (dateTime.Kind != DateTimeKind.Utc) { - throw new ArgumentException( - "dateTime is expected to be expressed as a UTC DateTime", "dateTime"); + throw new ArgumentException("dateTime is expected to be expressed as a UTC DateTime", "dateTime"); } - return new DateTimeOffset(DateTime.SpecifyKind(dateTime, DateTimeKind.Utc), - TimeSpan.Zero).ToMillisecondsSinceEpoch(); + return new DateTimeOffset(DateTime.SpecifyKind(dateTime, DateTimeKind.Utc), TimeSpan.Zero).ToMillisecondsSinceEpoch(); } public static long ToMillisecondsSinceEpoch(this DateTimeOffset dateTimeOffset) { - return ( - ((dateTimeOffset.Ticks - dateTimeOffset.Offset.Ticks) - EpochTicks) - /TimeSpan.TicksPerMillisecond - ); + return (((dateTimeOffset.Ticks - dateTimeOffset.Offset.Ticks) - EpochTicks) / TimeSpan.TicksPerMillisecond); } public static string ToOctalString(int val) @@ -630,8 +597,8 @@ namespace SharpCifs.Util.Sharpen if (host == "0.0.0.0") { return IPAddress.Any; - } - + } + try { return IPAddress.Parse(host); @@ -639,47 +606,42 @@ namespace SharpCifs.Util.Sharpen catch (Exception ex) { return null; - } + } } public static IPAddress[] GetAddressesByName(string host) { - try - { - //get v4-address only - return System.Net.Dns.GetHostEntryAsync(host) - .GetAwaiter() - .GetResult() - .AddressList - .Where(addr => addr.AddressFamily == AddressFamily.InterNetwork) - .ToArray(); - } - catch (Exception) - { - return null; - } - } - + //IReadOnlyList<EndpointPair> data = null; + + //try + //{ + // Task.Run(async () => + // { + // data = await DatagramSocket.GetEndpointPairsAsync(new HostName(host), "0"); + // }).Wait(); + //} + //catch (Exception ex) + //{ + // return null; + //} + + //return data != null + // ? data.Where(i => i.RemoteHostName.Type == HostNameType.Ipv4) + // .GroupBy(i => i.RemoteHostName.DisplayName) + // .Select(i => IPAddress.Parse(i.First().RemoteHostName.DisplayName)) + // .ToArray() + // : null; + + //get v4-address only + var entry = Task.Run(() => System.Net.Dns.GetHostEntryAsync(host)) + .GetAwaiter() + .GetResult(); + return entry.AddressList + .Where(addr => addr.AddressFamily == AddressFamily.InterNetwork) + .ToArray(); - public static IPAddress[] GetLocalAddresses() - { - try - { - //get v4-address only - return NetworkInterface.GetAllNetworkInterfaces() - .SelectMany(i => i.GetIPProperties().UnicastAddresses) - .Select(ua => ua.Address) - .Where(addr => addr.AddressFamily == AddressFamily.InterNetwork - && !IPAddress.IsLoopback(addr)) - .ToArray(); - } - catch (Exception) - { - return null; - } } - public static string GetImplementationVersion(this Assembly asm) { return asm.GetName().Version.ToString(); @@ -705,11 +667,6 @@ namespace SharpCifs.Util.Sharpen return ((IPEndPoint)socket.LocalEndPoint).Port; } - public static IPAddress GetLocalInetAddress(this Socket socket) - { - return ((IPEndPoint)socket.LocalEndPoint).Address; - } - public static int GetPort(this Socket socket) { return ((IPEndPoint)socket.RemoteEndPoint).Port; @@ -721,16 +678,14 @@ namespace SharpCifs.Util.Sharpen } - /* - public static bool RemoveElement(this ArrayList list, object elem) + /*public static bool RemoveElement(this ArrayList list, object elem) { int i = list.IndexOf(elem); if (i == -1) return false; list.RemoveAt(i); return true; - } - */ + }*/ public static Semaphore CreateSemaphore(int count) { diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileInputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileInputStream.cs index 6cebfcb94..25c5e06e0 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileInputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileInputStream.cs @@ -3,18 +3,18 @@ using System.IO; namespace SharpCifs.Util.Sharpen { public class FileInputStream : InputStream - { - public FileInputStream(FilePath file) : this(file.GetPath()) - { - } + { + public FileInputStream (FilePath file) : this(file.GetPath ()) + { + } - public FileInputStream(string file) - { - if (!File.Exists(file)) - { - throw new FileNotFoundException("File not found", file); - } - Wrapped = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - } - } + public FileInputStream (string file) + { + if (!File.Exists (file)) { + throw new FileNotFoundException ("File not found", file); + } + Wrapped = new FileStream (file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + } + + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileOutputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileOutputStream.cs index 2e84e42c9..bf8029488 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileOutputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileOutputStream.cs @@ -3,37 +3,31 @@ using System.IO; namespace SharpCifs.Util.Sharpen { internal class FileOutputStream : OutputStream - { - public FileOutputStream(FilePath file) : this(file.GetPath(), false) - { - } + { + public FileOutputStream (FilePath file): this (file.GetPath (), false) + { + } - public FileOutputStream(string file) : this(file, false) - { - } + public FileOutputStream (string file): this (file, false) + { + } - public FileOutputStream(FilePath file, bool append) : this(file.GetPath(), append) - { - } + public FileOutputStream (FilePath file, bool append) : this(file.GetPath (), append) + { + } - public FileOutputStream(string file, bool append) - { - try - { - if (append) - { - Wrapped = File.Open(file, FileMode.Append, FileAccess.Write); - } - else - { - Wrapped = File.Open(file, FileMode.Create, FileAccess.Write); - } - } - catch (DirectoryNotFoundException) - { - throw new FileNotFoundException("File not found: " + file); - } - } + public FileOutputStream (string file, bool append) + { + try { + if (append) { + Wrapped = File.Open (file, FileMode.Append, FileAccess.Write); + } else { + Wrapped = File.Open (file, FileMode.Create, FileAccess.Write); + } + } catch (DirectoryNotFoundException) { + throw new FileNotFoundException ("File not found: " + file); + } + } - } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilePath.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilePath.cs index 490c76937..1b2f5eddc 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilePath.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilePath.cs @@ -6,337 +6,308 @@ using System.Threading; namespace SharpCifs.Util.Sharpen { public class FilePath - { - private string _path; - private static long _tempCounter; - - public FilePath() - { - } - - public FilePath(string path) - : this((string)null, path) - { - - } - - public FilePath(FilePath other, string child) - : this((string)other, child) - { - - } - - public FilePath(string other, string child) - { - if (other == null) - { - _path = child; - } - else - { - while (!string.IsNullOrEmpty(child) - && (child[0] == Path.DirectorySeparatorChar - || child[0] == Path.AltDirectorySeparatorChar)) - child = child.Substring(1); - - if (!string.IsNullOrEmpty(other) - && other[other.Length - 1] == Path.VolumeSeparatorChar) - other += Path.DirectorySeparatorChar; - - _path = Path.Combine(other, child); - } - } - - public static implicit operator FilePath(string name) - { - return new FilePath(name); - } - - public static implicit operator string(FilePath filePath) - { - return filePath == null ? null : filePath._path; - } - - public override bool Equals(object obj) - { - FilePath other = obj as FilePath; - if (other == null) - return false; - return GetCanonicalPath() == other.GetCanonicalPath(); - } - - public override int GetHashCode() - { - return _path.GetHashCode(); - } - - public bool CreateNewFile() - { - try - { + { + private string _path; + private static long _tempCounter; + + public FilePath () + { + } + + public FilePath (string path) + : this ((string) null, path) + { + + } + + public FilePath (FilePath other, string child) + : this ((string) other, child) + { + + } + + public FilePath (string other, string child) + { + if (other == null) { + _path = child; + } else { + while (!string.IsNullOrEmpty(child) && (child[0] == Path.DirectorySeparatorChar || child[0] == Path.AltDirectorySeparatorChar)) + child = child.Substring (1); + + if (!string.IsNullOrEmpty(other) && other[other.Length - 1] == Path.VolumeSeparatorChar) + other += Path.DirectorySeparatorChar; + + _path = Path.Combine (other, child); + } + } + + public static implicit operator FilePath (string name) + { + return new FilePath (name); + } + + public static implicit operator string (FilePath filePath) + { + return filePath == null ? null : filePath._path; + } + + public override bool Equals (object obj) + { + FilePath other = obj as FilePath; + if (other == null) + return false; + return GetCanonicalPath () == other.GetCanonicalPath (); + } + + public override int GetHashCode () + { + return _path.GetHashCode (); + } + + public bool CreateNewFile () + { + try { //Stream.`Close` method deleted //File.Open (_path, FileMode.CreateNew).Close (); File.Open(_path, FileMode.CreateNew).Dispose(); return true; - } - catch - { - return false; - } - } - - public static FilePath CreateTempFile() - { - return new FilePath(Path.GetTempFileName()); - } - - public static FilePath CreateTempFile(string prefix, string suffix) - { - return CreateTempFile(prefix, suffix, null); - } - - public static FilePath CreateTempFile(string prefix, string suffix, FilePath directory) - { - string file; - if (prefix == null) - { - throw new ArgumentNullException("prefix"); - } - if (prefix.Length < 3) - { - throw new ArgumentException("prefix must have at least 3 characters"); - } - string str = (directory == null) ? Path.GetTempPath() : directory.GetPath(); - do - { - file = Path.Combine(str, prefix + Interlocked.Increment(ref _tempCounter) + suffix); - } while (File.Exists(file)); - - new FileOutputStream(file).Close(); - return new FilePath(file); - } - - - public void DeleteOnExit() - { - } - - - public FilePath GetAbsoluteFile() - { - return new FilePath(Path.GetFullPath(_path)); - } - - public string GetAbsolutePath() - { - return Path.GetFullPath(_path); - } - - public FilePath GetCanonicalFile() - { - return new FilePath(GetCanonicalPath()); - } - - public string GetCanonicalPath() - { - return Path.GetFullPath(_path); - } - - public string GetName() - { - return Path.GetFileName(_path); - } - - public FilePath GetParentFile() - { - return new FilePath(Path.GetDirectoryName(_path)); - } - - public string GetPath() - { - return _path; - } - - public bool IsAbsolute() - { - return Path.IsPathRooted(_path); - } - - public bool IsDirectory() - { + } catch { + return false; + } + } + + public static FilePath CreateTempFile () + { + return new FilePath (Path.GetTempFileName ()); + } + + public static FilePath CreateTempFile (string prefix, string suffix) + { + return CreateTempFile (prefix, suffix, null); + } + + public static FilePath CreateTempFile (string prefix, string suffix, FilePath directory) + { + string file; + if (prefix == null) { + throw new ArgumentNullException ("prefix"); + } + if (prefix.Length < 3) { + throw new ArgumentException ("prefix must have at least 3 characters"); + } + string str = (directory == null) ? Path.GetTempPath () : directory.GetPath (); + do { + file = Path.Combine (str, prefix + Interlocked.Increment (ref _tempCounter) + suffix); + } while (File.Exists (file)); + + new FileOutputStream (file).Close (); + return new FilePath (file); + } + + + public void DeleteOnExit () + { + } + + + public FilePath GetAbsoluteFile () + { + return new FilePath (Path.GetFullPath (_path)); + } + + public string GetAbsolutePath () + { + return Path.GetFullPath (_path); + } + + public FilePath GetCanonicalFile () + { + return new FilePath (GetCanonicalPath ()); + } + + public string GetCanonicalPath () + { + string p = Path.GetFullPath (_path); + p.TrimEnd (Path.DirectorySeparatorChar); + return p; + } + + public string GetName () + { + return Path.GetFileName (_path); + } + + public FilePath GetParentFile () + { + return new FilePath (Path.GetDirectoryName (_path)); + } + + public string GetPath () + { + return _path; + } + + public bool IsAbsolute () + { + return Path.IsPathRooted (_path); + } + + public bool IsDirectory () + { return false; // FileHelper.Instance.IsDirectory(this); - } + } - public bool IsFile() - { - return false; //FileHelper.Instance.IsFile (this); - } + public bool IsFile () + { + return false; //FileHelper.Instance.IsFile (this); + } - public long LastModified() - { + public long LastModified () + { return 0; // FileHelper.Instance.LastModified(this); - } + } - public long Length() - { + public long Length () + { return 0; // FileHelper.Instance.Length(this); - } - - public string[] List() - { - return List(null); - } - - public string[] List(IFilenameFilter filter) - { - try - { - if (IsFile()) - return null; - List<string> list = new List<string>(); - foreach (string filePth in Directory.GetFileSystemEntries(_path)) - { - string fileName = Path.GetFileName(filePth); - if ((filter == null) || filter.Accept(this, fileName)) - { - list.Add(fileName); - } - } - return list.ToArray(); - } - catch - { - return null; - } - } - - public FilePath[] ListFiles() - { - try - { - if (IsFile()) - return null; - List<FilePath> list = new List<FilePath>(); - foreach (string filePath in Directory.GetFileSystemEntries(_path)) - { - list.Add(new FilePath(filePath)); - } - return list.ToArray(); - } - catch - { - return null; - } - } - - static void MakeDirWritable(string dir) - { - //FileHelper.Instance.MakeDirWritable (dir); - } - - static void MakeFileWritable(string file) - { - //FileHelper.Instance.MakeFileWritable (file); - } - - public bool Mkdir() - { - try - { - if (Directory.Exists(_path)) - return false; - Directory.CreateDirectory(_path); - return true; - } - catch (Exception) - { - return false; - } - } - - public bool Mkdirs() - { - try - { - if (Directory.Exists(_path)) - return false; - Directory.CreateDirectory(_path); - return true; - } - catch - { - return false; - } - } - - public bool RenameTo(FilePath file) - { - return RenameTo(file._path); - } - - public bool RenameTo(string name) - { + } + + public string[] List () + { + return List (null); + } + + public string[] List (IFilenameFilter filter) + { + try { + if (IsFile ()) + return null; + List<string> list = new List<string> (); + foreach (string filePth in Directory.GetFileSystemEntries (_path)) { + string fileName = Path.GetFileName (filePth); + if ((filter == null) || filter.Accept (this, fileName)) { + list.Add (fileName); + } + } + return list.ToArray (); + } catch { + return null; + } + } + + public FilePath[] ListFiles () + { + try { + if (IsFile ()) + return null; + List<FilePath> list = new List<FilePath> (); + foreach (string filePath in Directory.GetFileSystemEntries (_path)) { + list.Add (new FilePath (filePath)); + } + return list.ToArray (); + } catch { + return null; + } + } + + static void MakeDirWritable (string dir) + { + //FileHelper.Instance.MakeDirWritable (dir); + } + + static void MakeFileWritable (string file) + { + //FileHelper.Instance.MakeFileWritable (file); + } + + public bool Mkdir () + { + try { + if (Directory.Exists (_path)) + return false; + Directory.CreateDirectory (_path); + return true; + } catch (Exception) { + return false; + } + } + + public bool Mkdirs () + { + try { + if (Directory.Exists (_path)) + return false; + Directory.CreateDirectory (_path); + return true; + } catch { + return false; + } + } + + public bool RenameTo (FilePath file) + { + return RenameTo (file._path); + } + + public bool RenameTo (string name) + { return false; // FileHelper.Instance.RenameTo(this, name); - } + } - public bool SetLastModified(long milis) - { + public bool SetLastModified (long milis) + { return false; // FileHelper.Instance.SetLastModified(this, milis); - } + } - public bool SetReadOnly() - { + public bool SetReadOnly () + { return false; // FileHelper.Instance.SetReadOnly(this); - } - - public Uri ToUri() - { - return new Uri(_path); - } - - // Don't change the case of this method, since ngit does reflection on it - public bool CanExecute() - { + } + + public Uri ToUri () + { + return new Uri (_path); + } + + // Don't change the case of this method, since ngit does reflection on it + public bool CanExecute () + { return false; // FileHelper.Instance.CanExecute(this); - } - - // Don't change the case of this method, since ngit does reflection on it - public bool SetExecutable(bool exec) - { + } + + // Don't change the case of this method, since ngit does reflection on it + public bool SetExecutable (bool exec) + { return false; // FileHelper.Instance.SetExecutable(this, exec); - } - - public string GetParent() - { - string p = Path.GetDirectoryName(_path); - if (string.IsNullOrEmpty(p) || p == _path) - return null; - return p; - } - - public override string ToString() - { - return _path; - } - - static internal string PathSeparator - { - get { return Path.PathSeparator.ToString(); } - } - - static internal char PathSeparatorChar - { - get { return Path.PathSeparator; } - } - - static internal char SeparatorChar - { - get { return Path.DirectorySeparatorChar; } - } - - static internal string Separator - { - get { return Path.DirectorySeparatorChar.ToString(); } - } - } + } + + public string GetParent () + { + string p = Path.GetDirectoryName (_path); + if (string.IsNullOrEmpty(p) || p == _path) + return null; + return p; + } + + public override string ToString () + { + return _path; + } + + static internal string PathSeparator { + get { return Path.PathSeparator.ToString (); } + } + + static internal char PathSeparatorChar { + get { return Path.PathSeparator; } + } + + static internal char SeparatorChar { + get { return Path.DirectorySeparatorChar; } + } + + static internal string Separator { + get { return Path.DirectorySeparatorChar.ToString (); } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileReader.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileReader.cs index 69fb83268..7a0c1f90e 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileReader.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FileReader.cs @@ -1,13 +1,13 @@ namespace SharpCifs.Util.Sharpen { public class FileReader : InputStreamReader - { - //public FileReader (FilePath f) : base(f.GetPath ()) - //{ - //} + { + //public FileReader (FilePath f) : base(f.GetPath ()) + //{ + //} //path -> fileStream public FileReader(InputStream s) : base(s) - { + { } } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilterInputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilterInputStream.cs index 3b2276303..dfc0ba264 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilterInputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilterInputStream.cs @@ -1,57 +1,57 @@ namespace SharpCifs.Util.Sharpen { public class FilterInputStream : InputStream - { - protected InputStream In; - - public FilterInputStream(InputStream s) - { - In = s; - } - - public override int Available() - { - return In.Available(); - } - - public override void Close() - { - In.Close(); - } - - public override void Mark(int readlimit) - { - In.Mark(readlimit); - } - - public override bool MarkSupported() - { - return In.MarkSupported(); - } - - public override int Read() - { - return In.Read(); - } - - public override int Read(byte[] buf) - { - return In.Read(buf); - } - - public override int Read(byte[] b, int off, int len) - { - return In.Read(b, off, len); - } - - public override void Reset() - { - In.Reset(); - } - - public override long Skip(long cnt) - { - return In.Skip(cnt); - } - } + { + protected InputStream In; + + public FilterInputStream (InputStream s) + { + In = s; + } + + public override int Available () + { + return In.Available (); + } + + public override void Close () + { + In.Close (); + } + + public override void Mark (int readlimit) + { + In.Mark (readlimit); + } + + public override bool MarkSupported () + { + return In.MarkSupported (); + } + + public override int Read () + { + return In.Read (); + } + + public override int Read (byte[] buf) + { + return In.Read (buf); + } + + public override int Read (byte[] b, int off, int len) + { + return In.Read (b, off, len); + } + + public override void Reset () + { + In.Reset (); + } + + public override long Skip (long cnt) + { + return In.Skip (cnt); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilterOutputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilterOutputStream.cs index c2e7322fb..4863105ed 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilterOutputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/FilterOutputStream.cs @@ -1,37 +1,37 @@ namespace SharpCifs.Util.Sharpen { public class FilterOutputStream : OutputStream - { - protected OutputStream Out; + { + protected OutputStream Out; - public FilterOutputStream(OutputStream os) - { - Out = os; - } + public FilterOutputStream (OutputStream os) + { + Out = os; + } - public override void Close() - { - Out.Close(); - } + public override void Close () + { + Out.Close (); + } - public override void Flush() - { - Out.Flush(); - } + public override void Flush () + { + Out.Flush (); + } - public override void Write(byte[] b) - { - Out.Write(b); - } + public override void Write (byte[] b) + { + Out.Write (b); + } - public override void Write(int b) - { - Out.Write(b); - } + public override void Write (int b) + { + Out.Write (b); + } - public override void Write(byte[] b, int offset, int len) - { - Out.Write(b, offset, len); - } - } + public override void Write (byte[] b, int offset, int len) + { + Out.Write (b, offset, len); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Hashtable.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Hashtable.cs index 86c54265c..c2c53485d 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Hashtable.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Hashtable.cs @@ -6,18 +6,15 @@ namespace SharpCifs.Util.Sharpen public class Hashtable : Dictionary<object, object> { public void Put(object key, object value) - { - if (this.ContainsKey(key)) - this[key] = value; - else - this.Add(key, value); + { + Add(key, value); } public object Get(object key) { - return this.ContainsKey(key) - ? this[key] - : null; + var m_key = Keys.SingleOrDefault(k => k.Equals(key)); + + return m_key != null ? this[m_key] : null; } } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/HttpURLConnection.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/HttpURLConnection.cs index b10587534..ace314eee 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/HttpURLConnection.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/HttpURLConnection.cs @@ -34,3 +34,4 @@ namespace SharpCifs.Util.Sharpen } } + diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ICallable.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ICallable.cs index 478e81572..d847cb497 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ICallable.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ICallable.cs @@ -1,7 +1,7 @@ namespace SharpCifs.Util.Sharpen { - internal interface ICallable<T> - { - T Call(); - } + internal interface ICallable<T> + { + T Call (); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IConcurrentMap.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IConcurrentMap.cs index 13773700c..dead24244 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IConcurrentMap.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IConcurrentMap.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; namespace SharpCifs.Util.Sharpen { internal interface IConcurrentMap<T, TU> : IDictionary<T, TU> - { - TU PutIfAbsent(T key, TU value); - bool Remove(object key, object value); - bool Replace(T key, TU oldValue, TU newValue); - } + { + TU PutIfAbsent (T key, TU value); + bool Remove (object key, object value); + bool Replace (T key, TU oldValue, TU newValue); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IExecutor.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IExecutor.cs index ff3e9e787..5f76c2ed5 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IExecutor.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IExecutor.cs @@ -1,7 +1,7 @@ namespace SharpCifs.Util.Sharpen { public interface IExecutor - { - void Execute(IRunnable runnable); - } + { + void Execute (IRunnable runnable); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IFilenameFilter.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IFilenameFilter.cs index 1b79ad867..fe2eb6a3d 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IFilenameFilter.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IFilenameFilter.cs @@ -1,7 +1,7 @@ namespace SharpCifs.Util.Sharpen { public interface IFilenameFilter - { - bool Accept(FilePath dir, string name); - } + { + bool Accept (FilePath dir, string name); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IFuture.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IFuture.cs index ce8cebd98..5215e4502 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IFuture.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IFuture.cs @@ -1,8 +1,8 @@ namespace SharpCifs.Util.Sharpen { internal interface IFuture<T> - { - bool Cancel(bool mayInterruptIfRunning); - T Get(); - } + { + bool Cancel (bool mayInterruptIfRunning); + T Get (); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IPrivilegedAction.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IPrivilegedAction.cs index 1897b9127..4a5e92f9b 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IPrivilegedAction.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IPrivilegedAction.cs @@ -1,7 +1,7 @@ namespace SharpCifs.Util.Sharpen { - internal interface IPrivilegedAction<T> - { - T Run(); - } + internal interface IPrivilegedAction<T> + { + T Run (); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IRunnable.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IRunnable.cs index cb11d314a..7f6ae5533 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IRunnable.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/IRunnable.cs @@ -1,7 +1,7 @@ namespace SharpCifs.Util.Sharpen { public interface IRunnable - { - void Run(); - } + { + void Run (); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/InputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/InputStream.cs index 33256e5db..2f3f070b5 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/InputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/InputStream.cs @@ -4,156 +4,147 @@ using System.IO; namespace SharpCifs.Util.Sharpen { public class InputStream : IDisposable - { - private long _mark; - protected Stream Wrapped; - protected Stream BaseStream; - - public static implicit operator InputStream(Stream s) - { - return Wrap(s); - } - - public static implicit operator Stream(InputStream s) - { - return s.GetWrappedStream(); - } - - public virtual int Available() - { - if (Wrapped is WrappedSystemStream) - return ((WrappedSystemStream)Wrapped).InputStream.Available(); - return 0; - } - - public virtual void Close() - { - if (Wrapped != null) - { + { + private long _mark; + protected Stream Wrapped; + protected Stream BaseStream; + + public static implicit operator InputStream (Stream s) + { + return Wrap (s); + } + + public static implicit operator Stream (InputStream s) + { + return s.GetWrappedStream (); + } + + public virtual int Available () + { + if (Wrapped is WrappedSystemStream) + return ((WrappedSystemStream)Wrapped).InputStream.Available (); + return 0; + } + + public virtual void Close () + { + if (Wrapped != null) { //Stream.`Close` method deleted - //Wrapped.Close(); + //Wrapped.Close (); Wrapped.Dispose(); } - } - - public void Dispose() - { - Close(); - } - - internal Stream GetWrappedStream() - { - // Always create a wrapper stream (not directly Wrapped) since the subclass - // may be overriding methods that need to be called when used through the Stream class - return new WrappedSystemStream(this); - } - - public virtual void Mark(int readlimit) - { - if (Wrapped is WrappedSystemStream) - ((WrappedSystemStream)Wrapped).InputStream.Mark(readlimit); - else - { - if (BaseStream is WrappedSystemStream) - ((WrappedSystemStream)BaseStream).OnMark(readlimit); - if (Wrapped != null) - _mark = Wrapped.Position; - } - } - - public virtual bool MarkSupported() - { - if (Wrapped is WrappedSystemStream) - return ((WrappedSystemStream)Wrapped).InputStream.MarkSupported(); - return ((Wrapped != null) && Wrapped.CanSeek); - } - - public virtual int Read() - { - if (Wrapped == null) - { - throw new NotImplementedException(); - } - return Wrapped.ReadByte(); - } - - public virtual int Read(byte[] buf) - { - return Read(buf, 0, buf.Length); - } - - public virtual int Read(byte[] b, int off, int len) - { - if (Wrapped is WrappedSystemStream) - return ((WrappedSystemStream)Wrapped).InputStream.Read(b, off, len); - - if (Wrapped != null) - { - int num = Wrapped.Read(b, off, len); - return ((num <= 0) ? -1 : num); - } - int totalRead = 0; - while (totalRead < len) - { - int nr = Read(); - if (nr == -1) - return -1; - b[off + totalRead] = (byte)nr; - totalRead++; - } - return totalRead; - } - - public virtual void Reset() - { - if (Wrapped is WrappedSystemStream) - ((WrappedSystemStream)Wrapped).InputStream.Reset(); - else - { - if (Wrapped == null) - throw new IOException(); - Wrapped.Position = _mark; - } - } - - public virtual long Skip(long cnt) - { - if (Wrapped is WrappedSystemStream) - return ((WrappedSystemStream)Wrapped).InputStream.Skip(cnt); - - long n = cnt; - while (n > 0) - { - if (Read() == -1) - return cnt - n; - n--; - } - return cnt - n; - } - - internal virtual bool CanSeek() - { - if (Wrapped != null) - return Wrapped.CanSeek; - return false; - } - - internal virtual long Position - { - get - { - if (Wrapped != null) - return Wrapped.Position; - throw new NotSupportedException(); - } - set - { - if (Wrapped != null) - Wrapped.Position = value; - else - throw new NotSupportedException(); - } - } + } + + public void Dispose () + { + Close (); + } + + internal Stream GetWrappedStream () + { + // Always create a wrapper stream (not directly Wrapped) since the subclass + // may be overriding methods that need to be called when used through the Stream class + return new WrappedSystemStream (this); + } + + public virtual void Mark (int readlimit) + { + if (Wrapped is WrappedSystemStream) + ((WrappedSystemStream)Wrapped).InputStream.Mark (readlimit); + else { + if (BaseStream is WrappedSystemStream) + ((WrappedSystemStream)BaseStream).OnMark (readlimit); + if (Wrapped != null) + _mark = Wrapped.Position; + } + } + + public virtual bool MarkSupported () + { + if (Wrapped is WrappedSystemStream) + return ((WrappedSystemStream)Wrapped).InputStream.MarkSupported (); + return ((Wrapped != null) && Wrapped.CanSeek); + } + + public virtual int Read () + { + if (Wrapped == null) { + throw new NotImplementedException (); + } + return Wrapped.ReadByte (); + } + + public virtual int Read (byte[] buf) + { + return Read (buf, 0, buf.Length); + } + + public virtual int Read (byte[] b, int off, int len) + { + if (Wrapped is WrappedSystemStream) + return ((WrappedSystemStream)Wrapped).InputStream.Read (b, off, len); + + if (Wrapped != null) { + int num = Wrapped.Read (b, off, len); + return ((num <= 0) ? -1 : num); + } + int totalRead = 0; + while (totalRead < len) { + int nr = Read (); + if (nr == -1) + return -1; + b[off + totalRead] = (byte)nr; + totalRead++; + } + return totalRead; + } + + public virtual void Reset () + { + if (Wrapped is WrappedSystemStream) + ((WrappedSystemStream)Wrapped).InputStream.Reset (); + else { + if (Wrapped == null) + throw new IOException (); + Wrapped.Position = _mark; + } + } + + public virtual long Skip (long cnt) + { + if (Wrapped is WrappedSystemStream) + return ((WrappedSystemStream)Wrapped).InputStream.Skip (cnt); + + long n = cnt; + while (n > 0) { + if (Read () == -1) + return cnt - n; + n--; + } + return cnt - n; + } + + internal virtual bool CanSeek () + { + if (Wrapped != null) + return Wrapped.CanSeek; + return false; + } + + internal virtual long Position { + get + { + if (Wrapped != null) + return Wrapped.Position; + throw new NotSupportedException (); + } + set { + if (Wrapped != null) + Wrapped.Position = value; + else + throw new NotSupportedException (); + } + } public virtual long Length { @@ -161,18 +152,18 @@ namespace SharpCifs.Util.Sharpen { if (Wrapped != null) { - return Wrapped.Length; + return Wrapped.Length; } throw new NotSupportedException(); } } - static internal InputStream Wrap(Stream s) - { - InputStream stream = new InputStream(); - stream.Wrapped = s; - return stream; - } - } + static internal InputStream Wrap (Stream s) + { + InputStream stream = new InputStream (); + stream.Wrapped = s; + return stream; + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/InputStreamReader.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/InputStreamReader.cs index 90b6fde1a..f9f1983b8 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/InputStreamReader.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/InputStreamReader.cs @@ -4,23 +4,22 @@ using System.Text; namespace SharpCifs.Util.Sharpen { public class InputStreamReader : StreamReader - { + { //Stream(string path) constructor deleted - //protected InputStreamReader (string file) : base(file) - //{ - //} + //protected InputStreamReader (string file) : base(file) + //{ + //} - public InputStreamReader(InputStream s) : base(s.GetWrappedStream()) - { - } + public InputStreamReader (InputStream s) : base(s.GetWrappedStream ()) + { + } - public InputStreamReader(InputStream s, string encoding) - : base(s.GetWrappedStream(), Encoding.GetEncoding(encoding)) - { - } + public InputStreamReader (InputStream s, string encoding) : base(s.GetWrappedStream (), Encoding.GetEncoding (encoding)) + { + } - public InputStreamReader(InputStream s, Encoding e) : base(s.GetWrappedStream(), e) - { - } - } + public InputStreamReader (InputStream s, Encoding e) : base(s.GetWrappedStream (), e) + { + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Iterator.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Iterator.cs index 77339699a..634c7b404 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Iterator.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Iterator.cs @@ -5,52 +5,49 @@ using System.Collections.Generic; namespace SharpCifs.Util.Sharpen { public interface ITerator - { - bool HasNext(); - object Next(); - void Remove(); - } - - public abstract class Iterator<T> : IEnumerator<T>, ITerator - { - private T _lastValue; - - object ITerator.Next() - { - return Next(); - } - - public abstract bool HasNext(); - public abstract T Next(); - public abstract void Remove(); - - bool IEnumerator.MoveNext() - { - if (HasNext()) - { - _lastValue = Next(); - return true; - } - return false; - } - - void IEnumerator.Reset() - { - throw new NotImplementedException(); - } - - void IDisposable.Dispose() - { - } - - T IEnumerator<T>.Current - { - get { return _lastValue; } - } - - object IEnumerator.Current - { - get { return _lastValue; } - } - } + { + bool HasNext (); + object Next (); + void Remove (); + } + + public abstract class Iterator<T> : IEnumerator<T>, ITerator + { + private T _lastValue; + + object ITerator.Next () + { + return Next (); + } + + public abstract bool HasNext (); + public abstract T Next (); + public abstract void Remove (); + + bool IEnumerator.MoveNext () + { + if (HasNext ()) { + _lastValue = Next (); + return true; + } + return false; + } + + void IEnumerator.Reset () + { + throw new NotImplementedException (); + } + + void IDisposable.Dispose () + { + } + + T IEnumerator<T>.Current { + get { return _lastValue; } + } + + object IEnumerator.Current { + get { return _lastValue; } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/LinkageError.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/LinkageError.cs index 4fbd18570..9f4970bdd 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/LinkageError.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/LinkageError.cs @@ -3,9 +3,9 @@ using System; namespace SharpCifs.Util.Sharpen { internal class LinkageError : Exception - { - public LinkageError(string msg) : base(msg) - { - } - } + { + public LinkageError (string msg) : base(msg) + { + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/MD5.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/MD5.cs index 85cdedd69..50f3fa43b 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/MD5.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/MD5.cs @@ -4,16 +4,15 @@ using System; using System.Text; namespace SharpCifs.Util.Sharpen -{ - // ************************************************************** - // * Raw implementation of the MD5 hash algorithm - // * from RFC 1321. - // * - // * Written By: Reid Borsuk and Jenny Zheng - // * Copyright (c) Microsoft Corporation. All rights reserved. - // ************************************************************** - - // Simple struct for the (a,b,c,d) which is used to compute the mesage digest. +{ // ************************************************************** +// * Raw implementation of the MD5 hash algorithm +// * from RFC 1321. +// * +// * Written By: Reid Borsuk and Jenny Zheng +// * Copyright (c) Microsoft Corporation. All rights reserved. +// ************************************************************** + +// Simple struct for the (a,b,c,d) which is used to compute the mesage digest. struct AbcdStruct { public uint A; @@ -30,13 +29,9 @@ namespace SharpCifs.Util.Sharpen public static byte[] GetHash(string input, Encoding encoding) { if (null == input) - throw new ArgumentNullException( - "input", "Unable to calculate hash over null input data"); + throw new ArgumentNullException("input", "Unable to calculate hash over null input data"); if (null == encoding) - throw new ArgumentNullException( - "encoding", - "Unable to calculate hash over a string without a default encoding. " - + "Consider using the GetHash(string) overload to use UTF8 Encoding"); + throw new ArgumentNullException("encoding", "Unable to calculate hash over a string without a default encoding. Consider using the GetHash(string) overload to use UTF8 Encoding"); byte[] target = encoding.GetBytes(input); @@ -51,8 +46,7 @@ namespace SharpCifs.Util.Sharpen public static string GetHashString(byte[] input) { if (null == input) - throw new ArgumentNullException( - "input", "Unable to calculate hash over null input data"); + throw new ArgumentNullException("input", "Unable to calculate hash over null input data"); string retval = BitConverter.ToString(GetHash(input)); retval = retval.Replace("-", ""); @@ -63,13 +57,9 @@ namespace SharpCifs.Util.Sharpen public static string GetHashString(string input, Encoding encoding) { if (null == input) - throw new ArgumentNullException( - "input", "Unable to calculate hash over null input data"); + throw new ArgumentNullException("input", "Unable to calculate hash over null input data"); if (null == encoding) - throw new ArgumentNullException( - "encoding", - "Unable to calculate hash over a string without a default encoding. " - + "Consider using the GetHashString(string) overload to use UTF8 Encoding"); + throw new ArgumentNullException("encoding", "Unable to calculate hash over a string without a default encoding. Consider using the GetHashString(string) overload to use UTF8 Encoding"); byte[] target = encoding.GetBytes(input); @@ -84,8 +74,7 @@ namespace SharpCifs.Util.Sharpen public static byte[] GetHash(byte[] input) { if (null == input) - throw new ArgumentNullException( - "input", "Unable to calculate hash over null input data"); + throw new ArgumentNullException("input", "Unable to calculate hash over null input data"); //Intitial values defined in RFC 1321 AbcdStruct abcd = new AbcdStruct(); @@ -102,18 +91,10 @@ namespace SharpCifs.Util.Sharpen startIndex += 64; } // The final data block. - return GetHashFinalBlock(input, - startIndex, - input.Length - startIndex, - abcd, - (Int64)input.Length * 8); + return GetHashFinalBlock(input, startIndex, input.Length - startIndex, abcd, (Int64)input.Length * 8); } - internal static byte[] GetHashFinalBlock(byte[] input, - int ibStart, - int cbSize, - AbcdStruct abcd, - Int64 len) + internal static byte[] GetHashFinalBlock(byte[] input, int ibStart, int cbSize, AbcdStruct abcd, Int64 len) { byte[] working = new byte[64]; byte[] length = BitConverter.GetBytes(len); @@ -148,11 +129,11 @@ namespace SharpCifs.Util.Sharpen // Performs a single block transform of MD5 for a given set of ABCD inputs /* If implementing your own hashing framework, be sure to set the initial ABCD correctly according to RFC 1321: - // A = 0x67452301; - // B = 0xefcdab89; - // C = 0x98badcfe; - // D = 0x10325476; - */ + // A = 0x67452301; + // B = 0xefcdab89; + // C = 0x98badcfe; + // D = 0x10325476; + */ internal static void GetHashBlock(byte[] input, ref AbcdStruct abcdValue, int ibStart) { uint[] temp = Converter(input, ibStart); @@ -276,8 +257,7 @@ namespace SharpCifs.Util.Sharpen private static uint[] Converter(byte[] input, int ibStart) { if (null == input) - throw new ArgumentNullException( - "input", "Unable convert null array to array of uInts"); + throw new ArgumentNullException("input", "Unable convert null array to array of uInts"); uint[] result = new uint[16]; diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Matcher.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Matcher.cs index e5be6075d..d0bd79aa2 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Matcher.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Matcher.cs @@ -4,84 +4,80 @@ using System.Text.RegularExpressions; namespace SharpCifs.Util.Sharpen { internal class Matcher - { - private int _current; - private MatchCollection _matches; - private Regex _regex; - private string _str; + { + private int _current; + private MatchCollection _matches; + private Regex _regex; + private string _str; - internal Matcher(Regex regex, string str) - { - this._regex = regex; - this._str = str; - } + internal Matcher (Regex regex, string str) + { + this._regex = regex; + this._str = str; + } - public int End() - { - if ((_matches == null) || (_current >= _matches.Count)) - { - throw new InvalidOperationException(); - } - return (_matches[_current].Index + _matches[_current].Length); - } + public int End () + { + if ((_matches == null) || (_current >= _matches.Count)) { + throw new InvalidOperationException (); + } + return (_matches[_current].Index + _matches[_current].Length); + } - public bool Find() - { - if (_matches == null) - { - _matches = _regex.Matches(_str); - _current = 0; - } - return (_current < _matches.Count); - } + public bool Find () + { + if (_matches == null) { + _matches = _regex.Matches (_str); + _current = 0; + } + return (_current < _matches.Count); + } - public bool Find(int index) - { - _matches = _regex.Matches(_str, index); - _current = 0; - return (_matches.Count > 0); - } + public bool Find (int index) + { + _matches = _regex.Matches (_str, index); + _current = 0; + return (_matches.Count > 0); + } - public string Group(int n) - { - if ((_matches == null) || (_current >= _matches.Count)) - { - throw new InvalidOperationException(); - } - Group grp = _matches[_current].Groups[n]; - return grp.Success ? grp.Value : null; - } + public string Group (int n) + { + if ((_matches == null) || (_current >= _matches.Count)) { + throw new InvalidOperationException (); + } + Group grp = _matches[_current].Groups[n]; + return grp.Success ? grp.Value : null; + } - public bool Matches() - { - _matches = null; - return Find(); - } + public bool Matches () + { + _matches = null; + return Find (); + } - public string ReplaceFirst(string txt) - { - return _regex.Replace(_str, txt, 1); - } + public string ReplaceFirst (string txt) + { + return _regex.Replace (_str, txt, 1); + } - public Matcher Reset(CharSequence str) - { - return Reset(str.ToString()); - } + public Matcher Reset (CharSequence str) + { + return Reset (str.ToString ()); + } - public Matcher Reset(string str) - { - _matches = null; - this._str = str; - return this; - } + public Matcher Reset (string str) + { + _matches = null; + this._str = str; + return this; + } - public int Start() - { - if ((_matches == null) || (_current >= _matches.Count)) - { - throw new InvalidOperationException(); - } - return _matches[_current].Index; - } - } + public int Start () + { + if ((_matches == null) || (_current >= _matches.Count)) { + throw new InvalidOperationException (); + } + return _matches[_current].Index; + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/MessageDigest.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/MessageDigest.cs index 57fe3e0e9..5562f9d36 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/MessageDigest.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/MessageDigest.cs @@ -6,58 +6,55 @@ using System.Security.Cryptography; namespace SharpCifs.Util.Sharpen { public abstract class MessageDigest - { - public void Digest(byte[] buffer, int o, int len) - { - byte[] d = Digest(); - d.CopyTo(buffer, o); - } - - public byte[] Digest(byte[] buffer) - { - Update(buffer); - return Digest(); - } - - public abstract byte[] Digest(); - public abstract int GetDigestLength(); - public static MessageDigest GetInstance(string algorithm) - { - switch (algorithm.ToLower()) - { - case "sha-1": - //System.Security.CryptographySHA1Managed not found - //return new MessageDigest<SHA1Managed> (); - return new MessageDigest<System.Security.Cryptography.SHA1>(); - case "md5": - return new MessageDigest<Md5Managed>(); + { + public void Digest (byte[] buffer, int o, int len) + { + byte[] d = Digest (); + d.CopyTo (buffer, o); + } + + public byte[] Digest (byte[] buffer) + { + Update (buffer); + return Digest (); + } + + public abstract byte[] Digest (); + public abstract int GetDigestLength (); + public static MessageDigest GetInstance (string algorithm) + { + switch (algorithm.ToLower ()) { + case "sha-1": + //System.Security.CryptographySHA1Managed not found + //return new MessageDigest<SHA1Managed> (); + return new MessageDigest<System.Security.Cryptography.SHA1>(); + case "md5": + return new MessageDigest<Md5Managed> (); } - throw new NotSupportedException( - string.Format("The requested algorithm \"{0}\" is not supported.", algorithm)); - } + throw new NotSupportedException (string.Format ("The requested algorithm \"{0}\" is not supported.", algorithm)); + } - public abstract void Reset(); - public abstract void Update(byte[] b); - public abstract void Update(byte b); - public abstract void Update(byte[] b, int offset, int len); - } + public abstract void Reset (); + public abstract void Update (byte[] b); + public abstract void Update (byte b); + public abstract void Update (byte[] b, int offset, int len); + } - public class MessageDigest<TAlgorithm> - : MessageDigest where TAlgorithm : HashAlgorithm //, new() //use static `Create` method - { - private TAlgorithm _hash; + public class MessageDigest<TAlgorithm> : MessageDigest where TAlgorithm : HashAlgorithm //, new() //use static `Create` method + { + private TAlgorithm _hash; //private CryptoStream _stream; //don't work .NET Core private MemoryStream _stream; - public MessageDigest() - { - Init(); - } + public MessageDigest () + { + Init (); + } - public override byte[] Digest() - { + public override byte[] Digest () + { //CryptoStream -> MemoryStream, needless method //_stream.FlushFinalBlock (); @@ -65,30 +62,29 @@ namespace SharpCifs.Util.Sharpen //byte[] hash = _hash.Hash; byte[] hash = _hash.ComputeHash(_stream.ToArray()); - Reset(); - return hash; - } + Reset (); + return hash; + } - public void Dispose() - { - if (_stream != null) - { - _stream.Dispose(); - } - _stream = null; + public void Dispose () + { + if (_stream != null) { + _stream.Dispose (); + } + _stream = null; } - public override int GetDigestLength() - { - return (_hash.HashSize / 8); - } + public override int GetDigestLength () + { + return (_hash.HashSize / 8); + } - private void Init() - { + private void Init () + { //use static `Create` method //_hash = Activator.CreateInstance<TAlgorithm> (); var createMethod = typeof(TAlgorithm).GetRuntimeMethod("Create", new Type[0]); - _hash = (TAlgorithm)createMethod.Invoke(null, new object[] { }); + _hash = (TAlgorithm)createMethod.Invoke(null, new object[] {}); //HashAlgorithm cannot cast `ICryptoTransform` on .NET Core, gave up using CryptoStream. //_stream = new CryptoStream(Stream.Null, _hash, CryptoStreamMode.Write); @@ -96,27 +92,27 @@ namespace SharpCifs.Util.Sharpen _stream = new MemoryStream(); } - public override void Reset() - { - Dispose(); - Init(); - } - - public override void Update(byte[] input) - { - _stream.Write(input, 0, input.Length); - } - - public override void Update(byte input) - { - _stream.WriteByte(input); - } - - public override void Update(byte[] input, int index, int count) - { - if (count < 0) - Console.WriteLine("Argh!"); - _stream.Write(input, index, count); - } - } + public override void Reset () + { + Dispose (); + Init (); + } + + public override void Update (byte[] input) + { + _stream.Write (input, 0, input.Length); + } + + public override void Update (byte input) + { + _stream.WriteByte (input); + } + + public override void Update (byte[] input, int index, int count) + { + if (count < 0) + Console.WriteLine ("Argh!"); + _stream.Write (input, index, count); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/NetworkStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/NetworkStream.cs index 58dd1bd10..05599cea3 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/NetworkStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/NetworkStream.cs @@ -3,15 +3,15 @@ using System.IO; namespace SharpCifs.Util.Sharpen { - public class NetworkStream : Stream + public class NetworkStream : Stream { SocketEx _socket; - + public NetworkStream(SocketEx socket) { _socket = socket; } - + public override bool CanRead { get { throw new NotImplementedException(); } @@ -29,7 +29,7 @@ namespace SharpCifs.Util.Sharpen public override void Flush() { - // throw new NotImplementedException(); + // throw new NotImplementedException(); } public override long Length diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ObjectInputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ObjectInputStream.cs index 6351c42b5..dc3d6ccc3 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ObjectInputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ObjectInputStream.cs @@ -4,22 +4,22 @@ using System.IO; namespace SharpCifs.Util.Sharpen { internal class ObjectInputStream : InputStream - { - private BinaryReader _reader; + { + private BinaryReader _reader; - public ObjectInputStream(InputStream s) - { - _reader = new BinaryReader(s.GetWrappedStream()); - } + public ObjectInputStream (InputStream s) + { + _reader = new BinaryReader (s.GetWrappedStream ()); + } - public int ReadInt() - { - return _reader.ReadInt32(); - } + public int ReadInt () + { + return _reader.ReadInt32 (); + } - public object ReadObject() - { - throw new NotImplementedException(); - } - } + public object ReadObject () + { + throw new NotImplementedException (); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ObjectOutputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ObjectOutputStream.cs index 3099fbe72..97f3a2cfd 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ObjectOutputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ObjectOutputStream.cs @@ -3,17 +3,17 @@ using System.IO; namespace SharpCifs.Util.Sharpen { internal class ObjectOutputStream : OutputStream - { - private BinaryWriter _bw; + { + private BinaryWriter _bw; - public ObjectOutputStream(OutputStream os) - { - _bw = new BinaryWriter(os.GetWrappedStream()); - } + public ObjectOutputStream (OutputStream os) + { + _bw = new BinaryWriter (os.GetWrappedStream ()); + } - public virtual void WriteInt(int i) - { - _bw.Write(i); - } - } + public virtual void WriteInt (int i) + { + _bw.Write (i); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/OutputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/OutputStream.cs index 1804d6745..0e6189f0c 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/OutputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/OutputStream.cs @@ -4,91 +4,83 @@ using System.IO; namespace SharpCifs.Util.Sharpen { public class OutputStream : IDisposable - { - protected Stream Wrapped; + { + protected Stream Wrapped; - public static implicit operator OutputStream(Stream s) - { - return Wrap(s); - } + public static implicit operator OutputStream (Stream s) + { + return Wrap (s); + } - public static implicit operator Stream(OutputStream s) - { - return s.GetWrappedStream(); - } - - public virtual void Close() - { - if (Wrapped != null) - { + public static implicit operator Stream (OutputStream s) + { + return s.GetWrappedStream (); + } + + public virtual void Close () + { + if (Wrapped != null) { //Stream.`Close` method deleted //Wrapped.Close (); Wrapped.Dispose(); } - } + } - public void Dispose() - { - Close(); - } + public void Dispose () + { + Close (); + } - public virtual void Flush() - { - if (Wrapped != null) - { - Wrapped.Flush(); - } - } + public virtual void Flush () + { + if (Wrapped != null) { + Wrapped.Flush (); + } + } - internal Stream GetWrappedStream() - { - // Always create a wrapper stream (not directly Wrapped) since the subclass - // may be overriding methods that need to be called when used through the Stream class - return new WrappedSystemStream(this); - } + internal Stream GetWrappedStream () + { + // Always create a wrapper stream (not directly Wrapped) since the subclass + // may be overriding methods that need to be called when used through the Stream class + return new WrappedSystemStream (this); + } - static internal OutputStream Wrap(Stream s) - { - OutputStream stream = new OutputStream(); - stream.Wrapped = s; - return stream; - } + static internal OutputStream Wrap (Stream s) + { + OutputStream stream = new OutputStream (); + stream.Wrapped = s; + return stream; + } - public virtual void Write(int b) - { - if (Wrapped is WrappedSystemStream) - ((WrappedSystemStream)Wrapped).OutputStream.Write(b); - else - { - if (Wrapped == null) - throw new NotImplementedException(); - Wrapped.WriteByte((byte)b); - } - } + public virtual void Write (int b) + { + if (Wrapped is WrappedSystemStream) + ((WrappedSystemStream)Wrapped).OutputStream.Write (b); + else { + if (Wrapped == null) + throw new NotImplementedException (); + Wrapped.WriteByte ((byte)b); + } + } - public virtual void Write(byte[] b) - { - Write(b, 0, b.Length); - } + public virtual void Write (byte[] b) + { + Write (b, 0, b.Length); + } - public virtual void Write(byte[] b, int offset, int len) - { - if (Wrapped is WrappedSystemStream) - ((WrappedSystemStream)Wrapped).OutputStream.Write(b, offset, len); - else - { - if (Wrapped != null) - { - Wrapped.Write(b, offset, len); - } - else - { - for (int i = 0; i < len; i++) - { - Write(b[i + offset]); - } - } - } - } - } + public virtual void Write (byte[] b, int offset, int len) + { + if (Wrapped is WrappedSystemStream) + ((WrappedSystemStream)Wrapped).OutputStream.Write (b, offset, len); + else { + if (Wrapped != null) { + Wrapped.Write (b, offset, len); + } else { + for (int i = 0; i < len; i++) { + Write (b[i + offset]); + } + } + } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/OutputStreamWriter.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/OutputStreamWriter.cs index 1b05848a3..6313b7c79 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/OutputStreamWriter.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/OutputStreamWriter.cs @@ -4,20 +4,17 @@ using System.Text; namespace SharpCifs.Util.Sharpen { internal class OutputStreamWriter : StreamWriter - { - public OutputStreamWriter(OutputStream stream) - : base(stream.GetWrappedStream()) - { - } + { + public OutputStreamWriter (OutputStream stream) : base(stream.GetWrappedStream ()) + { + } - public OutputStreamWriter(OutputStream stream, string encoding) - : base(stream.GetWrappedStream(), Extensions.GetEncoding(encoding)) - { - } + public OutputStreamWriter (OutputStream stream, string encoding) : base(stream.GetWrappedStream (), Extensions.GetEncoding (encoding)) + { + } - public OutputStreamWriter(OutputStream stream, Encoding encoding) - : base(stream.GetWrappedStream(), encoding) - { - } - } + public OutputStreamWriter (OutputStream stream, Encoding encoding) : base(stream.GetWrappedStream (), encoding) + { + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PipedInputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PipedInputStream.cs index d2438be70..d5004c988 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PipedInputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PipedInputStream.cs @@ -3,206 +3,170 @@ using System.Threading; namespace SharpCifs.Util.Sharpen { - internal class PipedInputStream : InputStream - { - private byte[] _oneBuffer; - public const int PipeSize = 1024; + internal class PipedInputStream : InputStream + { + private byte[] _oneBuffer; + public const int PipeSize = 1024; + + protected byte[] Buffer; + private bool _closed; + private ManualResetEvent _dataEvent; + private int _end; + private int _start; + private object _thisLock; + private bool _allowGrow = false; + + public int In { + get { return _start; } + set { _start = value; } + } + + public int Out { + get { return _end; } + set { _end = value; } + } - protected byte[] Buffer; - private bool _closed; - private ManualResetEvent _dataEvent; - private int _end; - private int _start; - private object _thisLock; - private bool _allowGrow = false; + public PipedInputStream () + { + _thisLock = new object (); + _dataEvent = new ManualResetEvent (false); + Buffer = new byte[PipeSize + 1]; + } - public int In - { - get { return _start; } - set { _start = value; } - } + public PipedInputStream (PipedOutputStream os): this () + { + os.Attach (this); + } - public int Out - { - get { return _end; } - set { _end = value; } - } + public override void Close () + { + lock (_thisLock) { + _closed = true; + _dataEvent.Set (); + } + } - public PipedInputStream() - { - _thisLock = new object(); - _dataEvent = new ManualResetEvent(false); - Buffer = new byte[PipeSize + 1]; - } + public override int Available () + { + lock (_thisLock) { + if (_start <= _end) { + return (_end - _start); + } + return ((Buffer.Length - _start) + _end); + } + } - public PipedInputStream(PipedOutputStream os) : this() - { - os.Attach(this); - } + public override int Read () + { + if (_oneBuffer == null) + _oneBuffer = new byte[1]; + if (Read (_oneBuffer, 0, 1) == -1) + return -1; + return _oneBuffer[0]; + } - public override void Close() - { - lock (_thisLock) - { - _closed = true; - _dataEvent.Set(); - } - } - - public override int Available() - { - lock (_thisLock) - { - if (_start <= _end) - { - return (_end - _start); - } - return ((Buffer.Length - _start) + _end); - } - } - - public override int Read() - { - if (_oneBuffer == null) - _oneBuffer = new byte[1]; - if (Read(_oneBuffer, 0, 1) == -1) - return -1; - return _oneBuffer[0]; - } - - public override int Read(byte[] b, int offset, int len) - { - int length = 0; - do - { - _dataEvent.WaitOne(); - lock (_thisLock) - { - if (_closed && Available() == 0) - { - return -1; - } - if (_start < _end) - { - length = Math.Min(len, _end - _start); - Array.Copy(Buffer, _start, b, offset, length); - _start += length; - } - else if (_start > _end) - { - length = Math.Min(len, Buffer.Length - _start); - Array.Copy(Buffer, _start, b, offset, length); - len -= length; - _start = (_start + length) % Buffer.Length; - if (len > 0) - { - int i = Math.Min(len, _end); - Array.Copy(Buffer, 0, b, offset + length, i); - _start += i; - length += i; - } - } - if (_start == _end && !_closed) - { - _dataEvent.Reset(); - } - Monitor.PulseAll(_thisLock); - } - } while (length == 0); - return length; - } - - private int Allocate(int len) - { - int alen; - while ((alen = TryAllocate(len)) == 0) - { - // Wait until somebody reads data - try - { - Monitor.Wait(_thisLock); - } - catch - { - _closed = true; - _dataEvent.Set(); - throw; - } - } - return alen; - } - - int TryAllocate(int len) - { - int free; - if (_start <= _end) - { - free = (Buffer.Length - _end) + _start; - } - else - { - free = _start - _end; - } - if (free <= len) - { - if (!_allowGrow) - return free > 0 ? free - 1 : 0; - int sizeInc = (len - free) + 1; - byte[] destinationArray = new byte[Buffer.Length + sizeInc]; - if (_start <= _end) - { - Array.Copy(Buffer, _start, destinationArray, _start, _end - _start); - } - else - { - Array.Copy(Buffer, - 0, - destinationArray, - 0, - _end); - Array.Copy(Buffer, - _start, - destinationArray, - _start + sizeInc, - Buffer.Length - _start); - _start += sizeInc; - } - Buffer = destinationArray; - } - return len; - } - - internal void Write(int b) - { - lock (_thisLock) - { - Allocate(1); - Buffer[_end] = (byte)b; - _end = (_end + 1) % Buffer.Length; - _dataEvent.Set(); - } - } - - internal void Write(byte[] b, int offset, int len) - { - do - { - lock (_thisLock) - { - int alen = Allocate(len); - int length = Math.Min(Buffer.Length - _end, alen); - Array.Copy(b, offset, Buffer, _end, length); - _end = (_end + length) % Buffer.Length; - if (length < alen) - { - Array.Copy(b, offset + length, Buffer, 0, alen - length); - _end += alen - length; - } - _dataEvent.Set(); - len -= alen; - offset += alen; - } - } while (len > 0); - } - } + public override int Read (byte[] b, int offset, int len) + { + int length = 0; + do { + _dataEvent.WaitOne (); + lock (_thisLock) { + if (_closed && Available () == 0) { + return -1; + } + if (_start < _end) { + length = Math.Min (len, _end - _start); + Array.Copy (Buffer, _start, b, offset, length); + _start += length; + } else if (_start > _end) { + length = Math.Min (len, Buffer.Length - _start); + Array.Copy (Buffer, _start, b, offset, length); + len -= length; + _start = (_start + length) % Buffer.Length; + if (len > 0) { + int i = Math.Min (len, _end); + Array.Copy (Buffer, 0, b, offset + length, i); + _start += i; + length += i; + } + } + if (_start == _end && !_closed) { + _dataEvent.Reset (); + } + Monitor.PulseAll (_thisLock); + } + } while (length == 0); + return length; + } + + private int Allocate (int len) + { + int alen; + while ((alen = TryAllocate (len)) == 0) { + // Wait until somebody reads data + try { + Monitor.Wait (_thisLock); + } catch { + _closed = true; + _dataEvent.Set (); + throw; + } + } + return alen; + } + + int TryAllocate (int len) + { + int free; + if (_start <= _end) { + free = (Buffer.Length - _end) + _start; + } else { + free = _start - _end; + } + if (free <= len) { + if (!_allowGrow) + return free > 0 ? free - 1 : 0; + int sizeInc = (len - free) + 1; + byte[] destinationArray = new byte[Buffer.Length + sizeInc]; + if (_start <= _end) { + Array.Copy (Buffer, _start, destinationArray, _start, _end - _start); + } else { + Array.Copy (Buffer, 0, destinationArray, 0, _end); + Array.Copy (Buffer, _start, destinationArray, _start + sizeInc, Buffer.Length - _start); + _start += sizeInc; + } + Buffer = destinationArray; + } + return len; + } + + internal void Write (int b) + { + lock (_thisLock) { + Allocate (1); + Buffer[_end] = (byte)b; + _end = (_end + 1) % Buffer.Length; + _dataEvent.Set (); + } + } + + internal void Write (byte[] b, int offset, int len) + { + do { + lock (_thisLock) { + int alen = Allocate (len); + int length = Math.Min (Buffer.Length - _end, alen); + Array.Copy (b, offset, Buffer, _end, length); + _end = (_end + length) % Buffer.Length; + if (length < alen) { + Array.Copy (b, offset + length, Buffer, 0, alen - length); + _end += alen - length; + } + _dataEvent.Set (); + len -= alen; + offset += alen; + } + } while (len > 0); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PipedOutputStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PipedOutputStream.cs index d8269ec9b..4c46f1ec0 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PipedOutputStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PipedOutputStream.cs @@ -1,37 +1,37 @@ namespace SharpCifs.Util.Sharpen { internal class PipedOutputStream : OutputStream - { - PipedInputStream _ips; + { + PipedInputStream _ips; - public PipedOutputStream() - { - } + public PipedOutputStream () + { + } - public PipedOutputStream(PipedInputStream iss) : this() - { - Attach(iss); - } + public PipedOutputStream (PipedInputStream iss) : this() + { + Attach (iss); + } - public override void Close() - { - _ips.Close(); - base.Close(); - } + public override void Close () + { + _ips.Close (); + base.Close (); + } - internal void Attach(PipedInputStream iss) - { - _ips = iss; - } + internal void Attach (PipedInputStream iss) + { + _ips = iss; + } - public override void Write(int b) - { - _ips.Write(b); - } + public override void Write (int b) + { + _ips.Write (b); + } - public override void Write(byte[] b, int offset, int len) - { - _ips.Write(b, offset, len); - } - } + public override void Write (byte[] b, int offset, int len) + { + _ips.Write (b, offset, len); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PrintWriter.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PrintWriter.cs index a492e5037..c366aa665 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PrintWriter.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/PrintWriter.cs @@ -5,233 +5,227 @@ using System.Text; namespace SharpCifs.Util.Sharpen { public class PrintWriter : TextWriter - { - TextWriter _writer; - private FileStream _stream; - - public PrintWriter(FilePath path) - { + { + TextWriter _writer; + private FileStream _stream; + + public PrintWriter (FilePath path) + { //Stream(string path) constructor deleted _stream = new FileStream(path, FileMode.Create, FileAccess.ReadWrite); - _writer = new StreamWriter(_stream); - } + _writer = new StreamWriter (_stream); + } - public PrintWriter(TextWriter other) - { - _writer = other; - } + public PrintWriter (TextWriter other) + { + _writer = other; + } - public override Encoding Encoding - { - get { return _writer.Encoding; } - } + public override Encoding Encoding { + get { return _writer.Encoding; } + } public void Close() // remove `override` { - //Stream.`Close` method deleted + //Stream.`Close` method deleted //_writer.Close (); _writer.Dispose(); _stream.Dispose(); } - - public override void Flush() - { - _writer.Flush(); - } - - public override IFormatProvider FormatProvider - { - get - { - return _writer.FormatProvider; - } - } - - public override string NewLine - { - get - { - return _writer.NewLine; - } - set - { - _writer.NewLine = value; - } - } - - public override void Write(char[] buffer, int index, int count) - { - _writer.Write(buffer, index, count); - } - - public override void Write(char[] buffer) - { - _writer.Write(buffer); - } - - public void Write(string format, object arg0, object arg1, object arg2) - { - _writer.Write(format, arg0, arg1, arg2); - } - - public override void Write(string format, object arg0, object arg1) - { - _writer.Write(format, arg0, arg1); - } - - public override void Write(string format, object arg0) - { - _writer.Write(format, arg0); - } - - public override void Write(string format, params object[] arg) - { - _writer.Write(format, arg); - } - - public override void WriteLine(char[] buffer, int index, int count) - { - _writer.WriteLine(buffer, index, count); - } - - public override void WriteLine(char[] buffer) - { - _writer.WriteLine(buffer); - } - - public void WriteLine(string format, object arg0, object arg1, object arg2) - { - _writer.WriteLine(format, arg0, arg1, arg2); - } - - public override void WriteLine(string format, object arg0, object arg1) - { - _writer.WriteLine(format, arg0, arg1); - } - - public override void WriteLine(string format, object arg0) - { - _writer.WriteLine(format, arg0); - } - - public override void WriteLine(string format, params object[] arg) - { - _writer.WriteLine(format, arg); - } - - public override void WriteLine(ulong value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(uint value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(string value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(float value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(object value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(long value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(int value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(double value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(decimal value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(char value) - { - _writer.WriteLine(value); - } - - public override void WriteLine(bool value) - { - _writer.WriteLine(value); - } - - public override void WriteLine() - { - _writer.WriteLine(); - } - - public override void Write(bool value) - { - _writer.Write(value); - } - - public override void Write(char value) - { - _writer.Write(value); - } - - public override void Write(decimal value) - { - _writer.Write(value); - } - - public override void Write(double value) - { - _writer.Write(value); - } - - public override void Write(int value) - { - _writer.Write(value); - } - - public override void Write(long value) - { - _writer.Write(value); - } - - public override void Write(object value) - { - _writer.Write(value); - } - - public override void Write(float value) - { - _writer.Write(value); - } - - public override void Write(string value) - { - _writer.Write(value); - } - - public override void Write(uint value) - { - _writer.Write(value); - } - - public override void Write(ulong value) - { - _writer.Write(value); - } - } + + public override void Flush () + { + _writer.Flush (); + } + + public override IFormatProvider FormatProvider { + get { + return _writer.FormatProvider; + } + } + + public override string NewLine { + get { + return _writer.NewLine; + } + set { + _writer.NewLine = value; + } + } + + public override void Write (char[] buffer, int index, int count) + { + _writer.Write (buffer, index, count); + } + + public override void Write (char[] buffer) + { + _writer.Write (buffer); + } + + public void Write (string format, object arg0, object arg1, object arg2) + { + _writer.Write (format, arg0, arg1, arg2); + } + + public override void Write (string format, object arg0, object arg1) + { + _writer.Write (format, arg0, arg1); + } + + public override void Write (string format, object arg0) + { + _writer.Write (format, arg0); + } + + public override void Write (string format, params object[] arg) + { + _writer.Write (format, arg); + } + + public override void WriteLine (char[] buffer, int index, int count) + { + _writer.WriteLine (buffer, index, count); + } + + public override void WriteLine (char[] buffer) + { + _writer.WriteLine (buffer); + } + + public void WriteLine (string format, object arg0, object arg1, object arg2) + { + _writer.WriteLine (format, arg0, arg1, arg2); + } + + public override void WriteLine (string format, object arg0, object arg1) + { + _writer.WriteLine (format, arg0, arg1); + } + + public override void WriteLine (string format, object arg0) + { + _writer.WriteLine (format, arg0); + } + + public override void WriteLine (string format, params object[] arg) + { + _writer.WriteLine (format, arg); + } + + public override void WriteLine (ulong value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (uint value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (string value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (float value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (object value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (long value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (int value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (double value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (decimal value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (char value) + { + _writer.WriteLine (value); + } + + public override void WriteLine (bool value) + { + _writer.WriteLine (value); + } + + public override void WriteLine () + { + _writer.WriteLine (); + } + + public override void Write (bool value) + { + _writer.Write (value); + } + + public override void Write (char value) + { + _writer.Write (value); + } + + public override void Write (decimal value) + { + _writer.Write (value); + } + + public override void Write (double value) + { + _writer.Write (value); + } + + public override void Write (int value) + { + _writer.Write (value); + } + + public override void Write (long value) + { + _writer.Write (value); + } + + public override void Write (object value) + { + _writer.Write (value); + } + + public override void Write (float value) + { + _writer.Write (value); + } + + public override void Write (string value) + { + _writer.Write (value); + } + + public override void Write (uint value) + { + _writer.Write (value); + } + + public override void Write (ulong value) + { + _writer.Write (value); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Properties.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Properties.cs index 8aad1a403..3d886ea87 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Properties.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Properties.cs @@ -6,76 +6,81 @@ namespace SharpCifs.Util.Sharpen { protected Hashtable _properties; - public Properties() { - this._properties = new Hashtable(); + _properties = new Hashtable(); } - public Properties(Properties defaultProp) : this() + public Properties(Properties defaultProp): this() { - this.PutAll(defaultProp._properties); + PutAll(defaultProp._properties); } public void PutAll(Hashtable properties) { foreach (var key in properties.Keys) { - this._properties.Put(key, properties[key]); + //_properties.Add(key, properties[key]); + _properties.Put(key, properties[key]); } } public void SetProperty(object key, object value) { - this._properties.Put(key, value); + //_properties.Add(key, value); + _properties.Put(key, value); } public object GetProperty(object key) { - return this._properties.Keys.Contains(key) - ? this._properties[key] - : null; + return _properties.Keys.Contains(key) ? _properties[key] : null; } public object GetProperty(object key, object def) { - return this._properties.Get(key) ?? def; + /*if (_properties.ContainsKey(key)) + { + return _properties[key]; + } + return def;*/ + object value = _properties.Get(key); + + return value ?? def; } public void Load(InputStream input) { - using (var reader = new StreamReader(input)) + StreamReader sr = new StreamReader(input); + while (!sr.EndOfStream) { - while (!reader.EndOfStream) - { - var line = reader.ReadLine(); - - if (string.IsNullOrEmpty(line)) - continue; + string line = sr.ReadLine(); - var tokens = line.Split('='); - - if (tokens.Length < 2) - continue; - - this._properties.Put(tokens[0], tokens[1]); + if (!string.IsNullOrEmpty(line)) + { + string[] tokens = line.Split('='); + //_properties.Add(tokens[0], tokens[1]); + _properties.Put(tokens[0], tokens[1]); } } } public void Store(OutputStream output) { - using (var writer = new StreamWriter(output)) + StreamWriter sw = new StreamWriter(output); + foreach (var key in _properties.Keys) { - foreach (var pair in this._properties) - writer.WriteLine($"{pair.Key}={pair.Value}"); + string line = string.Format("{0}={1}", key, _properties[key]); + sw.WriteLine(line); } } public void Store(TextWriter output) - { - foreach (var pair in this._properties) - output.WriteLine($"{pair.Key}={pair.Value}"); + { + foreach (var key in _properties.Keys) + { + string line = string.Format("{0}={1}", key, _properties[key]); + output.WriteLine(line); + } } } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/RandomAccessFile.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/RandomAccessFile.cs index 5d306b8f1..bf3596212 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/RandomAccessFile.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/RandomAccessFile.cs @@ -4,86 +4,84 @@ using System.IO; namespace SharpCifs.Util.Sharpen { public class RandomAccessFile - { - private FileStream _stream; + { + private FileStream _stream; - public RandomAccessFile(FilePath file, string mode) : this(file.GetPath(), mode) - { - } + public RandomAccessFile (FilePath file, string mode) : this(file.GetPath (), mode) + { + } - public RandomAccessFile(string file, string mode) - { - if (mode.IndexOf('w') != -1) - _stream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite); - else - _stream = new FileStream(file, FileMode.Open, FileAccess.Read); - } + public RandomAccessFile (string file, string mode) + { + if (mode.IndexOf ('w') != -1) + _stream = new FileStream (file, FileMode.OpenOrCreate, FileAccess.ReadWrite); + else + _stream = new FileStream (file, FileMode.Open, FileAccess.Read); + } - public void Close() - { + public void Close () + { //Stream.`Close` method deleted //_stream.Close (); _stream.Dispose(); } - public long GetFilePointer() - { - return _stream.Position; - } + public long GetFilePointer () + { + return _stream.Position; + } - public long Length() - { - return _stream.Length; - } + public long Length () + { + return _stream.Length; + } - public int Read(byte[] buffer) - { - int r = _stream.Read(buffer, 0, buffer.Length); - return r > 0 ? r : -1; - } + public int Read (byte[] buffer) + { + int r = _stream.Read (buffer, 0, buffer.Length); + return r > 0 ? r : -1; + } - public int Read(byte[] buffer, int start, int size) - { - return _stream.Read(buffer, start, size); - } + public int Read (byte[] buffer, int start, int size) + { + return _stream.Read (buffer, start, size); + } - public void ReadFully(byte[] buffer, int start, int size) - { - while (size > 0) - { - int num = _stream.Read(buffer, start, size); - if (num == 0) - { - throw new EofException(); - } - size -= num; - start += num; - } - } + public void ReadFully (byte[] buffer, int start, int size) + { + while (size > 0) { + int num = _stream.Read (buffer, start, size); + if (num == 0) { + throw new EofException (); + } + size -= num; + start += num; + } + } - public void Seek(long pos) - { - _stream.Position = pos; - } - - public void SetLength(long len) - { - _stream.SetLength(len); - } + public void Seek (long pos) + { + _stream.Position = pos; + } - public void Write(int value) - { - _stream.Write(BitConverter.GetBytes(value), 0, 4); - } + public void SetLength (long len) + { + _stream.SetLength (len); + } - public void Write(byte[] buffer) - { - _stream.Write(buffer, 0, buffer.Length); - } + public void Write (int value) + { + _stream.Write (BitConverter.GetBytes (value), 0, 4); + } + + public void Write (byte[] buffer) + { + _stream.Write (buffer, 0, buffer.Length); + } - public void Write(byte[] buffer, int start, int size) - { - _stream.Write(buffer, start, size); - } - } + public void Write (byte[] buffer, int start, int size) + { + _stream.Write (buffer, start, size); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ReentrantLock.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ReentrantLock.cs index a19f13fb9..aa34db9d0 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ReentrantLock.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ReentrantLock.cs @@ -3,20 +3,20 @@ using System.Threading; namespace SharpCifs.Util.Sharpen { internal class ReentrantLock - { - public void Lock() - { - Monitor.Enter(this); - } + { + public void Lock () + { + Monitor.Enter (this); + } - public bool TryLock() - { - return Monitor.TryEnter(this); - } + public bool TryLock () + { + return Monitor.TryEnter (this); + } - public void Unlock() - { - Monitor.Exit(this); - } - } + public void Unlock () + { + Monitor.Exit (this); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Reference.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Reference.cs index 5199fe32c..c7fbe9a48 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Reference.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Reference.cs @@ -1,7 +1,7 @@ namespace SharpCifs.Util.Sharpen { internal abstract class Reference<T> - { - public abstract T Get(); - } + { + public abstract T Get (); + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Runtime.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Runtime.cs index c15835ea4..74ff16b1b 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Runtime.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Runtime.cs @@ -8,208 +8,205 @@ using System.Threading; namespace SharpCifs.Util.Sharpen { - public class Runtime - { - private static Runtime _instance; - private List<ShutdownHook> _shutdownHooks = new List<ShutdownHook>(); - - internal void AddShutdownHook(IRunnable r) - { - ShutdownHook item = new ShutdownHook(); - item.Runnable = r; - _shutdownHooks.Add(item); - } - - internal int AvailableProcessors() - { - return Environment.ProcessorCount; - } - - public static long CurrentTimeMillis() - { - return DateTime.UtcNow.ToMillisecondsSinceEpoch(); - } - - static Hashtable _properties; - - public static Hashtable GetProperties() - { - if (_properties == null) - { - _properties = new Hashtable(); - _properties["jgit.fs.debug"] = "false"; - _properties["file.encoding"] = "UTF-8"; - if (Path.DirectorySeparatorChar != '\\') - _properties["os.name"] = "Unix"; - else - _properties["os.name"] = "Windows"; - } - return _properties; - } - - public static string GetProperty(string key) - { - if (GetProperties().Keys.Contains(key)) + public class Runtime + { + private static Runtime _instance; + private List<ShutdownHook> _shutdownHooks = new List<ShutdownHook> (); + + internal void AddShutdownHook (IRunnable r) + { + ShutdownHook item = new ShutdownHook (); + item.Runnable = r; + _shutdownHooks.Add (item); + } + + internal int AvailableProcessors () + { + return Environment.ProcessorCount; + } + + public static long CurrentTimeMillis () + { + return DateTime.UtcNow.ToMillisecondsSinceEpoch (); + } + + static Hashtable _properties; + + public static Hashtable GetProperties () + { + if (_properties == null) { + _properties = new Hashtable (); + _properties ["jgit.fs.debug"] = "false"; + _properties["file.encoding"] = "UTF-8"; + if (Path.DirectorySeparatorChar != '\\') + _properties ["os.name"] = "Unix"; + else + _properties ["os.name"] = "Windows"; + } + return _properties; + } + + public static string GetProperty (string key) + { + if (GetProperties().Keys.Contains(key)) { return ((string)GetProperties()[key]); } - return null; - } - - public static void SetProperty(string key, string value) - { - GetProperties()[key] = value; - } - - public static Runtime GetRuntime() - { - if (_instance == null) - { - _instance = new Runtime(); - } - return _instance; - } - - public static int IdentityHashCode(object ob) - { - return RuntimeHelpers.GetHashCode(ob); - } - - internal long MaxMemory() - { - return int.MaxValue; - } - - private class ShutdownHook - { - public IRunnable Runnable; - - ~ShutdownHook() - { - Runnable.Run(); - } - } - - public static void DeleteCharAt(StringBuilder sb, int index) - { - sb.Remove(index, 1); - } - - public static byte[] GetBytesForString(string str) - { - return Encoding.UTF8.GetBytes(str); - } - - public static byte[] GetBytesForString(string str, string encoding) - { - return Encoding.GetEncoding(encoding).GetBytes(str); - } - - public static FieldInfo[] GetDeclaredFields(Type t) - { + return null; + } + + public static void SetProperty (string key, string value) + { + GetProperties () [key] = value; + } + + public static Runtime GetRuntime () + { + if (_instance == null) { + _instance = new Runtime (); + } + return _instance; + } + + public static int IdentityHashCode (object ob) + { + return RuntimeHelpers.GetHashCode (ob); + } + + internal long MaxMemory () + { + return int.MaxValue; + } + + private class ShutdownHook + { + public IRunnable Runnable; + + ~ShutdownHook () + { + Runnable.Run (); + } + } + + public static void DeleteCharAt (StringBuilder sb, int index) + { + sb.Remove (index, 1); + } + + public static byte[] GetBytesForString (string str) + { + return Encoding.UTF8.GetBytes (str); + } + + public static byte[] GetBytesForString (string str, string encoding) + { + return Encoding.GetEncoding (encoding).GetBytes (str); + } + + public static FieldInfo[] GetDeclaredFields (Type t) + { throw new NotImplementedException("Type.GetFields not found on .NetStandard"); - //return t.GetFields (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); - } - - public static void NotifyAll(object ob) - { - Monitor.PulseAll(ob); - } - - public static void Notify(object obj) - { - Monitor.Pulse(obj); - } - - public static void PrintStackTrace(Exception ex) - { - Console.WriteLine(ex); - } - - public static void PrintStackTrace(Exception ex, TextWriter tw) - { - tw.WriteLine(ex); - } - - public static string Substring(string str, int index) - { - return str.Substring(index); - } - - public static string Substring(string str, int index, int endIndex) - { - return str.Substring(index, endIndex - index); - } - - public static void Wait(object ob) - { - Monitor.Wait(ob); - } - - public static bool Wait(object ob, long milis) - { - return Monitor.Wait(ob, (int)milis); - } - - public static Type GetType(string name) - { - throw new NotImplementedException( - "AppDomain.CurrentDomain.GetAssemblies not found on .NetStandard"); - //foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies ()) { - // Type t = a.GetType (name); - // if (t != null) - // return t; - //} + //return t.GetFields (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + } + + public static void NotifyAll (object ob) + { + Monitor.PulseAll (ob); + } + + public static void Notify(object obj) + { + Monitor.Pulse(obj); + } + + public static void PrintStackTrace (Exception ex) + { + Console.WriteLine (ex); + } + + public static void PrintStackTrace (Exception ex, TextWriter tw) + { + tw.WriteLine (ex); + } + + public static string Substring (string str, int index) + { + return str.Substring (index); + } + + public static string Substring (string str, int index, int endIndex) + { + return str.Substring (index, endIndex - index); + } + + public static void Wait (object ob) + { + Monitor.Wait (ob); + } + + public static bool Wait (object ob, long milis) + { + return Monitor.Wait (ob, (int)milis); + } + + public static Type GetType (string name) + { + throw new NotImplementedException("AppDomain.CurrentDomain.GetAssemblies not found on .NetStandard"); + //foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies ()) { + // Type t = a.GetType (name); + // if (t != null) + // return t; + //} //never used - //throw new InvalidOperationException ("Type not found: " + name); - } - - public static void SetCharAt(StringBuilder sb, int index, char c) - { - sb[index] = c; - } - - public static bool EqualsIgnoreCase(string s1, string s2) - { - return s1.Equals(s2, StringComparison.CurrentCultureIgnoreCase); - } - - internal static long NanoTime() - { - return Environment.TickCount * 1000 * 1000; - } - - internal static int CompareOrdinal(string s1, string s2) - { - return string.CompareOrdinal(s1, s2); - } - - public static string GetStringForBytes(byte[] chars) - { - return Encoding.UTF8.GetString(chars, 0, chars.Length); - } - - public static string GetStringForBytes(byte[] chars, string encoding) - { - return GetEncoding(encoding).GetString(chars, 0, chars.Length); - } - - public static string GetStringForBytes(byte[] chars, int start, int len) - { - return Encoding.UTF8.GetString(chars, start, len); - } - - public static string GetStringForBytes(byte[] chars, int start, int len, string encoding) - { - return GetEncoding(encoding).Decode(chars, start, len); - } - - public static Encoding GetEncoding(string name) - { - Encoding e = Encoding.GetEncoding(name.Replace('_', '-')); - if (e is UTF8Encoding) - return new UTF8Encoding(false, true); - return e; - } - } + //throw new InvalidOperationException ("Type not found: " + name); + } + + public static void SetCharAt (StringBuilder sb, int index, char c) + { + sb [index] = c; + } + + public static bool EqualsIgnoreCase (string s1, string s2) + { + return s1.Equals (s2, StringComparison.CurrentCultureIgnoreCase); + } + + internal static long NanoTime () + { + return Environment.TickCount * 1000 * 1000; + } + + internal static int CompareOrdinal (string s1, string s2) + { + return string.CompareOrdinal (s1, s2); + } + + public static string GetStringForBytes (byte[] chars) + { + return Encoding.UTF8.GetString (chars, 0, chars.Length); + } + + public static string GetStringForBytes (byte[] chars, string encoding) + { + return GetEncoding (encoding).GetString (chars, 0, chars.Length); + } + + public static string GetStringForBytes (byte[] chars, int start, int len) + { + return Encoding.UTF8.GetString (chars, start, len); + } + + public static string GetStringForBytes (byte[] chars, int start, int len, string encoding) + { + return GetEncoding (encoding).Decode (chars, start, len); + } + + public static Encoding GetEncoding (string name) + { + Encoding e = Encoding.GetEncoding (name.Replace ('_','-')); + if (e is UTF8Encoding) + return new UTF8Encoding (false, true); + return e; + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SimpleDateFormat.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SimpleDateFormat.cs index fb64c133f..35334b4f2 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SimpleDateFormat.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SimpleDateFormat.cs @@ -4,63 +4,59 @@ using System.Globalization; namespace SharpCifs.Util.Sharpen { public class SimpleDateFormat : DateFormat - { - string _format; - - CultureInfo Culture - { - get; set; - } - - bool Lenient - { - get; set; - } - - public SimpleDateFormat() : this("g") - { - } - - public SimpleDateFormat(string format) : this(format, CultureInfo.CurrentCulture) - { - } - - public SimpleDateFormat(string format, CultureInfo c) - { - Culture = c; - this._format = format.Replace("EEE", "ddd"); - this._format = this._format.Replace("Z", "zzz"); - SetTimeZone(TimeZoneInfo.Local); - } - - public bool IsLenient() - { - return Lenient; - } - - public void SetLenient(bool lenient) - { - Lenient = lenient; - } - - public override DateTime Parse(string value) - { - if (IsLenient()) - return DateTime.Parse(value); - return DateTime.ParseExact(value, _format, Culture); - } - - public override string Format(DateTime date) - { - date += GetTimeZone().BaseUtcOffset; - return date.ToString(_format); - } - - public string Format(long date) - { - return Extensions.MillisToDateTimeOffset(date, (int)GetTimeZone().BaseUtcOffset - .TotalMinutes) - .DateTime.ToString(_format); - } - } + { + string _format; + + CultureInfo Culture { + get; set; + } + + bool Lenient { + get; set; + } + + public SimpleDateFormat (): this ("g") + { + } + + public SimpleDateFormat (string format): this (format, CultureInfo.CurrentCulture) + { + } + + public SimpleDateFormat (string format, CultureInfo c) + { + Culture = c; + this._format = format.Replace ("EEE", "ddd"); + this._format = this._format.Replace ("Z", "zzz"); + SetTimeZone (TimeZoneInfo.Local); + } + + public bool IsLenient () + { + return Lenient; + } + + public void SetLenient (bool lenient) + { + Lenient = lenient; + } + + public override DateTime Parse (string value) + { + if (IsLenient ()) + return DateTime.Parse (value); + return DateTime.ParseExact (value, _format, Culture); + } + + public override string Format (DateTime date) + { + date += GetTimeZone().BaseUtcOffset; + return date.ToString (_format); + } + + public string Format (long date) + { + return Extensions.MillisToDateTimeOffset (date, (int)GetTimeZone ().BaseUtcOffset.TotalMinutes).DateTime.ToString (_format); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SocketEx.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SocketEx.cs index 88aa9e4e6..4d0651949 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SocketEx.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SocketEx.cs @@ -23,7 +23,7 @@ namespace SharpCifs.Util.Sharpen { public class SocketEx : Socket { - private int _soTimeOut = -1; + private int _soTimeOut = -1; public int SoTimeOut { @@ -46,9 +46,7 @@ namespace SharpCifs.Util.Sharpen } } - public SocketEx(AddressFamily addressFamily, - SocketType socketType, - ProtocolType protocolType) + public SocketEx(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType) : base(addressFamily, socketType, protocolType) { diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SynchronizedList.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SynchronizedList.cs index 4f3f41e7e..c105a8bab 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SynchronizedList.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/SynchronizedList.cs @@ -4,120 +4,103 @@ using System.Collections.Generic; namespace SharpCifs.Util.Sharpen { internal class SynchronizedList<T> : IList<T> - { - private IList<T> _list; + { + private IList<T> _list; - public SynchronizedList(IList<T> list) - { - this._list = list; - } + public SynchronizedList (IList<T> list) + { + this._list = list; + } - public int IndexOf(T item) - { - lock (_list) - { - return _list.IndexOf(item); - } - } + public int IndexOf (T item) + { + lock (_list) { + return _list.IndexOf (item); + } + } - public void Insert(int index, T item) - { - lock (_list) - { - _list.Insert(index, item); - } - } + public void Insert (int index, T item) + { + lock (_list) { + _list.Insert (index, item); + } + } - public void RemoveAt(int index) - { - lock (_list) - { - _list.RemoveAt(index); - } - } + public void RemoveAt (int index) + { + lock (_list) { + _list.RemoveAt (index); + } + } - void ICollection<T>.Add(T item) - { - lock (_list) - { - _list.Add(item); - } - } + void ICollection<T>.Add (T item) + { + lock (_list) { + _list.Add (item); + } + } - void ICollection<T>.Clear() - { - lock (_list) - { - _list.Clear(); - } - } + void ICollection<T>.Clear () + { + lock (_list) { + _list.Clear (); + } + } - bool ICollection<T>.Contains(T item) - { - lock (_list) - { - return _list.Contains(item); - } - } + bool ICollection<T>.Contains (T item) + { + lock (_list) { + return _list.Contains (item); + } + } - void ICollection<T>.CopyTo(T[] array, int arrayIndex) - { - lock (_list) - { - _list.CopyTo(array, arrayIndex); - } - } + void ICollection<T>.CopyTo (T[] array, int arrayIndex) + { + lock (_list) { + _list.CopyTo (array, arrayIndex); + } + } - bool ICollection<T>.Remove(T item) - { - lock (_list) - { - return _list.Remove(item); - } - } + bool ICollection<T>.Remove (T item) + { + lock (_list) { + return _list.Remove (item); + } + } - IEnumerator<T> IEnumerable<T>.GetEnumerator() - { - return _list.GetEnumerator(); - } + IEnumerator<T> IEnumerable<T>.GetEnumerator () + { + return _list.GetEnumerator (); + } - IEnumerator IEnumerable.GetEnumerator() - { - return _list.GetEnumerator(); - } + IEnumerator IEnumerable.GetEnumerator () + { + return _list.GetEnumerator (); + } - public T this[int index] - { - get - { - lock (_list) - { - return _list[index]; - } - } - set - { - lock (_list) - { - _list[index] = value; - } - } - } + public T this[int index] { + get { + lock (_list) { + return _list[index]; + } + } + set { + lock (_list) { + _list[index] = value; + } + } + } - int ICollection<T>.Count - { - get - { - lock (_list) - { - return _list.Count; - } - } - } + int ICollection<T>.Count { + get { + lock (_list) { + return _list.Count; + } + } + } - bool ICollection<T>.IsReadOnly - { - get { return _list.IsReadOnly; } - } - } + bool ICollection<T>.IsReadOnly { + get { return _list.IsReadOnly; } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Thread.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Thread.cs index 9d874a0fa..59f3df469 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Thread.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/Thread.cs @@ -1,314 +1,193 @@ -using SharpCifs.Util.DbsHelper; using System; using System.Collections.Generic; -using System.Threading; namespace SharpCifs.Util.Sharpen { public class Thread : IRunnable - { - private static ThreadGroup DefaultGroup = new ThreadGroup(); - - [ThreadStatic] - private static Thread WrapperThread; - - public static Thread CurrentThread() - { - if (Thread.WrapperThread == null) - { - Thread.WrapperThread = new Thread(System.Environment.CurrentManagedThreadId); - } - - return Thread.WrapperThread; - } - - - public CancellationTokenSource Canceller => this._canceller; - - public bool IsCanceled - { - get - { - if (this._canceller?.IsCancellationRequested == true - && !this._isCanceled) - { - this._isCanceled = true; - } - - return this._isCanceled; - } - } - - private IRunnable _runnable; - private ThreadGroup _tgroup; - private System.Threading.Tasks.Task _task = null; - private CancellationTokenSource _canceller = null; - - private string _name = string.Empty; - private bool _isBackground = true; - private bool _interrupted = false; - private int? _id = null; - private bool _isRunning = false; - private bool _isCanceled = false; - - - - public Thread() : this(null, null, null) - { - } - - - public Thread(string name) : this(null, null, name) - { - } - - - public Thread(ThreadGroup grp, string name) : this(null, grp, name) - { - } - - - public Thread(IRunnable runnable) : this(runnable, null, null) - { - } - - - private Thread(IRunnable runnable, ThreadGroup grp, string name) - { - this._runnable = runnable ?? this; - this._tgroup = grp ?? DefaultGroup; - this._tgroup.Add(this); - - if (name != null) - { - this._name = name; - } - } - - - private Thread(int threadId) - { - this._id = threadId; - - this._tgroup = DefaultGroup; - this._tgroup.Add(this); - } - - - public string GetName() - { - return this._name; - } - - - public ThreadGroup GetThreadGroup() - { - return this._tgroup; - } - - - public static void Yield() - { - } - - - public void Interrupt() - { - this._interrupted = true; - this._canceller?.Cancel(true); - } - - - public static bool Interrupted() - { - if (Thread.WrapperThread == null) - { - return false; - } - - Thread wrapperThread = Thread.WrapperThread; - lock (wrapperThread) - { - bool interrupted = Thread.WrapperThread._interrupted; - Thread.WrapperThread._interrupted = false; - return interrupted; - } - } - - - public bool IsAlive() - { - if (this._task == null) - return true; //実行されていない - - //Taskが存在し、続行中のときtrue - return (!this._task.IsCanceled - && !this._task.IsFaulted - && !this._task.IsCompleted); - } - - - public void Join() - { - this._task?.Wait(); - } - - - public void Join(long timeout) - { - this._task?.Wait((int) timeout); - } - - - public virtual void Run() - { - } - - - public void SetDaemon(bool daemon) - { - this._isBackground = daemon; - } - - - public void SetName(string name) - { - this._name = name; - } - - - public static void Sleep(long milis) - { - System.Threading.Tasks.Task.Delay((int) milis).Wait(); - } - - - public void Start(bool isSynced = false) - { - if (this._isRunning) - throw new InvalidOperationException("Thread Already started."); - - this._canceller = new CancellationTokenSource(); - - this._task = System.Threading.Tasks.Task.Run(() => - { - Thread.WrapperThread = this; - this._id = System.Environment.CurrentManagedThreadId; - - //Log.Out("Thread.Start - Task Start"); - this._isRunning = true; - - try - { - this._runnable.Run(); - //Log.Out("Thread.Start - Task Normaly End"); - } - catch (Exception exception) - { - //Log.Out("Thread.Start - Task Error End"); - Console.WriteLine(exception); - } - finally - { - this._isRunning = false; - - this._tgroup?.Remove(this); - - this._canceller?.Dispose(); - this._canceller = null; - - //Log.Out("Thread.Start - Task Close Completed"); - } - }, this._canceller.Token); - - //同期的に実行するとき、動作中フラグONまで待つ。 - if (isSynced) - while (!this._isRunning) - System.Threading.Tasks.Task.Delay(300).GetAwaiter().GetResult(); - } - - - public void Cancel(bool isSynced = false) - { - //Log.Out("Thread.Cancel"); - - this._isCanceled = true; - this._canceller?.Cancel(true); - - //同期的に実行するとき、動作中フラグOFFまで待つ。 - if (isSynced) - while (this._isRunning) - System.Threading.Tasks.Task.Delay(300).GetAwaiter().GetResult(); - } - - - public bool Equals(Thread thread) - { - //渡し値スレッドがnullのとき、合致しない - if (thread == null) - return false; - - //自身か渡し値スレッドの、スレッドIDが取得出来ていない(=スレッド未生成) - // →合致しない - if (this._id == null - || thread._id == null) - return false; - - return (this._id == thread._id); - } - - - public void Dispose() - { - //Log.Out("Thread.Dispose"); - - this._runnable = null; - this._tgroup = null; - this._task = null; - this._canceller?.Dispose(); - this._canceller = null; - this._name = null; - this._isRunning = false; - this._id = null; - } - } - - public class ThreadGroup - { - private List<Thread> _threads = new List<Thread>(); - - public ThreadGroup() - { - } - - public ThreadGroup(string name) - { - } - - internal void Add(Thread t) - { - lock (_threads) - { - _threads.Add(t); - } - } - - internal void Remove(Thread t) - { - lock (_threads) - { - _threads.Remove(t); + { + private static ThreadGroup _defaultGroup = new ThreadGroup (); + private bool _interrupted; + private IRunnable _runnable; + private ThreadGroup _tgroup; + private System.Threading.Thread _thread; + + [ThreadStatic] + private static Thread _wrapperThread; + + public Thread () : this(null, null, null) + { + } + + public Thread (string name) : this (null, null, name) + { + } + + public Thread (ThreadGroup grp, string name) : this (null, grp, name) + { + } + + public Thread (IRunnable runnable): this (runnable, null, null) + { + } + + Thread (IRunnable runnable, ThreadGroup grp, string name) + { + _thread = new System.Threading.Thread (InternalRun); + + this._runnable = runnable ?? this; + _tgroup = grp ?? _defaultGroup; + _tgroup.Add (this); + if (name != null) + _thread.Name = name; + } + + private Thread (System.Threading.Thread t) + { + _thread = t; + _tgroup = _defaultGroup; + _tgroup.Add (this); + } + + public static Thread CurrentThread () + { + if (_wrapperThread == null) { + _wrapperThread = new Thread (System.Threading.Thread.CurrentThread); + } + return _wrapperThread; + } + + public string GetName () + { + return _thread.Name; + } + + public ThreadGroup GetThreadGroup () + { + return _tgroup; + } + + private void InternalRun () + { + _wrapperThread = this; + try { + _runnable.Run (); + } catch (Exception exception) { + Console.WriteLine (exception); + } finally { + _tgroup.Remove (this); + } + } + + public static void Yield () + { + } + + public void Interrupt () + { + lock (_thread) { + _interrupted = true; + //thread.Interrupt (); + + //TODO: implement CancellationToken + //_thread.Abort(); + throw new NotImplementedException("implement CancellationToken for thread"); } } - public int Enumerate(Thread[] array) - { - lock (_threads) - { - int count = Math.Min(array.Length, _threads.Count); - _threads.CopyTo(0, array, 0, count); - return count; - } - } - } + public static bool Interrupted () + { + if (Thread._wrapperThread == null) { + return false; + } + Thread wrapperThread = Thread._wrapperThread; + lock (wrapperThread) { + bool interrupted = Thread._wrapperThread._interrupted; + Thread._wrapperThread._interrupted = false; + return interrupted; + } + } + + public bool IsAlive () + { + return _thread.IsAlive; + } + + public void Join () + { + _thread.Join (); + } + + public void Join (long timeout) + { + _thread.Join ((int)timeout); + } + + public virtual void Run () + { + } + + public void SetDaemon (bool daemon) + { + _thread.IsBackground = daemon; + } + + public void SetName (string name) + { + _thread.Name = name; + } + + public static void Sleep (long milis) + { + System.Threading.Thread.Sleep ((int)milis); + } + + public void Start () + { + _thread.Start (); + } + + public void Abort () + { + //TODO: implement CancellationToken + //_thread.Abort (); + throw new NotImplementedException("implement CancellationToken for thread"); + } + + } + + public class ThreadGroup + { + private List<Thread> _threads = new List<Thread> (); + + public ThreadGroup() + { + } + + public ThreadGroup (string name) + { + } + + internal void Add (Thread t) + { + lock (_threads) { + _threads.Add (t); + } + } + + internal void Remove (Thread t) + { + lock (_threads) { + _threads.Remove (t); + } + } + + public int Enumerate (Thread[] array) + { + lock (_threads) { + int count = Math.Min (array.Length, _threads.Count); + _threads.CopyTo (0, array, 0, count); + return count; + } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ThreadFactory.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ThreadFactory.cs index 539ebedcf..7276c06a2 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ThreadFactory.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ThreadFactory.cs @@ -1,16 +1,13 @@ -using System.Threading.Tasks; - namespace SharpCifs.Util.Sharpen { - internal class ThreadFactory - { - public Thread NewThread(IRunnable r) - { - Thread t = new Thread(r); - t.SetDaemon(true); - t.Start(true); - - return t; - } - } + internal class ThreadFactory + { + public Thread NewThread (IRunnable r) + { + Thread t = new Thread (r); + t.SetDaemon (true); + t.Start (); + return t; + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ThreadPoolExecutor.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ThreadPoolExecutor.cs index c8b2179b8..ef19b8bff 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ThreadPoolExecutor.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/ThreadPoolExecutor.cs @@ -4,180 +4,163 @@ using ST = System.Threading; namespace SharpCifs.Util.Sharpen { - class ThreadPoolExecutor - { - ThreadFactory _tf; - int _corePoolSize; - int _maxPoolSize; - List<Thread> _pool = new List<Thread>(); - int _runningThreads; - int _freeThreads; - bool _shutdown; - Queue<IRunnable> _pendingTasks = new Queue<IRunnable>(); - - public ThreadPoolExecutor(int corePoolSize, ThreadFactory factory) - { - this._corePoolSize = corePoolSize; - _maxPoolSize = corePoolSize; - _tf = factory; - } - - public void SetMaximumPoolSize(int size) - { - _maxPoolSize = size; - } - - public bool IsShutdown() - { - return _shutdown; - } - - public virtual bool IsTerminated() - { - lock (_pendingTasks) - { - return _shutdown && _pendingTasks.Count == 0; - } - } - - public virtual bool IsTerminating() - { - lock (_pendingTasks) - { - return _shutdown && !IsTerminated(); - } - } - - public int GetCorePoolSize() - { - return _corePoolSize; - } - - public void PrestartAllCoreThreads() - { - lock (_pendingTasks) - { - while (_runningThreads < _corePoolSize) - StartPoolThread(); - } - } - - public void SetThreadFactory(ThreadFactory f) - { - _tf = f; - } - - public void Execute(IRunnable r) - { - InternalExecute(r, true); - } - - internal void InternalExecute(IRunnable r, bool checkShutdown) - { - lock (_pendingTasks) - { - if (_shutdown && checkShutdown) - throw new InvalidOperationException(); - if (_runningThreads < _corePoolSize) - { - StartPoolThread(); - } - else if (_freeThreads > 0) - { - _freeThreads--; - } - else if (_runningThreads < _maxPoolSize) - { - StartPoolThread(); - } - _pendingTasks.Enqueue(r); - ST.Monitor.PulseAll(_pendingTasks); - } - } - - void StartPoolThread() - { - _runningThreads++; - _pool.Add(_tf.NewThread(new RunnableAction(RunPoolThread))); - } - - public void RunPoolThread() - { - while (!IsTerminated()) - { - try - { - IRunnable r = null; - lock (_pendingTasks) - { - _freeThreads++; - while (!IsTerminated() && _pendingTasks.Count == 0) - ST.Monitor.Wait(_pendingTasks); - if (IsTerminated()) - break; - r = _pendingTasks.Dequeue(); - } - if (r != null) - r.Run(); - } + class ThreadPoolExecutor + { + ThreadFactory _tf; + int _corePoolSize; + int _maxPoolSize; + List<Thread> _pool = new List<Thread> (); + int _runningThreads; + int _freeThreads; + bool _shutdown; + Queue<IRunnable> _pendingTasks = new Queue<IRunnable> (); + + public ThreadPoolExecutor (int corePoolSize, ThreadFactory factory) + { + this._corePoolSize = corePoolSize; + _maxPoolSize = corePoolSize; + _tf = factory; + } + + public void SetMaximumPoolSize (int size) + { + _maxPoolSize = size; + } + + public bool IsShutdown () + { + return _shutdown; + } + + public virtual bool IsTerminated () + { + lock (_pendingTasks) { + return _shutdown && _pendingTasks.Count == 0; + } + } + + public virtual bool IsTerminating () + { + lock (_pendingTasks) { + return _shutdown && !IsTerminated (); + } + } + + public int GetCorePoolSize () + { + return _corePoolSize; + } + + public void PrestartAllCoreThreads () + { + lock (_pendingTasks) { + while (_runningThreads < _corePoolSize) + StartPoolThread (); + } + } + + public void SetThreadFactory (ThreadFactory f) + { + _tf = f; + } + + public void Execute (IRunnable r) + { + InternalExecute (r, true); + } + + internal void InternalExecute (IRunnable r, bool checkShutdown) + { + lock (_pendingTasks) { + if (_shutdown && checkShutdown) + throw new InvalidOperationException (); + if (_runningThreads < _corePoolSize) { + StartPoolThread (); + } + else if (_freeThreads > 0) { + _freeThreads--; + } + else if (_runningThreads < _maxPoolSize) { + StartPoolThread (); + } + _pendingTasks.Enqueue (r); + ST.Monitor.PulseAll (_pendingTasks); + } + } + + void StartPoolThread () + { + _runningThreads++; + _pool.Add (_tf.NewThread (new RunnableAction (RunPoolThread))); + } + + public void RunPoolThread () + { + while (!IsTerminated ()) { + try { + IRunnable r = null; + lock (_pendingTasks) { + _freeThreads++; + while (!IsTerminated () && _pendingTasks.Count == 0) + ST.Monitor.Wait (_pendingTasks); + if (IsTerminated ()) + break; + r = _pendingTasks.Dequeue (); + } + if (r != null) + r.Run (); + } //supress all errors, anyway - //catch (ST.ThreadAbortException) { - // // Do not catch a thread abort. If we've been aborted just let the thread die. - // // Currently reseting an abort which was issued because the appdomain is being - // // torn down results in the process living forever and consuming 100% cpu time. - // return; - //} - catch - { - } - } - } - - public virtual void Shutdown() - { - lock (_pendingTasks) - { - _shutdown = true; - ST.Monitor.PulseAll(_pendingTasks); - } - } - - public virtual List<IRunnable> ShutdownNow() - { - lock (_pendingTasks) - { - _shutdown = true; - foreach (var t in _pool) - { - try - { - t.Cancel(true); - t.Dispose(); - } - catch { } - } - _pool.Clear(); - _freeThreads = 0; - _runningThreads = 0; - var res = new List<IRunnable>(_pendingTasks); - _pendingTasks.Clear(); - return res; - } - } - } - - class RunnableAction : IRunnable - { - Action _action; - - public RunnableAction(Action a) - { - _action = a; - } - - public void Run() - { - _action(); - } - } + //catch (ST.ThreadAbortException) { + // // Do not catch a thread abort. If we've been aborted just let the thread die. + // // Currently reseting an abort which was issued because the appdomain is being + // // torn down results in the process living forever and consuming 100% cpu time. + // return; + //} + catch { + } + } + } + + public virtual void Shutdown () + { + lock (_pendingTasks) { + _shutdown = true; + ST.Monitor.PulseAll (_pendingTasks); + } + } + + public virtual List<IRunnable> ShutdownNow () + { + lock (_pendingTasks) { + _shutdown = true; + foreach (var t in _pool) { + try { + t.Abort (); + } catch {} + } + _pool.Clear (); + _freeThreads = 0; + _runningThreads = 0; + var res = new List<IRunnable> (_pendingTasks); + _pendingTasks.Clear (); + return res; + } + } + } + + class RunnableAction: IRunnable + { + Action _action; + + public RunnableAction (Action a) + { + _action = a; + } + + public void Run () + { + _action (); + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs index 6134ea89f..ef2993fa6 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Sharpen/WrappedSystemStream.cs @@ -4,153 +4,136 @@ using System.IO; namespace SharpCifs.Util.Sharpen { internal class WrappedSystemStream : Stream - { - private InputStream _ist; - private OutputStream _ost; - int _position; - int _markedPosition; - - public WrappedSystemStream(InputStream ist) - { - this._ist = ist; - } - - public WrappedSystemStream(OutputStream ost) - { - this._ost = ost; - } - - public InputStream InputStream - { - get { return _ist; } - } - - public OutputStream OutputStream - { - get { return _ost; } - } + { + private InputStream _ist; + private OutputStream _ost; + int _position; + int _markedPosition; + + public WrappedSystemStream (InputStream ist) + { + this._ist = ist; + } + + public WrappedSystemStream (OutputStream ost) + { + this._ost = ost; + } + + public InputStream InputStream { + get { return _ist; } + } + + public OutputStream OutputStream { + get { return _ost; } + } public void Close() //remove `override` { - if (_ist != null) - { + if (_ist != null) { //Stream.`Close` method deleted - //_ist.Close (); + //_ist.Close (); _ist.Dispose(); - } - if (_ost != null) - { + } + if (_ost != null) { //Stream.`Close` method deleted - //_ost.Close (); + //_ost.Close (); _ost.Dispose(); - } - } - - public override void Flush() - { - _ost.Flush(); - } - - public override int Read(byte[] buffer, int offset, int count) - { - int res = _ist.Read(buffer, offset, count); - if (res != -1) - { - _position += res; - return res; - } - return 0; - } - - public override int ReadByte() - { - int res = _ist.Read(); - if (res != -1) - _position++; - return res; - } - - public override long Seek(long offset, SeekOrigin origin) - { - if (origin == SeekOrigin.Begin) - Position = offset; - else if (origin == SeekOrigin.Current) - Position = Position + offset; - else if (origin == SeekOrigin.End) - Position = Length + offset; - return Position; - } - - public override void SetLength(long value) - { - throw new NotSupportedException(); - } - - public override void Write(byte[] buffer, int offset, int count) - { - _ost.Write(buffer, offset, count); - _position += count; - } - - public override void WriteByte(byte value) - { - _ost.Write(value); - _position++; - } - - public override bool CanRead - { - get { return (_ist != null); } - } - - public override bool CanSeek - { - get { return true; } - } - - public override bool CanWrite - { - get { return (_ost != null); } - } - - public override long Length - { - get { return _ist.Length; } - } - - internal void OnMark(int nb) - { - _markedPosition = _position; - _ist.Mark(nb); - } - - public override long Position - { - get - { - if (_ist != null && _ist.CanSeek()) - return _ist.Position; - return _position; - } - set - { - if (value == _position) - return; - - if (value == _markedPosition - && _ist.MarkSupported()) - { - _ist.Reset(); - } - else if (_ist != null && _ist.CanSeek()) - { - _ist.Position = value; - } - else - { - throw new NotSupportedException(); - } - } - } - } + } + } + + public override void Flush () + { + _ost.Flush (); + } + + public override int Read (byte[] buffer, int offset, int count) + { + int res = _ist.Read (buffer, offset, count); + if (res != -1) { + _position += res; + return res; + } + return 0; + } + + public override int ReadByte () + { + int res = _ist.Read (); + if (res != -1) + _position++; + return res; + } + + public override long Seek (long offset, SeekOrigin origin) + { + if (origin == SeekOrigin.Begin) + Position = offset; + else if (origin == SeekOrigin.Current) + Position = Position + offset; + else if (origin == SeekOrigin.End) + Position = Length + offset; + return Position; + } + + public override void SetLength (long value) + { + throw new NotSupportedException (); + } + + public override void Write (byte[] buffer, int offset, int count) + { + _ost.Write (buffer, offset, count); + _position += count; + } + + public override void WriteByte (byte value) + { + _ost.Write (value); + _position++; + } + + public override bool CanRead { + get { return (_ist != null); } + } + + public override bool CanSeek { + get { return true; } + } + + public override bool CanWrite { + get { return (_ost != null); } + } + + public override long Length { + get { return _ist.Length; } + } + + internal void OnMark (int nb) + { + _markedPosition = _position; + _ist.Mark (nb); + } + + public override long Position { + get + { + if (_ist != null && _ist.CanSeek ()) + return _ist.Position; + return _position; + } + set + { + if (value == _position) + return; + if (value == _markedPosition) + _ist.Reset (); + else if (_ist != null && _ist.CanSeek ()) { + _ist.Position = value; + } + else + throw new NotSupportedException (); + } + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Request.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Request.cs index 50ae292bb..6e0c3fc7b 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Request.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Request.cs @@ -16,7 +16,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA namespace SharpCifs.Util.Transport { - public interface IRequest - { - } + public interface IRequest + { + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Response.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Response.cs index ceb504817..702fea918 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Response.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Response.cs @@ -16,10 +16,10 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA namespace SharpCifs.Util.Transport { - public abstract class Response - { - public long Expiration; + public abstract class Response + { + public long Expiration; - public bool IsReceived; - } + public bool IsReceived; + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Transport.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Transport.cs index 7f7882407..b02936ca6 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Transport.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/Transport.cs @@ -18,303 +18,275 @@ using System; using System.IO; using SharpCifs.Smb; using SharpCifs.Util.Sharpen; -using System.Threading.Tasks; namespace SharpCifs.Util.Transport { - /// <summary> - /// This class simplifies communication for protocols that support - /// multiplexing requests. - /// </summary> - /// <remarks> - /// This class simplifies communication for protocols that support - /// multiplexing requests. It encapsulates a stream and some protocol - /// knowledge (provided by a concrete subclass) so that connecting, - /// disconnecting, sending, and receiving can be syncronized - /// properly. Apparatus is provided to send and receive requests - /// concurrently. - /// </remarks> - public abstract class Transport : IRunnable - { - internal static int Id; - - //internal static LogStream log = LogStream.GetInstance(); - - public LogStream Log - { - get - { - return LogStream.GetInstance(); - } - } - - /// <exception cref="System.IO.IOException"></exception> - public static int Readn(InputStream @in, byte[] b, int off, int len) - { - int i = 0; - int n = -5; - while (i < len) - { - n = @in.Read(b, off + i, len - i); - if (n <= 0) - { - break; - } - i += n; - } - return i; - } - - internal int State; - - internal string Name = "Transport" + Id++; - - internal Thread Thread; - - internal TransportException Te; - - protected internal Hashtable ResponseMap = new Hashtable(); - - /// <exception cref="System.IO.IOException"></exception> - protected internal abstract void MakeKey(ServerMessageBlock request); - - /// <exception cref="System.IO.IOException"></exception> - protected internal abstract ServerMessageBlock PeekKey(); - - /// <exception cref="System.IO.IOException"></exception> + /// <summary> + /// This class simplifies communication for protocols that support + /// multiplexing requests. + /// </summary> + /// <remarks> + /// This class simplifies communication for protocols that support + /// multiplexing requests. It encapsulates a stream and some protocol + /// knowledge (provided by a concrete subclass) so that connecting, + /// disconnecting, sending, and receiving can be syncronized + /// properly. Apparatus is provided to send and receive requests + /// concurrently. + /// </remarks> + public abstract class Transport : IRunnable + { + internal static int Id; + + //internal static LogStream log = LogStream.GetInstance(); + + public LogStream Log + { + get + { + return LogStream.GetInstance(); + } + } + + /// <exception cref="System.IO.IOException"></exception> + public static int Readn(InputStream @in, byte[] b, int off, int len) + { + int i = 0; + int n = -5; + while (i < len) + { + n = @in.Read(b, off + i, len - i); + if (n <= 0) + { + break; + } + i += n; + } + return i; + } + + internal int State; + + internal string Name = "Transport" + Id++; + + internal Thread Thread; + + internal TransportException Te; + + protected internal Hashtable ResponseMap = new Hashtable(); + + /// <exception cref="System.IO.IOException"></exception> + protected internal abstract void MakeKey(ServerMessageBlock request); + + /// <exception cref="System.IO.IOException"></exception> + protected internal abstract ServerMessageBlock PeekKey(); + + /// <exception cref="System.IO.IOException"></exception> protected internal abstract void DoSend(ServerMessageBlock request); - /// <exception cref="System.IO.IOException"></exception> - protected internal abstract void DoRecv(Response response); - - /// <exception cref="System.IO.IOException"></exception> - protected internal abstract void DoSkip(); - - /// <exception cref="System.IO.IOException"></exception> - public virtual void Sendrecv(ServerMessageBlock request, Response response, long timeout) - { - lock (this) - { - MakeKey(request); - response.IsReceived = false; - try - { - ResponseMap.Put(request, response); - DoSend(request); - response.Expiration = Runtime.CurrentTimeMillis() + timeout; - while (!response.IsReceived) - { - Runtime.Wait(this, timeout); - timeout = response.Expiration - Runtime.CurrentTimeMillis(); - if (timeout <= 0) - { - throw new TransportException( - Name + " timedout waiting for response to " + request); - } - } - } - catch (IOException ioe) - { - if (Log.Level > 2) - { - Runtime.PrintStackTrace(ioe, Log); - } - try - { - Disconnect(true); - } - catch (IOException ioe2) - { - Runtime.PrintStackTrace(ioe2, Log); - } - throw; - } - catch (Exception ie) - { - throw new TransportException(ie); - } - finally - { - //Sharpen.Collections.Remove(response_map, request); + /// <exception cref="System.IO.IOException"></exception> + protected internal abstract void DoRecv(Response response); + + /// <exception cref="System.IO.IOException"></exception> + protected internal abstract void DoSkip(); + + /// <exception cref="System.IO.IOException"></exception> + public virtual void Sendrecv(ServerMessageBlock request, Response response, long timeout) + { + lock (this) + { + MakeKey(request); + response.IsReceived = false; + try + { + ResponseMap.Put(request, response); + DoSend(request); + response.Expiration = Runtime.CurrentTimeMillis() + timeout; + while (!response.IsReceived) + { + Runtime.Wait(this, timeout); + timeout = response.Expiration - Runtime.CurrentTimeMillis(); + if (timeout <= 0) + { + throw new TransportException(Name + " timedout waiting for response to " + request + ); + } + } + } + catch (IOException ioe) + { + if (Log.Level > 2) + { + Runtime.PrintStackTrace(ioe, Log); + } + try + { + Disconnect(true); + } + catch (IOException ioe2) + { + Runtime.PrintStackTrace(ioe2, Log); + } + throw; + } + catch (Exception ie) + { + throw new TransportException(ie); + } + finally + { + //Sharpen.Collections.Remove(response_map, request); ResponseMap.Remove(request); - } - } - } - - private void Loop() - { - while (Thread.CurrentThread().Equals(Thread)) - { - if (Thread.IsCanceled) - break; - - try - { - ServerMessageBlock key = PeekKey(); - if (key == null) - { - throw new IOException("end of stream"); - } - - lock (this) - { - if (Thread.IsCanceled) - break; - - Response response = (Response)ResponseMap.Get(key); - if (response == null) - { - if (Log.Level >= 4) - { - Log.WriteLine("Invalid key, skipping message"); - } - DoSkip(); - } - else - { - DoRecv(response); - - if (Thread.IsCanceled) - break; - - response.IsReceived = true; - Runtime.NotifyAll(this); - } - } - } - catch (Exception ex) - { - string msg = ex.Message; - bool timeout = msg != null && msg.Equals("Read timed out"); - bool hard = timeout == false; - - if (!timeout && Log.Level >= 3) - { - Runtime.PrintStackTrace(ex, Log); - } - - try - { - Disconnect(hard); - } - catch (IOException ioe) - { - Runtime.PrintStackTrace(ioe, Log); - } - } - } - } - - /// <exception cref="System.Exception"></exception> - protected internal abstract void DoConnect(); - - /// <exception cref="System.IO.IOException"></exception> - protected internal abstract void DoDisconnect(bool hard); - - /// <exception cref="SharpCifs.Util.Transport.TransportException"></exception> - public virtual void Connect(long timeout) - { - lock (this) - { - try - { - switch (State) - { - case 0: - { - break; - } - - case 3: - { - return; - } - - case 4: - { - // already connected - State = 0; - throw new TransportException("Connection in error", Te); - } - - default: - { - //TransportException te = new TransportException("Invalid state: " + state); - State = 0; - throw new TransportException("Invalid state: " + State); - } - } - State = 1; - Te = null; - - if (Thread != null) - { - Thread.Cancel(true); - Thread.Dispose(); - } - - Thread = new Thread(this); - Thread.SetDaemon(true); - lock (Thread) - { - Thread.Start(true); - - Runtime.Wait(Thread, timeout); - switch (State) - { - case 1: - { - State = 0; - Thread?.Cancel(); - Thread?.Dispose(); - Thread = null; - throw new TransportException("Connection timeout"); - } - - case 2: - { - if (Te != null) - { - State = 4; - Thread?.Cancel(); - Thread?.Dispose(); - Thread = null; - throw Te; - } - State = 3; - return; - } - } - } - } - catch (Exception ie) - { - State = 0; - Thread?.Cancel(); - Thread?.Dispose(); - Thread = null; - throw new TransportException(ie); - } - finally - { - if (State != 0 && State != 3 && State != 4) - { - if (Log.Level >= 1) - { - Log.WriteLine("Invalid state: " + State); - } - State = 0; - Thread?.Cancel(); - Thread?.Dispose(); - Thread = null; - } - } - } - } - - /// <exception cref="System.IO.IOException"></exception> - public virtual void Disconnect(bool hard) - { + } + } + } + + private void Loop() + { + while (Thread == Thread.CurrentThread()) + { + try + { + ServerMessageBlock key = PeekKey(); + if (key == null) + { + throw new IOException("end of stream"); + } + + + lock (this) + { + Response response = (Response)ResponseMap.Get(key); + if (response == null) + { + if (Log.Level >= 4) + { + Log.WriteLine("Invalid key, skipping message"); + } + DoSkip(); + } + else + { + DoRecv(response); + response.IsReceived = true; + Runtime.NotifyAll(this); + } + } + } + catch (Exception ex) + { + string msg = ex.Message; + bool timeout = msg != null && msg.Equals("Read timed out"); + bool hard = timeout == false; + if (!timeout && Log.Level >= 3) + { + Runtime.PrintStackTrace(ex, Log); + } + try + { + Disconnect(hard); + } + catch (IOException ioe) + { + Runtime.PrintStackTrace(ioe, Log); + } + } + } + } + + /// <exception cref="System.Exception"></exception> + protected internal abstract void DoConnect(); + + /// <exception cref="System.IO.IOException"></exception> + protected internal abstract void DoDisconnect(bool hard); + + /// <exception cref="SharpCifs.Util.Transport.TransportException"></exception> + public virtual void Connect(long timeout) + { + lock (this) + { + try + { + switch (State) + { + case 0: + { + break; + } + + case 3: + { + return; + } + + case 4: + { + // already connected + State = 0; + throw new TransportException("Connection in error", Te); + } + + default: + { + //TransportException te = new TransportException("Invalid state: " + state); + State = 0; + throw new TransportException("Invalid state: " + State); + } + } + State = 1; + Te = null; + Thread = new Thread(this); + Thread.SetDaemon(true); + lock (Thread) + { + Thread.Start(); + Runtime.Wait(Thread, timeout); + switch (State) + { + case 1: + { + State = 0; + Thread = null; + throw new TransportException("Connection timeout"); + } + + case 2: + { + if (Te != null) + { + State = 4; + Thread = null; + throw Te; + } + State = 3; + return; + } + } + } + } + catch (Exception ie) + { + State = 0; + Thread = null; + throw new TransportException(ie); + } + finally + { + if (State != 0 && State != 3 && State != 4) + { + if (Log.Level >= 1) + { + Log.WriteLine("Invalid state: " + State); + } + State = 0; + Thread = null; + } + } + } + } + + /// <exception cref="System.IO.IOException"></exception> + public virtual void Disconnect(bool hard) + { if (hard) { @@ -351,8 +323,6 @@ namespace SharpCifs.Util.Transport case 4: { - Thread?.Cancel(); - Thread?.Dispose(); Thread = null; State = 0; break; @@ -364,8 +334,6 @@ namespace SharpCifs.Util.Transport { Log.WriteLine("Invalid state: " + State); } - Thread?.Cancel(); - Thread?.Dispose(); Thread = null; State = 0; break; @@ -378,124 +346,109 @@ namespace SharpCifs.Util.Transport return; } - + lock (this) - { - IOException ioe = null; - switch (State) - { - case 0: - { - return; - } - - case 2: - { - hard = true; - goto case 3; - } - - case 3: - { - if (ResponseMap.Count != 0 && !hard) - { - break; - } - try - { - DoDisconnect(hard); - } - catch (IOException ioe0) - { - ioe = ioe0; - } - goto case 4; - } - - case 4: - { - Thread?.Cancel(); - Thread?.Dispose(); - Thread = null; - State = 0; - break; - } - - default: - { - if (Log.Level >= 1) - { - Log.WriteLine("Invalid state: " + State); - } - Thread?.Cancel(); - Thread?.Dispose(); - Thread = null; - State = 0; - break; - } - } - if (ioe != null) - { - throw ioe; - } - } - } - - public virtual void Run() - { - Thread runThread = Thread.CurrentThread(); - - if (runThread.IsCanceled) - return; - - Exception ex0 = null; - try - { - DoConnect(); - } - catch (Exception ex) - { - ex0 = ex; - // Defer to below where we're locked - return; - } - finally - { - lock (runThread) - { - if (!runThread.IsCanceled) - { - if (!runThread.Equals(Thread)) - { - if (ex0 != null) - { - if (Log.Level >= 2) - { - Runtime.PrintStackTrace(ex0, Log); - } - } - //return; - } - if (ex0 != null) - { - Te = new TransportException(ex0); - } - State = 2; - // run connected - Runtime.Notify(runThread); - } - } - } - - if (runThread.IsCanceled) - return; - - Loop(); - } - - public override string ToString() - { - return Name; - } - } + { + IOException ioe = null; + switch (State) + { + case 0: + { + return; + } + + case 2: + { + hard = true; + goto case 3; + } + + case 3: + { + if (ResponseMap.Count != 0 && !hard) + { + break; + } + try + { + DoDisconnect(hard); + } + catch (IOException ioe0) + { + ioe = ioe0; + } + goto case 4; + } + + case 4: + { + Thread = null; + State = 0; + break; + } + + default: + { + if (Log.Level >= 1) + { + Log.WriteLine("Invalid state: " + State); + } + Thread = null; + State = 0; + break; + } + } + if (ioe != null) + { + throw ioe; + } + } + } + + public virtual void Run() + { + Thread runThread = Thread.CurrentThread(); + Exception ex0 = null; + try + { + DoConnect(); + } + catch (Exception ex) + { + ex0 = ex; + // Defer to below where we're locked + return; + } + finally + { + lock (runThread) + { + if (runThread != Thread) + { + if (ex0 != null) + { + if (Log.Level >= 2) + { + Runtime.PrintStackTrace(ex0, Log); + } + } + //return; + } + if (ex0 != null) + { + Te = new TransportException(ex0); + } + State = 2; + // run connected + Runtime.Notify(runThread); + } + } + Loop(); + } + + public override string ToString() + { + return Name; + } + } } diff --git a/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/TransportException.cs b/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/TransportException.cs index df125969b..bd0455197 100644 --- a/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/TransportException.cs +++ b/Emby.Common.Implementations/IO/SharpCifs/Util/Transport/TransportException.cs @@ -21,43 +21,43 @@ using SharpCifs.Util.Sharpen; namespace SharpCifs.Util.Transport { - public class TransportException : IOException - { - private Exception _rootCause; - - public TransportException() - { - } - - public TransportException(string msg) : base(msg) - { - } - - public TransportException(Exception rootCause) - { - this._rootCause = rootCause; - } - - public TransportException(string msg, Exception rootCause) : base(msg) - { - this._rootCause = rootCause; - } - - public virtual Exception GetRootCause() - { - return _rootCause; - } - - public override string ToString() - { - if (_rootCause != null) - { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - Runtime.PrintStackTrace(_rootCause, pw); - return base.ToString() + "\n" + sw; - } - return base.ToString(); - } - } + public class TransportException : IOException + { + private Exception _rootCause; + + public TransportException() + { + } + + public TransportException(string msg) : base(msg) + { + } + + public TransportException(Exception rootCause) + { + this._rootCause = rootCause; + } + + public TransportException(string msg, Exception rootCause) : base(msg) + { + this._rootCause = rootCause; + } + + public virtual Exception GetRootCause() + { + return _rootCause; + } + + public override string ToString() + { + if (_rootCause != null) + { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + Runtime.PrintStackTrace(_rootCause, pw); + return base.ToString() + "\n" + sw; + } + return base.ToString(); + } + } } |
