p2p in progress

This commit is contained in:
debris 2016-10-17 10:52:15 +02:00
parent 3625fb06c2
commit f7bfa16195
15 changed files with 44 additions and 33 deletions

1
Cargo.lock generated
View File

@ -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)",
]

View File

@ -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()
}

View File

@ -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)]

View File

@ -13,5 +13,4 @@ rand = "0.3"
primitives = { path = "../primitives" }
bitcrypto = { path = "../crypto" }
serialization = { path = "../serialization" }
message = { path = "../message" }

View File

@ -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;

View File

@ -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
}
}

View File

@ -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)
}
}

9
p2p/src/protocol/mod.rs Normal file
View File

@ -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>;
}

3
p2p/src/protocol/ping.rs Normal file
View File

@ -0,0 +1,3 @@
use protocol::Protocol;
pub struct Ping;

View File

3
p2p/src/session/mod.rs Normal file
View File

@ -0,0 +1,3 @@
mod manual;
mod normal;
mod seednode;

View File

View File

View File

@ -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];

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 KiB

After

Width:  |  Height:  |  Size: 448 KiB