class Tapyrus::Message::NetworkAddr
Attributes
ip_addr[RW]
port[RW]
services[RW]
The services the node advertised in its version message.
skip_time[R]
time[RW]
unix time. Nodes advertising their own IP address set this to the current time. Nodes advertising IP addresses they’ve connected to set this to the last time they connected to that node. Other nodes just relaying the IP address should not change the time. Nodes can use the time field to avoid relaying old addr messages.
Public Class Methods
local_addr()
click to toggle source
# File lib/tapyrus/message/network_addr.rb, line 44 def self.local_addr addr = new addr.ip_addr = IPAddr.new('127.0.0.1') addr.port = Tapyrus.chain_params.default_port addr.services = DEFAULT_SERVICE_FLAGS addr end
new( ip: '127.0.0.1', port: Tapyrus.chain_params.default_port, services: DEFAULT_SERVICE_FLAGS, time: Time.now.to_i )
click to toggle source
# File lib/tapyrus/message/network_addr.rb, line 21 def initialize( ip: '127.0.0.1', port: Tapyrus.chain_params.default_port, services: DEFAULT_SERVICE_FLAGS, time: Time.now.to_i ) @time = time @ip_addr = IPAddr.new(ip) @port = port @services = services end
parse_from_payload(payload)
click to toggle source
# File lib/tapyrus/message/network_addr.rb, line 33 def self.parse_from_payload(payload) buf = payload.is_a?(String) ? StringIO.new(payload) : payload has_time = buf.size > 26 addr = new(time: nil) addr.time = buf.read(4).unpack('V').first if has_time addr.services = buf.read(8).unpack('Q').first addr.ip_addr = IPAddr.new_ntoh(buf.read(16)) addr.port = buf.read(2).unpack('n').first addr end
Public Instance Methods
ip()
click to toggle source
# File lib/tapyrus/message/network_addr.rb, line 52 def ip ip_addr.ipv4_mapped? ? ip_addr.native : ip_addr.to_s end
to_payload(skip_time = false)
click to toggle source
# File lib/tapyrus/message/network_addr.rb, line 56 def to_payload(skip_time = false) p = '' p << [time].pack('V') unless skip_time addr = ip_addr.ipv4? ? ip_addr.ipv4_mapped : ip_addr p << [services].pack('Q') << addr.hton << [port].pack('n') end