// Check if PeerID is valid. static int peermgtIsValidID(struct s_peermgt *mgt, const int peerid) { if(!(peerid < 0)) { if(peerid < mapGetMapSize(&mgt->map)) { if(mapIsValidID(&mgt->map, peerid)) { return 1; } } } return 0; }
// Generate NodeDB status report. static void nodedbStatus(struct s_nodedb *db, char *report, const int report_len) { int i; int j; int size; int rpsize; int pos; int tnow; unsigned char timediff[4]; struct s_map *addrset; struct s_nodedb_addrdata *addrdata; tnow = utilGetClock(); size = mapGetKeyCount(db->addrdb); rpsize = (95 * (1 + db->num_peeraddrs)) + 2; pos = 0; memcpy(&report[pos], "NodeID + Address LastSeen LastConn LastTry ", 94); pos = pos + 94; report[pos++] = '\n'; i = 0; while(i < size && pos < (report_len - rpsize)) { if(mapIsValidID(db->addrdb, i)) { utilByteArrayToHexstring(&report[pos], ((nodeid_SIZE * 2) + 2), mapGetKeyByID(db->addrdb, i), nodeid_SIZE); pos = pos + (nodeid_SIZE * 2); addrset = mapGetValueByID(db->addrdb, i); memcpy(&report[pos], " ", 30); pos = pos + 30; j = 0; while(j < db->num_peeraddrs) { if(mapIsValidID(addrset, j)) { addrdata = mapGetValueByID(addrset, j); report[pos++] = '\n'; memcpy(&report[pos], " ", 12); pos = pos + 12; report[pos++] = '-'; report[pos++] = '-'; report[pos++] = '>'; report[pos++] = ' '; utilByteArrayToHexstring(&report[pos], ((peeraddr_SIZE * 2) + 2), mapGetKeyByID(addrset, j), peeraddr_SIZE); pos = pos + (peeraddr_SIZE * 2); report[pos++] = ' '; report[pos++] = ' '; if(addrdata->lastseen) { utilWriteInt32(timediff, (tnow - addrdata->lastseen_t)); utilByteArrayToHexstring(&report[pos], 10, timediff, 4); } else { memcpy(&report[pos], "--------", 8); } pos = pos + 8; report[pos++] = ' '; report[pos++] = ' '; if(addrdata->lastconnect) { utilWriteInt32(timediff, (tnow - addrdata->lastconnect_t)); utilByteArrayToHexstring(&report[pos], 10, timediff, 4); } else { memcpy(&report[pos], "--------", 8); } pos = pos + 8; report[pos++] = ' '; report[pos++] = ' '; if(addrdata->lastconntry) { utilWriteInt32(timediff, (tnow - addrdata->lastconntry_t)); utilByteArrayToHexstring(&report[pos], 10, timediff, 4); } else { memcpy(&report[pos], "--------", 8); } pos = pos + 8; } j++; } report[pos++] = '\n'; } i++; } report[pos++] = '\0'; }