diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..61767a9fb --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "tests/org.eclipse.paho.mqtt.testing"] + path = tests/org.eclipse.paho.mqtt.testing + url = git://git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.testing.git diff --git a/apps/emqtt/src/emqtt_client.erl b/apps/emqtt/src/emqtt_client.erl index a00a52e85..4b96ad2d4 100644 --- a/apps/emqtt/src/emqtt_client.erl +++ b/apps/emqtt/src/emqtt_client.erl @@ -90,9 +90,11 @@ handle_cast(Msg, State) -> handle_info(timeout, State) -> stop({shutdown, timeout}, State); -handle_info({stop, duplicate_id}, State=#state{conn_name=ConnName}) -> - %%TODO: - %lager:error("Shutdown for duplicate clientid:~s, conn:~s", [ClientId, ConnName]), +handle_info({stop, duplicate_id, NewPid}, State=#state{conn_name=ConnName}) -> + %% TODO: to... + %% need transfer data??? + %% emqtt_client:transfer(NewPid, Data), + %% lager:error("Shutdown for duplicate clientid:~s, conn:~s", [ClientId, ConnName]), stop({shutdown, duplicate_id}, State); %%TODO: ok?? diff --git a/apps/emqtt/src/emqtt_packet.erl b/apps/emqtt/src/emqtt_packet.erl index 76e388a78..13bc32d61 100644 --- a/apps/emqtt/src/emqtt_packet.erl +++ b/apps/emqtt/src/emqtt_packet.erl @@ -119,6 +119,7 @@ parse_frame(Bin, #mqtt_packet_header{ type = Type, <> = FrameBin, wrap(Header, #mqtt_packet_puback{packet_id = PacketId}, Rest); {?PUBREL, <>} -> + 1 = Qos, <> = FrameBin, wrap(Header, #mqtt_packet_puback{ packet_id = PacketId }, Rest); {?PUBCOMP, <>} -> diff --git a/apps/emqtt/src/emqtt_protocol.erl b/apps/emqtt/src/emqtt_protocol.erl index 51c255990..d4e44df3c 100644 --- a/apps/emqtt/src/emqtt_protocol.erl +++ b/apps/emqtt/src/emqtt_protocol.erl @@ -229,10 +229,15 @@ handle_packet(?DISCONNECT, #mqtt_packet{}, State=#proto_state{peer_name = PeerNa make_packet(Type) when Type >= ?CONNECT andalso Type =< ?DISCONNECT -> #mqtt_packet{ header = #mqtt_packet_header { type = Type } }. -make_packet(PubAck, PacketId) when PubAck >= ?PUBACK andalso PubAck =< ?PUBREC -> - #mqtt_packet { header = #mqtt_packet_header { type = PubAck}, +make_packet(PubAck, PacketId) when PubAck >= ?PUBACK andalso PubAck =< ?PUBCOMP -> + #mqtt_packet { header = #mqtt_packet_header { type = PubAck, qos = puback_qos(PubAck) }, variable = #mqtt_packet_puback { packet_id = PacketId}}. +puback_qos(?PUBACK) -> ?QOS_0; +puback_qos(?PUBREC) -> ?QOS_0; +puback_qos(?PUBREL) -> ?QOS_1; +puback_qos(?PUBCOMP) -> ?QOS_0. + -spec send_message(Message, State) -> {ok, NewState} when Message :: mqtt_message(), State :: proto_state(), diff --git a/tests/benchmarks/.placeholder b/tests/benchmarks/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tests/org.eclipse.paho.mqtt.testing b/tests/org.eclipse.paho.mqtt.testing new file mode 160000 index 000000000..17afdf7fb --- /dev/null +++ b/tests/org.eclipse.paho.mqtt.testing @@ -0,0 +1 @@ +Subproject commit 17afdf7fb8e148f376d63592bbf3dd4ccdf19e84