00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "Node.h"
00040
00041 #include "ariba/overlay/BaseOverlay.h"
00042 #include "ariba/utility/types/OverlayParameterSet.h"
00043 #include "ariba/communication/EndpointDescriptor.h"
00044
00045 using ariba::communication::EndpointDescriptor;
00046
00047 namespace ariba {
00048
00049 Node::Node(AribaModule& ariba_mod, const Name& node_name) :
00050 ariba_mod(ariba_mod), name(node_name) {
00051 base_overlay = new BaseOverlay();
00052 }
00053
00054 Node::~Node() {
00055 delete base_overlay;
00056 base_overlay = NULL;
00057 }
00058
00059 void Node::join(const Name& vnetname) {
00060 spovnetId = vnetname.toSpoVNetId();
00061 nodeId = generateNodeId(name);
00062
00063 const communication::EndpointDescriptor* ep =
00064 ariba_mod.getBootstrapNode(vnetname);
00065 if( ep == NULL ) {
00066 std::cout << "no bootstrap node defined" << std::endl;
00067 return;
00068 }
00069 ariba_mod.base_comm->start(ariba_mod.ip_addr, ariba_mod.tcp_port);
00070 base_overlay->start( *ariba_mod.base_comm, nodeId );
00071 base_overlay->joinSpoVNet( spovnetId, *ep);
00072 }
00073
00074 void Node::initiate(const Name& vnetname, const SpoVNetProperties& parm) {
00075 utility::OverlayParameterSet ovrpset;
00076 ovrpset.setOverlayStructure(
00077 (utility::OverlayParameterSet::_OverlayStructure)
00078 parm.getBaseOverlayType()
00079 );
00080
00081 spovnetId = vnetname.toSpoVNetId();
00082 nodeId = generateNodeId(name);
00083
00084 ariba_mod.base_comm->start(ariba_mod.ip_addr, ariba_mod.tcp_port);
00085
00086 base_overlay->start( *ariba_mod.base_comm, nodeId );
00087 base_overlay->createSpoVNet( spovnetId, ovrpset );
00088
00089 ariba_mod.addBootstrapNode(vnetname,
00090 new EndpointDescriptor(ariba_mod.base_comm->getEndpointDescriptor()));
00091 }
00092
00093 void Node::leave() {
00094 base_overlay->leaveSpoVNet();
00095 ariba_mod.base_comm->stop();
00096 base_overlay->stop();
00097 }
00098
00099 const SpoVNetProperties& Node::getSpoVNetProperties() const {
00100 return SpoVNetProperties::DEFAULT;
00101 }
00102
00103 const SpoVNetID& Node::getSpoVNetId() const {
00104 return spovnetId;
00105 }
00106
00107 const NodeID& Node::getNodeId(const LinkID& lid) const {
00108 if( lid == LinkID::UNSPECIFIED ) return nodeId;
00109 else return base_overlay->getNodeID( lid );
00110 }
00111
00112 NodeID Node::generateNodeId(const Name& name) const {
00113 if (name == Name::UNSPECIFIED) return Name::random().toNodeId();
00114 else return name.toNodeId();
00115 }
00116
00117 vector<NodeID> Node::getNeighborNodes() const {
00118 return base_overlay->getOverlayNeighbors();
00119 }
00120
00121 LinkID Node::establishLink(const NodeID& nid, const ServiceID& sid,
00122 const LinkProperties& req, const DataMessage& msg) {
00123 return base_overlay->establishLink(nid, sid);
00124 }
00125
00126 void Node::dropLink(const LinkID& lnk) {
00127 base_overlay->dropLink(lnk);
00128 }
00129
00130 seqnum_t Node::sendMessage(const DataMessage& msg, const NodeID& nid,
00131 const ServiceID& sid, const LinkProperties& req) {
00132 return base_overlay->sendMessage((Message*) msg, nid, sid);
00133 }
00134
00135 seqnum_t Node::sendMessage(const DataMessage& msg, const LinkID& lnk) {
00136 return base_overlay->sendMessage((Message*) msg, lnk);
00137 }
00138
00139 void Node::sendBroadcastMessage(const DataMessage& msg, const ServiceID& sid) {
00140 return base_overlay->broadcastMessage((Message*)msg, sid);
00141 }
00142
00143 bool Node::bind(NodeListener* listener) {
00144 return base_overlay->bind(listener);
00145 }
00146
00147 bool Node::unbind(NodeListener* listener) {
00148 return base_overlay->unbind(listener);
00149 }
00150
00151 bool Node::bind(CommunicationListener* listener, const ServiceID& sid) {
00152
00153 bool ret = base_overlay->bind(listener, sid);
00154
00155
00156 if( ariba_mod.sideport_sniffer != NULL ){
00157 bool allow = listener->onEnableSideportListener();
00158 base_overlay->registerSidePort(ariba_mod.sideport_sniffer);
00159 }
00160
00161 return ret;
00162 }
00163
00164 bool Node::unbind(CommunicationListener* listener, const ServiceID& sid) {
00165 return base_overlay->unbind(listener, sid);
00166 }
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179 void Node::initialize() {
00180
00181 }
00182
00183
00184 void Node::start() {
00185
00186 }
00187
00188
00189 void Node::stop() {
00190
00191 }
00192
00193
00194 string Node::getName() const {
00195
00196 }
00197
00198
00199 void Node::setProperty(string key, string value) {
00200
00201 }
00202
00203
00204 const string Node::getProperty(string key) const {
00205
00206 }
00207
00208
00209 const vector<string> Node::getProperties() const {
00210
00211 }
00212
00213 }