quic-s / quics-protocol Goto Github PK
View Code? Open in Web Editor NEWSimple protocol for QUIC-S based on QUIC protocol
License: MIT License
Simple protocol for QUIC-S based on QUIC protocol
License: MIT License
Is your feature request related to a problem? Please describe.
There is a DialWithTransaction that opens a transaction at the same time as the dial so that you can handle features like security authorization when you first dial the protocol. However, currently, the listener cannot distinguish between Dial and DialWithTransaction because it only uses one listen method. In this case, the client should use DialWithTransaction for security authorization, but the connection is established even if the client approaches with Dial.
Describe the solution you'd like
To solve the above problem, we could consider adding a ListenWithTransaction to pair with DialWithTransaction, or getting rid of DialWithTransaction and adding a security authorization to the connhandler in Listen.
Additional context
For now, I think it would be a good idea to add ListenWithTransaction to prevent the conn object from being returned if the transaction does not succeed.
Is your feature request related to a problem? Please describe.
Currently, there are only two types of protocols: message transmission and []byte type file transmission.
Therefore, it is necessary to add protocol message types and methods to conveniently handle more diverse communications.
Describe the solution you'd like
It is possible that this will be modified during the implementation phase, but for now, we are thinking about adding authentication when establishing a connection for the first time, adding a message in the form of a text, and sending additional information about the file when sending it.
Describe alternatives you've considered
Additional context
Describe the bug
This is not a problem that occurs often, but when multiple tasks are performed in parallel and the connection is disconnected, a segmentation fault error may occur because the connection struct is nil when the open transaction method is called.
We need to check whether the connection struct is nil.
To Reproduce
Occurs when testing a situation where the connection is disconnected several times.
Is your feature request related to a problem? Please describe.
Currently, you can only enter the exact IP address, but it would be more convenient to use if you could also access the domain name.
Describe the solution you'd like
Implemented using the lookup method of the net package
Is your feature request related to a problem? Please describe.
Current versions of the protocol create just one stream to send and receive all messages and files.
However, this can lead to head of line blocking issues and does not properly utilize quic's new stream feature.
Since one of QUIC's strengths is the ability to implement parallel connections using STREAMs, it needs to be improved to allow for parallel use of STREAMs.
Describe the solution you'd like
Currently, we implement the transfer of data using a connection struct, but we add a stream struct. We then change it so that the user can do the OpenTransaction first using the connection struct and then call the data transfer method using the stream struct.
This sending and receiving communication over a single stream is called a transaction, and it allows for several to be performed in parallel at once.
If you change it as above, you can ping-pong while sending and receiving data in one stream, so delete the ~WithResponse method.
Describe alternatives you've considered
Additional context
https://calendar.perfplanet.com/2020/head-of-line-blocking-in-quic-and-http-3-the-details/
Is your feature request related to a problem? Please describe.
In the current structure, changes to the file are not properly detected while the file is being transmitted using the SendFile method. In this case, there is a potential risk because the contents of the transmitted file may be contaminated.
Describe the solution you'd like
I think we need to add a process to check if anything has changed during file transfer by checking the ModTime before and after actually transferring the file.
Additional context
Checking the hash based on the file contents may be the most reliable method, but I am concerned that it may take a long time to check the hash for large files.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.