ReadBytesWireFormat() abstract private method

abstract private ReadBytesWireFormat ( byte buffer, int bufferIndex ) : int
buffer byte
bufferIndex int
return int
Example #1
0
        internal virtual int ReadAndXWireFormat(byte[] buffer, int bufferIndex)
        {
            int start = bufferIndex;

            WordCount = buffer[bufferIndex++];
            if (WordCount != 0)
            {
                _andxCommand = buffer[bufferIndex];
                _andxOffset  = ReadInt2(buffer, bufferIndex + 2);
                if (_andxOffset == 0)
                {
                    _andxCommand = unchecked (unchecked (0xFF));
                }
                if (WordCount > 2)
                {
                    ReadParameterWordsWireFormat(buffer, bufferIndex + 4);
                    if (Command == SmbComNtCreateAndx && ((SmbComNtCreateAndXResponse)this).IsExtended)
                    {
                        WordCount += 8;
                    }
                }
                bufferIndex = start + 1 + (WordCount * 2);
            }
            ByteCount    = ReadInt2(buffer, bufferIndex);
            bufferIndex += 2;
            if (ByteCount != 0)
            {
                int n;
                n            = ReadBytesWireFormat(buffer, bufferIndex);
                bufferIndex += ByteCount;
            }
            if (ErrorCode != 0 || _andxCommand == unchecked (unchecked (0xFF)))
            {
                _andxCommand = unchecked (unchecked (0xFF));
                Andx         = null;
            }
            else
            {
                if (Andx == null)
                {
                    _andxCommand = unchecked (unchecked (0xFF));
                    throw new RuntimeException("no andx command supplied with response");
                }
                bufferIndex      = HeaderStart + _andxOffset;
                Andx.HeaderStart = HeaderStart;
                Andx.Command     = _andxCommand;
                Andx.ErrorCode   = ErrorCode;
                Andx.Flags       = Flags;
                Andx.Flags2      = Flags2;
                Andx.Tid         = Tid;
                Andx.Pid         = Pid;
                Andx.Uid         = Uid;
                Andx.Mid         = Mid;
                Andx.UseUnicode  = UseUnicode;
                if (Andx is AndXServerMessageBlock)
                {
                    bufferIndex += ((AndXServerMessageBlock)Andx).ReadAndXWireFormat(buffer
                                                                                     , bufferIndex);
                }
                else
                {
                    buffer[bufferIndex++] = unchecked ((byte)(Andx.WordCount & unchecked (0xFF))
                                                       );
                    if (Andx.WordCount != 0)
                    {
                        if (Andx.WordCount > 2)
                        {
                            bufferIndex += Andx.ReadParameterWordsWireFormat(buffer, bufferIndex);
                        }
                    }
                    Andx.ByteCount = ReadInt2(buffer, bufferIndex);
                    bufferIndex   += 2;
                    if (Andx.ByteCount != 0)
                    {
                        Andx.ReadBytesWireFormat(buffer, bufferIndex);
                        bufferIndex += Andx.ByteCount;
                    }
                }
                Andx.Received = true;
            }
            return(bufferIndex - start);
        }