dnsagent: add caps support

This commit is contained in:
ionutboangiu
2026-02-23 21:00:13 +02:00
committed by Dan Christian Bogos
parent f976b35157
commit 7eb4d0a846
2 changed files with 18 additions and 4 deletions

View File

@@ -33,8 +33,8 @@ import (
// NewDNSAgent is the constructor for DNSAgent
func NewDNSAgent(cgrCfg *config.CGRConfig, fltrS *engine.FilterS,
connMgr *engine.ConnManager) (da *DNSAgent, err error) {
da = &DNSAgent{cgrCfg: cgrCfg, fltrS: fltrS, connMgr: connMgr}
connMgr *engine.ConnManager, caps *engine.Caps) (da *DNSAgent, err error) {
da = &DNSAgent{cgrCfg: cgrCfg, fltrS: fltrS, connMgr: connMgr, caps: caps}
err = da.initDNSServer()
return
}
@@ -44,6 +44,7 @@ type DNSAgent struct {
sync.RWMutex
cgrCfg *config.CGRConfig // loaded CGRateS configuration
fltrS *engine.FilterS // connection towards FilterS
caps *engine.Caps
servers []*dns.Server
connMgr *engine.ConnManager
}
@@ -113,6 +114,15 @@ func (da *DNSAgent) Reload() (err error) {
// handleMessage is the entry point of all DNS requests
// requests are reaching here asynchronously
func (da *DNSAgent) handleMessage(w dns.ResponseWriter, req *dns.Msg) {
if da.caps.IsLimited() {
if err := da.caps.Allocate(); err != nil {
rply := newDnsReply(req)
rply.Rcode = dns.RcodeRefused
dnsWriteMsg(w, rply)
return
}
defer da.caps.Deallocate()
}
dnsDP := newDnsDP(req)
rply := newDnsReply(req)

View File

@@ -53,6 +53,7 @@ func (dns *DNSAgent) Start(shutdown *utils.SyncedChan, registry *servmanager.Ser
[]string{
utils.ConnManager,
utils.FilterS,
utils.CapS,
},
registry, dns.cfg.GeneralCfg().ConnectTimeout)
if err != nil {
@@ -60,10 +61,11 @@ func (dns *DNSAgent) Start(shutdown *utils.SyncedChan, registry *servmanager.Ser
}
cms := srvDeps[utils.ConnManager].(*ConnManagerService)
fs := srvDeps[utils.FilterS].(*FilterService)
caps := srvDeps[utils.CapS].(*CapService).Caps()
dns.mu.Lock()
defer dns.mu.Unlock()
dns.dns, err = agents.NewDNSAgent(dns.cfg, fs.FilterS(), cms.ConnManager())
dns.dns, err = agents.NewDNSAgent(dns.cfg, fs.FilterS(), cms.ConnManager(), caps)
if err != nil {
dns.dns = nil
return
@@ -79,6 +81,7 @@ func (dns *DNSAgent) Reload(shutdown *utils.SyncedChan, registry *servmanager.Se
[]string{
utils.ConnManager,
utils.FilterS,
utils.CapS,
},
registry, dns.cfg.GeneralCfg().ConnectTimeout)
if err != nil {
@@ -86,6 +89,7 @@ func (dns *DNSAgent) Reload(shutdown *utils.SyncedChan, registry *servmanager.Se
}
cms := srvDeps[utils.ConnManager].(*ConnManagerService)
fs := srvDeps[utils.FilterS].(*FilterService)
caps := srvDeps[utils.CapS].(*CapService).Caps()
dns.mu.Lock()
defer dns.mu.Unlock()
@@ -94,7 +98,7 @@ func (dns *DNSAgent) Reload(shutdown *utils.SyncedChan, registry *servmanager.Se
close(dns.stopChan)
}
dns.dns, err = agents.NewDNSAgent(dns.cfg, fs.FilterS(), cms.ConnManager())
dns.dns, err = agents.NewDNSAgent(dns.cfg, fs.FilterS(), cms.ConnManager(), caps)
if err != nil {
dns.dns = nil
return