class Bitcourier::Protocol::Message::Base
Constants
- HEADER_SIZE
- MAGIC_BYTES
Public Class Methods
message_size(bytes)
click to toggle source
# File lib/bitcourier/protocol/message/base.rb, line 36 def self.message_size bytes return 0 if bytes.size < HEADER_SIZE _, _, length = unpack_header(bytes) return 0 if bytes.size < (length + HEADER_SIZE) return length + HEADER_SIZE end
unpack(bytes)
click to toggle source
# File lib/bitcourier/protocol/message/base.rb, line 23 def self.unpack bytes magic, id, length = unpack_header(bytes) return nil if magic != MAGIC_BYTES # wrong magic return nil if length + HEADER_SIZE > bytes.size # partial package return nil unless klass = find_message_class(id) msg = klass.new msg.extract bytes[HEADER_SIZE..-1] msg end
Private Class Methods
find_message_class(id)
click to toggle source
# File lib/bitcourier/protocol/message/base.rb, line 52 def self.find_message_class id [Hello, GetPeerList, PeerInfo].each do |message_class| return message_class if message_class::ID == id end nil end
unpack_header(bytes)
click to toggle source
# File lib/bitcourier/protocol/message/base.rb, line 48 def self.unpack_header bytes bytes[0...HEADER_SIZE].unpack('SSS') end
Public Instance Methods
extract(bytes)
click to toggle source
# File lib/bitcourier/protocol/message/base.rb, line 20 def extract bytes end
header()
click to toggle source
# File lib/bitcourier/protocol/message/base.rb, line 8 def header [MAGIC_BYTES, self.class::ID, payload.size].pack('SSS') end
pack()
click to toggle source
# File lib/bitcourier/protocol/message/base.rb, line 16 def pack header + payload end
payload()
click to toggle source
# File lib/bitcourier/protocol/message/base.rb, line 12 def payload '' end