//check command line arguments
if(argc < 3) {
std::string msg = "Usage: "; msg += exec;
- msg += " <stacks> <input file> [--no-validation] [--ignore-flags]\n\n";
- msg += " stacks: <id1#dictionary1,id2#dictionary2,...,idN#dictionaryN>\n";
- msg += " This is a list of comma-separated stacks defined by a #-separated pair <application-id#xml dictionary pathfile>\n";
+ msg += " <stacks> <input file> [--no-validation] [--ignore-flags] [--debug]\n\n";
+ msg += " stacks: <id1,dictionary1#id2,dictionary2#...#idN,dictionaryN>\n";
+ msg += " This is a list of #-separated stacks defined by a comma-separated pair <application-id,xml dictionary pathfile>\n";
msg += " If only one stack is provided, application-id could be omitted and then, all the messages will be decoded with the\n";
msg += " dictionary regardless the value of the application-id (the stack will be registered with id=0).\n";
msg += " Input file: normally a pcap file, but hexadecimal content (colons allowed) can also be decoded (use '.hex' extension).\n";
msg += " --no-validation: no validation is performed.\n";
- msg += " --ignore-flags: wrong flags regarding dictionary are ignored in xml representation.";
+ msg += " --ignore-flags: wrong flags regarding dictionary are ignored in xml representation.\n";
+ msg += " --debug: activates debug level traces (warning by default).";
_exit(msg);
}
bool no_validation = (optionals.find("--no-validation") != std::string::npos);
bool ignore_flags = (optionals.find("--ignore-flags") != std::string::npos);
- Logger::setLevel(Logger::Debug);
+ bool debug = (optionals.find("--debug") != std::string::npos);
+ Logger::setLevel(debug ? Logger::Debug:Logger::Warning);
Logger::initialize(execBN.c_str(), new TraceWriter(filetrace.c_str(), 2048000));
G_codecEngine = new anna::diameter::codec::Engine();
anna::diameter::stack::Engine &stackEngine =
// Register stacks:
try {
anna::Tokenizer stacksTok;
- stacksTok.apply(stacks, ",");
+ stacksTok.apply(stacks, "#");
anna::Tokenizer::const_iterator stacks_it, stack_it;
for(stacks_it = stacksTok.begin(); stacks_it != stacksTok.end(); stacks_it++) {
std::string stack = anna::Tokenizer::data(stacks_it);
anna::Tokenizer stackTok;
- stackTok.apply(stack, "#");
+ stackTok.apply(stack, ",");
if(stackTok.size() == 1) {
if(stacksTok.size() != 1)
}
// Validation kindness
+ G_codecEngine->setValidationDepth(anna::diameter::codec::EngineImpl::ValidationDepth::Complete); // complete validation for better reports
if(no_validation) G_codecEngine->setValidationMode(anna::diameter::codec::EngineImpl::ValidationMode::Never);
if(ignore_flags) G_codecEngine->ignoreFlagsOnValidation(true);
decodeDataBlock(db_aux, detectedApplicationId);
// Open output file:
outputFile += ".as.xml";
- std::ofstream out(outputFile, std::ifstream::out);
+ std::ofstream out(outputFile.c_str(), std::ifstream::out);
out << G_codecMsg.asXMLString();
// Close output file:
out.close();
// Print payloads //////////////////////////////////////////////////////////////////////////////////////////////
// Open output file:
outputFile += ".report";
- std::ofstream out(outputFile, std::ifstream::out);
+ std::ofstream out(outputFile.c_str(), std::ifstream::out);
for(payloads_it it = G_payloads.begin(); it != G_payloads.end(); it++) {
LOGDEBUG(