aboutsummaryrefslogtreecommitdiff
path: root/client/acronc/handler_socket.c
AgeCommit message (Collapse)Author
2022-08-09fix(libacron/acronc/helloworld): ac_receive: 'read' should be the delta ↵Trumeet
value of bytes read in the call, not the absolute position Also clearify that 'read' is undefined if the function fails.
2022-08-09fix(libacron): infinite loop when wic_parse returns 0Trumeet
This is a rather complicated way to fix backlogging issues. It asks the client to pass partial buffer, and the client also must retry with NULL buffer if ac_receive returns AC_E_AGAIN.
2022-07-28fix(libacron): memory leak when received more than one framesTrumeet
API:CHANGE
2022-07-26fix(acronc): input <cmd><EOF> will cause illegal memory accessTrumeet
Cause: 1. stdin got cmd -> request 2. stdin got EOF -> ac_disconnect -> ac_conn becomes NULL 3. socket got response -> ac_receive(ac_conn) -> crash Conclusion: ordering issue between ac_disconnect and socket read. Solution: Best way: pause the input until command returns Cons: 1. Lost the advantage of background execution of commands (has to wait until done) 2. It is unreliable to determine if a command is done: although the current server implementation will not send anything else after an error or cmd_result, Minecraft server itself or future server implementations may. The spec does not say anything on termination. Acronc currently assumes that after receiving an error or cmd_result with the same request ID, it is done. Then, it resumes the stdin, reads the EOF, and then disconnect. Worse way: Directly call uv_read_stop before ac_disconnect Cons: It is going to lose anything, including command results. This is particularly undesirable for ad-hoc calls (i.e. echo list | acronc). Therefore, the current approach is to block and read as much as we can (until error or cmd_result), then stop reading the socket before disconnecting as a double safe. Signed-off-by: Trumeet <yuuta@yuuta.moe>
2022-07-26refactor(libacron/acronc/helloworld): move to separate directoriesTrumeet
The corresponding CMakeLists.txt files are still rough.