The parsing API should read the tag's data.
uint16_t near_tlv_length(uint8_t *tlv);
uint8_t *near_tlv_next(uint8_t *tlv);
uint8_t *near_tlv_data(uint8_t *tlv);
-int near_tlv_parse(struct near_tag *tag, near_tag_io_cb cb, uint8_t *data, uint16_t length);
+int near_tlv_parse(struct near_tag *tag, near_tag_io_cb cb);
#endif
if (err < 0)
goto out_err;
} else { /* This is the end */
- DBG("READ Static complete");
- err = near_tlv_parse(t1_tag->tag,
- t1_tag->cb,
- tagdata,
- t1_tag->data_read);
+ DBG("READ complete");
+
+ err = near_tlv_parse(t1_tag->tag, t1_tag->cb);
/* free memory */
g_free(t1_tag);
/* Check Static or Dynamic memory model */
if (resp[OFFSET_HEADER_ROM] == HR0_TYPE1_STATIC) {
+ uint8_t *tagdata;
+ size_t data_length;
+
DBG("READ Static complete");
+
+ tagdata = near_tag_get_data(t1_tag->tag, &data_length);
+ memcpy(tagdata, cc + LEN_CC_BYTES, TAG_T1_DATA_LENGTH(cc));
+
near_tag_set_memory_layout(tag, NEAR_TAG_MEMORY_STATIC);
- err = near_tlv_parse(t1_tag->tag, t1_tag->cb,
- cc + LEN_CC_BYTES, TAG_T1_DATA_LENGTH(cc));
+
+ err = near_tlv_parse(t1_tag->tag, t1_tag->cb);
if (err < 0)
goto out_err;
DBG("Done reading");
- near_tlv_parse(tag->tag, tag->cb, nfc_data, data_length);
+ near_tlv_parse(tag->tag, tag->cb);
g_free(tag);
nfc_data = near_tag_get_data(tag, &tag_length);
memcpy(nfc_data, ndefs, total_ndef_length);
- near_tlv_parse(tag, cb, nfc_data, total_ndef_length);
+ near_tlv_parse(tag, cb);
g_free(ndefs);
nfc_data = near_tag_get_data(tag, &tag_length);
memcpy(nfc_data, snep_data.nfc_data, tag_length);
- near_tlv_parse(tag, cb, nfc_data, tag_length);
+ near_tlv_parse(tag, cb);
g_free(snep_data.nfc_data);
} else {
snep_response_noinfo(client_fd, SNEP_RESP_CONTINUE);
return tlv + 1 + l_length;
}
-int near_tlv_parse(struct near_tag *tag, near_tag_io_cb cb,
- uint8_t *data, uint16_t length)
+int near_tlv_parse(struct near_tag *tag, near_tag_io_cb cb)
{
- uint8_t *tlv = data, t;
+ uint8_t *tlv, *data, t;
+ size_t tlv_length;
uint32_t adapter_idx = near_tag_get_adapter_idx(tag);
uint32_t target_idx = near_tag_get_target_idx(tag);
DBG("");
+ tlv = near_tag_get_data(tag, &tlv_length);
+ data = tlv;
+
while(1) {
t = tlv[0];
tlv = near_tlv_next(tlv);
- if (tlv - data >= length)
+ if (tlv - data >= (uint16_t) tlv_length)
break;
}