Ejemplo n.º 1
0
        public void WriteIdentifier(Mpd.Generic.IO.FileDataIO pFile, bool bKadExcludeMD4)
        {
            uint uIncludesMD4      = bKadExcludeMD4 ? (uint)0 : (uint)1; // This is (currently) mandatory except for Kad
            uint uIncludesSize     = (FileSize != 0) ? (uint)1 : (uint)0;
            uint uIncludesAICH     = HasAICHHash ? (uint)1 : 0;
            uint uMandatoryOptions = 0; // RESERVED - Identifier invalid if we encounter unknown options
            uint uOptions          = 0; // RESERVED

            byte byIdentifierDesc = (byte)
                                    ((uOptions << 5) |
                                     (uMandatoryOptions << 3) |
                                     (uIncludesAICH << 2) |
                                     (uIncludesSize << 1) |
                                     (uIncludesMD4 << 0));

            pFile.WriteUInt8(byIdentifierDesc);
            if (!bKadExcludeMD4)
            {
                pFile.WriteHash16(md4Hash_);
            }
            if (FileSize != (ulong)0)
            {
                pFile.WriteUInt64(FileSize);
            }
            if (HasAICHHash)
            {
                aichHash_.Write(pFile);
            }
        }
Ejemplo n.º 2
0
        public void WriteHashSetsToPacket(Mpd.Generic.IO.FileDataIO pFile, bool bMD4, bool bAICH)
        {
            // 6 Options - RESERVED
            // 1 AICH HashSet
            // 1 MD4 HashSet
            byte byOptions = 0;

            if (bMD4)
            {
                if (TheoreticalMD4PartHashCount == 0)
                {
                    bMD4 = false;
                }
                else if (HasExpectedMD4HashCount)
                {
                    byOptions |= 0x01;
                }
                else
                {
                    bMD4 = false;
                }
            }
            if (bAICH)
            {
                if (TheoreticalAICHPartHashCount == 0)
                {
                    bAICH = false;
                }
                else if (HasExpectedAICHHashCount && HasAICHHash)
                {
                    byOptions |= 0x02;
                }
                else
                {
                    bAICH = false;
                }
            }
            pFile.WriteUInt8(byOptions);
            if (bMD4)
            {
                WriteMD4HashsetToFile(pFile);
            }
            if (bAICH)
            {
                WriteAICHHashsetToFile(pFile);
            }
        }