IBR-DTNSuite
0.10
Main Page
Namespaces
Classes
Files
File List
File Members
IBR-DTNSuite
Namespaces
Classes
Files
File List
daemon
ibrcommon
ibrdtn
ibrdtn
api
data
AdministrativeBlock.cpp
AdministrativeBlock.h
AgeBlock.cpp
AgeBlock.h
Block.cpp
Block.h
Bundle.cpp
Bundle.h
BundleBuilder.cpp
BundleBuilder.h
BundleFragment.cpp
BundleFragment.h
BundleID.cpp
BundleID.h
BundleList.cpp
BundleList.h
BundleMerger.cpp
BundleMerger.h
BundleSet.cpp
BundleSet.h
BundleString.cpp
BundleString.h
CompressedPayloadBlock.cpp
CompressedPayloadBlock.h
CustodySignalBlock.cpp
CustodySignalBlock.h
Dictionary.cpp
Dictionary.h
DTNTime.cpp
DTNTime.h
EID.cpp
EID.h
Exceptions.h
ExtensionBlock.cpp
ExtensionBlock.h
MetaBundle.cpp
MetaBundle.h
Number.h
PayloadBlock.cpp
PayloadBlock.h
PrimaryBlock.cpp
PrimaryBlock.h
SchedulingBlock.cpp
SchedulingBlock.h
ScopeControlHopLimitBlock.cpp
ScopeControlHopLimitBlock.h
SDNV.cpp
SDNV.h
Serializer.cpp
Serializer.h
StatusReportBlock.cpp
StatusReportBlock.h
StreamBlock.cpp
StreamBlock.h
TrackingBlock.cpp
TrackingBlock.h
security
streams
utils
config.h
ibrdtn.h
tools
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