CRUST - Change Log
- Indicate to the crust user if the remote crust trying to bootstrap off us presents itself as a
CrustUser::Client (in which case external reacheability check will be subverted) or a
CrustUser::Node (in which case external reacheability check will be mandated).
- Add tests for checking the handling of connection to ourselves.
- Do not spam log Listener wouldblocks.
- CI, README, Contributor Agreement and clippy clean up.
- rustfmt 0.8.0 refactor.
- Fix timer overflow bug.
- Allow users to force include TCP acceptor port in connection info via new option in crust config file.
Error levels are reserved strictly for error logging.
Trace to log logic flows, specific code-path hits etc.
- Fix mio to 0.6.4 as 0.6.5 has deprecations and hence breaking changes for us (we treat deprecation warnings as errors currently).
- Port to the new paradigm of mio-v6.
- Crust can now do echo/stun service on Windows too.
- Re-enable tests which were ignored on Windows due to prior mio bugs.
- Allow routing to indicate whether we want to bootstrap as a node or as a client. If bootstrapping as a node, message to the bootstrapee will be sent indicating so and bootstrapee will check if we are reacheable externally. Only if this condition is satisfied will we be allowed to successfully bootstrap else it will trigger an immediate BootstrapFailed event.
- Disable hole punching to limit concurrent socket usage.
- Expose functionality to check if the connected peer is one of the hard-coded contacts from the config.
- Update documentation links.
- Update to maidsafe_utilities v0.10.0 and adapt to its removal of deprecated API's.
- Provide an API to find out if the connected peer has a whitelisted IP as mentioned in config file.
- This will currently not work properly on Windows due to (mio-bug)[https://github.com/carllerche/mio/issues/397].
rust_sodium instead of
- Use latest
config_file_handler (0.4.0) to derive the file paths for config and bootstrap cache on various platforms.
- Use latest
- Shuffle the bootstrap list, otherwise there is a higher probability of connecting to the ones at the beginning of the list even with parallel bootstrap.
- Update dependencies to their latest.
- Fix sodiumoxide to v0.0.10 as the new released v0.0.12 does not support rustc-serializable types anymore and breaks builds
- Do not drop messages with Priority value below 2
- Pull in socketaddr and getif_addrs crate
- Refactor to have hole punch and direct connects take the same code route - update NAT Traversal logic
- Refactor timeout type so that we dont need the indirect mapping of token <-> context and context <-> state
- Bug fixes
- Alphabetize imports and use rustfmt.toml which is committed
- Add temporary function for routing to determine if there are other instances of Crust running on LAN and take actions based on it
- Integrate with mio
- This currently uses a temporary mio fork (
tmp_mio) with windows bug fix.
- Redesign with State Pattern.
- Bring number of persistent threads in crust to 1.
- Previously we would have multiple threads per connection leading to huge number of context switches which was inefficient. It was not uncommon to see more than 200 threads for a little over 60 connections (Routing Table size > 60).
- Now in many of our tests where cpu would constantly hover around 100%, we have cpu now calm at around 1-5% and peaks to 30% temporarily only during peak stress (Lot of churn and data exchange).
- Make all system calls async.
- Switch from application level concurrency primitives to operating system level concurrency.
- Now with event based mechanism, when kernel is not ready for some state we steal that opportunity to have it service some other state it is ready for which keeps the event pipeline hot and optimal.
- Attempt bootstrapping in parallel.
- This increases the speed of bootstrap process. Previously the sequential bootstrap meant we went to next potential peer only if the currently attempted one failed.
- Remove some of the 1st party dependant crates and move it in as modules.
- Cleaned out crust config file removing deprecated options.
- Integrate stun service into connection listeners instead of having them as separate peers.
- Crust API updates to rename OurConnectionInfo, TheirConnectionInfo to PrivConnectionInfo and PubConnectionInfo.
- Support bootstrap blacklist.
- Depend on maidsafe_utilities 0.6.0.
- Fix endianness issue.
- Tweak the algorithm for dropping messages when the bandwitdh is insufficient.
- Ensure dropped duplicate connections dont have messages in transit
- Add message priority to send high-priority messages first and if bandwidth is
insufficient, drop the low-priority ones.
- Add the
network_name option to prevent unwanted connections and facilitate
starting separate test networks.
- Avoid duplicate connections to the same peer.
- Remove uTP support.
- Implement heartbeat messages to detect lost connections more quickly.
- Add a version number to the protocol to avoid connecting to incompatible
- Re-implement TCP send/receive using payload size + data.
- Make deserialisation errors as debug instead of error.
- Minor cleanup.
- Removed unneeded dependency.
- Tests fixed.
- Peer connections wait for both sides before sending
- Enable uTP (still buggy).
- Add TCP rendezvous.
- Support port forwarding with ports specified as TCP acceptors.
- Never raise
LostPeer events for ourselves.
- Update config file format to include service discovery port bootstrap cache
- Fix duplicate
- Fix issues 619, 606, 605, 601, 589 and 595.
- Remove cbor and ip dependencies.
- Expose the PeerId in TheirConnectionInfo.
- Implement Rand for PeerId.
- Randomise the bootstrap contact order.
- Restrict to TCP only until the UTP problems are fixed.
- Add peer IDs, and identify connections with them instead of
- Removes feature gates, Crust can now compile on stable rust compiler.
- OnConnect, OnAccept and OnRendezvousConnect events now report what the remote
peer sees this peer's endpoint as
- Replaced Event with EventSender from maidsafe_utilities
- Change API to notify failures (e.g. now it is
OnConnect(io::Result<Connection>, u32 /* token */).
- Don't start any acceptor implicitly.
- Remove default acceptors settings from config file.
- Use memory mapped file abstractions to manage bootstrap cache files. We no
longer rely on a "file cache owner" that is chosen based on whoever is
successful to start some default acceptor implicitly.
- A bugfix to uTP code.
- Lint changes.
- A new benchmark.
- Remove wildcards from dependencies.
- Update lint checks
- Style changes
- Documentation updates
- Hole punching API
- Functions to use the P2P network to help punch an UDP hole
- Rendezvous connections using custom UDP sockets
- Breakages in network protocol (handshake strucutre changed)
- Updated examples
- New example: reporter
- Bug fixes
- API updates (now an
u32 token is associated with connections)
- Remove dependency on packages that were unnecessary and were
causing stability issues on crust
- Tests are more predictable.
- Tests are more stable (tests can contain bugs too).
- Changes to build against most recent Rust (and libraries).
- Adapts to new rust-utp API
service::test::network test is working again
- Small change in protocol as preparation for UDP hole punching
- Impl of Ord for transport::Endpoint no longer panics
- Exports util function
- Calls which start accepting connections now return real socket addresses where
IP is usually 0.0.0.0 (to be used with the fn from previous bullet)
- Fixes explicit panic when trying to send on a closed connection
- Reduces number of threads by using channels.
- Renames ConnectionManager to Service
- All Service public API functions are now async
- Removes NewConnection and NewBootstrapConnection events in favor of OnConnect and OnAccept
- Code reduction by doing encoding and decoding at one place (helped fixing a decoder bug we had)
- Consistent usage of the 5483 and 5484 ports
- Revert-revert ConnectionManager::new API change
- Revert ConnectionManager::new API change
- ConnectionManager starts accepting connections as soon as constructed now
- Config file now also specifies optional TCP and UTP listening ports
- Improved documentation
- Fixed #288 unsafe multithreaded access to the bootstrap file.
- Updated sample config file
- Updated crust_peer example to use config file
- Changed config- and bootstrap-file-handling to terminate application if file is unreadable
- Fixed bug causing infinite bootstrap loop in Routing
- Refactored config- and bootstrap-file-handling
- MAID-1142 Add UTP protocol support to crust
- #259 Build failure on Win32
- Added AppVeyor script
- #221 getting more bootstrap connections than expected
connection_manager::get_own_endpoints() should not return loopback address
- #230 Cannot compile crust - crustpeer - #[forbid(unusedmut)]
- #223 Error: use of unstable library feature 'udp_extras': available through the
net2 crate on crates.io
ConnectionManager::get_own_endpoints returns 0 as port
RUST-3 Sprint tasks
- MAID-1149 Split bootstrap cache file in two files (config & cache)
- MAID-1136 Add a new event NewBootstrapConnection and make bootstrap method non blocking.
- MAID-1146 Attempt Bootstrap continuously until it succeeds
- MAID-1148 Update bootstrap handler to maintain recent endpoints
- MAID-1161 Update start_listening() to take no parameters
- MAID-1162 Add getbeaconacceptor_port() method only for tests
- MAID-1264 Update API to hide configuration file path
- MAID-1132 Integrate UPnP
- MAID-1139 Remove Crust API’s start_listening2() and expose
- Updated dependency's version
- Made ConnectionManager::seek_peers() private
- Travis document generation build script updated
- Fixed documentation links
- Removed sodiumoxide dependency
- #140 Bootstrap file format
- #148 Ensure contents of Bootstrap file are unique Fixes
- #151 fix build failures with rust nightly
- #134 First node doesn't read its own bootstrap list
- MAID-1125 Update Bootstrap Handler to use Json format.
- MAID-1124 Get a list of public IPs for others to connect to
- MAID-1075 Correct bug; listening on local port (127.0.0.1)
- MAID-1122 Windows ifaddr resolution
[0.0.1 - 0.0.8]
- Remove FailedToConnect Event
- Update process for Connecting in TCP
- Tcp Networking
- Tcp live port and backup random port selection
- Create send/rcv channel from routing to connections object
- Implement test for basic "hello world" two way communication
- Set up Udp broadcast and respond when we have a port (we listen on any random port above 1024 [user space port]) available (broadcast port is 5484)
- Add connection established/lost/ new messages to be passed to routing (via channel)
- Implement connect() in connection manager
- Allow tcp and then utp connections option and wrap in connection object.
- Update handle connect for TCP
- Remove FailedToConnect event
- Integrate bootstrap (Link ability to read and write bootstrap file)
- Integrate beacon (Have connection manger start, broadcast on udp broadcast for port 5484 (later multicast for ipv6)
- Send serialised bootstrap info as part of beacon reply (Link ability to send bootstrap file to any node requesting it)
- Broadcast receiver
- CLI Example - options:
- Join / Start a node(optionally provide bootstrap info)
- Allow sending messages at various rates per second
- Print Incomming message rate per second
- Local Network Test. 12 Linux, 2 OSX, 2 WIN
- 101 Droplet test
- Version 0.0.8