blob: 470e562344a8fe941b46674767009be638a5d1db [file] [log] [blame]
Jeff Thompson76317aa2013-06-25 19:11:48 -07001/*
2 * Author: Jeff Thompson
3 *
4 * BSD license, See the LICENSE file for more information.
5 */
6
7#ifndef NDN_BINARYXMLDECODER_H
8#define NDN_BINARYXMLDECODER_H
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14struct ndn_BinaryXMLDecoder {
Jeff Thompsond6f13282013-06-27 17:31:50 -070015 unsigned char *input;
Jeff Thompsonf7316692013-06-26 21:31:42 -070016 unsigned int inputLength;
Jeff Thompson76317aa2013-06-25 19:11:48 -070017 unsigned int offset;
18};
19
Jeff Thompsond6f13282013-06-27 17:31:50 -070020static inline void ndn_BinaryXMLDecoder_init(struct ndn_BinaryXMLDecoder *self, unsigned char *input, unsigned int inputLength)
Jeff Thompson6c9b6512013-06-27 15:59:47 -070021{
Jeff Thompson76317aa2013-06-25 19:11:48 -070022 self->input = input;
Jeff Thompsonf7316692013-06-26 21:31:42 -070023 self->inputLength = inputLength;
Jeff Thompson76317aa2013-06-25 19:11:48 -070024 self->offset = 0;
25}
26
Jeff Thompson179d0502013-06-28 11:36:00 -070027/**
28 * Decode the header's type and value from self's input starting at offset. Update offset.
29 * Even though the first byte should not be zero, this silently ignores initial zeros.
30 * @param self pointer to the ndn_BinaryXMLDecoder struct
31 * @param type output for the header type
32 * @param value output for the header value
33 * @return 0 for success, else an error string
34 */
Jeff Thompsond6f13282013-06-27 17:31:50 -070035char *ndn_BinaryXMLDecoder_decodeTypeAndValue(struct ndn_BinaryXMLDecoder *self, unsigned int *type, unsigned int *value);
Jeff Thompson76317aa2013-06-25 19:11:48 -070036
Jeff Thompsonf7316692013-06-26 21:31:42 -070037/**
Jeff Thompson179d0502013-06-28 11:36:00 -070038 * Decode the header from self's input starting at offset, expecting the type to be DTAG and the value to be the
39 * given tag. Update offset.
40 * @param self pointer to the ndn_BinaryXMLDecoder struct
41 * @param tag the expected value for DTAG
42 * @return 0 for success, else an error string, including an error if not the expected tag
43 */
44char *ndn_BinaryXMLDecoder_readDTag(struct ndn_BinaryXMLDecoder *self, unsigned int tag);
45
46/**
Jeff Thompsonf7316692013-06-26 21:31:42 -070047 * Set the offset into the input, used for the next read.
48 * @param self pointer to the ndn_BinaryXMLDecoder struct
49 * @param offset the new offset
50 */
Jeff Thompson6c9b6512013-06-27 15:59:47 -070051static inline void ndn_BinaryXMLDecoder_seek(struct ndn_BinaryXMLDecoder *self, unsigned int offset)
52{
Jeff Thompsonf7316692013-06-26 21:31:42 -070053 self->offset = offset;
54}
55
Jeff Thompson76317aa2013-06-25 19:11:48 -070056#ifdef __cplusplus
57}
58#endif
59
60#endif