IBR-DTNSuite  0.10
TrackingBlock.cpp
Go to the documentation of this file.
1 /*
2  * TrackingBlock.cpp
3  *
4  * Created on: 15.01.2013
5  * Author: morgenro
6  */
7 
10 
11 namespace dtn
12 {
13  namespace data
14  {
16 
18  {
19  return new TrackingBlock();
20  }
21 
23  : dtn::data::Block(TrackingBlock::BLOCK_TYPE)
24  {
25  }
26 
28  {
29  }
30 
32  {
33  Length ret = 0;
34 
35  // number of elements
36  dtn::data::Number count(_entries.size());
37  ret += count.getLength();
38 
39  for (tracking_list::const_iterator iter = _entries.begin(); iter != _entries.end(); ++iter)
40  {
41  const TrackingEntry &entry = (*iter);
42  ret += entry.getLength();
43  }
44 
45  return ret;
46  }
47 
48  std::ostream& TrackingBlock::serialize(std::ostream &stream, Length&) const
49  {
50  // number of elements
51  dtn::data::Number count(_entries.size());
52  stream << count;
53 
54  for (tracking_list::const_iterator iter = _entries.begin(); iter != _entries.end(); ++iter)
55  {
56  const TrackingEntry &entry = (*iter);
57  stream << entry;
58  }
59 
60  return stream;
61  }
62 
63  std::istream& TrackingBlock::deserialize(std::istream &stream, const Length&)
64  {
65  // number of elements
66  dtn::data::Number count;
67 
68  stream >> count;
69 
70  for (Number i = 0; i < count; ++i)
71  {
72  TrackingEntry entry;
73  stream >> entry;
74  _entries.push_back(entry);
75  }
76 
77  return stream;
78  }
79 
81  {
82  return getLength();
83  }
84 
85  std::ostream& TrackingBlock::serialize_strict(std::ostream &stream, Length &length) const
86  {
87  return serialize(stream, length);
88  }
89 
91  {
92  return _entries;
93  }
94 
96  {
97  TrackingEntry entry(eid);
98 
99  // include timestamp
101 
102  // use default timestamp
103  //entry.timestamp.set();
104 
105  _entries.push_back(entry);
106  }
107 
109  {
110  }
111 
113  : endpoint(eid)
114  {
115  }
116 
118  {
119  }
120 
122  {
123  return flags.getBit(f);
124  }
125 
127  {
128  flags.setBit(f, value);
129  }
130 
132  {
133  Length ret = flags.getLength();
134 
135  if (getFlag(TrackingEntry::TIMESTAMP_PRESENT)) {
136  ret += timestamp.getLength();
137  }
138 
139  ret += BundleString(endpoint.getString()).getLength();
140 
141  return ret;
142  }
143 
144  std::ostream& operator<<(std::ostream &stream, const TrackingBlock::TrackingEntry &entry)
145  {
146  stream << entry.flags;
147 
149  stream << entry.timestamp;
150  }
151 
152  dtn::data::BundleString endpoint(entry.endpoint.getString());
153  stream << endpoint;
154  return stream;
155  }
156 
157  std::istream& operator>>(std::istream &stream, TrackingBlock::TrackingEntry &entry)
158  {
159  stream >> entry.flags;
160 
162  stream >> entry.timestamp;
163  }
164 
165  BundleString endpoint;
166  stream >> endpoint;
167  entry.endpoint = dtn::data::EID((std::string&)endpoint);
168  return stream;
169  }
170  } /* namespace data */
171 } /* namespace dtn */