class DEVp2p::Discovery::Address
Attributes
udp_port[RW]
Public Class Methods
from_endpoint(ip, udp_port, tcp_port="\x00\x00")
click to toggle source
# File lib/devp2p/discovery/address.rb, line 12 def self.from_endpoint(ip, udp_port, tcp_port="\x00\x00") new(ip, udp_port, tcp_port, true) end
new(ip, udp_port, tcp_port=nil, from_binary=false)
click to toggle source
# File lib/devp2p/discovery/address.rb, line 16 def initialize(ip, udp_port, tcp_port=nil, from_binary=false) tcp_port ||= udp_port if from_binary raise ArgumentError, "invalid ip" unless [4,16].include?(ip.size) @udp_port = dec_port udp_port @tcp_port = dec_port tcp_port else raise ArgumentError, "udp_port must be Integer" unless udp_port.is_a?(Integer) raise ArgumentError, "tcp_port must be Integer" unless tcp_port.is_a?(Integer) @udp_port = udp_port @tcp_port = tcp_port end begin @ip = from_binary ? IPAddr.new_ntoh(ip) : IPAddr.new(ip) rescue IPAddr::InvalidAddressError => e ips = Resolv.getaddresses(ip).sort {|addr| addr =~ /:/ ? 1 : 0 } # use ipv4 first raise e if ips.empty? @ip = ips[0] end end
Public Instance Methods
==(other)
click to toggle source
addresses equal if they share ip and udp_port
# File lib/devp2p/discovery/address.rb, line 52 def ==(other) [ip, udp_port] == [other.ip, other.udp_port] end
ip()
click to toggle source
# File lib/devp2p/discovery/address.rb, line 41 def ip @ip.to_s end
to_b()
click to toggle source
# File lib/devp2p/discovery/address.rb, line 64 def to_b [@ip.hton, enc_port(udp_port), enc_port(tcp_port)] end
Also aliased as: to_endpoint
to_h()
click to toggle source
# File lib/devp2p/discovery/address.rb, line 60 def to_h {ip: ip, udp_port: udp_port, tcp_port: tcp_port} end
to_s()
click to toggle source
# File lib/devp2p/discovery/address.rb, line 56 def to_s "Address(#{ip}:#{udp_port})" end
update(addr)
click to toggle source
# File lib/devp2p/discovery/address.rb, line 45 def update(addr) @tcp_port = addr.tcp_port if @tcp_port.nil? || @tcp_port == 0 end
Private Instance Methods
dec_port(b)
click to toggle source
# File lib/devp2p/discovery/address.rb, line 75 def dec_port(b) Utils.big_endian_to_int(b) end
enc_port(p)
click to toggle source
# File lib/devp2p/discovery/address.rb, line 71 def enc_port(p) Utils.int_to_big_endian4(p)[-2..-1] end