An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/SpoVNetProperties.h @ 2409

Last change on this file since 2409 was 2409, checked in by mies, 15 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.