Пример #1
0
        /**
         * Read and parse an ADB message from the supplied input stream.
         * This message is NOT validated.
         * @param in InputStream object to read data from
         * @return An AdbMessage object represented the message read
         */
        public static AdbMessage ReadAdbMessage(BinaryStream inStream)
        {
            AdbMessage msg = new AdbMessage();

            inStream.IsLittleEndian = true;

            /* Pull out header fields */
            msg.command = inStream.ReadUInt32();
            msg.arg0    = inStream.ReadUInt32();
            msg.arg1    = inStream.ReadUInt32();
            uint payloadLength = inStream.ReadUInt32();
            uint checksum      = inStream.ReadUInt32();
            uint magic         = inStream.ReadUInt32();

            if (msg.command != (magic ^ 0xFFFFFFFF))
            {
                throw new IOException("message error");
            }

            /* If there's a payload supplied, read that too */
            if (payloadLength > 0)
            {
                msg.payload = new byte[payloadLength];
                inStream.Fill(msg.payload);

                if (GetPayloadChecksum(msg.payload) != checksum)
                {
                    throw new IOException("checksum error");
                }
            }

            return(msg);
        }