13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* 23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (C) 2014 The Android Open Source Project 33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * you may not use this file except in compliance with the License. 63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * You may obtain a copy of the License at 73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * http://www.apache.org/licenses/LICENSE-2.0 93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Unless required by applicable law or agreed to in writing, software 113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * See the License for the specific language governing permissions and 143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * limitations under the License. 153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef DMMETADATABUFFER_H 183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#define DMMETADATABUFFER_H 193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef __cplusplus 213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#error "This is a C++ header file; it requires C++ to compile." 223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/*================================================================================================== 253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyHeader Name: dmMetaDataBuffer.h 273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyGeneral Description: This file contains declaration declaration 293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby of DMMetaBuffer class used for reading meta information from MDF file 303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby==================================================================================================*/ 323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include <ctype.h> 343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "syncml_dm_data_types.h" 353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmvector.h" 363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "dmbuffer.h" 373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambytypedef const UINT8 * MDF_BUFFER_T; 393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/** 413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby* DMMetaDataBuffer represent MDF reader 423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby*/ 433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyclass DMMetaDataBuffer 443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypublic: 473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Default constructor 493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DMMetaDataBuffer(); 513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Constructor, that sets pointer on a MDF buffer 543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * \param pBuffer [in] - pointer on binary buffer 553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DMMetaDataBuffer(MDF_BUFFER_T pBuffer); 573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Retrieves pointer on a binary MDF buffer 603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby inline MDF_BUFFER_T GetBuffer() const { return m_pBuffer; } 623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Sets pointer on a MDF buffer 653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * \param pBuffer [in] - pointer on binary buffer 663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby inline void SetBuffer(MDF_BUFFER_T pBuffer) 683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_pBuffer = pBuffer; 703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef DM_IGNORE_BMDF_VERIFICATION 713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_nOffset = 0; 723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_nFilesSize = ReadUINT32(); 733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_nOffset = 0; 753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Sets offset in a buffer 793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * \param offset [in] - position in the buffer to be set 803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby inline void SetOffset(UINT32 offset) 823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_nOffset = offset; 843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef DM_IGNORE_BMDF_VERIFICATION 853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if ( m_nOffset >= m_nFilesSize ) 863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_bCorrupted = 1; 883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_nOffset = 0; 893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Changes position in a buffer 953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * \param offset [in] - number of bytes to move pistion in the buffer 963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby inline void IncOffset(UINT32 offset) 983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_nOffset += offset; 1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef DM_IGNORE_BMDF_VERIFICATION 1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if ( m_nOffset >= m_nFilesSize ) 1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_bCorrupted = 1; 1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby m_nOffset = 0; 1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Retrieves current offset in a buffer 1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby inline UINT32 GetOffset() { return m_nOffset; } 1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Reads string from a buffer 1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby CPCHAR ReadString(); 1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Reads one byte from a buffer 1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby inline UINT8 ReadUINT8() 1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return *(m_pBuffer+m_nOffset++); 1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Reads two bytes value from a buffer 1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby UINT16 ReadUINT16(); 1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Reads integer value from a buffer 1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby UINT32 ReadUINT32(); 1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Reads float value from a buffer 1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby FLOAT ReadFLOAT(); 1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef DM_IGNORE_BMDF_VERIFICATION 1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Checks if a buffer is corrupted 1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * \return 1 if corrupted 1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby inline int IsCorrupted() const { return m_bCorrupted;} 1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /** 1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Resets flag for corruption verification 1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby inline void ResetCorrupted() { m_bCorrupted = 0;} 1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyprivate: 1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /* Pointer on binary buffer that hold MDF */ 1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby MDF_BUFFER_T m_pBuffer; 1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /* Buffer offset */ 1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby UINT32 m_nOffset; 1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#ifndef DM_IGNORE_BMDF_VERIFICATION 1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /* Buffer size */ 1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby UINT32 m_nFilesSize; 1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /* Flag to verify if buffer is corrupted */ 1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby static UINT32 m_bCorrupted; 1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby}; 1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#endif 169