// 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; }
// Create auth manager object. int authmgtCreate(struct s_authmgt *mgt, struct s_netid *netid, const int auth_slots, struct s_nodekey *local_nodekey, struct s_dh_state *dhstate) { debug("Initializing AuthMgt"); int ac; struct s_auth_state *authstate_mem; struct s_peeraddr *peeraddr_mem; int *lastsend_mem; int *lastrecv_mem; if(auth_slots <= 0) { debug("No auth slots available"); return 0; } lastsend_mem = malloc(sizeof(int) * auth_slots); if(lastsend_mem == NULL) { debug("failed to allocate memory for send_mem / auth_slots"); return 0; } lastrecv_mem = malloc(sizeof(int) * auth_slots); if(lastrecv_mem == NULL) { debug("failed to allocate memory for recv_mem / auth_slots"); return 0; } authstate_mem = malloc(sizeof(struct s_auth_state) * auth_slots); if(authstate_mem == NULL) { free(authstate_mem); debug("failed to allocate memory for authstate"); return 0; } peeraddr_mem = malloc(sizeof(struct s_peeraddr) * auth_slots); if(peeraddr_mem == NULL) { free(authstate_mem); free(peeraddr_mem); debug("failed to allocate memory for peeraddr_mem"); return 0; } ac = 0; while(ac < auth_slots) { if(!authCreate(&authstate_mem[ac], netid, local_nodekey, dhstate, (ac + 1))) break; ac++; } if(!(ac < auth_slots)) { if(idspCreate(&mgt->idsp, auth_slots)) { mgt->lastsend = lastsend_mem; mgt->lastrecv = lastrecv_mem; mgt->authstate = authstate_mem; mgt->peeraddr = peeraddr_mem; authmgtReset(mgt); return 1; } } while(ac > 0) { ac--; authDestroy(&authstate_mem[ac]); } return 0; }