Example #1
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;
}
Example #2
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;
}