mirror of
https://github.com/eclipse-mosquitto/mosquitto.git
synced 2026-09-21 23:47:52 +08:00
Add mosquitto_connect_with_flags_callback_set().
This allows a second connect callback to be used that exposes the MQTT connect flags parameter. Closes #738, #128.
This commit is contained in:
@@ -94,6 +94,9 @@ Client library features:
|
||||
- Add mosquitto_pub_topic_check2(), mosquitto_sub_topic_check2(), and
|
||||
mosquitto_topic_matches_sub2() which are identical to the similarly named
|
||||
functions but also take length arguments.
|
||||
- Add mosquitto_connect_with_flags_callback_set(), which allows a second
|
||||
connect callback to be used which also exposes the connect flags parameter.
|
||||
Closes #738 and #128.
|
||||
|
||||
Client library fixes:
|
||||
- Fix incorrect PSK key being used if it had leading zeroes.
|
||||
|
||||
+2
-2
@@ -73,7 +73,7 @@ void my_message_callback(struct mosquitto *mosq, void *obj, const struct mosquit
|
||||
}
|
||||
}
|
||||
|
||||
void my_connect_callback(struct mosquitto *mosq, void *obj, int result)
|
||||
void my_connect_callback(struct mosquitto *mosq, void *obj, int result, int flags)
|
||||
{
|
||||
int i;
|
||||
struct mosq_config *cfg;
|
||||
@@ -261,7 +261,7 @@ int main(int argc, char *argv[])
|
||||
mosquitto_log_callback_set(mosq, my_log_callback);
|
||||
mosquitto_subscribe_callback_set(mosq, my_subscribe_callback);
|
||||
}
|
||||
mosquitto_connect_callback_set(mosq, my_connect_callback);
|
||||
mosquitto_connect_with_flags_callback_set(mosq, my_connect_callback);
|
||||
mosquitto_message_callback_set(mosq, my_message_callback);
|
||||
|
||||
rc = client_connect(mosq, &cfg);
|
||||
|
||||
@@ -26,12 +26,12 @@ Contributors:
|
||||
|
||||
int handle__connack(struct mosquitto *mosq)
|
||||
{
|
||||
uint8_t byte;
|
||||
uint8_t connect_flags;
|
||||
uint8_t result;
|
||||
int rc;
|
||||
|
||||
assert(mosq);
|
||||
rc = packet__read_byte(&mosq->in_packet, &byte); // Reserved byte, not used
|
||||
rc = packet__read_byte(&mosq->in_packet, &connect_flags);
|
||||
if(rc) return rc;
|
||||
rc = packet__read_byte(&mosq->in_packet, &result);
|
||||
if(rc) return rc;
|
||||
@@ -42,6 +42,11 @@ int handle__connack(struct mosquitto *mosq)
|
||||
mosq->on_connect(mosq, mosq->userdata, result);
|
||||
mosq->in_callback = false;
|
||||
}
|
||||
if(mosq->on_connect_with_flags){
|
||||
mosq->in_callback = true;
|
||||
mosq->on_connect_with_flags(mosq, mosq->userdata, result, connect_flags);
|
||||
mosq->in_callback = false;
|
||||
}
|
||||
pthread_mutex_unlock(&mosq->callback_mutex);
|
||||
switch(result){
|
||||
case 0:
|
||||
|
||||
@@ -89,4 +89,5 @@ MOSQ_1.5 {
|
||||
mosquitto_pub_topic_check2;
|
||||
mosquitto_sub_topic_check2;
|
||||
mosquitto_topic_matches_sub2;
|
||||
mosquitto_connect_with_flags_callback_set;
|
||||
} MOSQ_1.4;
|
||||
|
||||
@@ -1225,6 +1225,13 @@ void mosquitto_connect_callback_set(struct mosquitto *mosq, void (*on_connect)(s
|
||||
pthread_mutex_unlock(&mosq->callback_mutex);
|
||||
}
|
||||
|
||||
void mosquitto_connect_with_flags_callback_set(struct mosquitto *mosq, void (*on_connect)(struct mosquitto *, void *, int, int))
|
||||
{
|
||||
pthread_mutex_lock(&mosq->callback_mutex);
|
||||
mosq->on_connect_with_flags = on_connect;
|
||||
pthread_mutex_unlock(&mosq->callback_mutex);
|
||||
}
|
||||
|
||||
void mosquitto_disconnect_callback_set(struct mosquitto *mosq, void (*on_disconnect)(struct mosquitto *, void *, int))
|
||||
{
|
||||
pthread_mutex_lock(&mosq->callback_mutex);
|
||||
|
||||
@@ -1133,6 +1133,31 @@ libmosq_EXPORT int mosquitto_tls_psk_set(struct mosquitto *mosq, const char *psk
|
||||
*/
|
||||
libmosq_EXPORT void mosquitto_connect_callback_set(struct mosquitto *mosq, void (*on_connect)(struct mosquitto *, void *, int));
|
||||
|
||||
/*
|
||||
* Function: mosquitto_connect_with_flags_callback_set
|
||||
*
|
||||
* Set the connect callback. This is called when the broker sends a CONNACK
|
||||
* message in response to a connection.
|
||||
*
|
||||
* Parameters:
|
||||
* mosq - a valid mosquitto instance.
|
||||
* on_connect - a callback function in the following form:
|
||||
* void callback(struct mosquitto *mosq, void *obj, int rc)
|
||||
*
|
||||
* Callback Parameters:
|
||||
* mosq - the mosquitto instance making the callback.
|
||||
* obj - the user data provided in <mosquitto_new>
|
||||
* rc - the return code of the connection response, one of:
|
||||
* flags - the connect flags.
|
||||
*
|
||||
* * 0 - success
|
||||
* * 1 - connection refused (unacceptable protocol version)
|
||||
* * 2 - connection refused (identifier rejected)
|
||||
* * 3 - connection refused (broker unavailable)
|
||||
* * 4-255 - reserved for future use
|
||||
*/
|
||||
libmosq_EXPORT void mosquitto_connect_with_flags_callback_set(struct mosquitto *mosq, void (*on_connect)(struct mosquitto *, void *, int, int));
|
||||
|
||||
/*
|
||||
* Function: mosquitto_disconnect_callback_set
|
||||
*
|
||||
|
||||
@@ -246,6 +246,7 @@ struct mosquitto {
|
||||
struct mosquitto_message_all *out_messages;
|
||||
struct mosquitto_message_all *out_messages_last;
|
||||
void (*on_connect)(struct mosquitto *, void *userdata, int rc);
|
||||
void (*on_connect_with_flags)(struct mosquitto *, void *userdata, int rc, int flags);
|
||||
void (*on_disconnect)(struct mosquitto *, void *userdata, int rc);
|
||||
void (*on_publish)(struct mosquitto *, void *userdata, int mid);
|
||||
void (*on_message)(struct mosquitto *, void *userdata, const struct mosquitto_message *message);
|
||||
|
||||
Reference in New Issue
Block a user