Beispiel #1
0
        /// <summary>
        /// This method deSerializes the record from a byte array.
        /// </summary>
        /// <param name="data">The byte array containing the escher record information</param>
        /// <param name="offset">The starting offset into data</param>
        /// <param name="recordFactory">May be null since this is not a container record.</param>
        /// <returns>The number of bytes Read from the byte array.</returns>
        public override int FillFields(byte[] data, int offset,
                                       IEscherRecordFactory recordFactory
                                       )
        {
            int bytesRemaining = ReadHeader(data, offset);
            int pos            = offset + 8;

            field_1_blipTypeWin32 = data[pos];
            field_2_blipTypeMacOS = data[pos + 1];
            field_3_uid           = new byte[16];
            Array.Copy(data, pos + 2, field_3_uid, 0, 16);
            field_4_tag      = LittleEndian.GetShort(data, pos + 18);
            field_5_size     = LittleEndian.GetInt(data, pos + 20);
            field_6_ref      = LittleEndian.GetInt(data, pos + 24);
            field_7_offset   = LittleEndian.GetInt(data, pos + 28);
            field_8_usage    = data[pos + 32];
            field_9_name     = data[pos + 33];
            field_10_unused2 = data[pos + 34];
            field_11_unused3 = data[pos + 35];
            bytesRemaining  -= 36;
            int bytesRead = 0;

            if (bytesRemaining > 0)
            {
                field_12_blipRecord = (EscherBlipRecord)recordFactory.CreateRecord(data, pos + 36);
                bytesRead           = field_12_blipRecord.FillFields(data, pos + 36, recordFactory);
            }
            pos            += 36 + bytesRead;
            bytesRemaining -= bytesRead;

            _remainingData = new byte[bytesRemaining];
            Array.Copy(data, pos, _remainingData, 0, bytesRemaining);
            return(bytesRemaining + 8 + 36 + (field_12_blipRecord == null ? 0 : field_12_blipRecord.RecordSize));
        }
Beispiel #2
0
 /// <summary>
 /// The contract of this method is to deSerialize an escher record including
 /// it's children.
 /// </summary>
 /// <param name="data">The byte array containing the Serialized escher
 /// records.</param>
 /// <param name="offset">The offset into the byte array.</param>
 /// <param name="recordFactory">A factory for creating new escher records</param>
 /// <returns>The number of bytes written.</returns>        
 public override int FillFields(byte[] data, int offset, IEscherRecordFactory recordFactory)
 {
     int bytesRemaining = ReadHeader(data, offset);
     int bytesWritten = 8;
     offset += 8;
     while (bytesRemaining > 0 && offset < data.Length)
     {
         EscherRecord child = recordFactory.CreateRecord(data, offset);
         int childBytesWritten = child.FillFields(data, offset, recordFactory);
         bytesWritten += childBytesWritten;
         offset += childBytesWritten;
         bytesRemaining -= childBytesWritten;
         AddChildRecord(child);
         if (offset >= data.Length && bytesRemaining > 0)
         {
             _remainingLength = bytesRemaining;
             log.Log(POILogger.WARN, "Not enough Escher data: " + bytesRemaining + " bytes remaining but no space left");
         }
     }
     return bytesWritten;
 }
Beispiel #3
0
        /// <summary>
        /// This method deSerializes the record from a byte array.
        /// </summary>
        /// <param name="data"> The byte array containing the escher record information</param>
        /// <param name="offset">The starting offset into data </param>
        /// <param name="recordFactory">May be null since this is not a container record.</param>
        /// <returns>The number of bytes Read from the byte array.</returns>
        public override int FillFields(byte[] data, int offset, IEscherRecordFactory recordFactory)
        {
            int bytesRemaining = ReadHeader(data, offset);

            /*
             * Modified by Zhang Zhang
             * Have a check between avaliable bytes and bytesRemaining,
             * take the avaliable length if the bytesRemaining out of range.
             * July 09, 2010
             */
            int avaliable = data.Length - (offset + 8);

            if (bytesRemaining > avaliable)
            {
                bytesRemaining = avaliable;
            }
            if (IsContainerRecord)
            {
                int bytesWritten = 0;
                _thedata      = new byte[0];
                offset       += 8;
                bytesWritten += 8;
                while (bytesRemaining > 0)
                {
                    EscherRecord child             = recordFactory.CreateRecord(data, offset);
                    int          childBytesWritten = child.FillFields(data, offset, recordFactory);
                    bytesWritten   += childBytesWritten;
                    offset         += childBytesWritten;
                    bytesRemaining -= childBytesWritten;
                    ChildRecords.Add(child);
                }
                return(bytesWritten);
            }
            else
            {
                _thedata = new byte[bytesRemaining];
                Array.Copy(data, offset + 8, _thedata, 0, bytesRemaining);
                return(bytesRemaining + 8);
            }
        }
        /// <summary>
        /// The contract of this method is to deSerialize an escher record including
        /// it's children.
        /// </summary>
        /// <param name="data">The byte array containing the Serialized escher
        /// records.</param>
        /// <param name="offset">The offset into the byte array.</param>
        /// <param name="recordFactory">A factory for creating new escher records</param>
        /// <returns>The number of bytes written.</returns>
        public override int FillFields(byte[] data, int offset, IEscherRecordFactory recordFactory)
        {
            int bytesRemaining = ReadHeader(data, offset);
            int bytesWritten   = 8;

            offset += 8;
            while (bytesRemaining > 0 && offset < data.Length)
            {
                EscherRecord child             = recordFactory.CreateRecord(data, offset);
                int          childBytesWritten = child.FillFields(data, offset, recordFactory);
                bytesWritten   += childBytesWritten;
                offset         += childBytesWritten;
                bytesRemaining -= childBytesWritten;
                AddChildRecord(child);
                if (offset >= data.Length && bytesRemaining > 0)
                {
                    _remainingLength = bytesRemaining;
                    log.Log(POILogger.WARN, "Not enough Escher data: " + bytesRemaining + " bytes remaining but no space left");
                }
            }
            return(bytesWritten);
        }
Beispiel #5
0
        /// <summary>
        /// This method deSerializes the record from a byte array.
        /// </summary>
        /// <param name="data"> The byte array containing the escher record information</param>
        /// <param name="offset">The starting offset into data </param>
        /// <param name="recordFactory">May be null since this is not a container record.</param>
        /// <returns>The number of bytes Read from the byte array.</returns>
        public override int FillFields(byte[] data, int offset, IEscherRecordFactory recordFactory)
        {
            int bytesRemaining = ReadHeader(data, offset);
            /*
		     * Modified by Zhang Zhang
		     * Have a check between avaliable bytes and bytesRemaining, 
		     * take the avaliable length if the bytesRemaining out of range.
		     * July 09, 2010
		     */
            int avaliable = data.Length - (offset + 8);
            if (bytesRemaining > avaliable)
            {
                bytesRemaining = avaliable;
            }
            if (IsContainerRecord)
            {
                int bytesWritten = 0;
                _thedata = new byte[0];
                offset += 8;
                bytesWritten += 8;
                while (bytesRemaining > 0)
                {
                    EscherRecord child = recordFactory.CreateRecord(data, offset);
                    int childBytesWritten = child.FillFields(data, offset, recordFactory);
                    bytesWritten += childBytesWritten;
                    offset += childBytesWritten;
                    bytesRemaining -= childBytesWritten;
                    ChildRecords.Add(child);
                }
                return bytesWritten;
            }
            else
            {
                _thedata = new byte[bytesRemaining];
                Array.Copy(data, offset + 8, _thedata, 0, bytesRemaining);
                return bytesRemaining + 8;
            }
        }
Beispiel #6
0
        /// <summary>
        /// This method deSerializes the record from a byte array.
        /// </summary>
        /// <param name="data">The byte array containing the escher record information</param>
        /// <param name="offset">The starting offset into data</param>
        /// <param name="recordFactory">May be null since this is not a container record.</param>
        /// <returns>The number of bytes Read from the byte array.</returns>
        public override int FillFields(byte[] data, int offset,
                                  IEscherRecordFactory recordFactory
                                  )
        {
            int bytesRemaining = ReadHeader(data, offset);
            int pos = offset + 8;
            field_1_blipTypeWin32 = data[pos];
            field_2_blipTypeMacOS = data[pos + 1];
            field_3_uid = new byte[16];
            Array.Copy(data, pos + 2, field_3_uid, 0, 16);
            field_4_tag = LittleEndian.GetShort(data, pos + 18);
            field_5_size = LittleEndian.GetInt(data, pos + 20);
            field_6_ref = LittleEndian.GetInt(data, pos + 24);
            field_7_offset = LittleEndian.GetInt(data, pos + 28);
            field_8_usage = data[pos + 32];
            field_9_name = data[pos + 33];
            field_10_unused2 = data[pos + 34];
            field_11_unused3 = data[pos + 35];
            bytesRemaining -= 36;
            int bytesRead = 0;
            if (bytesRemaining > 0)
            {
                field_12_blipRecord = (EscherBlipRecord)recordFactory.CreateRecord(data, pos + 36);
                bytesRead = field_12_blipRecord.FillFields(data, pos + 36, recordFactory);
            }
            pos += 36 + bytesRead;
            bytesRemaining -= bytesRead;

            _remainingData = new byte[bytesRemaining];
            Array.Copy(data, pos, _remainingData, 0, bytesRemaining);
            return bytesRemaining + 8 + 36 + (field_12_blipRecord == null ? 0 : field_12_blipRecord.RecordSize);

        }