Fix use of "dup" with pubrel, subscribe, unsubscribe.

Thanks to Paolo Patierno.
pull/211/merge
Roger A. Light 11 years ago
parent 2ce4d94282
commit 5b6f6976c7

@ -323,7 +323,7 @@ void _mosquitto_message_retry_check_actual(struct mosquitto *mosq, struct mosqui
case mosq_ms_wait_for_pubcomp:
messages->timestamp = now;
messages->dup = true;
_mosquitto_send_pubrel(mosq, messages->msg.mid, true);
_mosquitto_send_pubrel(mosq, messages->msg.mid);
break;
default:
break;

@ -613,7 +613,7 @@ int mosquitto_subscribe(struct mosquitto *mosq, int *mid, const char *sub, int q
if(mosquitto_sub_topic_check(sub)) return MOSQ_ERR_INVAL;
return _mosquitto_send_subscribe(mosq, mid, false, sub, qos);
return _mosquitto_send_subscribe(mosq, mid, sub, qos);
}
int mosquitto_unsubscribe(struct mosquitto *mosq, int *mid, const char *sub)
@ -623,7 +623,7 @@ int mosquitto_unsubscribe(struct mosquitto *mosq, int *mid, const char *sub)
if(mosquitto_sub_topic_check(sub)) return MOSQ_ERR_INVAL;
return _mosquitto_send_unsubscribe(mosq, mid, false, sub);
return _mosquitto_send_unsubscribe(mosq, mid, sub);
}
int mosquitto_tls_set(struct mosquitto *mosq, const char *cafile, const char *capath, const char *certfile, const char *keyfile, int (*pw_callback)(char *buf, int size, int rwflag, void *userdata))

@ -109,7 +109,7 @@ int _mosquitto_handle_pubrec(struct mosquitto *mosq)
rc = _mosquitto_message_out_update(mosq, mid, mosq_ms_wait_for_pubcomp);
#endif
if(rc) return rc;
rc = _mosquitto_send_pubrel(mosq, mid, false);
rc = _mosquitto_send_pubrel(mosq, mid);
if(rc) return rc;
return MOSQ_ERR_SUCCESS;

@ -142,7 +142,7 @@ int _mosquitto_send_disconnect(struct mosquitto *mosq)
return _mosquitto_send_simple_command(mosq, DISCONNECT);
}
int _mosquitto_send_subscribe(struct mosquitto *mosq, int *mid, bool dup, const char *topic, uint8_t topic_qos)
int _mosquitto_send_subscribe(struct mosquitto *mosq, int *mid, const char *topic, uint8_t topic_qos)
{
/* FIXME - only deals with a single topic */
struct _mosquitto_packet *packet = NULL;
@ -158,7 +158,7 @@ int _mosquitto_send_subscribe(struct mosquitto *mosq, int *mid, bool dup, const
packetlen = 2 + 2+strlen(topic) + 1;
packet->command = SUBSCRIBE | (dup<<3) | (1<<1);
packet->command = SUBSCRIBE | (1<<1);
packet->remaining_length = packetlen;
rc = _mosquitto_packet_alloc(packet);
if(rc){
@ -187,7 +187,7 @@ int _mosquitto_send_subscribe(struct mosquitto *mosq, int *mid, bool dup, const
}
int _mosquitto_send_unsubscribe(struct mosquitto *mosq, int *mid, bool dup, const char *topic)
int _mosquitto_send_unsubscribe(struct mosquitto *mosq, int *mid, const char *topic)
{
/* FIXME - only deals with a single topic */
struct _mosquitto_packet *packet = NULL;
@ -203,7 +203,7 @@ int _mosquitto_send_unsubscribe(struct mosquitto *mosq, int *mid, bool dup, cons
packetlen = 2 + 2+strlen(topic);
packet->command = UNSUBSCRIBE | (dup<<3) | (1<<1);
packet->command = UNSUBSCRIBE | (1<<1);
packet->remaining_length = packetlen;
rc = _mosquitto_packet_alloc(packet);
if(rc){

@ -185,14 +185,14 @@ int _mosquitto_send_pubrec(struct mosquitto *mosq, uint16_t mid)
return _mosquitto_send_command_with_mid(mosq, PUBREC, mid, false);
}
int _mosquitto_send_pubrel(struct mosquitto *mosq, uint16_t mid, bool dup)
int _mosquitto_send_pubrel(struct mosquitto *mosq, uint16_t mid)
{
#ifdef WITH_BROKER
if(mosq) _mosquitto_log_printf(NULL, MOSQ_LOG_DEBUG, "Sending PUBREL to %s (Mid: %d)", mosq->id, mid);
#else
if(mosq) _mosquitto_log_printf(mosq, MOSQ_LOG_DEBUG, "Client %s sending PUBREL (Mid: %d)", mosq->id, mid);
#endif
return _mosquitto_send_command_with_mid(mosq, PUBREL|2, mid, dup);
return _mosquitto_send_command_with_mid(mosq, PUBREL|2, mid, false);
}
/* For PUBACK, PUBCOMP, PUBREC, and PUBREL */

@ -30,8 +30,8 @@ int _mosquitto_send_puback(struct mosquitto *mosq, uint16_t mid);
int _mosquitto_send_pubcomp(struct mosquitto *mosq, uint16_t mid);
int _mosquitto_send_publish(struct mosquitto *mosq, uint16_t mid, const char *topic, uint32_t payloadlen, const void *payload, int qos, bool retain, bool dup);
int _mosquitto_send_pubrec(struct mosquitto *mosq, uint16_t mid);
int _mosquitto_send_pubrel(struct mosquitto *mosq, uint16_t mid, bool dup);
int _mosquitto_send_subscribe(struct mosquitto *mosq, int *mid, bool dup, const char *topic, uint8_t topic_qos);
int _mosquitto_send_unsubscribe(struct mosquitto *mosq, int *mid, bool dup, const char *topic);
int _mosquitto_send_pubrel(struct mosquitto *mosq, uint16_t mid);
int _mosquitto_send_subscribe(struct mosquitto *mosq, int *mid, const char *topic, uint8_t topic_qos);
int _mosquitto_send_unsubscribe(struct mosquitto *mosq, int *mid, const char *topic);
#endif

@ -859,7 +859,7 @@ int mqtt3_db_message_write(struct mosquitto_db *db, struct mosquitto *context)
break;
case mosq_ms_resend_pubrel:
rc = _mosquitto_send_pubrel(context, mid, true);
rc = _mosquitto_send_pubrel(context, mid);
if(!rc){
tail->state = mosq_ms_wait_for_pubcomp;
}else{

@ -70,11 +70,11 @@ int mqtt3_handle_connack(struct mosquitto_db *db, struct mosquitto *context)
}
for(i=0; i<context->bridge->topic_count; i++){
if(context->bridge->topics[i].direction == bd_in || context->bridge->topics[i].direction == bd_both){
if(_mosquitto_send_subscribe(context, NULL, false, context->bridge->topics[i].remote_topic, context->bridge->topics[i].qos)){
if(_mosquitto_send_subscribe(context, NULL, context->bridge->topics[i].remote_topic, context->bridge->topics[i].qos)){
return 1;
}
}else{
if(_mosquitto_send_unsubscribe(context, NULL, false, context->bridge->topics[i].remote_topic)){
if(_mosquitto_send_unsubscribe(context, NULL, context->bridge->topics[i].remote_topic)){
/* direction = inwards only. This means we should not be subscribed
* to the topic. It is possible that we used to be subscribed to
* this topic so unsubscribe. */

@ -27,7 +27,6 @@ publish_packet = mosq_test.gen_publish("qos2/disconnect/test", qos=2, mid=mid, p
publish_dup_packet = mosq_test.gen_publish("qos2/disconnect/test", qos=2, mid=mid, payload="disconnect-message", dup=True)
pubrec_packet = mosq_test.gen_pubrec(mid)
pubrel_packet = mosq_test.gen_pubrel(mid)
pubrel_dup_packet = mosq_test.gen_pubrel(mid, dup=True)
pubcomp_packet = mosq_test.gen_pubcomp(mid)
mid = 3266
@ -61,7 +60,7 @@ try:
sock.close()
sock = mosq_test.do_client_connect(connect_packet, connack_packet)
if mosq_test.expect_packet(sock, "dup pubrel", pubrel_dup_packet):
if mosq_test.expect_packet(sock, "dup pubrel", pubrel_packet):
sock.send(pubcomp_packet)
rc = 0
sock.close()

@ -29,7 +29,6 @@ publish_packet = mosq_test.gen_publish("qos2/timeout/test", qos=2, mid=mid, payl
publish_dup_packet = mosq_test.gen_publish("qos2/timeout/test", qos=2, mid=mid, payload="timeout-message", dup=True)
pubrec_packet = mosq_test.gen_pubrec(mid)
pubrel_packet = mosq_test.gen_pubrel(mid)
pubrel_dup_packet = mosq_test.gen_pubrel(mid, dup=True)
pubcomp_packet = mosq_test.gen_pubcomp(mid)
broker = mosq_test.start_broker(filename=os.path.basename(__file__))
@ -54,7 +53,7 @@ try:
# Wait for longer than 5 seconds to get republish with dup set
# This is covered by the 8 second timeout
if mosq_test.expect_packet(sock, "dup pubrel", pubrel_dup_packet):
if mosq_test.expect_packet(sock, "dup pubrel", pubrel_packet):
sock.send(pubcomp_packet)
rc = 0

@ -38,7 +38,6 @@ publish_packet = mosq_test.gen_publish("bridge/disconnect/test", qos=2, mid=mid,
publish_dup_packet = mosq_test.gen_publish("bridge/disconnect/test", qos=2, mid=mid, payload="disconnect-message", dup=True)
pubrec_packet = mosq_test.gen_pubrec(mid)
pubrel_packet = mosq_test.gen_pubrel(mid)
pubrel_dup_packet = mosq_test.gen_pubrel(mid, True)
pubcomp_packet = mosq_test.gen_pubcomp(mid)
ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@ -90,7 +89,7 @@ try:
if mosq_test.expect_packet(bridge, "3rd subscribe", subscribe3_packet):
bridge.send(suback3_packet)
if mosq_test.expect_packet(bridge, "2nd pubrel", pubrel_dup_packet):
if mosq_test.expect_packet(bridge, "2nd pubrel", pubrel_packet):
bridge.send(pubcomp_packet)
rc = 0

@ -28,7 +28,6 @@ publish_packet = mosq_test.gen_publish("pub/qos2/test", qos=2, mid=mid, payload=
publish_dup_packet = mosq_test.gen_publish("pub/qos2/test", qos=2, mid=mid, payload="message", dup=True)
pubrec_packet = mosq_test.gen_pubrec(mid)
pubrel_packet = mosq_test.gen_pubrel(mid)
pubrel_dup_packet = mosq_test.gen_pubrel(mid, dup=True)
pubcomp_packet = mosq_test.gen_pubcomp(mid)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@ -78,7 +77,7 @@ try:
if mosq_test.expect_packet(conn, "connect", connect_packet):
conn.send(connack_packet)
if mosq_test.expect_packet(conn, "retried pubrel", pubrel_dup_packet):
if mosq_test.expect_packet(conn, "retried pubrel", pubrel_packet):
conn.send(pubcomp_packet)
if mosq_test.expect_packet(conn, "disconnect", disconnect_packet):

@ -46,7 +46,6 @@ publish_packet = mosq_test.gen_publish("pub/qos2/test", qos=2, mid=mid, payload=
publish_dup_packet = mosq_test.gen_publish("pub/qos2/test", qos=2, mid=mid, payload="message", dup=True)
pubrec_packet = mosq_test.gen_pubrec(mid)
pubrel_packet = mosq_test.gen_pubrel(mid)
pubrel_dup_packet = mosq_test.gen_pubrel(mid, dup=True)
pubcomp_packet = mosq_test.gen_pubcomp(mid)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@ -79,7 +78,7 @@ try:
conn.send(pubrec_packet)
if mosq_test.expect_packet(conn, "pubrel", pubrel_packet):
if mosq_test.expect_packet(conn, "dup pubrel", pubrel_dup_packet):
if mosq_test.expect_packet(conn, "dup pubrel", pubrel_packet):
conn.send(pubcomp_packet)
if mosq_test.expect_packet(conn, "disconnect", disconnect_packet):

Loading…
Cancel
Save