blob: a776912969c212004b3d1dc99c647b93c7c54fa8 [file] [log] [blame]
Jeff Thompson47eecfc2013-07-07 22:56:46 -07001/**
2 * @author: Jeff Thompson
3 * See COPYING for copyright and distribution information.
Jeff Thompsonb7f95562013-07-03 18:36:42 -07004 */
5
6#ifndef NDN_INTEREST_HPP
7#define NDN_INTEREST_HPP
8
9#include <vector>
10#include "Name.hpp"
11#include "c/Interest.h"
12
13namespace ndn {
14
15class Interest {
16public:
17 void encode(std::vector<unsigned char> &output, WireFormat &wireFormat)
18 {
19 wireFormat.encodeInterest(*this, output);
20 }
21 void encode(std::vector<unsigned char> &output)
22 {
23 encode(output, BinaryXMLWireFormat::instance());
24 }
25 void decode(const unsigned char *input, unsigned int inputLength, WireFormat &wireFormat)
26 {
27 wireFormat.decodeInterest(*this, input, inputLength);
28 }
29 void decode(const unsigned char *input, unsigned int inputLength)
30 {
31 decode(input, inputLength, BinaryXMLWireFormat::instance());
32 }
33 void decode(const std::vector<unsigned char> &input, WireFormat &wireFormat)
34 {
35 decode(&input[0], input.size(), wireFormat);
36 }
37 void decode(const std::vector<unsigned char> &input)
38 {
39 decode(&input[0], input.size());
40 }
Jeff Thompsond9e278c2013-07-08 15:20:13 -070041
42 /**
43 * Set the interestStruct to point to the components in this interest, without copying any memory.
44 * WARNING: The resulting pointers in interestStruct are invalid after a further use of this object which could reallocate memory.
45 * @param interestStruct a C ndn_Interest struct where the name components array is already allocated.
46 */
47 void get(struct ndn_Interest &interestStruct);
Jeff Thompsonb7f95562013-07-03 18:36:42 -070048
49 Name &getName() { return name_; }
50
Jeff Thompson22552902013-07-07 21:26:20 -070051 int getInterestLifetime() { return interestLifetime_; }
52
Jeff Thompsonb7f95562013-07-03 18:36:42 -070053 /**
54 * Clear this interest, and set the values by copying from the interest struct.
55 * @param interestStruct a C ndn_Interest struct
56 */
57 void set(struct ndn_Interest &interestStruct);
58
59private:
60
61 Name name_;
62 int maxSuffixComponents_;
63 int minSuffixComponents_;
64
65 std::vector<unsigned char> publisherPublicKeyDigest_;
66 // TODO: implement exclude
67 int childSelector_;
68 int answerOriginKind_;
69 int scope_;
70 int interestLifetime_;
71 std::vector<unsigned char> nonce_;
72};
73
74}
75
76#endif