source: source/ariba/SpoVNetProperties.h@ 2420

Last change on this file since 2420 was 2409, checked in by mies, 16 years ago

moved tidy & pingpong

File size: 4.7 KB
Line 
1// [License]
2// The Ariba-Underlay Copyright
3//
4// Copyright (c) 2008-2009, Institute of Telematics, UniversitÀt Karlsruhe (TH)
5//
6// Institute of Telematics
7// UniversitÀt Karlsruhe (TH)
8// Zirkel 2, 76128 Karlsruhe
9// Germany
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
22// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OF TELEMATICS OR
25// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32//
33// The views and conclusions contained in the software and documentation
34// are those of the authors and should not be interpreted as representing
35// official policies, either expressed or implied, of the Institute of
36// Telematics.
37// [License]
38
39#ifndef SPOVNETPROPERTIES_H_
40#define SPOVNETPROPERTIES_H_
41
42#include <string>
43#include <iostream>
44#include <streambuf>
45
46using std::string;
47
48namespace ariba {
49// forward declaration
50class SpoVNetProperties;
51}
52
53#include "Identifiers.h"
54#include "Name.h"
55
56namespace ariba {
57
58/**
59 * This class implements a container that holds all properties of a
60 * SpoVNet instance. It may evolve with new features when new features
61 * are introduced.
62 *
63 * @author Sebastian Mies <mies@tm.uka.de>
64 */
65class SpoVNetProperties {
66public:
67 enum OverlayType {
68 ONE_HOP_OVERLAY = 0,
69 CHORD_OVERLAY = 1,
70 KADEMLIA_OVERLAY = 2,
71 };
72private:
73 Name name;
74 SpoVNetID id;
75 uint8_t type;
76 uint16_t idLength;
77 NodeID initiator;
78 bool hidden;
79
80public:
81 /**
82 * This object holds the default settings for a newly created spovnet
83 * instance.
84 */
85 const static SpoVNetProperties DEFAULT;
86
87public:
88 /**
89 * Constructs a new default SpoVnet property object.
90 */
91 SpoVNetProperties() {
92 name = Name::random();
93 id = name.toSpoVNetId();
94 type = ONE_HOP_OVERLAY;
95 idLength = 192;
96 initiator = NodeID::UNSPECIFIED;
97 hidden = false;
98 }
99
100 /**
101 * Constructs a new SpoVnet property object.
102 *
103 * TODO: replace with setters! for downwards compatibility
104 */
105 /*
106 SpoVNetProperties(const Name& name, SpoVNetID id, OverlayType type,
107 uint16_t idLength, const NodeID& initiator, bool hidden = false) :
108 name(name), id(id), type(type), idLength(idLength),
109 initiator(initiator), hidden(hidden) {
110 }*/
111
112 /**
113 * Copy constructor.
114 */
115 SpoVNetProperties(const SpoVNetProperties& copy) {
116 this->name = copy.name;
117 this->id = copy.id;
118 this->type = copy.type;
119 this->idLength = copy.idLength;
120 this->initiator = copy.initiator;
121 this->hidden = copy.hidden;
122 }
123
124 /**
125 * Destructor.
126 */
127 ~SpoVNetProperties() {
128 }
129
130 /**
131 * Returns the canonical SpoVNet name
132 */
133 const Name& getName() const {
134 return name;
135 }
136
137 /**
138 * Returns the SpoVNet id
139 */
140 const SpoVNetID& getId() const {
141 return id;
142 }
143
144 /**
145 * Returns the node id of the initiator of the spovnet.
146 * If the node id is unspecified, the initiator wanted to be anonymous.
147 */
148 const NodeID& getInitiator() const {
149 return initiator;
150 }
151
152 /**
153 * Returns the node identifier length in bites
154 */
155 uint16_t getIdentifierLength() const {
156 return idLength;
157 }
158
159 /**
160 * Returns the overlay type.
161 */
162 const OverlayType getBaseOverlayType() const {
163 return (OverlayType)type;
164 }
165
166 /**
167 * Returns true, if the spovnet is hidden
168 */
169 bool isHidden() const {
170 return hidden;
171 }
172
173 /**
174 * Returns a human readable string representation of the SpoVNet properties
175 *
176 * @return A human readable string representation of the SpoVNet properties
177 */
178 std::string toString() const {
179 std::ostringstream buf;
180 buf << "spovnet"
181 << " name=" << name.toString()
182 << " id=" << id.toString()
183 << " base_overlay_type=" << type << " id_length="
184 << idLength << " initiator=" << initiator
185 << " hidden=" << hidden;
186 return buf.str();
187 }
188};
189
190}
191
192#endif /* SPOVNETPROPERTIES_H_ */
Note: See TracBrowser for help on using the repository browser.