diff options
| -rw-r--r-- | src/rabbit_framing_channel.erl | 34 | ||||
| -rw-r--r-- | src/rabbit_reader.erl | 6 |
2 files changed, 22 insertions, 18 deletions
diff --git a/src/rabbit_framing_channel.erl b/src/rabbit_framing_channel.erl index bc1a2a0835..889e966315 100644 --- a/src/rabbit_framing_channel.erl +++ b/src/rabbit_framing_channel.erl @@ -73,15 +73,25 @@ read_frame(ChannelPid) -> end. mainloop(ChannelPid) -> - {method, MethodName, FieldsBin} = read_frame(ChannelPid), - Method = rabbit_framing:decode_method_fields(MethodName, FieldsBin), - case rabbit_framing:method_has_content(MethodName) of - true -> {ClassId, _MethodId} = rabbit_framing:method_id(MethodName), - rabbit_channel:do(ChannelPid, Method, - collect_content(ChannelPid, ClassId)); - false -> rabbit_channel:do(ChannelPid, Method) - end, - ?MODULE:mainloop(ChannelPid). + Decoded = read_frame(ChannelPid), + case Decoded of + {method, MethodName, FieldsBin} -> + Method = rabbit_framing:decode_method_fields(MethodName, FieldsBin), + case rabbit_framing:method_has_content(MethodName) of + true -> {ClassId, _MethodId} = + rabbit_framing:method_id(MethodName), + rabbit_channel:do(ChannelPid, Method, + collect_content(ChannelPid, + ClassId)); + false -> rabbit_channel:do(ChannelPid, Method) + end, + ?MODULE:mainloop(ChannelPid); + _ -> + rabbit_misc:protocol_error( + unexpected_frame, + "expected method frame, got ~p instead", + [Decoded]) + end. collect_content(ChannelPid, ClassId) -> case read_frame(ChannelPid) of @@ -93,13 +103,13 @@ collect_content(ChannelPid, ClassId) -> payload_fragments_rev = Payload}; {content_header, HeaderClassId, 0, _BodySize, _PropertiesBin} -> rabbit_misc:protocol_error( - command_invalid, + unexpected_frame, "expected content header for class ~w, " "got one for class ~w instead", [ClassId, HeaderClassId]); _ -> rabbit_misc:protocol_error( - command_invalid, + unexpected_frame, "expected content header for class ~w, " "got non content header frame instead", [ClassId]) @@ -115,7 +125,7 @@ collect_content_payload(ChannelPid, RemainingByteCount, Acc) -> [FragmentBin | Acc]); _ -> rabbit_misc:protocol_error( - command_invalid, + unexpected_frame, "expected content body, got non content body frame instead", []) end. diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index b5514c822a..ccd51ffa91 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -823,12 +823,6 @@ map_exception(Channel, Reason) -> end, {ShouldClose, CloseChannel, CloseMethod}. -%% FIXME: this clause can go when we move to AMQP spec >=8.1 -lookup_amqp_exception(#amqp_error{name = precondition_failed, - explanation = Expl, - method = Method}) -> - ExplBin = amqp_exception_explanation(<<"PRECONDITION_FAILED">>, Expl), - {false, 406, ExplBin, Method}; lookup_amqp_exception(#amqp_error{name = Name, explanation = Expl, method = Method}) -> |
