int ltpcounter(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { int clientId = a1; int maxBytes = a2; #else int main(int argc, char **argv) { int clientId = (argc > 1 ? strtol(argv[1], NULL, 0) : 0); int maxBytes = (argc > 2 ? strtol(argv[2], NULL, 0) : 0); #endif IonAlarm alarm = { 5, 0, showProgress, NULL }; pthread_t alarmThread; int state = 1; LtpNoticeType type; LtpSessionId sessionId; unsigned char reasonCode; unsigned char endOfBlock; unsigned int dataOffset; unsigned int dataLength; Object data; char buffer[255]; if (clientId < 1) { PUTS("Usage: ltpcounter <client ID> [<max nbr of bytes>]"); PUTS(" Max nbr of bytes defaults to 2 billion."); return 0; } oK(_clientId(&clientId)); if (maxBytes < 1) { maxBytes = 2000000000; } if (ltp_attach() < 0) { putErrmsg("ltpcounter can't initialize LTP.", NULL); return 1; } if (ltp_open(_clientId(NULL)) < 0) { putErrmsg("ltpcounter can't open client access.", itoa(_clientId(NULL))); return 1; } ionSetAlarm(&alarm, &alarmThread); isignal(SIGINT, handleQuit); oK((_running(&state))); while (_running(NULL)) { if (ltp_get_notice(_clientId(NULL), &type, &sessionId, &reasonCode, &endOfBlock, &dataOffset, &dataLength, &data) < 0) { putErrmsg("Can't get LTP notice.", NULL); state = 0; oK((_running(&state))); continue; } switch (type) { case LtpExportSessionCanceled: isprintf(buffer, sizeof buffer, "Transmission \ canceled: source engine " UVAST_FIELDSPEC ", session %u, reason code %d.", sessionId.sourceEngineId, sessionId.sessionNbr, reasonCode); writeMemo(buffer); if (data) { ltp_release_data(data); } break; case LtpImportSessionCanceled: oK(_sessionsCanceled(1)); isprintf(buffer, sizeof buffer, "Reception canceled: \ source engine " UVAST_FIELDSPEC ", session %u, reason code %d.", sessionId.sourceEngineId, sessionId.sessionNbr, reasonCode); writeMemo(buffer); break; case LtpRecvGreenSegment: isprintf(buffer, sizeof buffer, "Green segment \ received, discarded: source engine " UVAST_FIELDSPEC ", session %u, \ offset %u, length %u, eob=%d.", sessionId.sourceEngineId, sessionId.sessionNbr, dataOffset, dataLength, endOfBlock); writeMemo(buffer); ltp_release_data(data); break; case LtpRecvRedPart: oK(_blocksReceived(1)); oK(_bytesReceived(dataLength)); ltp_release_data(data); break; default: break; } if (_bytesReceived(0) >= maxBytes) { state = 0; oK((_running(&state))); } } ionCancelAlarm(alarmThread); writeErrmsgMemos(); printCount(); PUTS("Stopping ltpcounter."); ltp_close(_clientId(NULL)); ltp_detach(); return 0; }
int ltpcli(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) { char *ductName = (char *) a1; #else int main(int argc, char *argv[]) { char *ductName = (argc > 1 ? argv[1] : NULL); #endif VInduct *vduct; PsmAddress vductElt; ReceiverThreadParms rtp; pthread_t receiverThread; if (ductName == NULL) { PUTS("Usage: ltpcli <local engine number>]"); return 0; } if (bpAttach() < 0) { putErrmsg("ltpcli can't attach to BP.", NULL); return -1; } findInduct("ltp", ductName, &vduct, &vductElt); if (vductElt == 0) { putErrmsg("No such ltp duct.", ductName); return -1; } if (vduct->cliPid != ERROR && vduct->cliPid != sm_TaskIdSelf()) { putErrmsg("CLI task is already started for this duct.", itoa(vduct->cliPid)); return -1; } /* All command-line arguments are now validated. */ if (ltp_attach() < 0) { putErrmsg("ltpcli can't initialize LTP.", NULL); return -1; } /* Set up signal handling; SIGTERM is shutdown signal. */ ionNoteMainThread("ltpcli"); isignal(SIGTERM, interruptThread); /* Start the receiver thread. */ rtp.vduct = vduct; rtp.running = 1; if (pthread_begin(&receiverThread, NULL, handleNotices, &rtp)) { putSysErrmsg("ltpcli can't create receiver thread", NULL); return 1; } /* Now sleep until interrupted by SIGTERM, at which point * it's time to stop the induct. */ writeMemo("[i] ltpcli is running."); ionPauseMainThread(-1); /* Time to shut down. */ rtp.running = 0; /* Stop the receiver thread by interrupting client access. */ ltp_interrupt(BpLtpClientId); pthread_join(receiverThread, NULL); writeErrmsgMemos(); writeMemo("[i] ltpcli duct has ended."); ionDetach(); return 0; }