Merge branch 'master' into master-version
This commit is contained in:
commit
b4ba070619
@ -33,10 +33,6 @@ addons:
|
|||||||
- libcurl4-openssl-dev
|
- libcurl4-openssl-dev
|
||||||
- libelf-dev
|
- libelf-dev
|
||||||
- libdw-dev
|
- libdw-dev
|
||||||
before_script: |
|
|
||||||
sudo add-apt-repository "deb http://ppa.launchpad.net/giskou/librocksdb/ubuntu trusty main" &&
|
|
||||||
sudo apt-get update &&
|
|
||||||
sudo apt-get install -y --force-yes librocksdb
|
|
||||||
script:
|
script:
|
||||||
- cargo build --release --verbose ${FEATURES}
|
- cargo build --release --verbose ${FEATURES}
|
||||||
- cargo test --release --verbose ${FEATURES} ${TARGETS}
|
- cargo test --release --verbose ${FEATURES} ${TARGETS}
|
||||||
|
3
test.sh
3
test.sh
@ -1,5 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Running Parity Full Test Sute
|
# Running Parity Full Test Sute
|
||||||
|
|
||||||
cargo test --features ethcore/json-tests $1 -p ethash -p ethcore-util -p ethcore -p ethsync -p ethcore-rpc -p parity -p
|
cargo test --features ethcore/json-tests $1 -p ethash -p ethcore-util -p ethcore -p ethsync -p ethcore-rpc -p parity -p ethminer
|
||||||
ethminer
|
|
||||||
|
@ -18,7 +18,6 @@ use bytes::Bytes;
|
|||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::collections::{HashSet, HashMap, BTreeMap, VecDeque};
|
use std::collections::{HashSet, HashMap, BTreeMap, VecDeque};
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::cmp;
|
|
||||||
use std::default::Default;
|
use std::default::Default;
|
||||||
use mio::*;
|
use mio::*;
|
||||||
use mio::udp::*;
|
use mio::udp::*;
|
||||||
@ -407,27 +406,34 @@ impl Discovery {
|
|||||||
let target: NodeId = try!(rlp.val_at(0));
|
let target: NodeId = try!(rlp.val_at(0));
|
||||||
let timestamp: u64 = try!(rlp.val_at(1));
|
let timestamp: u64 = try!(rlp.val_at(1));
|
||||||
try!(self.check_timestamp(timestamp));
|
try!(self.check_timestamp(timestamp));
|
||||||
let limit = (MAX_DATAGRAM_SIZE - 109) / 90;
|
|
||||||
let nearest = Discovery::nearest_node_entries(&target, &self.node_buckets);
|
let nearest = Discovery::nearest_node_entries(&target, &self.node_buckets);
|
||||||
if nearest.is_empty() {
|
if nearest.is_empty() {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
let mut rlp = RlpStream::new_list(1);
|
let mut packets = Discovery::prepare_neighbours_packets(&nearest);
|
||||||
rlp.begin_list(cmp::min(limit, nearest.len()));
|
for p in packets.drain(..) {
|
||||||
for n in 0 .. nearest.len() {
|
self.send_packet(PACKET_NEIGHBOURS, &from, &p);
|
||||||
rlp.begin_list(4);
|
|
||||||
nearest[n].endpoint.to_rlp(&mut rlp);
|
|
||||||
rlp.append(&nearest[n].id);
|
|
||||||
if (n + 1) % limit == 0 || n == nearest.len() - 1 {
|
|
||||||
self.send_packet(PACKET_NEIGHBOURS, &from, &rlp.drain());
|
|
||||||
trace!(target: "discovery", "Sent {} Neighbours to {:?}", n, &from);
|
|
||||||
rlp = RlpStream::new_list(1);
|
|
||||||
rlp.begin_list(cmp::min(limit, nearest.len() - n));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
trace!(target: "discovery", "Sent {} Neighbours to {:?}", nearest.len(), &from);
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn prepare_neighbours_packets(nearest: &[NodeEntry]) -> Vec<Bytes> {
|
||||||
|
let limit = (MAX_DATAGRAM_SIZE - 109) / 90;
|
||||||
|
let chunks = nearest.chunks(limit);
|
||||||
|
let packets = chunks.map(|c| {
|
||||||
|
let mut rlp = RlpStream::new_list(1);
|
||||||
|
rlp.begin_list(c.len());
|
||||||
|
for n in 0 .. c.len() {
|
||||||
|
rlp.begin_list(4);
|
||||||
|
c[n].endpoint.to_rlp(&mut rlp);
|
||||||
|
rlp.append(&c[n].id);
|
||||||
|
}
|
||||||
|
rlp.out()
|
||||||
|
});
|
||||||
|
packets.collect()
|
||||||
|
}
|
||||||
|
|
||||||
fn on_neighbours(&mut self, rlp: &UntrustedRlp, _node: &NodeId, from: &SocketAddr) -> Result<Option<TableUpdates>, NetworkError> {
|
fn on_neighbours(&mut self, rlp: &UntrustedRlp, _node: &NodeId, from: &SocketAddr) -> Result<Option<TableUpdates>, NetworkError> {
|
||||||
// TODO: validate packet
|
// TODO: validate packet
|
||||||
let mut added = HashMap::new();
|
let mut added = HashMap::new();
|
||||||
@ -506,6 +512,24 @@ mod tests {
|
|||||||
use crypto::KeyPair;
|
use crypto::KeyPair;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use rustc_serialize::hex::FromHex;
|
use rustc_serialize::hex::FromHex;
|
||||||
|
use rlp::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn find_node() {
|
||||||
|
let mut nearest = Vec::new();
|
||||||
|
let node = Node::from_str("enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@127.0.0.1:7770").unwrap();
|
||||||
|
for _ in 0..1000 {
|
||||||
|
nearest.push( NodeEntry { id: node.id.clone(), endpoint: node.endpoint.clone() });
|
||||||
|
}
|
||||||
|
|
||||||
|
let packets = Discovery::prepare_neighbours_packets(&nearest);
|
||||||
|
assert_eq!(packets.len(), 77);
|
||||||
|
for p in &packets[0..76] {
|
||||||
|
assert!(p.len() > 1280/2);
|
||||||
|
assert!(p.len() <= 1280);
|
||||||
|
}
|
||||||
|
assert!(packets.last().unwrap().len() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn discovery() {
|
fn discovery() {
|
||||||
|
Loading…
Reference in New Issue
Block a user