Topology::Topology(const RuntimeEnvironment *renv) : RR(renv), _amRoot(false) { std::string alls(RR->node->dataStoreGet("peers.save")); const uint8_t *all = reinterpret_cast<const uint8_t *>(alls.data()); RR->node->dataStoreDelete("peers.save"); Buffer<ZT_PEER_SUGGESTED_SERIALIZATION_BUFFER_SIZE> *deserializeBuf = new Buffer<ZT_PEER_SUGGESTED_SERIALIZATION_BUFFER_SIZE>(); unsigned int ptr = 0; while ((ptr + 4) < alls.size()) { try { const unsigned int reclen = ( // each Peer serialized record is prefixed by a record length ((((unsigned int)all[ptr]) & 0xff) << 24) | ((((unsigned int)all[ptr + 1]) & 0xff) << 16) | ((((unsigned int)all[ptr + 2]) & 0xff) << 8) | (((unsigned int)all[ptr + 3]) & 0xff) ); unsigned int pos = 0; deserializeBuf->copyFrom(all + ptr,reclen + 4); SharedPtr<Peer> p(Peer::deserializeNew(RR,RR->identity,*deserializeBuf,pos)); ptr += pos; if (!p) break; // stop if invalid records if (p->address() != RR->identity.address()) _peers.set(p->address(),p); } catch ( ... ) { break; // stop if invalid records } } delete deserializeBuf; clean(RR->node->now()); std::string dsWorld(RR->node->dataStoreGet("world")); World cachedWorld; if (dsWorld.length() > 0) { try { Buffer<ZT_WORLD_MAX_SERIALIZED_LENGTH> dswtmp(dsWorld.data(),(unsigned int)dsWorld.length()); cachedWorld.deserialize(dswtmp,0); } catch ( ... ) { cachedWorld = World(); // clear if cached world is invalid } } World defaultWorld; { Buffer<ZT_DEFAULT_WORLD_LENGTH> wtmp(ZT_DEFAULT_WORLD,ZT_DEFAULT_WORLD_LENGTH); defaultWorld.deserialize(wtmp,0); // throws on error, which would indicate a bad static variable up top } if (cachedWorld.shouldBeReplacedBy(defaultWorld,false)) { _setWorld(defaultWorld); if (dsWorld.length() > 0) RR->node->dataStoreDelete("world"); } else _setWorld(cachedWorld); }
std::string alltigenom(int jordskorpa, std::string* jordyta) { if (jordskorpa > 3 || *jordyta == "ju") return "jude"; int jovisst = jordskorpa + 1; std::string* jul = new std::string("julkorv"); int* julklapp = alls(jovisst, jul); std::string juristlag("juste"); int just = alltnog(&jovisst, juristlag); std::string* justering = new std::string("kajuta"); int* k = anskaffning(jovisst, justering); std::string* kaka = new std::string("kalk"); int* kalibrering = ana(jovisst, kaka); std::string* kalv = new std::string("kan"); int* kamera = allmoge(jovisst, kalv); std::string kanske("kapitalvara"); std::string* kapitalt = angivning(&jovisst, kanske); std::string kapning("karakterisering"); int kappa = allena(&jovisst, kapning); std::string* karakteristika = new std::string("karm"); std::string karl = almanacka(jovisst, karakteristika); std::string karmstol("karta"); return karmstol; } // alltigenom