Пример #1
0
// Create NodeDB.
static int nodedbCreate(struct s_nodedb *db, const int size, const int num_peeraddrs) {
	const int addrdb_vsize = mapMemSize(num_peeraddrs, peeraddr_SIZE, sizeof(struct s_nodedb_addrdata));
	const int addrdb_memsize = mapMemSize(size, nodeid_SIZE, addrdb_vsize);
	struct s_map *addrdb_mem;
	addrdb_mem = NULL;
	if(!((addrdb_mem = malloc(addrdb_memsize)) == NULL)) {
		memset(addrdb_mem, 0, addrdb_memsize);
		if(mapMemInit(addrdb_mem, addrdb_memsize, size, nodeid_SIZE, addrdb_vsize)) {
			db->addrdb = addrdb_mem;
			db->num_peeraddrs = num_peeraddrs;
			nodedbInit(db);
			return 1;
		}
		free(addrdb_mem);
	}
	return 0;
}
Пример #2
0
// Initialize peer manager object.
static int peermgtInit(struct s_peermgt *mgt) {
	const char *defaultpw = "default";
	int i;
	int s = mapGetMapSize(&mgt->map);
	struct s_peeraddr empty_addr;
	struct s_nodeid *local_nodeid = &mgt->nodekey->nodeid;
	
	mgt->msgsize = 0;
	mgt->loopback = 0;
	mgt->outmsg.len = 0;
	mgt->outmsgbroadcast = 0;
	mgt->outmsgbroadcastcount = 0;
	mgt->rrmsg.len = 0;
	mgt->rrmsgpeerid = 0;
	mgt->rrmsgusetargetaddr = 0;
	mgt->fragoutpeerid = 0;
	mgt->fragoutcount = 0;
	mgt->fragoutsize = 0;
	mgt->fragoutpos = 0;
	mgt->localflags = 0;
	
	for(i=0; i<s; i++) {
		mgt->data[i].state = peermgt_STATE_INVALID;
	}

	memset(empty_addr.addr, 0, peeraddr_SIZE);
	mapInit(&mgt->map);
	authmgtReset(&mgt->authmgt);
	nodedbInit(&mgt->nodedb);
	nodedbSetMaxAge(&mgt->nodedb, peermgt_NEWCONNECT_MAX_AGE);

	if(peermgtNew(mgt, local_nodeid, &empty_addr) == 0) { // ID 0 should always represent local NodeID
		if(peermgtGetID(mgt, local_nodeid) == 0) {
			if(peermgtSetNetID(mgt, defaultpw, 7) && peermgtSetPassword(mgt, defaultpw, 7)) {
				mgt->data[0].state = peermgt_STATE_COMPLETE;
				return 1;
			}
		}
	}
	
	return 0;
}