static void executeList(int tokenCount, char **tokens) { Sdr sdr = getIonsdr(); PsmPartition ionwm = getIonwm(); IonVdb *vdb = getIonVdb(); PsmAddress elt; PsmAddress addr; char buffer[RFX_NOTE_LEN]; if (tokenCount < 2) { printText("List what?"); return; } if (strcmp(tokens[1], "contact") == 0) { CHKVOID(sdr_begin_xn(sdr)); for (elt = sm_rbt_first(ionwm, vdb->contactIndex); elt; elt = sm_rbt_next(ionwm, elt)) { addr = sm_rbt_data(ionwm, elt); rfx_print_contact(addr, buffer); printText(buffer); } sdr_exit_xn(sdr); return; } if (strcmp(tokens[1], "range") == 0) { CHKVOID(sdr_begin_xn(sdr)); for (elt = sm_rbt_first(ionwm, vdb->rangeIndex); elt; elt = sm_rbt_next(ionwm, elt)) { addr = sm_rbt_data(ionwm, elt); rfx_print_range(addr, buffer); printText(buffer); } sdr_exit_xn(sdr); return; } SYNTAX_ERROR; }
void ionProd(unsigned long fromNode, unsigned long toNode, unsigned long xmitRate, unsigned int owlt) { Sdr ionsdr = _ionsdr(NULL); time_t fromTime; time_t toTime; Object elt; char textbuf[RFX_NOTE_LEN]; if (ionsdr == NULL) { if (ionAttach() < 0) { writeMemo("[?] ionProd: node not initialized yet."); return; } } fromTime = getUTCTime(); /* The current time. */ toTime = fromTime + 14400; /* Four hours later. */ elt = rfx_insert_range(fromTime, toTime, fromNode, toNode, owlt); if (elt == 0) { writeMemoNote("[?] ionProd: range insertion failed.", utoa(owlt)); return; } writeMemo("ionProd: range inserted."); writeMemo(rfx_print_range(sdr_list_data(ionsdr, elt), textbuf)); elt = rfx_insert_contact(fromTime, toTime, fromNode, toNode, xmitRate); if (elt == 0) { writeMemoNote("[?] ionProd: contact insertion failed.", utoa(xmitRate)); return; } writeMemo("ionProd: contact inserted."); writeMemo(rfx_print_contact(sdr_list_data(ionsdr, elt), textbuf)); }
static void executeInfo(int tokenCount, char **tokens) { Sdr sdr = getIonsdr(); PsmPartition ionwm = getIonwm(); IonVdb *vdb = getIonVdb(); time_t refTime; time_t timestamp; uvast fromNode; uvast toNode; IonCXref arg1; PsmAddress elt; PsmAddress addr; PsmAddress nextElt; char buffer[RFX_NOTE_LEN]; IonRXref arg2; if (tokenCount < 2) { printText("Information on what?"); return; } if (tokenCount != 5) { SYNTAX_ERROR; return; } refTime = _referenceTime(NULL); timestamp = readTimestampUTC(tokens[2], refTime); fromNode = strtouvast(tokens[3]); toNode = strtouvast(tokens[4]); if (strcmp(tokens[1], "contact") == 0) { memset((char *) &arg1, 0, sizeof(IonCXref)); arg1.fromNode = fromNode; arg1.toNode = toNode; arg1.fromTime = timestamp; CHKVOID(sdr_begin_xn(sdr)); elt = sm_rbt_search(ionwm, vdb->contactIndex, rfx_order_contacts, &arg1, &nextElt); if (elt) { addr = sm_rbt_data(ionwm, elt); oK(rfx_print_contact(addr, buffer)); printText(buffer); } else { printText("Contact not found in database."); } sdr_exit_xn(sdr); return; } if (strcmp(tokens[1], "range") == 0) { memset((char *) &arg2, 0, sizeof(IonRXref)); arg2.fromNode = fromNode; arg2.toNode = toNode; arg2.fromTime = timestamp; CHKVOID(sdr_begin_xn(sdr)); elt = sm_rbt_search(ionwm, vdb->rangeIndex, rfx_order_ranges, &arg2, &nextElt); if (elt) { addr = sm_rbt_data(ionwm, elt); oK(rfx_print_range(addr, buffer)); printText(buffer); } else { printText("Range not found in database."); } sdr_exit_xn(sdr); return; } SYNTAX_ERROR; }