lib/bitcoin/message.rb in bitcoinrb-0.6.0 vs lib/bitcoin/message.rb in bitcoinrb-0.7.0
- old
+ new
@@ -1,8 +1,10 @@
module Bitcoin
module Message
+ class Error < StandardError; end
+
autoload :Base, 'bitcoin/message/base'
autoload :Inventory, 'bitcoin/message/inventory'
autoload :InventoriesParser, 'bitcoin/message/inventories_parser'
autoload :HeadersParser, 'bitcoin/message/headers_parser'
autoload :Version, 'bitcoin/message/version'
@@ -42,10 +44,12 @@
autoload :CFParser, 'bitcoin/message/cf_parser'
autoload :GetCFCheckpt, 'bitcoin/message/get_cfcheckpt'
autoload :CFCheckpt, 'bitcoin/message/cfcheckpt'
autoload :CFilter, 'bitcoin/message/cfilter'
autoload :CFHeaders, 'bitcoin/message/cfheaders'
+ autoload :SendAddrV2, 'bitcoin/message/send_addr_v2'
+ autoload :AddrV2, 'bitcoin/message/addr_v2'
USER_AGENT = "/bitcoinrb:#{Bitcoin::VERSION}/"
SERVICE_FLAGS = {
none: 0,
@@ -70,8 +74,76 @@
send_headers: 70012,
fee_filter: 70013,
compact: 70014,
compact_witness: 70015
}
+
+ module_function
+
+ # Decode P2P message.
+ # @param [String] command P2P message command string.
+ # @param [String] payload P2P message payload with hex format..
+ # @return [Bitcoin::Message::]
+ def decode(command, payload = nil)
+ payload = payload.htb if payload
+ case command
+ when Bitcoin::Message::Version::COMMAND
+ Bitcoin::Message::Version.parse_from_payload(payload)
+ when Bitcoin::Message::VerAck::COMMAND
+ Bitcoin::Message::VerAck.new
+ when Bitcoin::Message::GetAddr::COMMAND
+ Bitcoin::Message::GetAddr.new
+ when Bitcoin::Message::Addr::COMMAND
+ Bitcoin::Message::Addr.parse_from_payload(payload)
+ when Bitcoin::Message::SendHeaders::COMMAND
+ Bitcoin::Message::SendHeaders.new
+ when Bitcoin::Message::FeeFilter::COMMAND
+ Bitcoin::Message::FeeFilter.parse_from_payload(payload)
+ when Bitcoin::Message::Ping::COMMAND
+ Bitcoin::Message::Ping.parse_from_payload(payload)
+ when Bitcoin::Message::Pong::COMMAND
+ Bitcoin::Message::Pong.parse_from_payload(payload)
+ when Bitcoin::Message::GetHeaders::COMMAND
+ Bitcoin::Message::GetHeaders.parse_from_payload(payload)
+ when Bitcoin::Message::Headers::COMMAND
+ Bitcoin::Message::Headers.parse_from_payload(payload)
+ when Bitcoin::Message::Block::COMMAND
+ Bitcoin::Message::Block.parse_from_payload(payload)
+ when Bitcoin::Message::Tx::COMMAND
+ Bitcoin::Message::Tx.parse_from_payload(payload)
+ when Bitcoin::Message::NotFound::COMMAND
+ Bitcoin::Message::NotFound.parse_from_payload(payload)
+ when Bitcoin::Message::MemPool::COMMAND
+ Bitcoin::Message::MemPool.new
+ when Bitcoin::Message::Reject::COMMAND
+ Bitcoin::Message::Reject.parse_from_payload(payload)
+ when Bitcoin::Message::SendCmpct::COMMAND
+ Bitcoin::Message::SendCmpct.parse_from_payload(payload)
+ when Bitcoin::Message::Inv::COMMAND
+ Bitcoin::Message::Inv.parse_from_payload(payload)
+ when Bitcoin::Message::MerkleBlock::COMMAND
+ Bitcoin::Message::MerkleBlock.parse_from_payload(payload)
+ when Bitcoin::Message::CmpctBlock::COMMAND
+ Bitcoin::Message::CmpctBlock.parse_from_payload(payload)
+ when Bitcoin::Message::GetData::COMMAND
+ Bitcoin::Message::GetData.parse_from_payload(payload)
+ when Bitcoin::Message::GetCFHeaders::COMMAND
+ Bitcoin::Message::GetCFHeaders.parse_from_payload(payload)
+ when Bitcoin::Message::GetCFilters::COMMAND
+ Bitcoin::Message::GetCFilters.parse_from_payload(payload)
+ when Bitcoin::Message::GetCFCheckpt::COMMAND
+ Bitcoin::Message::GetCFCheckpt.parse_from_payload(payload)
+ when Bitcoin::Message::CFCheckpt::COMMAND
+ Bitcoin::Message::CFCheckpt.parse_from_payload(payload)
+ when Bitcoin::Message::CFHeaders::COMMAND
+ Bitcoin::Message::CFHeaders.parse_from_payload(payload)
+ when Bitcoin::Message::CFilter::COMMAND
+ Bitcoin::Message::CFilter.parse_from_payload(payload)
+ when Bitcoin::Message::SendAddrV2::COMMAND
+ Bitcoin::Message::SendAddrV2.new
+ when Bitcoin::Message::AddrV2::COMMAND
+ Bitcoin::Message::AddrV2.parse_from_payload(payload)
+ end
+ end
end
end