aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/mauve/sender.rb50
1 files changed, 30 insertions, 20 deletions
diff --git a/lib/mauve/sender.rb b/lib/mauve/sender.rb
index 0a481d5..122456c 100644
--- a/lib/mauve/sender.rb
+++ b/lib/mauve/sender.rb
@@ -36,13 +36,7 @@ module Mauve
#
results << [$1, $2 || DEFAULT_PORT]
- when /^\[?([0-9a-f:]{2,39})\]??$/i
- #
- # IPv6 without a port
- #
- results << [$1, $2 || DEFAULT_PORT]
-
- when /^\[([0-9a-f:]{2,39})\](?::(\d+))?$/i
+ when /^\[([0-9a-f:\.]{2,39})\](?::(\d+))?$/i
#
# IPv6 with a port
#
@@ -50,17 +44,30 @@ module Mauve
when /^([^: ]+)(?::(\d+))?/
domain = $1
- port = $2 || DEFAULT_PORT
- Resolv::DNS.open do |dns|
- #
- # Search for SRV records first. If the first character of the
- # domain is an underscore, assume that it is a SRV record
- #
- srv_domain = (domain[0] == ?_ ? domain : "_mauvealert._udp.#{domain}")
+ #
+ # If no port is specified, set it to the default, and also try to
+ # use SRV records.
+ #
+ if $2.nil?
+ port = DEFAULT_PORT
+ use_srv = true
+ else
+ port = $2
+ use_srv = false
+ end
- list = dns.getresources(srv_domain, SRV).map do |srv|
- [srv.target.to_s, srv.port]
+ Resolv::DNS.open do |dns|
+ if use_srv
+ #
+ # Search for SRV records first. If the first character of the
+ # domain is an underscore, assume that it is a SRV record
+ #
+ srv_domain = (domain[0] == ?_ ? domain : "_mauvealert._udp.#{domain}")
+
+ list = dns.getresources(srv_domain, SRV).map do |srv|
+ [srv.target.to_s, srv.port]
+ end
end
#
@@ -126,11 +133,14 @@ module Mauve
data = update.serialize_to_string
-
if verbose == 1
- print "#{update.transmission_id}\n"
+ summary = "#{update.transmission_id} from #{update.source}"
elsif verbose >= 2
- print "Sending #{update.inspect.chomp} to #{@destinations.join(", ")}\n"
+ summary = update.inspect.split("\n").join(" ")
+ end
+
+ if verbose > 0
+ puts "Sending #{summary} to #{@destinations.collect{|i,p| (i.ipv6? ? "[#{i}]" : i.to_s )+":#{p}"}.join(", ")}"
end
#
@@ -144,7 +154,7 @@ module Mauve
sent += 1
rescue Errno::ENETUNREACH => ex
# Catch and ignore unreachable network errors.
- warn "Got #{ex.to_s} whilst trying to send to #{ip} #{port}" if verbose > 0
+ warn "Got #{ex.to_s} whilst trying to send to "+(ip.ipv6? ? "[#{ip}]" : ip.to_s )+":#{port}" if verbose > 0
end
end