class Mongo::Srv::Result
SRV record lookup result.
Contains server addresses that the query resolved to, and minimum TTL of the DNS records.
@api private
Constants
- MISMATCHED_DOMAINNAME
-
@return [ String ]
MISMATCHED_DOMAINNAME
Error
message format string indicating that an SRVrecord found does not match the domain of a hostname.
Attributes
@return [ Array<String> ] address_strs
The host strings of the SRV records
for the query hostname.
@return [ Integer | nil ] min_ttl
The smallest TTL found among the
records (or nil if no records have been added).
@return [ String ] query_hostname
The hostname pointing to the DNS records.
Public Class Methods
Source
# File lib/mongo/srv/result.rb, line 46 def initialize(hostname) @query_hostname = hostname @address_strs = [] @min_ttl = nil end
Create a new object to keep track of the SRV records of the hostname.
@param [ String ] hostname The hostname pointing to the DNS records.
Public Instance Methods
Source
# File lib/mongo/srv/result.rb, line 62 def add_record(record) record_host = normalize_hostname(record.target.to_s) port = record.port validate_hostname!(record_host) validate_same_origin!(record_host) address_str = if record_host.index(':') # IPV6 address "[#{record_host}]:#{port}" else "#{record_host}:#{port}" end @address_strs << address_str if @min_ttl.nil? @min_ttl = record.ttl else @min_ttl = [@min_ttl, record.ttl].min end nil end
Adds a new record.
@param [ Resolv::DNS::Resource ] record An SRV record found for the hostname.
Source
# File lib/mongo/srv/result.rb, line 55 def empty? @address_strs.empty? end
Checks whether there are any records.
@return [ Boolean ] Whether or not there are any records.
Private Instance Methods
Source
# File lib/mongo/srv/result.rb, line 97 def normalize_hostname(host) host = host.downcase unless host.end_with?('..') host = host.sub(/\.\z/, '') end host end
Transforms the provided hostname to simplify its validation later on.
This method is safe to call during both initial DNS seed list discovery and during SRV monitoring, in that it does not convert invalid hostnames into valid ones.
-
Converts the hostname to lower case.
-
Removes one trailing dot, if there is exactly one. If the hostname has multiple trailing dots, it is unchanged.
@param [ String ] host Hostname to transform.
Source
# File lib/mongo/srv/result.rb, line 115 def validate_same_origin!(record_host) domain_name ||= query_hostname.split('.')[1..-1] host_parts = record_host.split('.') unless (host_parts.size > domain_name.size) && (domain_name == host_parts[-domain_name.length..-1]) raise Error::MismatchedDomain.new(MISMATCHED_DOMAINNAME % [record_host, domain_name]) end end
Ensures that a record’s domain name matches that of the hostname.
A hostname’s domain name consists of each of the ‘.’ delineated parts after the first. For example, the hostname ‘foo.bar.baz’ has the domain name ‘bar.baz’.
@param [ String ] record_host The host of the SRV record.
@raise [ Mongo::Error::MismatchedDomain
] If the record’s domain name doesn’t match that of
the hostname.