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
PrimaryBlock.cpp
Go to the documentation of this file.
1
/*
2
* PrimaryBlock.cpp
3
*
4
* Copyright (C) 2011 IBR, TU Braunschweig
5
*
6
* Written-by: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
7
*
8
* Licensed under the Apache License, Version 2.0 (the "License");
9
* you may not use this file except in compliance with the License.
10
* You may obtain a copy of the License at
11
*
12
* http://www.apache.org/licenses/LICENSE-2.0
13
*
14
* Unless required by applicable law or agreed to in writing, software
15
* distributed under the License is distributed on an "AS IS" BASIS,
16
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
* See the License for the specific language governing permissions and
18
* limitations under the License.
19
*
20
*/
21
22
#include "
ibrdtn/data/PrimaryBlock.h
"
23
#include "
ibrdtn/data/Exceptions.h
"
24
#include "
ibrdtn/utils/Clock.h
"
25
#include <
ibrcommon/thread/MutexLock.h
>
26
27
namespace
dtn
28
{
29
namespace
data
30
{
31
Number
PrimaryBlock::__sequencenumber = 0;
32
Timestamp
PrimaryBlock::__last_timestamp = 0;
33
ibrcommon::Mutex
PrimaryBlock::__sequence_lock;
34
35
PrimaryBlock::PrimaryBlock
()
36
: timestamp(0), sequencenumber(0), lifetime(3600), fragmentoffset(0), appdatalength(0)
37
{
38
relabel
();
39
40
// by default set destination as singleton bit
41
set
(
DESTINATION_IS_SINGLETON
,
true
);
42
}
43
44
PrimaryBlock::~PrimaryBlock
()
45
{
46
}
47
48
void
PrimaryBlock::set
(
FLAGS
flag,
bool
value)
49
{
50
procflags
.
setBit
(flag, value);
51
}
52
53
bool
PrimaryBlock::get
(
FLAGS
flag)
const
54
{
55
return
procflags
.
getBit
(flag);
56
}
57
58
PrimaryBlock::PRIORITY
PrimaryBlock::getPriority
()
const
59
{
60
if
(
get
(
PRIORITY_BIT1
))
61
{
62
return
PRIO_MEDIUM
;
63
}
64
65
if
(
get
(
PRIORITY_BIT2
))
66
{
67
return
PRIO_HIGH
;
68
}
69
70
return
PRIO_LOW
;
71
}
72
73
void
PrimaryBlock::setPriority
(
PrimaryBlock::PRIORITY
p)
74
{
75
// set the priority to the real bundle
76
switch
(p)
77
{
78
case
PRIO_LOW
:
79
set
(
PRIORITY_BIT1
,
false
);
80
set
(
PRIORITY_BIT2
,
false
);
81
break
;
82
83
case
PRIO_HIGH
:
84
set
(
PRIORITY_BIT1
,
false
);
85
set
(
PRIORITY_BIT2
,
true
);
86
break
;
87
88
case
PRIO_MEDIUM
:
89
set
(
PRIORITY_BIT1
,
true
);
90
set
(
PRIORITY_BIT2
,
false
);
91
break
;
92
}
93
}
94
95
bool
PrimaryBlock::operator!=
(
const
PrimaryBlock
& other)
const
96
{
97
return
!((*this) == other);
98
}
99
100
bool
PrimaryBlock::operator==
(
const
PrimaryBlock
& other)
const
101
{
102
if
(other.
timestamp
!=
timestamp
)
return
false
;
103
if
(other.
sequencenumber
!=
sequencenumber
)
return
false
;
104
if
(other.
source
!=
source
)
return
false
;
105
if
(other.
get
(
PrimaryBlock::FRAGMENT
) !=
get
(
PrimaryBlock::FRAGMENT
))
return
false
;
106
107
if
(
get
(
PrimaryBlock::FRAGMENT
))
108
{
109
if
(other.
fragmentoffset
!=
fragmentoffset
)
return
false
;
110
if
(other.
appdatalength
!=
appdatalength
)
return
false
;
111
}
112
113
return
true
;
114
}
115
116
bool
PrimaryBlock::operator<
(
const
PrimaryBlock
& other)
const
117
{
118
if
(
source
< other.
source
)
return
true
;
119
if
(
source
!= other.
source
)
return
false
;
120
121
if
(
timestamp
< other.
timestamp
)
return
true
;
122
if
(
timestamp
!= other.
timestamp
)
return
false
;
123
124
if
(
sequencenumber
< other.
sequencenumber
)
return
true
;
125
if
(
sequencenumber
!= other.
sequencenumber
)
return
false
;
126
127
if
(other.
get
(
PrimaryBlock::FRAGMENT
))
128
{
129
if
(!
get
(
PrimaryBlock::FRAGMENT
))
return
true
;
130
return
(
fragmentoffset
< other.
fragmentoffset
);
131
}
132
133
return
false
;
134
}
135
136
bool
PrimaryBlock::operator>
(
const
PrimaryBlock
& other)
const
137
{
138
return
!(((*this) < other) || ((*
this
) == other));
139
}
140
141
bool
PrimaryBlock::isExpired
()
const
142
{
143
return
dtn::utils::Clock::isExpired
(
lifetime
+
timestamp
,
lifetime
);
144
}
145
146
std::string
PrimaryBlock::toString
()
const
147
{
148
return
dtn::data::BundleID
(*this).
toString
();
149
}
150
151
void
PrimaryBlock::relabel
()
152
{
153
if
(
dtn::utils::Clock::isBad
())
154
{
155
timestamp
= 0;
156
}
157
else
158
{
159
timestamp
=
dtn::utils::Clock::getTime
();
160
}
161
162
ibrcommon::MutexLock
l(__sequence_lock);
163
if
(
timestamp
> __last_timestamp) {
164
__last_timestamp =
timestamp
;
165
__sequencenumber = 0;
166
}
167
168
sequencenumber
= __sequencenumber;
169
__sequencenumber++;
170
}
171
}
172
}
ibrdtn
ibrdtn
data
PrimaryBlock.cpp
Generated on Mon Jul 22 2013 15:16:00 for IBR-DTNSuite by
1.8.3.1