fix(coap): reject duplicated connection request
This commit is contained in:
parent
053f9b422c
commit
670749493b
|
@ -595,7 +595,8 @@ process_out(Outs, Result, Channel, _) ->
|
|||
process_nothing(_, _, Channel) ->
|
||||
{ok, Channel}.
|
||||
|
||||
process_connection({open, Req}, Result, Channel, Iter) ->
|
||||
process_connection({open, Req}, Result,
|
||||
Channel = #channel{conn_state = idle}, Iter) ->
|
||||
Queries = emqx_coap_message:get_option(uri_query, Req),
|
||||
case emqx_misc:pipeline(
|
||||
[ fun enrich_conninfo/2
|
||||
|
@ -610,12 +611,31 @@ process_connection({open, Req}, Result, Channel, Iter) ->
|
|||
process_connect(ensure_connected(NChannel), Req, Result, Iter);
|
||||
{error, ReasonCode, NChannel} ->
|
||||
ErrMsg = io_lib:format("Login Failed: ~ts", [ReasonCode]),
|
||||
Payload = erlang:list_to_binary(lists:flatten(ErrMsg)),
|
||||
Payload = iolist_to_binary(ErrMsg),
|
||||
iter(Iter,
|
||||
reply({error, bad_request}, Payload, Req, Result),
|
||||
NChannel)
|
||||
end;
|
||||
|
||||
process_connection({open, Req}, Result,
|
||||
Channel = #channel{
|
||||
conn_state = ConnState,
|
||||
clientinfo = #{clientid := ClientId}}, Iter)
|
||||
when ConnState == connected ->
|
||||
Queries = emqx_coap_message:get_option(uri_query, Req),
|
||||
ErrMsg0 =
|
||||
case Queries of
|
||||
#{<<"clientid">> := ClientId} ->
|
||||
"client has connected";
|
||||
#{<<"clientid">> := ReqClientId} ->
|
||||
["channel has registered by: ", ReqClientId];
|
||||
_ ->
|
||||
"invalid queries"
|
||||
end,
|
||||
ErrMsg = io_lib:format("Bad Request: ~ts", [ErrMsg0]),
|
||||
Payload = iolist_to_binary(ErrMsg),
|
||||
iter(Iter,
|
||||
reply({error, bad_request}, Payload, Req, Result),
|
||||
Channel);
|
||||
process_connection({close, Msg}, _, Channel, _) ->
|
||||
Reply = emqx_coap_message:piggyback({ok, deleted}, Msg),
|
||||
{shutdown, close, Reply, Channel}.
|
||||
|
|
Loading…
Reference in New Issue