Hello
everyone and thanks in advance for your support.
I cannot
connect to Azure IoTHub via the C paho library (on linux). I’m using the latest release,
v1.2.1.
I’m
following the official Microsoft documentation here (https://docs.microsoft.com/it-it/azure/iot-hub/iot-hub-mqtt-support).
I have
managed to successfully connect with both the python library (un Ubuntu) and
the Java GUI client (on Windows) and to exchange messages, so I guess the
credentials I’m using are correct.
I'm compiling the C paho library, altough my application is in C++, I don't know if this can be a problem.
What happens after I try to Connect is connectFailure with a null response pointer.
This is a
snippet of my MQTT_connect() function, linked against the mqtt3as library:
#define MQTT_BROKER_ADDRESS "ssl://xxx:8883"
void onConnectFailure(void* context, MQTTAsync_failureData* response)
{
printf("Connect failed, rc %d %s\n", response ? response->code : 0, response->message); }
int main() {}
char
clientID[] = "xxxx";
MQTTAsync_connectOptions conn_opts =
MQTTAsync_connectOptions_initializer;
MQTTAsync_SSLOptions ssl_opts =
MQTTAsync_SSLOptions_initializer;
//MQTTAsync_willOptions will_opts =
MQTTAsync_willOptions_initializer;
MQTTAsync_create(&client,
MQTT_BROKER_ADDRESS, clientID,
MQTTCLIENT_PERSISTENCE_NONE,
NULL);
MQTTAsync_setCallbacks(client, client, NULL,
OnMessageArrived, NULL);
string username =
"xxxx";
string password = "xxxx ";
//ssl_opts.struct_version = 2;
ssl_opts.enableServerCertAuth = 1;
ssl_opts.sslVersion =
MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.trustStore =
"/etc/ssl/certs/Baltimore_CyberTrust_Root.pem";
//ssl_opts.keyStore
="/etc/ssl/certs/ca-certificates.crt";
//ssl_opts.CApath =
"/etc/ssl/certs";
//ssl_opts.enabledCipherSuites="TLSv1";
//conn_opts.keepAliveInterval =
MQTT_KEEPALIVE;
//conn_opts.cleansession =
MQTT_CLEAN_SESSION;
//conn_opts.will = &will_opts;
conn_opts.username = username.c_str();
conn_opts.password = password.c_str();
//conn_opts.connectTimeout =
MQTT_TIMEOUT;
conn_opts._onSuccess_ = onConnect;
conn_opts._onFailure_ = onConnectFailure;
conn_opts.context = client;
//conn_opts.automaticReconnect = 0;
conn_opts.ssl = &ssl_opts;
conn_opts.MQTTVersion = 4;
// gAppLog.PrintLog(LOG_DEBUG_WS, "MQTT
connecting to: %s", MQTT_BROKER_ADDRESS);
printf("host: %s \nclientID: %s
\nusername: %s \npassword: %s \n",
MQTT_BROKER_ADDRESS,clientID,username.c_str(), password.c_str());
int rc;
rc = MQTTAsync_connect(client,
&conn_opts);
}