/* * Copyright (C) 2015 - 2017 Intel Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /*! * \file ia_mkn_decoder.h * \brief Definitions of functions to decode records from Maker Note. */ #ifndef IA_MKN_DECODER_H_ #define IA_MKN_DECODER_H_ #include "ia_types.h" #include "ia_mkn_types.h" #ifdef __cplusplus extern "C" { #endif /*! * \brief Checks if makernote contents are valid. * * \param[in] a_mknt_data_ptr Mandatory.\n * Pointer to the makernote (MKNT) binary data. * \param[in] a_tag Mandatory.\n * Tag which should match tag in the given data. Can be 0, if tag doesn't matter. * \return True if makernote data is valid. */ LIBEXPORT bool ia_mkn_is_valid(const ia_binary_data *a_mknt_data_ptr, const unsigned int a_tag); /*! * \brief Changes endianness of given makernote buffer. * Modifies the makernote buffer by changing endianness of makernote header and records. * * \param[in, out] mknt_data Mandatory.\n * Pointer to the makernote (MKNT) binary data which will be changed * to different endianness. * \return Error code. */ LIBEXPORT ia_err ia_mkn_change_endianness(ia_binary_data *mknt_data); /*! * \brief Prints all records contents. * Prints all record headers and record contents into the stdout in the same format as defined by the DFID. If a buffer * containing makernote header file is given as input, the DNID is also printed out as the first value on each row. * Note. Makernote data CRC validity is not checked when printing records. Prior to calling this function, * call ia_mkn_is_valid() to validate integrity of makernote data. * * \param[in] mknt_data Mandatory.\n * Pointer to the makernote (MKNT) binary data. * \param[in] makernote_header_file Optional.\n * Buffer where makernote header file has been read. Can be NULL. * \param[in] mkn_dnid_struct_name Optional.\n * C string of name of structure containing DNIDs in the given header file. * \param[in] dnid Mandatory.\n * Record's DNID to print. If 0, all records will be printed out. * \param[in] binary Mandatory.\n * Flag indicating if data is printed out as binary data into stdout. * \param[in] key Mandatory.\n * Packing key (16 bytes). * \return Error code. */ LIBEXPORT ia_err ia_mkn_print_record(const ia_binary_data *mknt_data, const char *makernote_header_file, const char *mkn_dnid_struct_name, ia_mkn_dnid dnid, bool binary, const char *key); /*! * \brief Copies record data from the makernote to given buffer. * Checks if a given record exists in the makernote and copies the data from the makernote buffer into the record data buffer. * The amount to copy depends on size value given as input in the record header structure. If size is 0, * only the record header is updated with correct data size and no data is copied. Thus this function can be called twice: * First to get the record size and second time (after allocating a buffer for the output) to get the record data. When querying * for record, DFID and DNID must match the record's DFID and DNID. * Note. Makernote data CRC validity is not checked when getting records. Prior to calling this function, * call ia_mkn_is_valid() to validate integrity of makernote data. * * \param[in] mknt_data Mandatory.\n * Pointer to the makernote (MKNT) binary data. * \param[in] key Mandatory.\n * Packing key (16 bytes). * \param[in,out] mkn_record_header Mandatory.\n * Record header with size set to 0 or wanted data size from record. DFID and DNID * must be set correctly to get record data. * \param[out] record_data Mandatory if record header size is not 0.\n * Large enough buffer to hold whole record data. * \return Error code. */ LIBEXPORT ia_err ia_mkn_get_record(const ia_binary_data *mknt_data, const char* key, ia_mkn_record_header *mkn_record_header, void *record_data); /*! * \brief Copies record data from the makernote to given buffer. * Parses through the makernote file and copies record headers of the first num_mkn_records to the given memory array. * Client should make sure enough memory is allocated for num_mkn_records in the given array. * If mkn_record_headers is NULL, this function will return the number of records. Thus * first call can be used to query how many records there are and second call to get the actual record headers. * * \param[in] mknt_data Mandatory.\n * Pointer to the makernote (MKNT) binary data. * \param[in,out] num_mkn_records Mandatory.\n * Number of makernote records the function is allowed to parse and store to the mkn_record_headers. * \param[in,out] mkn_record_headers Mandatory.\n * Client allocated memory for storing the array of record headers parsed by this function. * \return Error code. */ LIBEXPORT ia_err ia_mkn_get_record_headers(const ia_binary_data *mknt_data, int *num_mkn_records, ia_mkn_record_header *mkn_record_headers); #ifdef __cplusplus } #endif #endif /* IA_MKN_DECODER_H_ */