Merge pull request #3794 from ethcore/net-fix
Network connectivity fixes
This commit is contained in:
		
						commit
						a6fcd8a0d9
					
				| @ -170,9 +170,6 @@ | |||||||
| 		"enode://cadc6e573b6bc2a9128f2f635ac0db3353e360b56deef239e9be7e7fce039502e0ec670b595f6288c0d2116812516ad6b6ff8d5728ff45eba176989e40dead1e@37.128.191.230:30303", | 		"enode://cadc6e573b6bc2a9128f2f635ac0db3353e360b56deef239e9be7e7fce039502e0ec670b595f6288c0d2116812516ad6b6ff8d5728ff45eba176989e40dead1e@37.128.191.230:30303", | ||||||
| 		"enode://595a9a06f8b9bc9835c8723b6a82105aea5d55c66b029b6d44f229d6d135ac3ecdd3e9309360a961ea39d7bee7bac5d03564077a4e08823acc723370aace65ec@46.20.235.22:30303", | 		"enode://595a9a06f8b9bc9835c8723b6a82105aea5d55c66b029b6d44f229d6d135ac3ecdd3e9309360a961ea39d7bee7bac5d03564077a4e08823acc723370aace65ec@46.20.235.22:30303", | ||||||
| 		"enode://029178d6d6f9f8026fc0bc17d5d1401aac76ec9d86633bba2320b5eed7b312980c0a210b74b20c4f9a8b0b2bf884b111fa9ea5c5f916bb9bbc0e0c8640a0f56c@216.158.85.185:30303", | 		"enode://029178d6d6f9f8026fc0bc17d5d1401aac76ec9d86633bba2320b5eed7b312980c0a210b74b20c4f9a8b0b2bf884b111fa9ea5c5f916bb9bbc0e0c8640a0f56c@216.158.85.185:30303", | ||||||
| 		"enode://84f5d5957b4880a8b0545e32e05472318898ad9fc8ebe1d56c90c12334a98e12351eccfdf3a2bf72432ac38b57e9d348400d17caa083879ade3822390f89773f@10.1.52.78:30303", |  | ||||||
| 		"enode://f90dc9b9bf7b8db97726b7849e175f1eb2707f3d8f281c929336e398dd89b0409fc6aeceb89e846278e9d3ecc3857cebfbe6758ff352ece6fe5d42921ee761db@10.1.173.87:30303", |  | ||||||
| 		"enode://6a868ced2dec399c53f730261173638a93a40214cf299ccf4d42a76e3fa54701db410669e8006347a4b3a74fa090bb35af0320e4bc8d04cf5b7f582b1db285f5@10.3.149.199:30303", |  | ||||||
| 		"enode://fdd1b9bb613cfbc200bba17ce199a9490edc752a833f88d4134bf52bb0d858aa5524cb3ec9366c7a4ef4637754b8b15b5dc913e4ed9fdb6022f7512d7b63f181@212.47.247.103:30303", | 		"enode://fdd1b9bb613cfbc200bba17ce199a9490edc752a833f88d4134bf52bb0d858aa5524cb3ec9366c7a4ef4637754b8b15b5dc913e4ed9fdb6022f7512d7b63f181@212.47.247.103:30303", | ||||||
| 		"enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303", | 		"enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303", | ||||||
| 		"enode://de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786@54.94.239.50:30303", | 		"enode://de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786@54.94.239.50:30303", | ||||||
|  | |||||||
| @ -1678,7 +1678,7 @@ impl ChainSync { | |||||||
| 
 | 
 | ||||||
| 	pub fn on_packet(&mut self, io: &mut SyncIo, peer: PeerId, packet_id: u8, data: &[u8]) { | 	pub fn on_packet(&mut self, io: &mut SyncIo, peer: PeerId, packet_id: u8, data: &[u8]) { | ||||||
| 		if packet_id != STATUS_PACKET && !self.peers.contains_key(&peer) { | 		if packet_id != STATUS_PACKET && !self.peers.contains_key(&peer) { | ||||||
| 			debug!(target:"sync", "Unexpected packet from unregistered peer: {}:{}", peer, io.peer_info(peer)); | 			debug!(target:"sync", "Unexpected packet {} from unregistered peer: {}:{}", packet_id, peer, io.peer_info(peer)); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 		let rlp = UntrustedRlp::new(data); | 		let rlp = UntrustedRlp::new(data); | ||||||
|  | |||||||
| @ -131,6 +131,10 @@ impl<'s, 'h> SyncIo for NetSyncIo<'s, 'h> { | |||||||
| 	fn protocol_version(&self, protocol: &ProtocolId, peer_id: PeerId) -> u8 { | 	fn protocol_version(&self, protocol: &ProtocolId, peer_id: PeerId) -> u8 { | ||||||
| 		self.network.protocol_version(*protocol, peer_id).unwrap_or(0) | 		self.network.protocol_version(*protocol, peer_id).unwrap_or(0) | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	fn peer_info(&self, peer_id: PeerId) -> String { | ||||||
|  | 		self.network.peer_client_version(peer_id) | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ use std::sync::atomic::{AtomicUsize, AtomicBool, Ordering as AtomicOrdering}; | |||||||
| use std::ops::*; | use std::ops::*; | ||||||
| use std::cmp::min; | use std::cmp::min; | ||||||
| use std::path::{Path, PathBuf}; | use std::path::{Path, PathBuf}; | ||||||
| use std::io::{Read, Write}; | use std::io::{Read, Write, ErrorKind}; | ||||||
| use std::fs; | use std::fs; | ||||||
| use ethkey::{KeyPair, Secret, Random, Generator}; | use ethkey::{KeyPair, Secret, Random, Generator}; | ||||||
| use mio::*; | use mio::*; | ||||||
| @ -381,8 +381,6 @@ pub struct Host { | |||||||
| impl Host { | impl Host { | ||||||
| 	/// Create a new instance
 | 	/// Create a new instance
 | ||||||
| 	pub fn new(mut config: NetworkConfiguration, stats: Arc<NetworkStats>) -> Result<Host, NetworkError> { | 	pub fn new(mut config: NetworkConfiguration, stats: Arc<NetworkStats>) -> Result<Host, NetworkError> { | ||||||
| 		trace!(target: "host", "Creating new Host object"); |  | ||||||
| 
 |  | ||||||
| 		let mut listen_address = match config.listen_address { | 		let mut listen_address = match config.listen_address { | ||||||
| 			None => SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(0, 0, 0, 0), DEFAULT_PORT)), | 			None => SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(0, 0, 0, 0), DEFAULT_PORT)), | ||||||
| 			Some(addr) => addr, | 			Some(addr) => addr, | ||||||
| @ -405,6 +403,7 @@ impl Host { | |||||||
| 		// Setup the server socket
 | 		// Setup the server socket
 | ||||||
| 		let tcp_listener = try!(TcpListener::bind(&listen_address)); | 		let tcp_listener = try!(TcpListener::bind(&listen_address)); | ||||||
| 		listen_address = SocketAddr::new(listen_address.ip(), try!(tcp_listener.local_addr()).port()); | 		listen_address = SocketAddr::new(listen_address.ip(), try!(tcp_listener.local_addr()).port()); | ||||||
|  | 		debug!(target: "network", "Listening at {:?}", listen_address); | ||||||
| 		let udp_port = config.udp_port.unwrap_or(listen_address.port()); | 		let udp_port = config.udp_port.unwrap_or(listen_address.port()); | ||||||
| 		let local_endpoint = NodeEndpoint { address: listen_address, udp_port: udp_port }; | 		let local_endpoint = NodeEndpoint { address: listen_address, udp_port: udp_port }; | ||||||
| 
 | 
 | ||||||
| @ -707,7 +706,10 @@ impl Host { | |||||||
| 				} | 				} | ||||||
| 			}; | 			}; | ||||||
| 			match TcpStream::connect(&address) { | 			match TcpStream::connect(&address) { | ||||||
| 				Ok(socket) => socket, | 				Ok(socket) => { | ||||||
|  | 					trace!(target: "network", "Connecting to {:?}", address); | ||||||
|  | 					socket | ||||||
|  | 				}, | ||||||
| 				Err(e) => { | 				Err(e) => { | ||||||
| 					debug!(target: "network", "Can't connect to address {:?}: {:?}", address, e); | 					debug!(target: "network", "Can't connect to address {:?}: {:?}", address, e); | ||||||
| 					return; | 					return; | ||||||
| @ -749,7 +751,9 @@ impl Host { | |||||||
| 			let socket = match self.tcp_listener.lock().accept() { | 			let socket = match self.tcp_listener.lock().accept() { | ||||||
| 				Ok((sock, _addr)) => sock, | 				Ok((sock, _addr)) => sock, | ||||||
| 				Err(e) => { | 				Err(e) => { | ||||||
| 					debug!(target: "network", "Error accepting connection: {:?}", e); | 					if e.kind() != ErrorKind::WouldBlock { | ||||||
|  | 						debug!(target: "network", "Error accepting connection: {:?}", e); | ||||||
|  | 					} | ||||||
| 					break
 | 					break
 | ||||||
| 				}, | 				}, | ||||||
| 			}; | 			}; | ||||||
|  | |||||||
| @ -435,16 +435,16 @@ impl Session { | |||||||
| 
 | 
 | ||||||
| 				// map to protocol
 | 				// map to protocol
 | ||||||
| 				let protocol = self.info.capabilities[i].protocol; | 				let protocol = self.info.capabilities[i].protocol; | ||||||
| 				let pid = packet_id - self.info.capabilities[i].id_offset; | 				let protocol_packet_id = packet_id - self.info.capabilities[i].id_offset; | ||||||
| 
 | 
 | ||||||
| 				match *self.protocol_states.entry(protocol).or_insert_with(|| ProtocolState::Pending(Vec::new())) { | 				match *self.protocol_states.entry(protocol).or_insert_with(|| ProtocolState::Pending(Vec::new())) { | ||||||
| 					ProtocolState::Connected => { | 					ProtocolState::Connected => { | ||||||
| 						trace!(target: "network", "Packet {} mapped to {:?}:{}, i={}, capabilities={:?}", packet_id, protocol, pid, i, self.info.capabilities); | 						trace!(target: "network", "Packet {} mapped to {:?}:{}, i={}, capabilities={:?}", packet_id, protocol, protocol_packet_id, i, self.info.capabilities); | ||||||
| 						Ok(SessionData::Packet { data: packet.data, protocol: protocol, packet_id: pid } ) | 						Ok(SessionData::Packet { data: packet.data, protocol: protocol, packet_id: protocol_packet_id } ) | ||||||
| 					} | 					} | ||||||
| 					ProtocolState::Pending(ref mut pending) => { | 					ProtocolState::Pending(ref mut pending) => { | ||||||
| 						trace!(target: "network", "Packet {} deferred until protocol connection event completion", packet_id); | 						trace!(target: "network", "Packet {} deferred until protocol connection event completion", packet_id); | ||||||
| 						pending.push((packet.data, packet_id)); | 						pending.push((packet.data, protocol_packet_id)); | ||||||
| 
 | 
 | ||||||
| 						Ok(SessionData::Continue) | 						Ok(SessionData::Continue) | ||||||
| 					} | 					} | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user