/* * status = readerGetRecord(&out_rwrec, &out_probe, flow_processor); * * Invoked by input_mode_type->get_record_fn(); */ static fp_get_record_result_t readerGetRecord( rwRec *out_rwrec, const skpc_probe_t **out_probe, flow_proc_t *fproc) { skPDUSource_t *pdu_src = (skPDUSource_t*)fproc->flow_src; const char *filename; if (0 == skPDUSourceGetGeneric(pdu_src, out_rwrec)) { /* got a record */ *out_probe = fproc->probe; /* When reading from a file, should only stop at the end of a * file. */ return FP_RECORD; } /* At end of file */ /* print stats for file */ readerPrintStats(fproc); /* archive file if requested */ filename = skpcProbeGetFileSource(fproc->probe); archiveDirectoryInsertOrRemove(filename, NULL); /* We can stop here. */ return FP_END_STREAM; }
/* * count = pdu2silk(filename); * * Read PDUs from 'filename' and write records to the global * 'silk_output' file. Return number of records processed, or -1 * on error. */ static int64_t pdu2silk( const char *filename) { static unsigned int file_count = 0; char probe_name[128]; skPDUSource_t *pdu_src; skFlowSourceParams_t params; int64_t count; rwRec rwrec; int rv; ++file_count; snprintf(probe_name, sizeof(probe_name), "input%04u", file_count); params.path_name = filename; skpcProbeSetName(probe, probe_name); pdu_src = skPDUSourceCreate(probe, ¶ms); if (pdu_src == NULL) { return -1; } count = 0; while (-1 != skPDUSourceGetGeneric(pdu_src, &rwrec)) { ++count; rv = skStreamWriteRecord(silk_output, &rwrec); if (rv) { skStreamPrintLastErr(silk_output, rv, &skAppPrintErr); if (SKSTREAM_ERROR_IS_FATAL(rv)) { exit(EXIT_FAILURE); } } } skPDUSourceLogStatsAndClear(pdu_src); skPDUSourceDestroy(pdu_src); return count; }