v-16

Committer:
DuyLionTran
Date:
Tue Dec 12 15:58:23 2017 +0000
Revision:
0:89e2c8a57572
version 1.6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DuyLionTran 0:89e2c8a57572 1 /**
DuyLionTran 0:89e2c8a57572 2 ******************************************************************************
DuyLionTran 0:89e2c8a57572 3 * @file RecordMimeType.h
DuyLionTran 0:89e2c8a57572 4 * @author ST / Central Labs
DuyLionTran 0:89e2c8a57572 5 * @version V2.0.0
DuyLionTran 0:89e2c8a57572 6 * @date 28 Apr 2017
DuyLionTran 0:89e2c8a57572 7 * @brief {@link Record} that contains data encoded as MimeType.
DuyLionTran 0:89e2c8a57572 8 ******************************************************************************
DuyLionTran 0:89e2c8a57572 9 * @attention
DuyLionTran 0:89e2c8a57572 10 *
DuyLionTran 0:89e2c8a57572 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
DuyLionTran 0:89e2c8a57572 12 *
DuyLionTran 0:89e2c8a57572 13 * Redistribution and use in source and binary forms, with or without modification,
DuyLionTran 0:89e2c8a57572 14 * are permitted provided that the following conditions are met:
DuyLionTran 0:89e2c8a57572 15 * 1. Redistributions of source code must retain the above copyright notice,
DuyLionTran 0:89e2c8a57572 16 * this list of conditions and the following disclaimer.
DuyLionTran 0:89e2c8a57572 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
DuyLionTran 0:89e2c8a57572 18 * this list of conditions and the following disclaimer in the documentation
DuyLionTran 0:89e2c8a57572 19 * and/or other materials provided with the distribution.
DuyLionTran 0:89e2c8a57572 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
DuyLionTran 0:89e2c8a57572 21 * may be used to endorse or promote products derived from this software
DuyLionTran 0:89e2c8a57572 22 * without specific prior written permission.
DuyLionTran 0:89e2c8a57572 23 *
DuyLionTran 0:89e2c8a57572 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
DuyLionTran 0:89e2c8a57572 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
DuyLionTran 0:89e2c8a57572 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DuyLionTran 0:89e2c8a57572 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
DuyLionTran 0:89e2c8a57572 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DuyLionTran 0:89e2c8a57572 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
DuyLionTran 0:89e2c8a57572 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
DuyLionTran 0:89e2c8a57572 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
DuyLionTran 0:89e2c8a57572 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
DuyLionTran 0:89e2c8a57572 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
DuyLionTran 0:89e2c8a57572 34 *
DuyLionTran 0:89e2c8a57572 35 ******************************************************************************
DuyLionTran 0:89e2c8a57572 36 */
DuyLionTran 0:89e2c8a57572 37
DuyLionTran 0:89e2c8a57572 38 #ifndef NDEFLIB_RECORDTYPE_RECORDMIMETYPE_H_
DuyLionTran 0:89e2c8a57572 39 #define NDEFLIB_RECORDTYPE_RECORDMIMETYPE_H_
DuyLionTran 0:89e2c8a57572 40
DuyLionTran 0:89e2c8a57572 41 #include <cstring>
DuyLionTran 0:89e2c8a57572 42 #include <string>
DuyLionTran 0:89e2c8a57572 43
DuyLionTran 0:89e2c8a57572 44 #include "NDefLib/Record.h"
DuyLionTran 0:89e2c8a57572 45
DuyLionTran 0:89e2c8a57572 46 namespace NDefLib {
DuyLionTran 0:89e2c8a57572 47
DuyLionTran 0:89e2c8a57572 48 /**
DuyLionTran 0:89e2c8a57572 49 * {@link Record} that contains data encoded as MimeType.
DuyLionTran 0:89e2c8a57572 50 */
DuyLionTran 0:89e2c8a57572 51 class RecordMimeType: public Record {
DuyLionTran 0:89e2c8a57572 52 public:
DuyLionTran 0:89e2c8a57572 53
DuyLionTran 0:89e2c8a57572 54 /**
DuyLionTran 0:89e2c8a57572 55 * Create an RecordMimeType reading the data from the buffer.
DuyLionTran 0:89e2c8a57572 56 * @param header Record header.
DuyLionTran 0:89e2c8a57572 57 * @param buffer Buffer to read the data from.
DuyLionTran 0:89e2c8a57572 58 * @return an object of type RecordMimeType or NULL
DuyLionTran 0:89e2c8a57572 59 * @par User is in charge of freeing the pointer returned by this function.
DuyLionTran 0:89e2c8a57572 60 */
DuyLionTran 0:89e2c8a57572 61 static RecordMimeType* parse(const RecordHeader &header,
DuyLionTran 0:89e2c8a57572 62 const uint8_t* buffer);
DuyLionTran 0:89e2c8a57572 63
DuyLionTran 0:89e2c8a57572 64 /**
DuyLionTran 0:89e2c8a57572 65 * Create a new record with a specific MIME type.
DuyLionTran 0:89e2c8a57572 66 * @param mimeType MIME type.
DuyLionTran 0:89e2c8a57572 67 * @param data Content.
DuyLionTran 0:89e2c8a57572 68 * @param nDataLenght Content length in bytes.
DuyLionTran 0:89e2c8a57572 69 * @par Data content is copied inside the class, unless NULL pointer is passed and
DuyLionTran 0:89e2c8a57572 70 * @{link setMimeDataPointer} is used to set the data pointer.
DuyLionTran 0:89e2c8a57572 71 */
DuyLionTran 0:89e2c8a57572 72 RecordMimeType(const std::string &mimeType, const uint8_t *data=NULL,
DuyLionTran 0:89e2c8a57572 73 uint32_t nDataLenght=0);
DuyLionTran 0:89e2c8a57572 74
DuyLionTran 0:89e2c8a57572 75 /**
DuyLionTran 0:89e2c8a57572 76 * Create a new RecordMimeType.
DuyLionTran 0:89e2c8a57572 77 * @param mimeType MIME type.
DuyLionTran 0:89e2c8a57572 78 * @param data String that contains the data.
DuyLionTran 0:89e2c8a57572 79 * @par The string is copied inside the class.
DuyLionTran 0:89e2c8a57572 80 */
DuyLionTran 0:89e2c8a57572 81 RecordMimeType(const std::string &mimeType, const std::string &data);
DuyLionTran 0:89e2c8a57572 82
DuyLionTran 0:89e2c8a57572 83 /**
DuyLionTran 0:89e2c8a57572 84 * Return the mime type of the content.
DuyLionTran 0:89e2c8a57572 85 * @return the mime type of the content.
DuyLionTran 0:89e2c8a57572 86 */
DuyLionTran 0:89e2c8a57572 87 const std::string& get_mime_type() const {
DuyLionTran 0:89e2c8a57572 88 return mMimeType;
DuyLionTran 0:89e2c8a57572 89 }
DuyLionTran 0:89e2c8a57572 90
DuyLionTran 0:89e2c8a57572 91 /**
DuyLionTran 0:89e2c8a57572 92 * Change the data pointer used by this record.
DuyLionTran 0:89e2c8a57572 93 * @param data Pointer used by this record.
DuyLionTran 0:89e2c8a57572 94 * @param dataLength Number of byte to write in this record.
DuyLionTran 0:89e2c8a57572 95 * @par The buffer is not copied or freed by this class.
DuyLionTran 0:89e2c8a57572 96 * With this function only the data pointer is copied, so it must not be freed before the object is deallocated.
DuyLionTran 0:89e2c8a57572 97 */
DuyLionTran 0:89e2c8a57572 98 void set_mime_data_pointer(uint8_t* data, uint32_t dataLength){
DuyLionTran 0:89e2c8a57572 99 delete_mime_data();
DuyLionTran 0:89e2c8a57572 100 mData = data;
DuyLionTran 0:89e2c8a57572 101 mDataLength=dataLength;
DuyLionTran 0:89e2c8a57572 102 mRecordHeader.set_payload_length(dataLength);
DuyLionTran 0:89e2c8a57572 103 }
DuyLionTran 0:89e2c8a57572 104
DuyLionTran 0:89e2c8a57572 105 /**
DuyLionTran 0:89e2c8a57572 106 * Change the data linked with this record, with this function the
DuyLionTran 0:89e2c8a57572 107 * data are copied inside the object.
DuyLionTran 0:89e2c8a57572 108 * @param data Pointer to the data buffer.
DuyLionTran 0:89e2c8a57572 109 * @param dataLength Number of bytes to write.
DuyLionTran 0:89e2c8a57572 110 */
DuyLionTran 0:89e2c8a57572 111 void copy_mime_data(const uint8_t* data, uint32_t dataLength);
DuyLionTran 0:89e2c8a57572 112
DuyLionTran 0:89e2c8a57572 113 /**
DuyLionTran 0:89e2c8a57572 114 * @return number of bytes used to store the content data
DuyLionTran 0:89e2c8a57572 115 */
DuyLionTran 0:89e2c8a57572 116 uint32_t get_mime_data_lenght() const {
DuyLionTran 0:89e2c8a57572 117 return mDataLength;
DuyLionTran 0:89e2c8a57572 118 }
DuyLionTran 0:89e2c8a57572 119
DuyLionTran 0:89e2c8a57572 120 /**
DuyLionTran 0:89e2c8a57572 121 * @return pointer to the content data
DuyLionTran 0:89e2c8a57572 122 * @par DO NOT free this pointer, it is managed by the class.
DuyLionTran 0:89e2c8a57572 123 */
DuyLionTran 0:89e2c8a57572 124 uint8_t const* get_mime_data() const {
DuyLionTran 0:89e2c8a57572 125 return mData;
DuyLionTran 0:89e2c8a57572 126 }
DuyLionTran 0:89e2c8a57572 127
DuyLionTran 0:89e2c8a57572 128 /**
DuyLionTran 0:89e2c8a57572 129 * Get the record type.
DuyLionTran 0:89e2c8a57572 130 * @return TYPE_MIME
DuyLionTran 0:89e2c8a57572 131 */
DuyLionTran 0:89e2c8a57572 132 virtual RecordType_t get_type() const {
DuyLionTran 0:89e2c8a57572 133 return TYPE_MIME;
DuyLionTran 0:89e2c8a57572 134 } //getType
DuyLionTran 0:89e2c8a57572 135
DuyLionTran 0:89e2c8a57572 136
DuyLionTran 0:89e2c8a57572 137 virtual uint16_t write(uint8_t *buffer);
DuyLionTran 0:89e2c8a57572 138
DuyLionTran 0:89e2c8a57572 139 /**
DuyLionTran 0:89e2c8a57572 140 * If needed free the memory used to store the content data.
DuyLionTran 0:89e2c8a57572 141 */
DuyLionTran 0:89e2c8a57572 142 virtual ~RecordMimeType() {
DuyLionTran 0:89e2c8a57572 143 delete_mime_data();
DuyLionTran 0:89e2c8a57572 144 };
DuyLionTran 0:89e2c8a57572 145
DuyLionTran 0:89e2c8a57572 146 /**
DuyLionTran 0:89e2c8a57572 147 * Compare two objects
DuyLionTran 0:89e2c8a57572 148 * @return true if the 2 records have the same mime type, length and data.
DuyLionTran 0:89e2c8a57572 149 */
DuyLionTran 0:89e2c8a57572 150 bool operator==(const RecordMimeType &other) const {
DuyLionTran 0:89e2c8a57572 151 return mMimeType==other.mMimeType &&
DuyLionTran 0:89e2c8a57572 152 mDataLength == other.mDataLength &&
DuyLionTran 0:89e2c8a57572 153 (std::memcmp(mData,other.mData,mDataLength)==0);
DuyLionTran 0:89e2c8a57572 154 }
DuyLionTran 0:89e2c8a57572 155
DuyLionTran 0:89e2c8a57572 156 private:
DuyLionTran 0:89e2c8a57572 157
DuyLionTran 0:89e2c8a57572 158 void initialize_header_data();
DuyLionTran 0:89e2c8a57572 159
DuyLionTran 0:89e2c8a57572 160 /**
DuyLionTran 0:89e2c8a57572 161 * Delete the mData buffer if it is allocated by this class.
DuyLionTran 0:89e2c8a57572 162 */
DuyLionTran 0:89e2c8a57572 163 void delete_mime_data(){
DuyLionTran 0:89e2c8a57572 164 if(mDataToFree && mData!=NULL){
DuyLionTran 0:89e2c8a57572 165 mDataToFree=false;
DuyLionTran 0:89e2c8a57572 166 delete [] mData;
DuyLionTran 0:89e2c8a57572 167 mData=NULL;
DuyLionTran 0:89e2c8a57572 168 }//if
DuyLionTran 0:89e2c8a57572 169 }//deleteMimeData
DuyLionTran 0:89e2c8a57572 170
DuyLionTran 0:89e2c8a57572 171 const std::string mMimeType;
DuyLionTran 0:89e2c8a57572 172 uint32_t mDataLength;
DuyLionTran 0:89e2c8a57572 173 uint8_t *mData;
DuyLionTran 0:89e2c8a57572 174 bool mDataToFree;
DuyLionTran 0:89e2c8a57572 175
DuyLionTran 0:89e2c8a57572 176 };
DuyLionTran 0:89e2c8a57572 177
DuyLionTran 0:89e2c8a57572 178 } /* namespace NDefLib */
DuyLionTran 0:89e2c8a57572 179
DuyLionTran 0:89e2c8a57572 180 #endif /* NDEFLIB_RECORDTYPE_RECORDMIMETYPE_H_ */