Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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