private void processAnnouncedPeer(byte[] peerId, String ip, int port) {
		SharingPeer peer = this.getOrCreatePeer(peerId, ip, port);

		synchronized (peer) {
			// Attempt to connect to the peer if and only if:
			//   - We're not already connected to it;
			//   - We're not a seeder (we leave the responsibility
			//	   of connecting to peers that need to download
			//     something), or we are a seeder but we're still
			//     willing to initiate some outbound connections.
			if (!peer.isBound() &&
				(!this.isSeed() ||
				 this.connected.size() < Client.VOLUNTARY_OUTBOUND_CONNECTIONS)) {
				if (!this.service.connect(peer)) {
					logger.debug("Removing peer " + peer + ".");
					this.peers.remove(peer.hasPeerId()
							? peer.getHexPeerId()
							: peer.getHostIdentifier());
				}
			}
		}
	}