This commit is contained in:
parent
e4c0be848d
commit
6df6411b72
7 changed files with 50 additions and 39 deletions
|
@ -72,7 +72,7 @@ async fn main() {
|
||||||
};
|
};
|
||||||
|
|
||||||
info!("Node private key: {}", hex::encode(&privkey));
|
info!("Node private key: {}", hex::encode(&privkey));
|
||||||
info!("Node public key: {}", hex::encode(&privkey.public_key()));
|
info!("Node public key: {}", hex::encode(privkey.public_key()));
|
||||||
|
|
||||||
let public_addr = opt.public_addr.map(|x| x.parse().unwrap());
|
let public_addr = opt.public_addr.map(|x| x.parse().unwrap());
|
||||||
let listen_addr: SocketAddr = opt.listen_addr.parse().unwrap();
|
let listen_addr: SocketAddr = opt.listen_addr.parse().unwrap();
|
||||||
|
@ -94,7 +94,7 @@ async fn main() {
|
||||||
|
|
||||||
info!("Add more peers to this mesh by running: fullmesh -n {} -l 127.0.0.1:$((1000 + $RANDOM)) -b {}@{}",
|
info!("Add more peers to this mesh by running: fullmesh -n {} -l 127.0.0.1:$((1000 + $RANDOM)) -b {}@{}",
|
||||||
hex::encode(&netid),
|
hex::encode(&netid),
|
||||||
hex::encode(&privkey.public_key()),
|
hex::encode(privkey.public_key()),
|
||||||
listen_addr);
|
listen_addr);
|
||||||
|
|
||||||
let watch_cancel = netapp::util::watch_ctrl_c();
|
let watch_cancel = netapp::util::watch_ctrl_c();
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use std::cmp::Ordering;
|
||||||
use std::collections::VecDeque;
|
use std::collections::VecDeque;
|
||||||
|
|
||||||
use bytes::BytesMut;
|
use bytes::BytesMut;
|
||||||
|
@ -44,7 +45,7 @@ impl BytesBuf {
|
||||||
|
|
||||||
/// Takes the whole content of the buffer and returns it as a single Bytes unit
|
/// Takes the whole content of the buffer and returns it as a single Bytes unit
|
||||||
pub fn take_all(&mut self) -> Bytes {
|
pub fn take_all(&mut self) -> Bytes {
|
||||||
if self.buf.len() == 0 {
|
if self.buf.is_empty() {
|
||||||
Bytes::new()
|
Bytes::new()
|
||||||
} else if self.buf.len() == 1 {
|
} else if self.buf.len() == 1 {
|
||||||
self.buf_len = 0;
|
self.buf_len = 0;
|
||||||
|
@ -82,14 +83,17 @@ impl BytesBuf {
|
||||||
fn take_exact_ok(&mut self, len: usize) -> Bytes {
|
fn take_exact_ok(&mut self, len: usize) -> Bytes {
|
||||||
assert!(len <= self.buf_len);
|
assert!(len <= self.buf_len);
|
||||||
let front = self.buf.pop_front().unwrap();
|
let front = self.buf.pop_front().unwrap();
|
||||||
if front.len() > len {
|
match front.len().cmp(&len) {
|
||||||
|
Ordering::Greater => {
|
||||||
self.buf.push_front(front.slice(len..));
|
self.buf.push_front(front.slice(len..));
|
||||||
self.buf_len -= len;
|
self.buf_len -= len;
|
||||||
front.slice(..len)
|
front.slice(..len)
|
||||||
} else if front.len() == len {
|
}
|
||||||
|
Ordering::Equal => {
|
||||||
self.buf_len -= len;
|
self.buf_len -= len;
|
||||||
front
|
front
|
||||||
} else {
|
}
|
||||||
|
Ordering::Less => {
|
||||||
let mut ret = BytesMut::with_capacity(len);
|
let mut ret = BytesMut::with_capacity(len);
|
||||||
ret.extend_from_slice(&front[..]);
|
ret.extend_from_slice(&front[..]);
|
||||||
self.buf_len -= front.len();
|
self.buf_len -= front.len();
|
||||||
|
@ -109,6 +113,7 @@ impl BytesBuf {
|
||||||
ret.freeze()
|
ret.freeze()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Return the internal sequence of Bytes slices that make up the buffer
|
/// Return the internal sequence of Bytes slices that make up the buffer
|
||||||
pub fn into_slices(self) -> VecDeque<Bytes> {
|
pub fn into_slices(self) -> VecDeque<Bytes> {
|
||||||
|
@ -116,6 +121,12 @@ impl BytesBuf {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for BytesBuf {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<Bytes> for BytesBuf {
|
impl From<Bytes> for BytesBuf {
|
||||||
fn from(b: Bytes) -> BytesBuf {
|
fn from(b: Bytes) -> BytesBuf {
|
||||||
let mut ret = BytesBuf::new();
|
let mut ret = BytesBuf::new();
|
||||||
|
|
|
@ -65,7 +65,7 @@ impl ClientConn {
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
"Handshake complete (client) with {}@{}",
|
"Handshake complete (client) with {}@{}",
|
||||||
hex::encode(&peer_id),
|
hex::encode(peer_id),
|
||||||
remote_addr
|
remote_addr
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ impl CancelOnDrop {
|
||||||
fn for_stream(self, stream: ByteStream) -> CancelOnDropStream {
|
fn for_stream(self, stream: ByteStream) -> CancelOnDropStream {
|
||||||
CancelOnDropStream {
|
CancelOnDropStream {
|
||||||
cancel: Some(self),
|
cancel: Some(self),
|
||||||
stream: stream,
|
stream,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,7 +113,7 @@ impl PeerInfo {
|
||||||
/// PeerConnState: possible states for our tentative connections to given peer
|
/// PeerConnState: possible states for our tentative connections to given peer
|
||||||
/// This structure is only interested in recording connection info for outgoing
|
/// This structure is only interested in recording connection info for outgoing
|
||||||
/// TCP connections
|
/// TCP connections
|
||||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum PeerConnState {
|
pub enum PeerConnState {
|
||||||
/// This entry represents ourself (the local node)
|
/// This entry represents ourself (the local node)
|
||||||
Ourself,
|
Ourself,
|
||||||
|
|
|
@ -79,7 +79,7 @@ impl ServerConn {
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
"Handshake complete (server) with {}@{}",
|
"Handshake complete (server) with {}@{}",
|
||||||
hex::encode(&peer_id),
|
hex::encode(peer_id),
|
||||||
remote_addr
|
remote_addr
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ pub fn watch_ctrl_c() -> watch::Receiver<bool> {
|
||||||
pub fn parse_peer_addr(peer: &str) -> Option<(NodeID, SocketAddr)> {
|
pub fn parse_peer_addr(peer: &str) -> Option<(NodeID, SocketAddr)> {
|
||||||
let delim = peer.find('@')?;
|
let delim = peer.find('@')?;
|
||||||
let (key, ip) = peer.split_at(delim);
|
let (key, ip) = peer.split_at(delim);
|
||||||
let pubkey = NodeID::from_slice(&hex::decode(&key).ok()?)?;
|
let pubkey = NodeID::from_slice(&hex::decode(key).ok()?)?;
|
||||||
let ip = ip[1..].parse::<SocketAddr>().ok()?;
|
let ip = ip[1..].parse::<SocketAddr>().ok()?;
|
||||||
Some((pubkey, ip))
|
Some((pubkey, ip))
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ pub fn parse_and_resolve_peer_addr(peer: &str) -> Option<(NodeID, Vec<SocketAddr
|
||||||
|
|
||||||
let delim = peer.find('@')?;
|
let delim = peer.find('@')?;
|
||||||
let (key, host) = peer.split_at(delim);
|
let (key, host) = peer.split_at(delim);
|
||||||
let pubkey = NodeID::from_slice(&hex::decode(&key).ok()?)?;
|
let pubkey = NodeID::from_slice(&hex::decode(key).ok()?)?;
|
||||||
let hosts = host[1..].to_socket_addrs().ok()?.collect::<Vec<_>>();
|
let hosts = host[1..].to_socket_addrs().ok()?.collect::<Vec<_>>();
|
||||||
if hosts.is_empty() {
|
if hosts.is_empty() {
|
||||||
return None;
|
return None;
|
||||||
|
@ -86,7 +86,7 @@ pub fn parse_and_resolve_peer_addr(peer: &str) -> Option<(NodeID, Vec<SocketAddr
|
||||||
pub async fn parse_and_resolve_peer_addr_async(peer: &str) -> Option<(NodeID, Vec<SocketAddr>)> {
|
pub async fn parse_and_resolve_peer_addr_async(peer: &str) -> Option<(NodeID, Vec<SocketAddr>)> {
|
||||||
let delim = peer.find('@')?;
|
let delim = peer.find('@')?;
|
||||||
let (key, host) = peer.split_at(delim);
|
let (key, host) = peer.split_at(delim);
|
||||||
let pubkey = NodeID::from_slice(&hex::decode(&key).ok()?)?;
|
let pubkey = NodeID::from_slice(&hex::decode(key).ok()?)?;
|
||||||
let hosts = tokio::net::lookup_host(&host[1..])
|
let hosts = tokio::net::lookup_host(&host[1..])
|
||||||
.await
|
.await
|
||||||
.ok()?
|
.ok()?
|
||||||
|
|
Loading…
Reference in a new issue