diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2010-06-23 17:09:50 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2010-06-23 17:09:50 +0100 |
| commit | 41f7db4c3d5da75bd401b62c22175fa13de2cbea (patch) | |
| tree | b744b051df5c179452885a9f0146eebf6cf6330e /src | |
| parent | 614c62f5ec9ab880e3438f17e5e843d4d5cf9bef (diff) | |
| download | rabbitmq-server-git-41f7db4c3d5da75bd401b62c22175fa13de2cbea.tar.gz | |
Fix up connection.close/ok and basic consume. I think we're now talking real AMQP 0-8.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_binary_generator.erl | 9 | ||||
| -rw-r--r-- | src/rabbit_framing_channel.erl | 11 | ||||
| -rw-r--r-- | src/rabbit_reader.erl | 11 |
3 files changed, 28 insertions, 3 deletions
diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl index 81cf3ceec7..cd8b44d15f 100644 --- a/src/rabbit_binary_generator.erl +++ b/src/rabbit_binary_generator.erl @@ -73,10 +73,17 @@ build_simple_method_frame(ChannelInt, MethodRecord) -> MethodFields = rabbit_framing:encode_method_fields(MethodRecord), - MethodName = rabbit_misc:method_record_type(MethodRecord), + MethodName = adjust_close(rabbit_misc:method_record_type(MethodRecord)), {ClassId, MethodId} = rabbit_framing:method_id(MethodName), create_frame(1, ChannelInt, [<<ClassId:16, MethodId:16>>, MethodFields]). +adjust_close('connection.close') -> + 'connection.close08'; +adjust_close('connection.close_ok') -> + 'connection.close08_ok'; +adjust_close(MethodName) -> + MethodName. + build_simple_content_frames(ChannelInt, #content{class_id = ClassId, properties = ContentProperties, diff --git a/src/rabbit_framing_channel.erl b/src/rabbit_framing_channel.erl index b7c6aa96fa..8eabf42bdc 100644 --- a/src/rabbit_framing_channel.erl +++ b/src/rabbit_framing_channel.erl @@ -74,7 +74,7 @@ read_frame(ChannelPid) -> mainloop(ChannelPid) -> {method, MethodName, FieldsBin} = read_frame(ChannelPid), - Method = rabbit_framing:decode_method_fields(MethodName, FieldsBin), + Method = decode_method_fields(MethodName, FieldsBin), case rabbit_framing:method_has_content(MethodName) of true -> rabbit_channel:do(ChannelPid, Method, collect_content(ChannelPid, MethodName)); @@ -82,6 +82,15 @@ mainloop(ChannelPid) -> end, ?MODULE:mainloop(ChannelPid). +%% Handle 0-8 version of basic.consume, which doesn't have a table on the end +decode_method_fields('basic.consume', FieldsBin) -> + T = rabbit_binary_generator:generate_table([]), + TLen = size(T), + rabbit_framing:decode_method_fields( + 'basic.consume', <<FieldsBin/binary, TLen:32/unsigned, T:TLen/binary>>); +decode_method_fields(MethodName, FieldsBin) -> + rabbit_framing:decode_method_fields(MethodName, FieldsBin). + collect_content(ChannelPid, MethodName) -> {ClassId, _MethodId} = rabbit_framing:method_id(MethodName), case read_frame(ChannelPid) of diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 20aacf33b2..f83f932db9 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -502,7 +502,9 @@ handle_frame(Type, Channel, Payload, State) -> end. analyze_frame(?FRAME_METHOD, <<ClassId:16, MethodId:16, MethodFields/binary>>) -> - {method, rabbit_framing:lookup_method_name({ClassId, MethodId}), MethodFields}; + {method, adjust_close(rabbit_framing:lookup_method_name({ClassId, + MethodId})), + MethodFields}; analyze_frame(?FRAME_HEADER, <<ClassId:16, Weight:16, BodySize:64, Properties/binary>>) -> {content_header, ClassId, Weight, BodySize, Properties}; analyze_frame(?FRAME_BODY, Body) -> @@ -512,6 +514,13 @@ analyze_frame(?FRAME_HEARTBEAT, <<>>) -> analyze_frame(_Type, _Body) -> error. +adjust_close('connection.close08') -> + 'connection.close'; +adjust_close('connection.close08_ok') -> + 'connection.close_ok'; +adjust_close(MethodName) -> + MethodName. + handle_input(frame_header, <<Type:8,Channel:16,PayloadSize:32>>, State) -> %%?LOGDEBUG("Got frame header: ~p/~p/~p~n", [Type, Channel, PayloadSize]), {State, {frame_payload, Type, Channel, PayloadSize}, PayloadSize + 1}; |
