msgpipeline: Allow to chain pipelines

This allows for some complex but useful configurations, such as making
decision on delivery target based on the result of per-destination
address rewriting. One example where that can be useful is aliasing
local address to a remote address in a way that can't make the server
an open relay.
This commit is contained in:
fox.cpp 2019-11-07 22:34:52 +03:00
parent ed2a7c28e2
commit af4f180503
No known key found for this signature in database
GPG key ID: E76D97CCEDE90B6C
6 changed files with 72 additions and 5 deletions

View file

@ -476,14 +476,12 @@ func (dd *msgpipelineDelivery) getDelivery(tgt module.DeliveryTarget) (*delivery
deliveryObj, err := tgt.Start(dd.msgMeta, dd.sourceAddr)
if err != nil {
dd.log.Debugf("tgt.Start(%s) failure, target = %s (%s): %v",
dd.sourceAddr, tgt.(module.Module).InstanceName(), tgt.(module.Module).Name(), err)
dd.log.Debugf("tgt.Start(%s) failure, target = %s: %v", dd.sourceAddr, objectName(tgt), err)
return nil, err
}
delivery_ = &delivery{Delivery: deliveryObj}
dd.log.Debugf("tgt.Start(%s) ok, target = %s (%s)",
dd.sourceAddr, tgt.(module.Module).InstanceName(), tgt.(module.Module).Name())
dd.log.Debugf("tgt.Start(%s) ok, target = %s (%s)", dd.sourceAddr, objectName(tgt))
dd.deliveries[tgt] = delivery_
return delivery_, nil