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