p2p in progress
This commit is contained in:
parent
3625fb06c2
commit
f7bfa16195
|
@ -310,7 +310,6 @@ dependencies = [
|
|||
"parking_lot 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"primitives 0.1.0",
|
||||
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serialization 0.1.0",
|
||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"tokio-core 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
|
|
@ -29,10 +29,6 @@ impl PayloadStream {
|
|||
t.serialize_payload(&mut self.stream, self.version)
|
||||
}
|
||||
|
||||
pub fn raw_stream(&mut self) -> &mut Stream {
|
||||
&mut self.stream
|
||||
}
|
||||
|
||||
pub fn out(self) -> Bytes {
|
||||
self.stream.out()
|
||||
}
|
||||
|
|
|
@ -69,6 +69,14 @@ impl Version {
|
|||
Version::V70001(ref s, _, _) => s.version,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn services(&self) -> ServiceFlags {
|
||||
match *self {
|
||||
Version::V0(ref s) => s.services,
|
||||
Version::V106(ref s, _) => s.services,
|
||||
Version::V70001(ref s, _, _) => s.services,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
|
|
|
@ -13,5 +13,4 @@ rand = "0.3"
|
|||
|
||||
primitives = { path = "../primitives" }
|
||||
bitcrypto = { path = "../crypto" }
|
||||
serialization = { path = "../serialization" }
|
||||
message = { path = "../message" }
|
||||
|
|
|
@ -9,10 +9,11 @@ extern crate parking_lot;
|
|||
extern crate bitcrypto as crypto;
|
||||
extern crate message;
|
||||
extern crate primitives;
|
||||
extern crate serialization as ser;
|
||||
|
||||
pub mod io;
|
||||
pub mod net;
|
||||
pub mod protocol;
|
||||
pub mod session;
|
||||
pub mod util;
|
||||
mod config;
|
||||
mod event_loop;
|
||||
|
|
|
@ -1,35 +1,42 @@
|
|||
use std::io;
|
||||
use std::{io, net};
|
||||
use futures::Poll;
|
||||
use futures::stream::Stream;
|
||||
use parking_lot::Mutex;
|
||||
use bytes::Bytes;
|
||||
use message::{MessageResult, Payload, Command};
|
||||
use message::{MessageResult, Payload, Command, Magic, Message};
|
||||
use net::Connection;
|
||||
use io::{read_message_stream, ReadMessageStream, SharedTcpStream, WriteMessage};
|
||||
use io::{read_message_stream, ReadMessageStream, SharedTcpStream, WriteMessage, write_message};
|
||||
|
||||
pub struct Channel {
|
||||
connection: Connection,
|
||||
message_stream: Mutex<ReadMessageStream<SharedTcpStream>>,
|
||||
write_stream: SharedTcpStream,
|
||||
version: u32,
|
||||
magic: Magic,
|
||||
address: net::SocketAddr,
|
||||
read_stream: Mutex<ReadMessageStream<SharedTcpStream>>,
|
||||
}
|
||||
|
||||
impl Channel {
|
||||
pub fn new(connection: Connection) -> Self {
|
||||
let stream = read_message_stream(connection.stream.clone(), connection.magic);
|
||||
Channel {
|
||||
connection: connection,
|
||||
message_stream: Mutex::new(stream),
|
||||
write_stream: connection.stream,
|
||||
version: connection.version,
|
||||
magic: connection.magic,
|
||||
address: connection.address,
|
||||
read_stream: Mutex::new(stream),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn write_message<T>(&self, payload: &T) -> WriteMessage<T, SharedTcpStream> where T: Payload {
|
||||
self.connection.write_message(payload)
|
||||
let message = Message::new(self.magic, self.version, payload).expect("failed to create outgoing message");
|
||||
write_message(self.write_stream.clone(), message)
|
||||
}
|
||||
|
||||
pub fn poll_message(&self) -> Poll<Option<(MessageResult<(Command, Bytes)>)>, io::Error> {
|
||||
self.message_stream.lock().poll()
|
||||
self.read_stream.lock().poll()
|
||||
}
|
||||
|
||||
pub fn version(&self) -> u32 {
|
||||
self.connection.version
|
||||
self.version
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use std::net;
|
||||
use message::{Message, Payload, Magic};
|
||||
use io::{write_message, WriteMessage, SharedTcpStream};
|
||||
use message::Magic;
|
||||
use io::SharedTcpStream;
|
||||
|
||||
pub struct Connection {
|
||||
pub stream: SharedTcpStream,
|
||||
|
@ -8,16 +8,3 @@ pub struct Connection {
|
|||
pub magic: Magic,
|
||||
pub address: net::SocketAddr,
|
||||
}
|
||||
|
||||
impl Connection {
|
||||
pub fn write_message<T>(&self, payload: &T) -> WriteMessage<T, SharedTcpStream> where T: Payload {
|
||||
let message = match Message::new(self.magic, self.version, payload) {
|
||||
Ok(message) => message,
|
||||
Err(_err) => {
|
||||
// trace here! outgoing messages should always be written properly
|
||||
panic!();
|
||||
}
|
||||
};
|
||||
write_message(self.stream.clone(), message)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
mod ping;
|
||||
|
||||
use message::{Command, Error};
|
||||
use PeerId;
|
||||
|
||||
pub trait Protocol {
|
||||
fn start(&self);
|
||||
fn try_handle(&self, command: Command, paylaod: &[u8], version: u32, peerid: PeerId) -> Result<(), Error>;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
use protocol::Protocol;
|
||||
|
||||
pub struct Ping;
|
|
@ -0,0 +1,3 @@
|
|||
mod manual;
|
||||
mod normal;
|
||||
mod seednode;
|
|
@ -102,7 +102,6 @@ digraph dependencies {
|
|||
N5 -> N4[label="",style=dashed];
|
||||
N5 -> N12[label="",style=dashed];
|
||||
N5 -> N13[label="",style=dashed];
|
||||
N5 -> N21[label="",style=dashed];
|
||||
N5 -> N32[label="",style=dashed];
|
||||
N5 -> N35[label="",style=dashed];
|
||||
N5 -> N38[label="",style=dashed];
|
||||
|
|
BIN
tools/graph.png
BIN
tools/graph.png
Binary file not shown.
Before Width: | Height: | Size: 454 KiB After Width: | Height: | Size: 448 KiB |
Loading…
Reference in New Issue