Public Types | Public Member Functions | Static Public Attributes | Protected Attributes | Private Member Functions | Friends

NodeHandle Class Reference

This class implements a node handle. More...

#include <NodeHandle.h>

Inheritance diagram for NodeHandle:
TransportAddress BootstrapNodeHandle BrooseHandle GiaNode MarkedNodeHandle 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().

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

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

Standard destructor.

Definition at line 68 of file NodeHandle.h.

{};

NodeHandle::NodeHandle ( const NodeHandle handle  ) 

Copy constructor.

Parameters:
handle The NodeHandle to copy

Definition at line 56 of file NodeHandle.cc.

{
    key = handle.key;
    port = handle.port;
    ip = handle.ip;
}

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.

{
    this->setIp(ip);
    this->setPort(port);
    this->setKey(key);
}

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.

{
    this->setIp(ta.getIp());
    this->setPort(ta.getPort());
    this->setKey(OverlayKey::UNSPECIFIED_KEY);
}

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.

{
    this->setIp(ta.getIp());
    this->setPort(ta.getPort());
    this->setKey(key);
}


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>().

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

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.

{
    return new NodeHandle(*this);
}

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(), NTree::checkParentTimeout(), Pastry::checkProxCache(), oversim::Chord::closestPreceedingNode(), NTree::collapseTree(), GiaNeighborCandidateList::contains(), Nps::coordsReqRpcResponse(), KBRTestApp::createDestKey(), Quon::deleteSite(), KBRTestApp::deliver(), Broose::displayBucketState(), NTree::divideNode(), 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(), NTree::handleAddMessage(), PubSubMMOG::handleAdoptChildCall(), PubSubMMOG::handleAdoptChildResponse(), Vast::handleAppMessage(), Quon::handleAppMessage(), oversim::Nice::handleAppMessage(), BaseOverlay::handleBaseOverlayMessage(), Kademlia::handleBucketRefreshTimerExpired(), NTree::handleCollapseMessage(), BaseApp::handleCommonAPIMessage(), oversim::Koorde::handleDeBruijnTimerExpired(), NTree::handleDivideCall(), Pastry::handleFailedNode(), oversim::Chord::handleFixFingersTimerExpired(), CBRDHT::handleGetCAPIRequest(), PubSubMMOG::handleHelpResponse(), PubSubMMOG::handleIntermediateResponse(), Quon::handleInvalidNode(), NTree::handleJoinCall(), Scribe::handleJoinMessage(), Scribe::handleJoinResponse(), NTree::handleJoinResponse(), oversim::Chord::handleJoinTimerExpired(), Broose::handleJoinTimerExpired(), KBRTestApp::handleLookupResponse(), DHT::handleLookupResponse(), CBRDHT::handleLookupResponse(), BootstrapList::handleLookupResponse(), XmlRpcInterface::handleMessage(), BaseOverlay::handleMessage(), BaseApp::handleMessage(), NTree::handleMove(), PubSubMMOG::handleMoveMessage(), oversim::Chord::handleNewSuccessorHint(), Quon::handleNodeLeave(), Vast::handleNodeLeaveNotification(), Quon::handleNodeMove(), PubSubMMOG::handlePingCall(), Scribe::handlePublishCall(), Scribe::handlePublishResponse(), XmlRpcInterface::handleReadyMessage(), P2pns::handleReadyMessage(), NTree::handleReplaceMessage(), BasePastry::handleRequestMessage(), IterativePathLookup::handleResponse(), oversim::Koorde::handleRpcCall(), oversim::Chord::handleRpcCall(), oversim::Koorde::handleRpcDeBruijnRequest(), oversim::Chord::handleRpcNotifyResponse(), Scribe::handleRpcResponse(), PubSubMMOG::handleRpcResponse(), NTree::handleRpcResponse(), oversim::Koorde::handleRpcResponse(), KBRTestApp::handleRpcResponse(), Kademlia::handleRpcResponse(), oversim::Chord::handleRpcResponse(), Broose::handleRpcResponse(), BootstrapList::handleRpcResponse(), oversim::Chord::handleRpcStabilizeResponse(), PubSubMMOG::handleRpcTimeout(), PubSubLobby::handleRpcTimeout(), NTree::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(), BaseOverlay::internalHandleRpcTimeout(), BaseOverlay::internalSendRpcResponse(), BaseApp::internalSendRpcResponse(), 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< MarkedNodeHandle >::key(), KeyExtractor< KademliaBucketEntry >::key(), KeyExtractor< LookupEntry >::key(), BrooseBucket::keyInRange(), NTree::leaveGroup(), 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(), NTree::routeViaNTree(), Kademlia::routingAdd(), Kademlia::routingBucketIndex(), Kademlia::routingInit(), oversim::Chord::rpcNotify(), Vast::sendDiscardNode(), Vast::sendMessage(), Quon::sendMessage(), NTree::sendMessage(), BaseOverlay::sendMessageToUDP(), BaseApp::sendMessageToUDP(), IterativePathLookup::sendRpc(), BaseRpc::sendRpcResponse(), Gia::sendSearchResponseMessage(), Kademlia::sendSiblingFindNodeCall(), BasePastry::sendStateTables(), Vast::sendToApp(), Quon::sendToApp(), NTree::sendToGroup(), BaseOverlay::sendToKey(), Kademlia::setBucketUsage(), PastryStateObject::specialCloserCondition(), IterativeLookup::start(), PubSubMMOG::startTimer(), IterativeLookup::stop(), Scribe::subscribeToGroup(), Scribe::update(), DHT::update(), P2pns::updateIdCacheWithNewTransport(), oversim::ChordSuccessorList::updateList(), NeighborCache::updateNcsInfo(), Gia::updateNeighborList(), NeighborCache::updateNode(), Quon::updateThisSite(), Broose::updateTooltip(), oversim::Koorde::walkDeBruijnList(), and oversim::Koorde::walkSuccessorList().

{
    return key;
}

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(), NTree::handleDivideResponse(), 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::handleRpcFixfingersResponse(), oversim::Chord::handleRpcJoinResponse(), oversim::Chord::handleRpcStabilizeResponse(), PubSubMMOG::handleSubscriptionBackup(), Scribe::handleTimerEvent(), Gia::handleTimerEvent(), oversim::Chord::handleTimerEvent(), Pastry::handleUDPMessage(), PubSubMMOG::handleUnsubscribeBackup(), PastryLeafSet::insertLeaf(), BaseRpc::internalHandleRpcMessage(), BaseOverlay::internalSendRpcResponse(), BaseApp::internalSendRpcResponse(), 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(), Vast::sendMessage(), PubSubMMOG::sendMessageToChildren(), BaseOverlay::sendToKey(), PubSubMMOG::unsubscribeChild(), and P2pns::updateIdCacheWithNewTransport().

{
    return (ip.isUnspecified() || key.isUnspecified());
}

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().

{
    //cMessage::netPack(b);
    doPacking(b,this->ip);
    doPacking(b,this->key);
    doPacking(b,this->port);
}

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().

{
    //cMessage::netUnpack(b);
    doUnpacking(b,this->ip);
    doUnpacking(b,this->key);
    doUnpacking(b,this->port);
}

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.

{
    assertUnspecified( rhs );
    return !operator==(rhs);
}

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>=().

{
    assertUnspecified(rhs);
    int cmp = key.compareTo(rhs.key);
    if (cmp < 0) {
        return true;
    } else if (cmp > 0) {
        return false;
    } else if (ip < rhs.ip) {
        return true;
    } else if (rhs.ip < ip) {
        return false;
    } else if (port < rhs.port) {
        return true;
    }

    return false;
}

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.

{
    return !operator>(rhs);
}

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.

{
    this->key = rhs.key;
    this->ip = rhs.ip;
    this->port = rhs.port;

    return *this;
}

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!=().

{
    assertUnspecified(rhs);
    return (this->port == rhs.port && this->ip == rhs.ip &&
            this->key == rhs.key);
}

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<=().

{
    assertUnspecified(rhs);
    int cmp = key.compareTo(rhs.key);
    if (cmp > 0) {
        return true;
    } else if (cmp < 0) {
        return false;
    } else if (rhs.ip < ip) {
        return true;
    } else if (ip < rhs.ip) {
        return false;
    } else if (port > rhs.port) {
        return true;
    }

    return false;
}

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.

{
    return !operator<(rhs);
}


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.

{
    if (n.ip.isUnspecified()) {
        os << "<addr unspec> ";
    } else {
        os << n.ip << ":" << n.port << " ";
    }

    if (n.key.isUnspecified()) {
        os << "<key unspec>";
    } else {
        os << n.key;
    }

    return os;
};


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(), NTree::collapseTree(), Nps::coordsReqRpcResponse(), PastryRoutingTable::failedNode(), PastryLeafSet::failedNode(), PastryRoutingTable::findCloserNode(), PastryNeighborhoodSet::findCloserNode(), PastryLeafSet::findCloserNode(), GiaNeighborCandidateList::get(), GlobalNodeList::getBootstrapNode(), BootstrapList::getBootstrapNode(), NTreeNode::getChildForPos(), 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: