void NFSParser::analyze_nfs_procedure()

in src/analysis/nfs_parser.cpp [242:280]


void NFSParser::analyze_nfs_procedure(FilteredDataQueue::Ptr&& call,
                                      FilteredDataQueue::Ptr&& reply,
                                      Session*                 session)
{
    using namespace NST::protocols::rpc;

    auto           header = reinterpret_cast<const CallHeader*>(call->data);
    const uint32_t major_version{header->vers()};
    const uint32_t procedure{header->proc()};

    try
    {
        const Session* s{session->get_session()};

        switch(major_version)
        {
        case NFS_V4:
            analyze_nfsv4_procedure(procedure, std::move(call), std::move(reply), s, this->analyzers);
            break;
        case NFS_V3:
            analyze_nfsv3_procedure(procedure, std::move(call), std::move(reply), s, this->analyzers);
            break;
        }
    }
    catch(XDRDecoderError& e)
    {
        const char* procedure_name{"Unknown procedure"};
        switch(major_version)
        {
        case NFS_V4:
            procedure_name = print_nfs4_procedures(static_cast<ProcEnumNFS4::NFSProcedure>(procedure));
            break;
        case NFS_V3:
            procedure_name = print_nfs3_procedures(static_cast<ProcEnumNFS3::NFSProcedure>(procedure));
            break;
        }
        LOG("Some data of NFS operation %s %s(%u) was not parsed: %s", session->str().c_str(), procedure_name, procedure, e.what());
    }
}