示例#1
0
// Register new peer.
static int peermgtNew(struct s_peermgt *mgt, const struct s_nodeid *nodeid, const struct s_peeraddr *addr) {
	int tnow = utilGetTime();
	int peerid = mapAddReturnID(&mgt->map, nodeid->id, &tnow);
	if(!(peerid < 0)) {
		mgt->data[peerid].state = peermgt_STATE_AUTHED;
		mgt->data[peerid].remoteaddr = *addr;
		mgt->data[peerid].conntime = tnow;
		mgt->data[peerid].lastrecv = tnow;
		mgt->data[peerid].lastsend = tnow;
		mgt->data[peerid].lastpeerinfo = tnow;
		seqInit(&mgt->data[peerid].seq, cryptoRand64());
		mgt->data[peerid].remoteflags = 0;
		return peerid;
	}
	return -1;
}
示例#2
0
文件: nodedb.c 项目: Ragsboss/peervpn
// Update NodeDB entry.
static void nodedbUpdate(struct s_nodedb *db, struct s_nodeid *nodeid, struct s_peeraddr *addr, const int update_lastseen, const int update_lastconnect, const int update_lastconntry) {
	int tnow = utilGetClock();
	struct s_map *addrset;
	struct s_map *newaddrset;
	struct s_nodedb_addrdata *addrdata;
	struct s_nodedb_addrdata addrdata_new;

	if(db != NULL && nodeid != NULL && addr != NULL) {
		addrset = mapGet(db->addrdb, nodeid->id);
		if(addrset == NULL) {
			newaddrset = mapGetValueByID(db->addrdb, mapAddReturnID(db->addrdb, nodeid->id, NULL));
			if(newaddrset != NULL) {
				if(mapMemInit(newaddrset, mapMemSize(db->num_peeraddrs, peeraddr_SIZE, sizeof(struct s_nodedb_addrdata)), db->num_peeraddrs, peeraddr_SIZE, sizeof(struct s_nodedb_addrdata))) {
					mapEnableReplaceOld(newaddrset);
					addrset = newaddrset;
				}
			}
		}

		if(addrset != NULL) {
			addrdata_new.lastseen = 0;
			addrdata_new.lastconnect = 0;
			addrdata_new.lastconntry = 0;
			addrdata_new.lastseen_t = 0;
			addrdata_new.lastconnect_t = 0;
			addrdata_new.lastconntry_t = 0;
			if((addrdata = mapGet(addrset, addr->addr)) != NULL) {
				addrdata_new = *addrdata;
			}
			if(update_lastseen > 0) {
				addrdata_new.lastseen = 1;
				addrdata_new.lastseen_t = tnow;
			}
			if(update_lastconnect > 0) {
				addrdata_new.lastconnect = 1;
				addrdata_new.lastconnect_t = tnow;
			}
			if(update_lastconntry > 0) {
				addrdata_new.lastconntry = 1;
				addrdata_new.lastconntry_t = tnow;
			}
			mapSet(addrset, addr->addr, &addrdata_new);
		}
	}
}