diff --git a/src/bro.bif b/src/bro.bif index fdcad0735d..31b74cf8d1 100644 --- a/src/bro.bif +++ b/src/bro.bif @@ -29,6 +29,7 @@ using namespace std; TableType* var_sizes; static iosource::PktDumper* addl_pkt_dumper = 0; +static StringVal* open_file_dumper; bro_int_t parse_int(const char*& fmt) { @@ -3288,10 +3289,19 @@ function dump_current_packet%(file_name: string%) : bool return new Val(0, TYPE_BOOL); if ( ! addl_pkt_dumper ) + { addl_pkt_dumper = iosource_mgr->OpenPktDumper(file_name->CheckString(), true); + { + else if ( addl_pkt_dumper && open_file_dumper != file_name) + { + addl_pkt_dumper->Close(); + addl_pkt_dumper = iosource_mgr->OpenPktDumper(file_name->CheckString(), true); + } + // else if (addl_pkt_dumper && open_file_dumper == file_name) do nothing if ( addl_pkt_dumper ) { + open_file_dumper = file_name; addl_pkt_dumper->Dump(pkt); } @@ -3363,10 +3373,20 @@ function get_current_packet_header%(%) : raw_pkt_hdr function dump_packet%(pkt: pcap_packet, file_name: string%) : bool %{ if ( ! addl_pkt_dumper ) + { addl_pkt_dumper = iosource_mgr->OpenPktDumper(file_name->CheckString(), true); + { + else if ( addl_pkt_dumper && open_file_dumper != file_name) + { + addl_pkt_dumper->Close(); + addl_pkt_dumper = iosource_mgr->OpenPktDumper(file_name->CheckString(), true); + } + // else if (addl_pkt_dumper && open_file_dumper == file_name) do nothing if ( addl_pkt_dumper ) { + open_file_dumper = file_name; + pkt_timeval ts; uint32 caplen, len, link_type; u_char *data;