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