From e7b8ee0797cf313bda05fbfadbad792c181d09d5 Mon Sep 17 00:00:00 2001 From: Todd Treece Date: Sun, 31 May 2015 21:07:17 -0400 Subject: [PATCH] adds client id to connect --- Adafruit_MQTT.cpp | 16 ++++++++++++---- Adafruit_MQTT.h | 2 ++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Adafruit_MQTT.cpp b/Adafruit_MQTT.cpp index 34a7ab0..33d3992 100644 --- a/Adafruit_MQTT.cpp +++ b/Adafruit_MQTT.cpp @@ -1,7 +1,7 @@ #include "Adafruit_MQTT.h" -Adafruit_MQTT::Adafruit_MQTT(char *server, uint16_t port, char *user, char *key) { +Adafruit_MQTT::Adafruit_MQTT(char *server, uint16_t port, char *user, char *key, char *cid) { strncpy(servername, server, SERVERNAME_SIZE); servername[SERVERNAME_SIZE-1] = 0; portnum = port; @@ -9,7 +9,9 @@ Adafruit_MQTT::Adafruit_MQTT(char *server, uint16_t port, char *user, char *key) strncpy(username, user, USERNAME_SIZE); username[USERNAME_SIZE-1] = 0; strncpy(userkey, key, KEY_SIZE); - userkey[KEY_SIZE-1] = 0; + userkey[KEY_SIZE-1] = 0; + strncpy(clientid, cid, CLIENTID_SIZE); + userkey[CLIENTID_SIZE-1] = 0; errno = 0; } @@ -45,15 +47,21 @@ uint8_t Adafruit_MQTT::connectPacket(uint8_t *packet) { p[0] = MQTT_CONN_KEEPALIVE & 0xFF; p++; + uint16_t len = strlen(clientid); + p[0] = len >> 8; p++; + p[0] = len & 0xFF; p++; + memcpy(p, clientid, len); + p+=len; + if (username[0] != 0) { - uint16_t len = strlen(username); + len = strlen(username); p[0] = len >> 8; p++; p[0] = len & 0xFF; p++; memcpy(p, username, len); p+=len; } if (userkey[0] != 0) { - uint16_t len = strlen(userkey); + len = strlen(userkey); p[0] = len >> 8; p++; p[0] = len & 0xFF; p++; memcpy(p, userkey, len); diff --git a/Adafruit_MQTT.h b/Adafruit_MQTT.h index af47e38..6d49b54 100644 --- a/Adafruit_MQTT.h +++ b/Adafruit_MQTT.h @@ -16,6 +16,7 @@ #define USERNAME_SIZE 25 #define KEY_SIZE 41 #define FEEDNAME_SIZE 25 +#define CLIENTID_SIZE 23 #define CONNECT_TIMEOUT_MS 3000 @@ -38,6 +39,7 @@ class Adafruit_MQTT { char servername[SERVERNAME_SIZE]; uint32_t serverip; int16_t portnum; + char clientid[CLIENTID_SIZE]; char username[USERNAME_SIZE]; char userkey[KEY_SIZE];