// Package checker implements the generic SRV records checker for happyDomain. // // For each SRV record attached to the target service it performs: // // - DNS resolution of every SRV target (A/AAAA, CNAME detection) // - TCP connectivity test on target:port (_tcp SRVs) // - UDP probe on target:port (_udp SRVs) // // TLS/certificate testing is intentionally out of scope: it is handled by a // dedicated TLS checker. // // Checks are performed natively using the Go standard library (no external // testsuite). package checker import ( sdk "git.happydns.org/checker-sdk-go/checker" ) const ObservationKeySRV sdk.ObservationKey = "srv_records" type SRVRecord struct { Service string `json:"service"` Proto string `json:"proto"` Owner string `json:"owner"` Target string `json:"target"` Port uint16 `json:"port"` Priority uint16 `json:"priority"` Weight uint16 `json:"weight"` // DNS resolution results IsNullTarget bool `json:"isNullTarget,omitempty"` // target == "." means "no service" IsCNAME bool `json:"isCNAME,omitempty"` // RFC 2782: MUST NOT be CNAME CNAMEChain []string `json:"cnameChain,omitempty"` Addresses []string `json:"addresses,omitempty"` ResolveError string `json:"resolveError,omitempty"` // Reachability checks per address Probes []ProbeResult `json:"probes,omitempty"` } type ProbeResult struct { Address string `json:"address"` Proto string `json:"proto"` // "tcp" or "udp" Connected bool `json:"connected"` LatencyMs float64 `json:"latencyMs,omitempty"` Error string `json:"error,omitempty"` } type SRVData struct { ServiceDomain string `json:"serviceDomain"` // e.g. _sip._tcp.example.com Records []SRVRecord `json:"records"` CollectError string `json:"collectError,omitempty"` }