Lines Matching defs:layout
211 void NdefMessage::ParseRecordLayoutHead(RecordLayout& layout, unsigned char head)
213 layout.mb = (head & FLAG_MB) != 0;
214 layout.me = (head & FLAG_ME) != 0;
215 layout.cf = (head & FLAG_CF) != 0;
216 layout.sr = (head & FLAG_SR) != 0;
217 layout.il = (head & FLAG_IL) != 0;
218 layout.tnf = static_cast<short>(head & FLAG_TNF);
221 bool NdefMessage::IsInvalidRecordLayoutHead(RecordLayout& layout, bool isChunkFound,
224 if (!layout.mb && parsedRecordSize == 0 && !isChunkFound && !isMbMeIgnored) {
227 } else if (layout.mb && (parsedRecordSize != 0 || isChunkFound) && !isMbMeIgnored) {
230 } else if (isChunkFound && layout.il) {
233 } else if (layout.cf && layout.me) {
236 } else if (isChunkFound && layout.tnf != TNF_UNCHANGED) {
239 } else if (!isChunkFound && layout.tnf == TNF_UNCHANGED) {
246 void NdefMessage::ParseRecordLayoutLength(RecordLayout& layout, bool isChunkFound,
249 layout.typeLength = NfcSdkCommon::GetByteFromHexStr(data, parsedDataIndex++) & 0xFF;
250 if (layout.sr) {
251 layout.payloadLength = NfcSdkCommon::GetByteFromHexStr(data, parsedDataIndex++) & 0xFF;
254 layout.payloadLength = 0;
257 layout.payloadLength = 0;
259 layout.payloadLength +=
265 layout.idLength = layout.il ? (NfcSdkCommon::GetByteFromHexStr(data, parsedDataIndex++) & 0xFF) : 0;
268 bool NdefMessage::IsRecordLayoutLengthInvalid(RecordLayout& layout, bool isChunkFound)
271 if (isChunkFound && layout.typeLength != 0) {
277 if (layout.cf && !isChunkFound) {
278 if (layout.typeLength == 0 && layout.tnf != TNF_UNKNOWN) {
284 if (layout.payloadLength > MAX_PAYLOAD_SIZE) {
291 std::string NdefMessage::ParseRecordType(RecordLayout& layout, const std::string& data, uint32_t& parsedDataIndex)
293 if (layout.typeLength <= 0) {
297 if (NfcSdkCommon::GetHexStrBytesLen(data) < parsedDataIndex + layout.typeLength) {
299 NfcSdkCommon::GetHexStrBytesLen(data), parsedDataIndex, layout.typeLength);
302 std::string type = data.substr(parsedDataIndex * HEX_BYTE_LEN, layout.typeLength * HEX_BYTE_LEN);
303 parsedDataIndex += layout.typeLength;
307 std::string NdefMessage::ParseRecordId(RecordLayout& layout, const std::string& data, uint32_t& parsedDataIndex)
309 if (layout.idLength <= 0) {
313 if (NfcSdkCommon::GetHexStrBytesLen(data) < parsedDataIndex + layout.idLength) {
315 NfcSdkCommon::GetHexStrBytesLen(data), parsedDataIndex, layout.idLength);
318 std::string id = data.substr(parsedDataIndex * HEX_BYTE_LEN, layout.idLength * HEX_BYTE_LEN);
319 parsedDataIndex += layout.idLength;
323 std::string NdefMessage::ParseRecordPayload(RecordLayout& layout, const std::string& data, uint32_t& parsedDataIndex)
325 if (layout.payloadLength <= 0) {
329 if (NfcSdkCommon::GetHexStrBytesLen(data) < (parsedDataIndex + layout.payloadLength)) {
331 NfcSdkCommon::GetHexStrBytesLen(data), parsedDataIndex, layout.payloadLength);
334 std::string payload = data.substr(parsedDataIndex * HEX_BYTE_LEN, layout.payloadLength * HEX_BYTE_LEN);
335 parsedDataIndex += layout.payloadLength;
339 void NdefMessage::SaveRecordChunks(RecordLayout& layout, bool isChunkFound,
343 if (layout.cf && !isChunkFound) {
345 chunkTnf = layout.tnf;
349 if (layout.cf || isChunkFound) {
354 std::string NdefMessage::MergePayloadByChunks(RecordLayout& layout, bool isChunkFound,
358 if (!layout.cf && isChunkFound) {
363 layout.tnf = chunkTnf;
429 RecordLayout layout;
430 ParseRecordLayoutHead(layout, NfcSdkCommon::GetByteFromHexStr(data, parsedDataIndex++));
431 isMessageEnd = layout.me;
439 if (IsInvalidRecordLayoutHead(layout, isChunkFound, recordList.size(), isMbMeIgnored)) {
443 ParseRecordLayoutLength(layout, isChunkFound, data, parsedDataIndex);
445 if (IsRecordLayoutLengthInvalid(layout, isChunkFound)) {
451 tagRtdType = ParseRecordType(layout, data, parsedDataIndex);
452 id = ParseRecordId(layout, data, parsedDataIndex);
456 std::string payload = ParseRecordPayload(layout, data, parsedDataIndex);
457 SaveRecordChunks(layout, isChunkFound, chunks, chunkTnf, payload);
458 payload = MergePayloadByChunks(layout, isChunkFound, chunks, chunkTnf, payload);
465 isChunkFound = layout.cf;
471 std::shared_ptr<NdefRecord> record = CreateNdefRecord(layout.tnf, id, payload, tagRtdType);