transport_capabilities_protocol.erl 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. -module(transport_capabilities_protocol).
  2. -behaviour(ranch_protocol).
  3. -export([start_link/4]).
  4. -export([init/4]).
  5. start_link(Ref, Socket, Transport, Opts) ->
  6. Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]),
  7. {ok, Pid}.
  8. init(Ref, Socket, Transport, _Opts = []) ->
  9. ok = ranch:accept_ack(Ref),
  10. loop(Socket, Transport).
  11. loop(Socket, Transport) ->
  12. case Transport:recv(Socket, 0, 5000) of
  13. {ok, Data} ->
  14. Reply =
  15. case check(Socket, Transport, Data) of
  16. ok ->
  17. <<"OK">>;
  18. error ->
  19. <<"ERROR">>
  20. end,
  21. Transport:send(Socket, Reply),
  22. loop(Socket, Transport);
  23. _ ->
  24. ok = Transport:close(Socket)
  25. end.
  26. check(Socket, Transport, <<"getopts/2">>) ->
  27. case catch Transport:getopts(Socket, []) of
  28. {ok, _} ->
  29. ok;
  30. _ ->
  31. error
  32. end;
  33. check(Socket, Transport, <<"getstat/1">>) ->
  34. case catch Transport:getstat(Socket) of
  35. {ok, _} ->
  36. ok;
  37. _ ->
  38. error
  39. end;
  40. check(Socket, Transport, <<"getstat/2">>) ->
  41. case catch Transport:getstat(Socket, []) of
  42. {ok, _} ->
  43. ok;
  44. _ ->
  45. error
  46. end.