pkg/tmplexec/multiproto/README.md
when template is unmarshalled, if it uses more than one protocol, then order of protocols is preserved and is same is passed to Executor multiproto is engine/backend for TemplateExecutor which takes care of sharing logic between protocols and executing them in order
when multiprotocol template is executed , all protocol requests present in Queue are executed in order and dynamic values extracted are added to template context.
internal:true values response fields/values of protocol are added to template context at ExecutorOptions.TemplateCtx
which takes care of sync and other issues if any. all response fields are prefixed with template type prefix ex: ssl_subject_dnwhile logic/implementation of multiprotocol execution is abstracted. it requires 3 statements to be added in newly implemented protocol to make response fields of that protocol available to global context
request.options.GetTemplateCtx(f.input.MetaInput).GetAll() to variablesMap in ExecuteWithResults Method just above request.options.Variables.Evaluate// example
values := generators.MergeMaps(payloadValues, hostnameVariables, request.options.GetTemplateCtx(f.input.MetaInput).GetAll())
variablesMap := request.options.Variables.Evaluate(values)
outputEvent := request.responseToDSLMap(compiledRequest, response, domain, question, traceData)
// expose response variables in proto_var format
// this is no-op if the template is not a multi protocol template
request.options.AddTemplateVars(request.Type(),request.ID, outputEvent)
// add variables from template context before matching/extraction
outputEvent = generators.MergeMaps(outputEvent, request.options.GetTemplateCtx(f.input.MetaInput).GetAll())
adding these 3 statements takes care of all logic related to multiprotocol execution
file protocol to avoid redundant data