IBR-DTNSuite
0.10
Main Page
Namespaces
Classes
Files
File List
File Members
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
8
#include "
ibrdtn/data/TrackingBlock.h
"
9
#include "
ibrdtn/data/BundleString.h
"
10
11
namespace
dtn
12
{
13
namespace
data
14
{
15
const
dtn::data::block_t
TrackingBlock::BLOCK_TYPE
= 193;
16
17
dtn::data::Block
*
TrackingBlock::Factory::create
()
18
{
19
return
new
TrackingBlock
();
20
}
21
22
TrackingBlock::TrackingBlock
()
23
: dtn::data::
Block
(
TrackingBlock
::
BLOCK_TYPE
)
24
{
25
}
26
27
TrackingBlock::~TrackingBlock
()
28
{
29
}
30
31
Length
TrackingBlock::getLength
()
const
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
80
Length
TrackingBlock::getLength_strict
()
const
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
90
const
TrackingBlock::tracking_list
&
TrackingBlock::getTrack
()
const
91
{
92
return
_entries;
93
}
94
95
void
TrackingBlock::append
(
const
dtn::data::EID
&eid)
96
{
97
TrackingEntry
entry(eid);
98
99
// include timestamp
100
entry.
setFlag
(
TrackingEntry::TIMESTAMP_PRESENT
,
true
);
101
102
// use default timestamp
103
//entry.timestamp.set();
104
105
_entries.push_back(entry);
106
}
107
108
TrackingBlock::TrackingEntry::TrackingEntry
()
109
{
110
}
111
112
TrackingBlock::TrackingEntry::TrackingEntry
(
const
dtn::data::EID
&eid)
113
: endpoint(eid)
114
{
115
}
116
117
TrackingBlock::TrackingEntry::~TrackingEntry
()
118
{
119
}
120
121
bool
TrackingBlock::TrackingEntry::getFlag
(
TrackingBlock::TrackingEntry::Flags
f)
const
122
{
123
return
flags.getBit(f);
124
}
125
126
void
TrackingBlock::TrackingEntry::setFlag
(
TrackingBlock::TrackingEntry::Flags
f,
bool
value)
127
{
128
flags.setBit(f, value);
129
}
130
131
Length
TrackingBlock::TrackingEntry::getLength
()
const
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
148
if
(entry.
getFlag
(
TrackingBlock::TrackingEntry::TIMESTAMP_PRESENT
)) {
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
161
if
(entry.
getFlag
(
TrackingBlock::TrackingEntry::TIMESTAMP_PRESENT
)) {
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 */
ibrdtn
ibrdtn
data
TrackingBlock.cpp
Generated on Mon Jul 22 2013 15:16:01 for IBR-DTNSuite by
1.8.3.1