Comments (2)
Hello! I would like to work on this.
I'm still new to Rust and the TFTP protocol. So just to confirm my understanding:
- The case we want to handle here is when the RRQ/WRQ gets accidentally duplicated, right?
- We want to track the client's TID, which is the socket address we get from
socket.recv_from()
, is this correct?
Lastly, would an MPSC channel be more suitable than callback closure + ArcMutex? Server::serve
can process all the finish messages from the Handlers upon receiving each new request.
from tftp.
* The case we want to handle here is when the RRQ/WRQ gets accidentally duplicated, right?
Correct.
* We want to track the client's TID, which is the socket address we get from `socket.recv_from()`, is this correct?
Correct again!
Lastly, would an MPSC channel be more suitable than callback closure + ArcMutex?
Server::serve
can process all the finish messages from the Handlers upon receiving each new request.
Both approaches would certainly work; however, I dislike the idea of deferring all of that processing to the next invocation of the Server::serve
method. Then the Server::serve
method would come across as more of a Server::serve_and_update_ongoing_connections
type thing. Using the ArcMutex would allow for updating the data structure on demand rather than waiting for the update to be taken off a queue. This also keeps the responsibility of various functions/methods narrower... does that seem reasonable?
from tftp.
Related Issues (20)
- connection::Connection should transmit the Error packet HOT 5
- Ensure requests cannot escape the server's serving directory HOT 5
- Server should transmit an Error packet (illegal operation) if a client's initial packet is NOT a read or write request
- Expand CI to run on MacOS HOT 4
- Expand CI to run on Windows HOT 2
- impl From<Packet<Data>> for Packet<Ack> HOT 6
- Server should send an error packet if the client wants to PUT a file that already exists HOT 2
- Add a Server constructor that chooses a random port
- Add a method called "to_string" for the `packet::error::Code` enum
- Add a unit test for when the client initiates a connect with a packet that is *not* a read or write request HOT 2
- impl Clone for client::Builder<ConnectTo> HOT 3
- Create a constant for the lower bound of the port range HOT 2
- Replace the assert statement in connection::Connection::put with an error packet and terminate the transmission HOT 2
- Fix typo "7-bit ASCII" -> "8-bit ASCII" in src/packet/mode.rs
- Add documentation for using Wireshark to capture TFTP packets HOT 3
- Handle duplicated packets HOT 4
- bytes::IntoBytes could take a &mut [u8; MAX_PACKET_SIZE] to avoid allocation HOT 4
- Profile the crate with something like flamegraph to see where most of the code spends its time HOT 4
- Add final packet dallying HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tftp.