Pure Erlang implementation of 9p2000 protocol
filesystem fs 9p2000 erlang 9p

Add error handling for Erlang errors

hauleth.dev 14736ded c7f912d2

verified
+7 -4
+7 -4
src/e9p_server.erl
··· 40 40 loop(Sock, FIDs, Handler) -> 41 41 case e9p_transport:read(Sock) of 42 42 {ok, Tag, Data} -> 43 - ?LOG_WARNING(#{msg => Data}), 44 - case handle_message(Data, FIDs, Handler) of 43 + ?LOG_DEBUG(#{msg => Data}), 44 + try handle_message(Data, FIDs, Handler) of 45 45 {ok, Reply, RFIDs, RHandler} -> 46 46 e9p_transport:send(Sock, Tag, Reply), 47 47 ?MODULE:loop(Sock, RFIDs, RHandler); 48 48 {error, Err, RHandler} -> 49 49 e9p_transport:send(Sock, Tag, error_msg(Err)), 50 50 ?MODULE:loop(Sock, FIDs, RHandler) 51 + catch 52 + C:E:S -> 53 + e9p_transport:send(Sock, Tag, #rerror{msg = io_lib:format("Caught ~p: ~p", [C, E])}), 54 + erlang:raise(C, E, S) 51 55 end; 52 56 {error, closed} -> 53 - ?LOG_WARNING("Connection closed"), 57 + ?LOG_INFO("Connection closed"), 54 58 ok 55 59 end. 56 60 ··· 80 84 81 85 handle_message(#topen{fid = FID, mode = Mode}, FIDs, Handler0) -> 82 86 maybe 83 - ?LOG_WARNING(#{fids => FIDs}), 84 87 {ok, QID} ?= get_qid(FIDs, FID), 85 88 {ok, {NewQID, IOUnit}, Handler} ?= e9p_fs:open(Handler0, QID, Mode), 86 89 {ok, #ropen{qid = QID, io_unit = IOUnit}, FIDs#{FID => NewQID}, Handler}