send verack during handshake (0.14 compat)

This commit is contained in:
Svyatoslav Nikolsky 2017-08-04 14:08:16 +03:00
parent 60d0ab0018
commit ed0aff798b
1 changed files with 17 additions and 0 deletions

View File

@ -50,6 +50,10 @@ fn verack_message(magic: Magic) -> Message<Verack> {
enum HandshakeState<A> {
SendVersion(WriteMessage<Version, A>),
ReceiveVersion(ReadMessage<Version, A>),
SendVerack {
version: Option<Version>,
future: WriteMessage<Verack, A>,
},
ReceiveVerack {
version: Option<Version>,
future: ReadMessage<Verack, A>,
@ -115,6 +119,18 @@ impl<A> Future for Handshake<A> where A: AsyncRead + AsyncWrite {
}
}
let next = HandshakeState::SendVerack {
version: Some(version),
future: write_message(stream, verack_message(self.magic)),
};
(next, Async::NotReady)
},
HandshakeState::SendVerack { ref mut version, ref mut future } => {
let (stream, _) = try_ready!(future.poll());
let version = version.take().expect("verack must be preceded by version");
let next = HandshakeState::ReceiveVerack {
version: Some(version),
future: read_message(stream, self.magic, 0),
@ -307,6 +323,7 @@ mod tests {
let mut expected_stream = Stream::new();
expected_stream.append_slice(Message::new(magic, version, &local_version).unwrap().as_ref());
expected_stream.append_slice(Message::new(magic, version, &Verack).unwrap().as_ref());
let test_io = TestIo {
read: io::Cursor::new(remote_stream.out()),