// 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; }
// 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; }