From bf5c07f79a0f78e714fe47a5d1e09330022261ea Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Sat, 3 Aug 2013 12:53:46 -0400 Subject: Scratch that... more work wiring up netconf. Got to handle OK. --- node/PacketDecoder.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'node/PacketDecoder.cpp') diff --git a/node/PacketDecoder.cpp b/node/PacketDecoder.cpp index 518ed9e7..8d02b425 100644 --- a/node/PacketDecoder.cpp +++ b/node/PacketDecoder.cpp @@ -298,6 +298,20 @@ bool PacketDecoder::_doOK(const RuntimeEnvironment *_r,const SharedPtr &pe if (_r->topology->isSupernode(source())) _r->topology->addPeer(SharedPtr(new Peer(_r->identity,Identity(*this,ZT_PROTO_VERB_WHOIS__OK__IDX_IDENTITY))),&PacketDecoder::_CBaddPeerFromWhois,const_cast((const void *)_r)); break; + case Packet::VERB_NETWORK_CONFIG_REQUEST: { + SharedPtr nw(_r->nc->network(at(ZT_PROTO_VERB_NETWORK_CONFIG_REQUEST__OK__IDX_NETWORK_ID))); + if ((nw)&&(nw->controller() == source())) { + unsigned int dictlen = at(ZT_PROTO_VERB_NETWORK_CONFIG_REQUEST__OK__IDX_DICT_LEN); + std::string dict((const char *)field(ZT_PROTO_VERB_NETWORK_CONFIG_REQUEST__OK__IDX_DICT,dictlen),dictlen); + if (dict.length()) { + Network::Config netconf(dict); + if ((netconf.networkId() == nw->id())&&(netconf.peerAddress() == _r->identity.address())) { // sanity check + LOG("got network configuration for network %.16llx from %s",(unsigned long long)nw->id(),source().toString().c_str()); + nw->setConfiguration(netconf); + } + } + } + } break; default: //TRACE("%s(%s): OK(%s)",source().toString().c_str(),_remoteAddress.toString().c_str(),Packet::verbString(inReVerb)); break; -- cgit v1.2.3