Skip to content

Commit

Permalink
Make Zeek 5.0 and Zeek 5.1 compatible (#58)
Browse files Browse the repository at this point in the history
This squelches warnings and errors around the dictionary iteration by
resorting to ToMap().

This is also 4.2.2 compatible, but I didn't test for versions older.

Closes #46.
  • Loading branch information
awelzel authored Dec 3, 2022
1 parent b632187 commit 39e9dbf
Showing 1 changed file with 15 additions and 27 deletions.
42 changes: 15 additions & 27 deletions src/KafkaWriter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,22 @@

#include "KafkaWriter.h"
#include "events.bif.h"
#include "zeek/Dict.h"

using namespace zeek::logging;
using namespace writer;

namespace {
// Place elements from zeek::TableVal t in to std::map m
void ToStdMap(std::map<std::string, std::string>& m, zeek::TableVal *t) {
for (const auto &iter : t->ToMap() ) {
std::string key = iter.first->AsListVal()->Idx(0)->AsString()->CheckString();
std::string value = iter.second->AsString()->CheckString();
m.insert(m.begin(), std::pair<std::string, std::string>(key, value));
}
}
}

// The Constructor is called once for each log filter that uses this log writer.
KafkaWriter::KafkaWriter(WriterFrontend *frontend)
: WriterBackend(frontend), formatter(NULL), producer(NULL), topic(NULL) {
Expand All @@ -43,33 +55,9 @@ KafkaWriter::KafkaWriter(WriterFrontend *frontend)
topic_name.assign((const char *)BifConst::Kafka::topic_name->Bytes(),
BifConst::Kafka::topic_name->Len());

// kafka_conf - thread local copy
Val *val = BifConst::Kafka::kafka_conf->AsTableVal();
IterCookie *c = val->AsTable()->InitForIteration();
zeek::detail::HashKey *k;
TableEntryVal *v;
while ((v = val->AsTable()->NextEntry(k, c))) {
// fetch the key and value
ListValPtr index = val->AsTableVal()->RecreateIndex(*k);
std::string key = index->Idx(0)->AsString()->CheckString();
std::string val = v->GetVal()->AsString()->CheckString();
kafka_conf.insert(kafka_conf.begin(),
std::pair<std::string, std::string>(key, val));

// cleanup
delete k;
}

Val *mvals = BifConst::Kafka::additional_message_values->AsTableVal();
c = val->AsTable()->InitForIteration();
while ((v = mvals->AsTable()->NextEntry(k, c))) {
ListValPtr index = mvals->AsTableVal()->RecreateIndex(*k);
std::string key = index->Idx(0)->AsString()->CheckString();
std::string val = v->GetVal()->AsString()->CheckString();
additional_message_values.insert(additional_message_values.begin(),
std::pair<std::string, std::string>(key, val));
delete k;
}
// kafka_conf and additional messages - thread local copy
ToStdMap(kafka_conf, BifConst::Kafka::kafka_conf->AsTableVal());
ToStdMap(additional_message_values, BifConst::Kafka::additional_message_values->AsTableVal());
}

KafkaWriter::~KafkaWriter() {
Expand Down

0 comments on commit 39e9dbf

Please sign in to comment.