55 corsaro_log(__func__, corsaro,
"could not malloc corsaro_packet");
64 assert(packet != NULL);
77 static void corsaro_free(
corsaro_t *corsaro)
111 corsaro_log_close(corsaro);
113 if(corsaro->
packet != NULL)
115 corsaro_packet_free(corsaro->
packet);
121 while((p = corsaro_plugin_next(corsaro->
plugin_manager, p)) != NULL)
140 interval->
number = number;
141 interval->
time = time;
148 if((e = malloc_zero(
sizeof(
corsaro_t))) == NULL)
150 corsaro_log(__func__, NULL,
"could not malloc corsaro_t");
163 if(corsaro_io_validate_template(e,
template) == 0)
165 corsaro_log(__func__, e,
"invalid template %s",
template);
168 if((e->
template = strdup(
template)) == NULL)
170 corsaro_log(__func__, e,
171 "could not duplicate template string (no memory?)");
187 corsaro_log(__func__, e,
"could not open global output file");
192 if(corsaro_log_init(e) != 0)
194 corsaro_log(__func__, e,
"could not initialize log file");
199 if((e->
packet = corsaro_packet_alloc(e)) == NULL)
201 corsaro_log(__func__, e,
"could not create corsaro packet");
211 corsaro_log(__func__, e,
"could not initialize plugin manager");
232 static int start_interval(
corsaro_t *corsaro,
struct timeval int_start)
241 while((tmp = corsaro_plugin_next(corsaro->
plugin_manager, tmp)) != NULL)
245 corsaro_log(__func__, corsaro,
"%s failed to start interval at %ld",
246 tmp->
name, int_start.tv_sec);
254 static int end_interval(
corsaro_t *corsaro,
struct timeval int_end)
264 if(corsaro_io_write_interval_start(corsaro, corsaro->
global_file,
267 corsaro_log(__func__, corsaro,
268 "could not write global interval start headers at %ld",
273 while((tmp = corsaro_plugin_next(corsaro->
plugin_manager, tmp)) != NULL)
277 corsaro_log(__func__, corsaro,
"%s failed to end interval at %ld",
278 tmp->
name, int_end.tv_sec);
283 if(corsaro_io_write_interval_end(corsaro, corsaro->
global_file,
286 corsaro_log(__func__, corsaro,
287 "could not write global interval end headers at %ld",
300 corsaro_log_in(__func__, corsaro,
301 "WARNING: corsaro_in_free called on NULL object; "
302 "this could indicate a double-free");
311 if(corsaro->
plugin != NULL)
330 if(corsaro->
file != NULL)
332 corsaro_file_rclose(corsaro, corsaro->
file);
333 corsaro->
file = NULL;
347 corsaro_log_in(__func__, NULL,
"could not malloc corsaro_t");
351 if((e->
uridata = strdup(corsarouri)) == NULL)
353 corsaro_log_in(__func__, e,
354 "could not duplicate uri string (no memory?)");
362 if(corsaro_log_in_init(e) != 0)
364 corsaro_log_in(__func__, e,
"could not initialize log file");
371 corsaro_log_in(__func__, e,
"could not initialize plugins");
389 while((tmp = corsaro_plugin_next(corsaro->
plugin_manager, tmp)) != NULL)
393 corsaro_log(__func__, corsaro,
"%s failed to process packet",
401 static int check_global_filename(
char *fname)
415 len = corsaro_file_rpeek(corsaro, file, buffer,
sizeof(buffer));
426 if(strncmp(&buffer[0],
"EDGRHEAD", 8) == 0)
433 static int is_plugin_data_or_interval(
corsaro_in_t *corsaro)
439 len = corsaro_file_rpeek(corsaro, corsaro->
file, buffer,
444 corsaro_log_in(__func__, corsaro,
445 "invalid corsaro global file");
453 if(strncmp(buffer,
"EDGRDATA", 8) == 0)
457 else if(strncmp(buffer,
"EDGRINTR", 8) == 0)
468 static int is_trailer_or_interval(
corsaro_in_t *corsaro)
474 len = corsaro_file_rpeek(corsaro, corsaro->
file, buffer,
479 corsaro_log_in(__func__, corsaro,
480 "invalid corsaro global file");
488 if(strncmp(buffer,
"EDGRFOOT", 8) == 0)
492 else if(strncmp(buffer,
"EDGRINTR", 8) == 0)
506 off_t bytes_read = -1;
514 bytes_read = corsaro_io_read_header(corsaro, corsaro->
file, record_type,
524 bytes_read = corsaro_io_read_interval_start(corsaro, corsaro->
file,
525 record_type, record);
528 rc = is_plugin_data_or_interval(corsaro);
546 bytes_read = corsaro_io_read_plugin_start(corsaro, corsaro->
file,
547 record_type, record);
551 if((corsaro->
plugin = corsaro_plugin_get_by_id(
557 corsaro_log_in(__func__, corsaro,
"invalid plugin id detected");
558 corsaro_log_in(__func__, corsaro,
"is corsaro built with all "
559 "necessary plugins?");
570 corsaro_log_in(__func__, corsaro,
571 "failed to read plugin data start");
578 assert(corsaro->
plugin != NULL);
589 bytes_read = corsaro_io_read_plugin_end(corsaro, corsaro->
file,
590 record_type, record);
594 rc = is_plugin_data_or_interval(corsaro);
612 bytes_read = corsaro_io_read_interval_end(corsaro, corsaro->
file,
613 record_type, record);
617 rc = is_trailer_or_interval(corsaro);
635 bytes_read = corsaro_io_read_trailer(corsaro, corsaro->
file, record_type,
644 corsaro_log_in(__func__, corsaro,
"invalid expected record type");
657 if(
template == NULL || strcmp(
template,
"-") == 0)
659 corsaro_log(__func__, NULL,
"writing to stdout not supported");
664 if((corsaro = corsaro_init(
template, mode)) == NULL)
666 corsaro_log(__func__, NULL,
"could not initialize corsaro object");
677 assert(corsaro != NULL);
683 corsaro_log(__func__, corsaro,
"could not start plugin manager");
684 corsaro_free(corsaro);
691 while((p = corsaro_plugin_next(corsaro->
plugin_manager, p)) != NULL)
695 corsaro_log(__func__, corsaro,
"plugin could not init output");
696 corsaro_free(corsaro);
702 if(corsaro_io_write_header(corsaro, corsaro->
global_file, NULL) <= 0)
704 corsaro_log(__func__, corsaro,
"could not write global headers");
705 corsaro_free(corsaro);
716 assert(corsaro != NULL);
726 assert(corsaro != NULL);
730 corsaro_log(__func__, corsaro,
731 "trace uri can only be set before "
732 "corsaro_start_output is called");
738 corsaro_log(__func__, corsaro,
"WARNING: updating trace uri from %s to %s",
741 if((corsaro->
uridata = strdup(uri)) == NULL)
743 corsaro_log(__func__, corsaro,
744 "could not duplicate uri string (no memory?)");
747 corsaro_log(__func__, corsaro,
"%s", corsaro->
uridata);
753 assert(corsaro != NULL);
758 corsaro_log(__func__, corsaro,
759 "trace uri can only be set before "
760 "corsaro_start_output is called");
764 return corsaro_plugin_enable_plugin(corsaro->
plugin_manager, plugin_name);
775 assert(corsaro != NULL);
779 corsaro_log(__func__, corsaro,
780 "monitor name can only be set before "
781 "corsaro_start_output is called");
787 corsaro_log(__func__, corsaro,
788 "WARNING: updating monitor name from %s to %s",
794 corsaro_log(__func__, corsaro,
795 "could not duplicate monitor name string (no memory?)");
798 corsaro_log(__func__, corsaro,
"%s", corsaro->
monitorname);
810 return STR(CORSARO_MONITOR_NAME);
817 struct timeval report;
819 assert(corsaro != NULL);
823 corsaro_log(__func__, corsaro,
"corsaro_start_output must be called before"
824 "packets can be processed");
832 corsaro_packet_state_reset(corsaro->
packet);
835 corsaro->
last_ts = ts = trace_get_timeval(ltpacket);
841 if(start_interval(corsaro, ts) != 0)
843 corsaro_log(__func__, corsaro,
"could not start interval at %ld",
860 if(end_interval(corsaro, report) != 0)
862 corsaro_log(__func__, corsaro,
"could not end interval at %ld",
870 if(start_interval(corsaro, report) != 0)
872 corsaro_log(__func__, corsaro,
"could not start interval at %ld",
885 return process_packet(corsaro, corsaro->
packet);
892 if(end_interval(corsaro, corsaro->
last_ts) != 0)
894 corsaro_log(__func__, corsaro,
"could not end interval at %ld",
896 corsaro_free(corsaro);
901 if(corsaro_io_write_trailer(corsaro, corsaro->
global_file, NULL) <= 0)
903 corsaro_log(__func__, corsaro,
"could not write global trailers");
904 corsaro_free(corsaro);
909 corsaro_free(corsaro);
920 if((corsaro = corsaro_in_init(corsarouri)) == NULL)
922 corsaro_log_in(__func__, NULL,
"could not initialize corsaro_in object");
933 assert(corsaro != NULL);
935 assert(corsaro->
plugin == NULL);
938 if((corsaro->
file = corsaro_file_ropen(corsaro, corsaro->
uridata)) == NULL)
940 corsaro_log_in(__func__, corsaro,
"could not open input file %s",
949 while((p = corsaro_plugin_next(corsaro->
plugin_manager, p)) != NULL &&
954 corsaro_log_in(__func__, corsaro,
955 "%s plugin selected to read %s (using file name)",
964 while(corsaro->
plugin == NULL &&
969 corsaro_log_in(__func__, corsaro,
970 "%s plugin selected to read %s (using magic)",
977 if(corsaro->
plugin == NULL)
979 if(check_global_filename(corsaro->
uridata) != 1 &&
980 check_global_magic(corsaro, corsaro->
file) != 1)
983 corsaro_log_in(__func__, corsaro,
"unable to find plugin to decode %s\n"
984 " - is this a corsaro file?\n"
985 " - is corsaro compiled with all needed plugins?",
994 corsaro_log_in(__func__, corsaro,
"corsaro_global selected to read %s",
1003 corsaro_log_in(__func__, corsaro,
"could not initialize %s",
1020 corsaro_log_in(__func__, corsaro,
"could not malloc corsaro_in_record_t");
1027 if((record->
buffer = malloc(
sizeof(uint8_t)*
1030 corsaro_log_in(__func__, corsaro,
"could not malloc record buffer");
1046 corsaro_log_file(__func__, NULL,
"possible double free of record pointer");
1050 if(record->
buffer != NULL)
1069 if(corsaro->
plugin != NULL
1077 return read_record(corsaro, record_type, record);
1090 corsaro_in_free(corsaro);