Class: Tapyrus::Message::NetworkAddr
- Inherits:
-
Object
- Object
- Tapyrus::Message::NetworkAddr
- Defined in:
- lib/tapyrus/message/network_addr.rb
Instance Attribute Summary collapse
-
#ip_addr ⇒ Object
IPAddr.
-
#port ⇒ Object
Returns the value of attribute port.
-
#services ⇒ Object
The services the node advertised in its version message.
-
#skip_time ⇒ Object
readonly
Returns the value of attribute skip_time.
-
#time ⇒ Object
unix time.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(ip: "127.0.0.1", port: Tapyrus.chain_params.default_port, services: DEFAULT_SERVICE_FLAGS, time: Time.now.to_i) ⇒ NetworkAddr
constructor
A new instance of NetworkAddr.
- #ip ⇒ Object
- #to_payload(skip_time = false) ⇒ Object
Constructor Details
#initialize(ip: "127.0.0.1", port: Tapyrus.chain_params.default_port, services: DEFAULT_SERVICE_FLAGS, time: Time.now.to_i) ⇒ NetworkAddr
Returns a new instance of NetworkAddr.
21 22 23 24 25 26 27 28 29 30 31 |
# 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 |
Instance Attribute Details
#ip_addr ⇒ Object
IPAddr
15 16 17 |
# File 'lib/tapyrus/message/network_addr.rb', line 15 def ip_addr @ip_addr end |
#port ⇒ Object
Returns the value of attribute port.
17 18 19 |
# File 'lib/tapyrus/message/network_addr.rb', line 17 def port @port end |
#services ⇒ Object
The services the node advertised in its version message.
13 14 15 |
# File 'lib/tapyrus/message/network_addr.rb', line 13 def services @services end |
#skip_time ⇒ Object (readonly)
Returns the value of attribute skip_time.
19 20 21 |
# File 'lib/tapyrus/message/network_addr.rb', line 19 def skip_time @skip_time end |
#time ⇒ Object
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.
10 11 12 |
# File 'lib/tapyrus/message/network_addr.rb', line 10 def time @time end |
Class Method Details
.local_addr ⇒ Object
44 45 46 47 48 49 50 |
# 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 |
.parse_from_payload(payload) ⇒ Object
33 34 35 36 37 38 39 40 41 42 |
# 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 |
Instance Method Details
#ip ⇒ Object
52 53 54 |
# 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) ⇒ Object
56 57 58 59 60 61 |
# 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 |