diff --git a/connections/connectionwindow.cpp b/connections/connectionwindow.cpp index 409f7b7..0aa63f2 100644 --- a/connections/connectionwindow.cpp +++ b/connections/connectionwindow.cpp @@ -254,7 +254,11 @@ void ConnectionWindow::handleNewConn() newPort = thisDialog->getPortName(); newDriver = thisDialog->getDriverName(); conn = create(newType, newPort, newDriver); - if (conn) connModel->add(conn); + if (conn) + { + connModel->add(conn); + ui->tableConnections->setCurrentIndex(connModel->index(connModel->rowCount() - 1, 1)); + } } delete thisDialog; } @@ -423,6 +427,9 @@ void ConnectionWindow::currentRowChanged(const QModelIndex ¤t, const QMode CANConnection* conn_p = connModel->getAtIdx(selIdx); if(!conn_p) return; + //because this might have already been setup during the initial setup so tear that one down and then create the normal one. + //disconnect(conn_p, SIGNAL(debugOutput(QString)), 0, 0); + numBuses = conn_p->getNumBuses(); int numB = ui->tabBuses->count(); for (int i = 0; i < numB; i++) ui->tabBuses->removeTab(0); @@ -475,7 +482,11 @@ CANConnection* ConnectionWindow::create(CANCon::type pTye, QString pPortName, QS /* connect signal */ connect(conn_p, SIGNAL(status(CANConStatus)), this, SLOT(connectionStatus(CANConStatus))); - + if (ui->ckEnableConsole->isChecked()) + { + //set up the debug console to operate if we've selected it. Doing so here allows debugging right away during set up + connect(conn_p, SIGNAL(debugOutput(QString)), this, SLOT(getDebugText(QString))); + } /*TODO add return value and checks */ conn_p->start(); } diff --git a/connections/mqtt_bus.cpp b/connections/mqtt_bus.cpp index 41f8df3..6b05be5 100644 --- a/connections/mqtt_bus.cpp +++ b/connections/mqtt_bus.cpp @@ -12,6 +12,7 @@ MQTT_BUS::MQTT_BUS(QString topicName) : CANConnection(topicName, "mqtt_client", CANCon::MQTT, 1, 4000, true), mTimer(this) /*NB: set this as parent of timer to manage it from working thread */ { + sendDebug("MQTT_BUS()"); crypto = new SimpleCrypt(Q_UINT64_C(0xdeadbeefface6285)); @@ -44,20 +45,32 @@ void MQTT_BUS::piStarted() QSettings settings; QString userName = settings.value("Remote/User", "Anonymous").toString(); QString host = settings.value("Remote/Host", "api.savvycan.com").toString(); - int port = settings.value("Remote/Port", 8333).toInt(); + int port = settings.value("Remote/Port", 8883).toInt(); QByteArray encPass = settings.value("Remote/Pass", "").toByteArray(); - QByteArray password = crypto->decryptToByteArray(encPass); + QByteArray password; + if (encPass.length() > 0) + password = crypto->decryptToByteArray(encPass); - QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); - mqttClient = new QMQTT::Client(host, port, sslConfig); + if (port == 8883) + { + QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); + mqttClient = new QMQTT::Client(host, port, sslConfig); + } + else + { + QHostAddress hAddr = QHostInfo::fromName(host).addresses()[0]; + sendDebug("IP Address of Host: " + hAddr.toString()); + mqttClient = new QMQTT::Client(hAddr, port); + } connect(mqttClient, &QMQTT::Client::connected, this, &MQTT_BUS::clientConnected); connect(mqttClient, &QMQTT::Client::error, this, &MQTT_BUS::clientErrored); //qDebug() << "User: " << userName << " Pass: " << password; mqttClient->setClientId(genRandomClientID()); - mqttClient->setUsername(userName); - mqttClient->setPassword(password); + if (userName.length() > 0) mqttClient->setUsername(userName); + if (password.length() > 0) mqttClient->setPassword(password); + sendDebug("Attempting to connect to MQTT."); mqttClient->connectToHost(); } @@ -67,7 +80,7 @@ QString MQTT_BUS::genRandomClientID() { QString output; output.reserve(12); - QRandomGenerator gen; + QRandomGenerator gen = QRandomGenerator::securelySeeded(); for (int i = 0; i < 12; i++) { int val = gen.bounded(0, 62); @@ -81,7 +94,99 @@ QString MQTT_BUS::genRandomClientID() void MQTT_BUS::clientErrored(const QMQTT::ClientError error) { - qDebug() << QString::number(error); + switch (error) + { + case QMQTT::UnknownError: + sendDebug("MQTT Unknown Error"); + break; + case QMQTT::SocketConnectionRefusedError: + sendDebug("MQTT Connection Refused"); + break; + case QMQTT::SocketRemoteHostClosedError: + sendDebug("MQTT Remote Host Closed The Connection"); + break; + case QMQTT::SocketHostNotFoundError: + sendDebug("MQTT Remote Host Not Found"); + break; + case QMQTT::SocketAccessError: + sendDebug("MQTT Socket Access Error"); + break; + case QMQTT::SocketResourceError: + sendDebug("MQTT Resource Error"); + break; + case QMQTT::SocketTimeoutError: + sendDebug("MQTT Timeout Error"); + break; + case QMQTT::SocketDatagramTooLargeError: + sendDebug("MQTT Datagram too large"); + break; + case QMQTT::SocketNetworkError: + sendDebug("MQTT Network Error"); + break; + case QMQTT::SocketAddressInUseError: + sendDebug("MQTT Address In Use ERROR"); + break; + case QMQTT::SocketAddressNotAvailableError: + sendDebug("MQTT Address Not Available"); + break; + case QMQTT::SocketUnsupportedSocketOperationError: + sendDebug("MQTT Unsupported Operation"); + break; + case QMQTT::SocketUnfinishedSocketOperationError: + sendDebug("MQTT Unfinished Socket Operation"); + break; + case QMQTT::SocketProxyAuthenticationRequiredError: + sendDebug("MQTT Proxy Auth Required"); + break; + case QMQTT::SocketSslHandshakeFailedError: + sendDebug("MQTT SSL Handshake Failure"); + break; + case QMQTT::SocketProxyConnectionRefusedError: + sendDebug("MQTT Proxy Connection Refused"); + break; + case QMQTT::SocketProxyConnectionClosedError: + sendDebug("MQTT Proxy Connection Closed"); + break; + case QMQTT::SocketProxyConnectionTimeoutError: + sendDebug("MQTT Proxy Connection Timeout"); + break; + case QMQTT::SocketProxyNotFoundError: + sendDebug("MQTT Proxy Not Found"); + break; + case QMQTT::SocketProxyProtocolError: + sendDebug("MQTT Proxy Protocol Error"); + break; + case QMQTT::SocketOperationError: + sendDebug("MQTT Socket Operation Error"); + break; + case QMQTT::SocketSslInternalError: + sendDebug("MQTT SSL Internal Error"); + break; + case QMQTT::SocketSslInvalidUserDataError: + sendDebug("MQTT SSL Invalid User Data"); + break; + case QMQTT::SocketTemporaryError: + sendDebug("MQTT Temporary Error"); + break; + case QMQTT::MqttUnacceptableProtocolVersionError: + sendDebug("MQTT Unaccepted Protocol Version"); + break; + case QMQTT::MqttIdentifierRejectedError: + sendDebug("MQTT Identifier Rejected"); + break; + case QMQTT::MqttServerUnavailableError: + sendDebug("MQTT Server Unavailable"); + break; + case QMQTT::MqttBadUserNameOrPasswordError: + sendDebug("MQTT Bad Access Credentials"); + break; + case QMQTT::MqttNotAuthorizedError: + sendDebug("MQTT Not Authorized"); + break; + case QMQTT::MqttNoPingResponse: + sendDebug("MQTT No PING Response"); + break; + } } void MQTT_BUS::piSuspend(bool pSuspend) @@ -209,7 +314,7 @@ void MQTT_BUS::clientMessageReceived(const QMQTT::Message& message) void MQTT_BUS::clientConnected() { - sendDebug("Connecting to MQTT Broker!"); + sendDebug("Connected to MQTT Broker!"); mqttClient->subscribe(topicName + "/+", 0); //subscribe to all sub topics to grab the frames. connect(mqttClient, &QMQTT::Client::received, this, &MQTT_BUS::clientMessageReceived);