NodeHandle Class Reference

This class implements a node handle. More...

#include <NodeHandle.h>

Inheritance diagram for NodeHandle:
TransportAddress BootstrapNodeHandle BrooseHandle GiaNode ProxNodeHandle KademliaBucketEntry

List of all members.

Public Types

typedef UNORDERED_SET
< NodeHandle, hashFcn
Set
 a hash_set of NodeHandles

Public Member Functions

 NodeHandle ()
 Constructs an unspecified NodeHandle.
virtual ~NodeHandle ()
 Standard destructor.
 NodeHandle (const NodeHandle &handle)
 Copy constructor.
 NodeHandle (const OverlayKey &key, const IPvXAddress &ip, int port)
 Complete constructor.
 NodeHandle (const TransportAddress &ta)
 Constructor to generate a NodeHandle from a TransportAddress.
 NodeHandle (const OverlayKey &key, const TransportAddress &ta)
 Constructor to generate a NodeHandle from an existing OverlayKey and TransportAddress.
bool operator== (const NodeHandle &rhs) const
 compares this NodeHandle to another given NodeHandle
bool operator!= (const NodeHandle &rhs) const
 compares this NodeHandle to another given NodeHandle
bool operator< (const NodeHandle &rhs) const
 compares this to a given NodeHandle
bool operator> (const NodeHandle &rhs) const
 compares this to a given NodeHandle
bool operator<= (const NodeHandle &rhs) const
 compares this to a given NodeHandle
bool operator>= (const NodeHandle &rhs) const
 compares this to a given NodeHandle
NodeHandleoperator= (const NodeHandle &rhs)
 assigns key, ip and port of rhs to this->key, this->ip and this->port
void setKey (const OverlayKey &key)
 saves given key to NodeHandle::key
const OverlayKeygetKey () const
 returns key of this NodeHandle
bool isUnspecified () const
 indicates if this NodeHandle is specified
virtual void netPack (cCommBuffer *b)
 serializes the object into a buffer
virtual void netUnpack (cCommBuffer *b)
 deserializes the object from a buffer
virtual TransportAddressdup () const
 returns a copy of the NodeHandle

Static Public Attributes

static const NodeHandle UNSPECIFIED_NODE
 the unspecified NodeHandle

Protected Attributes

OverlayKey key
 the OverlayKey of this NodeHandle

Private Member Functions

void assertUnspecified (const NodeHandle &handle) const
 throws an opp_error if this or handle is unspecified

Friends

std::ostream & operator<< (std::ostream &os, const NodeHandle &n)
 standard output stream for NodeHandle, gives out ip, port and key

Detailed Description

This class implements a node handle.


It covers the complete node information, like IP-Address, port, NodeKey and some additional flags for Simulation behaviour. The information can be sparse, so parts can be omited by setting the property to an unspecified value.

Author:
Markus Mauch
Sebastian Mies

Definition at line 50 of file NodeHandle.h.


Member Typedef Documentation

typedef UNORDERED_SET<NodeHandle, hashFcn> NodeHandle::Set

a hash_set of NodeHandles

Reimplemented from TransportAddress.

Definition at line 53 of file NodeHandle.h.


Constructor & Destructor Documentation

NodeHandle::NodeHandle (  ) 

Constructs an unspecified NodeHandle.

Definition at line 49 of file NodeHandle.cc.

Referenced by dup().

00050 {
00051     port = -1;
00052     key = OverlayKey(); // unspecified key, note: OverlayKey::UNSPECIFIED_KEY might not be initialized here
00053 }

virtual NodeHandle::~NodeHandle (  )  [inline, virtual]

Standard destructor.

Definition at line 68 of file NodeHandle.h.

00068 {};

NodeHandle::NodeHandle ( const NodeHandle handle  ) 

Copy constructor.

Parameters:
handle The NodeHandle to copy

Definition at line 56 of file NodeHandle.cc.

00057 {
00058     key = handle.key;
00059     port = handle.port;
00060     ip = handle.ip;
00061 }

NodeHandle::NodeHandle ( const OverlayKey key,
const IPvXAddress &  ip,
int  port 
)

Complete constructor.

Parameters:
key The OverlayKey
ip The IPvXAddress
port The UDP-Port

Definition at line 71 of file NodeHandle.cc.

00073 {
00074     this->setAddress(ip);
00075     this->setPort(port);
00076     this->setKey(key);
00077 }

NodeHandle::NodeHandle ( const TransportAddress ta  ) 

Constructor to generate a NodeHandle from a TransportAddress.

The key will be unspecified.

Parameters:
ta transport address

Definition at line 63 of file NodeHandle.cc.

00064 {
00065     this->setAddress(ta.getAddress());
00066     this->setPort(ta.getPort());
00067     this->setKey(OverlayKey::UNSPECIFIED_KEY);
00068 }

NodeHandle::NodeHandle ( const OverlayKey key,
const TransportAddress ta 
)

Constructor to generate a NodeHandle from an existing OverlayKey and TransportAddress.

Parameters:
key the overlay key
ta transport address

Definition at line 79 of file NodeHandle.cc.

00080 {
00081     this->setAddress(ta.getAddress());
00082     this->setPort(ta.getPort());
00083     this->setKey(key);
00084 }


Member Function Documentation

void NodeHandle::assertUnspecified ( const NodeHandle handle  )  const [inline, private]

throws an opp_error if this or handle is unspecified

Parameters:
handle the NodeHandle to check

Definition at line 183 of file NodeHandle.cc.

Referenced by operator!=(), operator<(), operator==(), and operator>().

00184 {
00185     if ( this->isUnspecified() || handle.isUnspecified() )
00186         opp_error("NodeHandle: Trying to compare unspecified NodeHandle!");
00187 }

TransportAddress * NodeHandle::dup (  )  const [virtual]

returns a copy of the NodeHandle

Returns:
a copy of the NodeHandle

Reimplemented from TransportAddress.

Definition at line 206 of file NodeHandle.cc.

00207 {
00208     return new NodeHandle(*this);
00209 }

const OverlayKey & NodeHandle::getKey (  )  const

returns key of this NodeHandle

Returns:
the key of this NodeHandle

Definition at line 176 of file NodeHandle.cc.

Referenced by BrooseBucket::add(), GiaMessageBookkeeping::addMessage(), PastryRoutingTable::addRow(), IterativeLookup::addSibling(), Quon::addSite(), oversim::ChordSuccessorList::addSuccessor(), BasePastry::baseChangeState(), BasePastry::baseInit(), BaseOverlay::bindToPort(), BootstrapNodeHandle::BootstrapNodeHandle(), BrooseHandle::BrooseHandle(), BaseApp::callRoute(), BaseOverlay::callUpdate(), Vast::changeState(), Quon::changeState(), Pastry::changeState(), Gia::changeState(), oversim::Chord::changeState(), Bamboo::changeState(), Pastry::checkProxCache(), oversim::Chord::closestPreceedingNode(), GiaNeighborCandidateList::contains(), Nps::coordsReqRpcResponse(), KBRTestApp::createDestKey(), Quon::deleteSite(), KBRTestApp::deliver(), Broose::displayBucketState(), Bamboo::doGlobalTuning(), Bamboo::doLocalTuning(), Pastry::doRoutingTableMaintenance(), Pastry::doSecondStage(), ConnectivityProbe::extractTopology(), PastryRoutingTable::findCloserNode(), oversim::Koorde::findDeBruijnHop(), MyOverlay::findNode(), oversim::Koorde::findNode(), oversim::Chord::findNode(), Broose::findNode(), BaseOverlay::findNodeRpc(), BasePastry::finishOverlay(), Gia::forwardMessage(), Gia::forwardSearchResponseMessage(), PastryLeafSet::getBiggestKey(), PastryLeafSet::getDestinationNode(), Quon::getKey(), Gia::getRoute(), PastryLeafSet::getSmallestKey(), PubSubMMOG::handleAdoptChildCall(), PubSubMMOG::handleAdoptChildResponse(), Vast::handleAppMessage(), Quon::handleAppMessage(), BaseOverlay::handleBaseOverlayMessage(), Kademlia::handleBucketRefreshTimerExpired(), BaseApp::handleCommonAPIMessage(), oversim::Koorde::handleDeBruijnTimerExpired(), Pastry::handleFailedNode(), oversim::Chord::handleFixFingersTimerExpired(), CBRDHT::handleGetCAPIRequest(), PubSubMMOG::handleHelpResponse(), PubSubMMOG::handleIntermediateResponse(), Scribe::handleJoinMessage(), Scribe::handleJoinResponse(), oversim::Chord::handleJoinTimerExpired(), Broose::handleJoinTimerExpired(), KBRTestApp::handleLookupResponse(), DHT::handleLookupResponse(), CBRDHT::handleLookupResponse(), BootstrapList::handleLookupResponse(), XmlRpcInterface::handleMessage(), BaseOverlay::handleMessage(), BaseApp::handleMessage(), PubSubMMOG::handleMoveMessage(), oversim::Chord::handleNewSuccessorHint(), Vast::handleNodeLeaveNotification(), PubSubMMOG::handlePingCall(), Scribe::handlePublishCall(), Scribe::handlePublishResponse(), DHT::handlePutRequest(), CBRDHT::handlePutRequest(), XmlRpcInterface::handleReadyMessage(), P2pns::handleReadyMessage(), BasePastry::handleRequestMessage(), IterativePathLookup::handleResponse(), oversim::Koorde::handleRpcCall(), oversim::Chord::handleRpcCall(), oversim::Koorde::handleRpcDeBruijnRequest(), oversim::Chord::handleRpcNotifyResponse(), Scribe::handleRpcResponse(), PubSubMMOG::handleRpcResponse(), oversim::Koorde::handleRpcResponse(), KBRTestApp::handleRpcResponse(), Kademlia::handleRpcResponse(), oversim::Chord::handleRpcResponse(), Broose::handleRpcResponse(), BootstrapList::handleRpcResponse(), oversim::Chord::handleRpcStabilizeResponse(), PubSubMMOG::handleRpcTimeout(), PubSubLobby::handleRpcTimeout(), oversim::Koorde::handleRpcTimeout(), Kademlia::handleRpcTimeout(), oversim::Chord::handleRpcTimeout(), Broose::handleRpcTimeout(), oversim::Chord::handleStabilizeTimerExpired(), Pastry::handleStateMessage(), Bamboo::handleStateMessage(), Scribe::handleTimerEvent(), Pastry::handleTimerEvent(), P2pns::handleTimerEvent(), MyOverlay::handleTimerEvent(), DHTTestApp::handleTimerEvent(), DHT::handleTimerEvent(), CBRDHT::handleTimerEvent(), Bamboo::handleTimerEvent(), Vast::handleUDPMessage(), Quon::handleUDPMessage(), Pastry::handleUDPMessage(), Gia::handleUDPMessage(), Bamboo::handleUDPMessage(), Scribe::handleUpperMessage(), SimpleGameClient::initializeApp(), BootstrapList::initializeApp(), BrooseBucket::initializeBucket(), oversim::Chord::initializeFriendModules(), BaseRpc::internalHandleRpcMessage(), PastryStateObject::isCloser(), PastryLeafSet::isClosestNode(), MyOverlay::isSiblingFor(), Kademlia::isSiblingFor(), oversim::Chord::isSiblingFor(), Broose::isSiblingFor(), BasePastry::isSiblingFor(), BaseOverlay::join(), oversim::Chord::joinForeignPartition(), Kademlia::joinOverlay(), KeyExtractor< ProxNodeHandle >::key(), KeyExtractor< NodeHandle >::key(), KeyExtractor< KademliaBucketEntry >::key(), KeyExtractor< LookupEntry >::key(), BrooseBucket::keyInRange(), XmlRpcInterface::localLookup(), BootstrapList::locateBootstrapNode(), IterativeLookup::lookup(), SendToKeyListener::lookupFinished(), PastryRoutingTable::lookupNextHop(), BaseOverlay::lookupRpc(), PastryRoutingTable::mergeNode(), PastryLeafSet::mergeNode(), Pastry::mergeState(), BaseOverlay::neighborSet(), BasePastry::newLeafs(), BrooseHandle::operator!=(), operator<<(), GiaNode::operator=(), BrooseHandle::operator=(), BrooseHandle::operator==(), BrooseBucket::output(), P2pns::p2pnsRegisterRpc(), BasePastry::pingNodes(), Pastry::pingResponse(), oversim::Chord::pingResponse(), BootstrapList::pingResponse(), BasePastry::pingResponse(), oversim::Chord::pingTimeout(), BootstrapList::pingTimeout(), BasePastry::pingTimeout(), Quon::processAliveTimer(), Gia::processSearchMessage(), BasePastry::proxCallback(), Quon::purgeSites(), BaseOverlay::route(), Kademlia::routingAdd(), Kademlia::routingBucketIndex(), Kademlia::routingInit(), oversim::Chord::rpcNotify(), Vast::sendDiscardNode(), Vast::sendMessage(), Quon::sendMessage(), BaseOverlay::sendMessageToUDP(), BaseApp::sendMessageToUDP(), IterativePathLookup::sendRpc(), Gia::sendSearchResponseMessage(), Kademlia::sendSiblingFindNodeCall(), BasePastry::sendStateTables(), Vast::sendToApp(), Quon::sendToApp(), BaseOverlay::sendToKey(), Kademlia::setBucketUsage(), PastryStateObject::specialCloserCondition(), IterativeLookup::start(), PubSubMMOG::startTimer(), IterativeLookup::stop(), Scribe::subscribeToGroup(), Scribe::update(), DHT::update(), oversim::ChordSuccessorList::updateList(), NeighborCache::updateNcsInfo(), NeighborCache::updateNode(), Quon::updateThisSite(), Broose::updateTooltip(), oversim::Koorde::walkDeBruijnList(), and oversim::Koorde::walkSuccessorList().

00177 {
00178     return key;
00179 }

bool NodeHandle::isUnspecified (  )  const

indicates if this NodeHandle is specified

Returns:
true, if NodeHandle has no ip or key specified, false otherwise

Reimplemented from TransportAddress.

Definition at line 87 of file NodeHandle.cc.

Referenced by Gia::acceptNode(), GiaNeighborCandidateList::add(), assertUnspecified(), Vast::buildVoronoi(), BaseOverlay::callUpdate(), Gia::changeState(), oversim::Chord::changeState(), Scribe::checkGroupEmpty(), oversim::Chord::closestPreceedingNode(), PubSubLobby::failedNode(), PastryRoutingTable::findCloserNode(), PastryLeafSet::findCloserNode(), PastryRoutingTable::findCloserNodes(), oversim::Koorde::findDeBruijnHop(), oversim::Chord::findNode(), BasePastry::findNode(), Gia::forwardMessage(), Gia::forwardSearchResponseMessage(), GiaNeighbors::get(), GlobalNodeList::getBootstrapNode(), BaseApp::handleCommonAPIMessage(), oversim::Koorde::handleFailedNode(), oversim::Chord::handleFailedNode(), PubSubMMOG::handleIntermediateResponse(), PubSubLobby::handleJoin(), PubSubMMOG::handleJoinResponse(), PubSubMMOG::handleMove(), PubSubMMOG::handlePingCallTimeout(), DHT::handlePutRequest(), CBRDHT::handlePutRequest(), PubSubLobby::handleRespCall(), oversim::Koorde::handleRpcDeBruijnRequest(), oversim::Chord::handleRpcJoinResponse(), oversim::Chord::handleRpcStabilizeResponse(), Scribe::handleTimerEvent(), Gia::handleTimerEvent(), oversim::Chord::handleTimerEvent(), Pastry::handleUDPMessage(), PastryLeafSet::insertLeaf(), PastryStateObject::isCloser(), oversim::Chord::isSiblingFor(), Gia::joinOverlay(), BootstrapList::locateBootstrapNode(), PastryRoutingTable::lookupNextHop(), BrooseHandle::operator!=(), operator<<(), BrooseHandle::operator==(), BasePastry::pingNodes(), BootstrapList::pingResponse(), BasePastry::pingResponse(), BasePastry::prePing(), PastryRoutingTable::repair(), Kademlia::routingAdd(), oversim::Chord::rpcFixfingers(), oversim::Chord::rpcJoin(), oversim::Chord::rpcNotify(), oversim::Chord::rpcStabilize(), PubSubMMOG::sendMessageToChildren(), BaseOverlay::sendToKey(), and PubSubMMOG::unsubscribeChild().

00088 {
00089     return (ip.isUnspecified() || key.isUnspecified());
00090 }

void NodeHandle::netPack ( cCommBuffer *  b  )  [virtual]

serializes the object into a buffer

Parameters:
b the buffer

Definition at line 190 of file NodeHandle.cc.

Referenced by doPacking().

00191 {
00192     //cMessage::netPack(b);
00193     doPacking(b,this->ip);
00194     doPacking(b,this->key);
00195     doPacking(b,this->port);
00196 }

void NodeHandle::netUnpack ( cCommBuffer *  b  )  [virtual]

deserializes the object from a buffer

Parameters:
b the buffer

Definition at line 198 of file NodeHandle.cc.

Referenced by doUnpacking().

00199 {
00200     //cMessage::netUnpack(b);
00201     doUnpacking(b,this->ip);
00202     doUnpacking(b,this->key);
00203     doUnpacking(b,this->port);
00204 }

bool NodeHandle::operator!= ( const NodeHandle rhs  )  const

compares this NodeHandle to another given NodeHandle

Parameters:
rhs the NodeHandle this is compared to
Returns:
true if OverlayKey, IPvXAddress and port is not equal, false otherwise

Definition at line 111 of file NodeHandle.cc.

00112 {
00113     assertUnspecified( rhs );
00114     return !operator==(rhs);
00115 }

bool NodeHandle::operator< ( const NodeHandle rhs  )  const

compares this to a given NodeHandle

Parameters:
rhs the NodeHandle this is compared to
Returns:
true if this->key is smaller than rhs->key, false otherwise

Definition at line 118 of file NodeHandle.cc.

Referenced by operator>=().

00119 {
00120     assertUnspecified(rhs);
00121     int cmp = key.compareTo(rhs.key);
00122     if (cmp < 0) {
00123         return true;
00124     } else if (cmp > 0) {
00125         return false;
00126     } else if (ip < rhs.ip) {
00127         return true;
00128     } else if (rhs.ip < ip) {
00129         return false;
00130     } else if (port < rhs.port) {
00131         return true;
00132     }
00133 
00134     return false;
00135 }

bool NodeHandle::operator<= ( const NodeHandle rhs  )  const

compares this to a given NodeHandle

Parameters:
rhs the NodeHandle this is compared to
Returns:
true if this->key is smaller than or equal to rhs->key, false otherwise

Definition at line 158 of file NodeHandle.cc.

00159 {
00160     return !operator>(rhs);
00161 }

NodeHandle & NodeHandle::operator= ( const NodeHandle rhs  ) 

assigns key, ip and port of rhs to this->key, this->ip and this->port

Parameters:
rhs the NodeHandle with the defined key, ip and port
Returns:
this NodeHandle object

Reimplemented in GiaNode.

Definition at line 93 of file NodeHandle.cc.

00094 {
00095     this->key = rhs.key;
00096     this->ip = rhs.ip;
00097     this->port = rhs.port;
00098 
00099     return *this;
00100 }

bool NodeHandle::operator== ( const NodeHandle rhs  )  const

compares this NodeHandle to another given NodeHandle

Parameters:
rhs the NodeHandle this is compared to
Returns:
true if OverlayKey, IPvXAddress and port is equal, false otherwise

Definition at line 103 of file NodeHandle.cc.

Referenced by operator!=().

00104 {
00105     assertUnspecified(rhs);
00106     return (this->port == rhs.port && this->ip == rhs.ip &&
00107             this->key == rhs.key);
00108 }

bool NodeHandle::operator> ( const NodeHandle rhs  )  const

compares this to a given NodeHandle

Parameters:
rhs the NodeHandle this is compared to
Returns:
true if this->key is greater than rhs->key, false otherwise

Definition at line 138 of file NodeHandle.cc.

Referenced by operator<=().

00139 {
00140     assertUnspecified(rhs);
00141     int cmp = key.compareTo(rhs.key);
00142     if (cmp > 0) {
00143         return true;
00144     } else if (cmp < 0) {
00145         return false;
00146     } else if (rhs.ip < ip) {
00147         return true;
00148     } else if (ip < rhs.ip) {
00149         return false;
00150     } else if (port > rhs.port) {
00151         return true;
00152     }
00153 
00154     return false;
00155 }

bool NodeHandle::operator>= ( const NodeHandle rhs  )  const

compares this to a given NodeHandle

Parameters:
rhs the NodeHandle this is compared to
Returns:
true if this->key is greater than or equal to rhs->key, false otherwise

Definition at line 164 of file NodeHandle.cc.

00165 {
00166     return !operator<(rhs);
00167 }

void NodeHandle::setKey ( const OverlayKey key  ) 

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const NodeHandle n 
) [friend]

standard output stream for NodeHandle, gives out ip, port and key

Parameters:
os the ostream
n the NodeHandle
Returns:
the output stream

Definition at line 30 of file NodeHandle.cc.

00031 {
00032     if (n.ip.isUnspecified()) {
00033         os << "<addr unspec> ";
00034     } else {
00035         os << n.ip << ":" << n.port << " ";
00036     }
00037 
00038     if (n.key.isUnspecified()) {
00039         os << "<key unspec>";
00040     } else {
00041         os << n.key;
00042     }
00043 
00044     return os;
00045 };


Member Data Documentation

the unspecified NodeHandle

Reimplemented from TransportAddress.

Reimplemented in ProxNodeHandle, and GiaNode.

Definition at line 107 of file NodeHandle.h.

Referenced by PastryLeafSet::balanceLeafSet(), oversim::Koorde::changeState(), oversim::Chord::changeState(), oversim::Chord::closestPreceedingNode(), Nps::coordsReqRpcResponse(), PastryRoutingTable::failedNode(), PastryLeafSet::failedNode(), PastryRoutingTable::findCloserNode(), PastryNeighborhoodSet::findCloserNode(), PastryLeafSet::findCloserNode(), GiaNeighborCandidateList::get(), GlobalNodeList::getBootstrapNode(), BootstrapList::getBootstrapNode(), PastryStateObject::getDestinationNode(), PastryLeafSet::getDestinationNode(), GiaMessageBookkeeping::getNextHop(), GlobalNodeList::getRandomNode(), DHTDataStorage::getSourceNode(), oversim::ChordSuccessorList::getSuccessor(), PubSubMMOG::handleBackupCallTimeout(), BaseApp::handleCommonAPIMessage(), oversim::Koorde::handleFailedNode(), oversim::ChordFingerTable::handleFailedNode(), oversim::Chord::handleFailedNode(), IterativePathLookup::handleFailedNodeResponse(), PubSubMMOG::handlePingCallTimeout(), Scribe::handlePublishResponse(), oversim::Chord::handleStabilizeTimerExpired(), IterativePathLookup::handleTimeout(), PastryLeafSet::initializeSet(), BaseRpc::internalHandleRpcMessage(), BaseOverlay::internalSendRpcResponse(), BaseApp::internalSendRpcResponse(), PastryRoutingTable::lookupNextHop(), PubSubSubspace::PubSubSubspace(), PubSubSubspaceResponsible::PubSubSubspaceResponsible(), QuonSite::QuonSite(), oversim::ChordFingerTable::removeFinger(), ScribeGroup::ScribeGroup(), oversim::ChordFingerTable::setFinger(), Site::Site(), oversim::ChordFingerTable::updateFinger(), and oversim::Koorde::walkDeBruijnList().


The documentation for this class was generated from the following files:
Generated on Wed May 26 16:21:18 2010 for OverSim by  doxygen 1.6.3