X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fpeer.rs;h=ff0d502191dd5fa3b7eb00f7439b805c2631691a;hb=dbd60f299ee413b64e5e2a09286bf8ca2ffde8de;hp=137d92dc311fea047dab956f0ba573c5f1caa7a0;hpb=820109e4f9b0b820a4c7c0f75670000548e6e760;p=dnsseed-rust diff --git a/src/peer.rs b/src/peer.rs index 137d92d..ff0d502 100644 --- a/src/peer.rs +++ b/src/peer.rs @@ -5,7 +5,7 @@ use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; use bitcoin::consensus::encode; use bitcoin::consensus::encode::{Decodable, Encodable}; use bitcoin::network::address::Address; -use bitcoin::network::constants::Network; +use bitcoin::network::constants::{Network, ServiceFlags}; use bitcoin::network::message::{RawNetworkMessage, NetworkMessage}; use bitcoin::network::message_network::VersionMessage; @@ -45,10 +45,10 @@ impl<'a> std::io::Read for BytesDecoder<'a> { struct MsgCoder<'a>(&'a Printer); impl<'a> codec::Decoder for MsgCoder<'a> { - type Item = NetworkMessage; + type Item = Option; type Error = encode::Error; - fn decode(&mut self, bytes: &mut bytes::BytesMut) -> Result, encode::Error> { + fn decode(&mut self, bytes: &mut bytes::BytesMut) -> Result>, encode::Error> { let mut decoder = BytesDecoder { buf: bytes, pos: 0 @@ -57,7 +57,7 @@ impl<'a> codec::Decoder for MsgCoder<'a> { Ok(res) => { decoder.buf.advance(decoder.pos); if res.magic == Network::Bitcoin.magic() { - Ok(Some(res.payload)) + Ok(Some(Some(res.payload))) } else { Err(encode::Error::UnexpectedNetworkMagic { expected: Network::Bitcoin.magic(), @@ -72,7 +72,7 @@ impl<'a> codec::Decoder for MsgCoder<'a> { //XXX(fixthese): self.0.add_line(format!("rust-bitcoin doesn't support {}!", msg), true); if msg == "gnop" { Err(e) - } else { Ok(None) } + } else { Ok(Some(None)) } }, _ => { self.0.add_line(format!("Error decoding message: {:?}", e), true); @@ -148,7 +148,7 @@ macro_rules! try_write_small { pub struct Peer {} impl Peer { - pub fn new(addr: SocketAddr, tor_proxy: &SocketAddr, timeout: Duration, printer: &'static Printer) -> impl Future, impl Stream)> { + pub fn new(addr: SocketAddr, tor_proxy: &SocketAddr, timeout: Duration, printer: &'static Printer) -> impl Future, impl Stream, Error=encode::Error>)> { let connect_timeout = Delay::new(Instant::now() + timeout.clone()).then(|_| { future::err(std::io::Error::new(std::io::ErrorKind::TimedOut, "timeout reached")) }); @@ -198,10 +198,10 @@ impl Peer { })); let _ = sender.try_send(NetworkMessage::Version(VersionMessage { version: 70015, - services: (1 << 3), // NODE_WITNESS + services: ServiceFlags::WITNESS, timestamp: SystemTime::now().duration_since(UNIX_EPOCH).expect("time > 1970").as_secs() as i64, - receiver: Address::new(&addr, 0), - sender: Address::new(&"0.0.0.0:0".parse().unwrap(), 0), + receiver: Address::new(&addr, ServiceFlags::NONE), + sender: Address::new(&"0.0.0.0:0".parse().unwrap(), ServiceFlags::WITNESS), nonce: 0xdeadbeef, user_agent: "/rust-bitcoin:0.18/bluematt-tokio-client:0.1/".to_string(), start_height: 0,