An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/overlay/messages/DHTMessage.h @ 6266

Last change on this file since 6266 was 6266, checked in by mies, 14 years ago

added basic DHT functionality (untested)

File size: 1.6 KB
Line 
1#ifndef DHTMESSAGE_H_
2#define DHTMESSAGE_H_
3
4#include "ariba/utility/messages.h"
5#include "ariba/utility/serialization.h"
6
7namespace ariba {
8namespace overlay {
9
10using ariba::utility::Message;
11using_serialization;
12
13class DHTMessage : public Message { VSERIALIZEABLE
14public:
15        DHTMessage();
16        DHTMessage( const Data& key );
17        DHTMessage( const Data& key, const Data& value );
18        DHTMessage( const Data& key, const vector<Data>& values );
19        virtual ~DHTMessage();
20
21        const NodeID& getHashedKey() const {
22                return hash;
23        }
24
25        const Data& getKey() const {
26                return key;
27        }
28
29        /// returns the first element of the key vector
30        const Data& getValue() const {
31                return values.at(0);
32        }
33
34        bool hasValues() const {
35                values.size() != 0;
36        }
37
38        uint16_t getTTL() const {
39                return ttl;
40        }
41
42        void setTTL( uint16_t ttl ) {
43                this->ttl = ttl;
44        }
45
46        /// return alles values for the key
47        const vector<Data>& getValues() const {
48                return values;
49        }
50
51private:
52        NodeID hash;
53        uint16_t ttl;
54        Data key;
55        vector<Data> values;
56};
57
58}} // namespace ariba::overlay
59
60sznBeginDefault( ariba::overlay::DHTMessage, X ) {
61
62        X && ttl;
63
64        // key serialization
65        uint16_t key_length = key.getLength();
66        X && key_length;
67        if (X.isDeserializer()) key.setLength( key_length );
68        X && key;
69
70        // store number of values
71        uint16_t num_values = values.size();
72        X && num_values;
73
74        // value serialization
75        for (size_t i=0; i<num_values; i++) {
76                Data value = values[i];
77                uint16_t value_length = value.getLength();
78                X && value_length;
79                if (X.isDeserializer()) value.setLength( value_length );
80                X && value;
81                if (X.isDeserializer()) values.push_back(value);
82        }
83} sznEnd();
84
85#endif /* DHTMESSAGE_H_ */
Note: See TracBrowser for help on using the repository browser.