Index: sources/cloudsync/CloudSyncController.cpp =================================================================== diff -u -rf68b226e67eb500758ee94fe015df48931240013 -r44550c670a421059754a70e2ce517e81f29c2e5d --- sources/cloudsync/CloudSyncController.cpp (.../CloudSyncController.cpp) (revision f68b226e67eb500758ee94fe015df48931240013) +++ sources/cloudsync/CloudSyncController.cpp (.../CloudSyncController.cpp) (revision 44550c670a421059754a70e2ce517e81f29c2e5d) @@ -328,6 +328,7 @@ case eError_CredentialEmpty : text = tr( "CS The credentials folder is empty." ) ; break; case eError_TxCodeNoParam : text = tr( "CS No Treatment Code provided." ) ; break; case eError_TxCodeEmpty : text = tr( "CS The provided Treatment Code is empty." ) ; break; + case eError_NotRegistered : text = tr( "CS Not Sent, Device not registered." ) ; break; } return text; } @@ -369,6 +370,7 @@ case eError_CredentialEmpty : info = QString( "[%1:%2]" ).arg( vErrorID ).arg( item(0) ) ; break; case eError_TxCodeNoParam : info = QString( "[%1:%2]" ).arg( vErrorID ).arg( item(0) ) ; break; case eError_TxCodeEmpty : info = QString( "[%1:%2]" ).arg( vErrorID ).arg( item(0) ) ; break; + case eError_NotRegistered : info = QString( "[%1:%2]" ).arg( vErrorID ).arg( item(0) ) ; break; } return info; } @@ -548,8 +550,10 @@ QVariantList args ; Errors_Enum error = eError_Unknown; + // only sends messages if device has been registered qint32 messageID = UI2CS(static_cast(vAction)); - if ( ! _uiHistory.contains( messageID ) ) { error = eError_NoHistory; args = { messageID }; ok = false; goto lErr; } + if ( ! isRegistered() && vAction != eMessageID_DeviceRegister ) { error = eError_NotRegistered ; args = { messageID }; ok = false; goto lErr; } + if ( ! _uiHistory.contains( messageID ) ) { error = eError_NoHistory ; args = { messageID }; ok = false; goto lErr; } sendUIBuff(makeUIBuff(messageID)); @@ -816,18 +820,28 @@ */ bool CloudSyncController::testDeviceRegister() { - QString source = QString(Storage::CloudSync_Base_Path_Name) + Storage::CloudSync_Credentials_Folder_Name; - qDebug() << source; - QFileInfoList fileInfos = QDir(source).entryInfoList(QDir::NoDotAndDotDot|QDir::Files); - if( fileInfos.isEmpty() ) { toLog(eError_CredentialEmpty,{}); // It is intentional that the vault folder path has not been sent to the log. + if( ! isRegistered() ) { sendDeviceRegister(); } return true; // for now always true. } /*! + * \brief CloudSyncController::isRegistered + * \details checks if the device is registered by looking for existing credentials. + * \return true if device has been registered. + */ +bool CloudSyncController::isRegistered() +{ + QString source = QString(Storage::CloudSync_Base_Path_Name) + Storage::CloudSync_Credentials_Folder_Name; + qDebug() << source; + QFileInfoList fileInfos = QDir(source).entryInfoList(QDir::NoDotAndDotDot|QDir::Files); + return !fileInfos.isEmpty(); +} + +/*! * \brief CloudSyncController::saveDeviceInfo * \details keeps the received device information and set a flag to wait for the next message. * \param vAction - the action enum which identifies information source of HD or DG. Index: sources/cloudsync/CloudSyncController.h =================================================================== diff -u -r54c4136d95375116e6daf23b7d4179159cf13d0c -r44550c670a421059754a70e2ce517e81f29c2e5d --- sources/cloudsync/CloudSyncController.h (.../CloudSyncController.h) (revision 54c4136d95375116e6daf23b7d4179159cf13d0c) +++ sources/cloudsync/CloudSyncController.h (.../CloudSyncController.h) (revision 44550c670a421059754a70e2ce517e81f29c2e5d) @@ -104,6 +104,8 @@ eError_TxCodeEmpty = 520, // the received Tx Code is empty eError_OutFileEmpty = 521, // Out file has changed from CS2UI but the content is empty. + + eError_NotRegistered = 522, // avoid sending any message other than the device regitration, when device is not registered. }; typedef QHash MessageList; @@ -239,6 +241,7 @@ // device registration request bool sendDeviceRegister (); // eMessageID_DeviceRegister bool testDeviceRegister (); // eMessageID_DeviceRegister + bool isRegistered (); // device state report bool saveDeviceState (const QVariantList &vData); Index: sources/model/dg/adjustment/settings/MAdjustDGSerialNumberResponse.cpp =================================================================== diff -u -r27cc308ff5113a9386899d3c8f8b29962a8498e1 -r44550c670a421059754a70e2ce517e81f29c2e5d --- sources/model/dg/adjustment/settings/MAdjustDGSerialNumberResponse.cpp (.../MAdjustDGSerialNumberResponse.cpp) (revision 27cc308ff5113a9386899d3c8f8b29962a8498e1) +++ sources/model/dg/adjustment/settings/MAdjustDGSerialNumberResponse.cpp (.../MAdjustDGSerialNumberResponse.cpp) (revision 44550c670a421059754a70e2ce517e81f29c2e5d) @@ -22,9 +22,37 @@ }; } +/** + * \brief MAdjustSerialNumberDGResponse::isValid + * \details Checks if character meets DG serial constraints. (Alphanumeric or '-') + * \param vChar - the character. + * \return bool - whether character is valid. + */ +bool MAdjustSerialNumberDGResponse::isValid(const QChar &vChar) +{ + return vChar.isLetterOrNumber() || vChar == '-'; +} + +/** + * \brief MAdjustSerialNumberDGResponse::fromByteArray + * \details Removes any invalid characters from DG serial string. + * \param vByteArray - DG serial string represented as a byte array. + * \return true if serial contains any valid characters. + */ bool MAdjustSerialNumberDGResponse::fromByteArray(const QByteArray &vByteArray, int *) { - _data.mSerialNumber = qPrintable(vByteArray); - return true; + // only keep valid characters from serial and stop if end of line reached + QString serial; + for ( char c: vByteArray ) { + if ( !c ) break; + QChar ch(c); + if ( isValid(ch) ) { + serial += ch; + } + } + + // whitespace cannot be in serial and empty serial is invalid + _data.mSerialNumber = serial.trimmed(); + return ! _data.mSerialNumber.isEmpty(); } MAdjustSerialNumberDGResponse::Data MAdjustSerialNumberDGResponse::data() const { Index: sources/model/dg/adjustment/settings/MAdjustDGSerialNumberResponse.h =================================================================== diff -u -r27cc308ff5113a9386899d3c8f8b29962a8498e1 -r44550c670a421059754a70e2ce517e81f29c2e5d --- sources/model/dg/adjustment/settings/MAdjustDGSerialNumberResponse.h (.../MAdjustDGSerialNumberResponse.h) (revision 27cc308ff5113a9386899d3c8f8b29962a8498e1) +++ sources/model/dg/adjustment/settings/MAdjustDGSerialNumberResponse.h (.../MAdjustDGSerialNumberResponse.h) (revision 44550c670a421059754a70e2ce517e81f29c2e5d) @@ -53,6 +53,7 @@ friend class ::tst_models; QVariantList parameters() const override; + bool isValid(const QChar &vChar); public: Index: sources/model/hd/adjustment/settings/MAdjustHDSerialNumberResponse.cpp =================================================================== diff -u -r27cc308ff5113a9386899d3c8f8b29962a8498e1 -r44550c670a421059754a70e2ce517e81f29c2e5d --- sources/model/hd/adjustment/settings/MAdjustHDSerialNumberResponse.cpp (.../MAdjustHDSerialNumberResponse.cpp) (revision 27cc308ff5113a9386899d3c8f8b29962a8498e1) +++ sources/model/hd/adjustment/settings/MAdjustHDSerialNumberResponse.cpp (.../MAdjustHDSerialNumberResponse.cpp) (revision 44550c670a421059754a70e2ce517e81f29c2e5d) @@ -22,9 +22,37 @@ }; } +/** + * \brief MAdjustSerialNumberHDResponse::isValid + * \details Checks if character meets HD serial constraints. (alphanumeric or '-') + * \param vChar - the character. + * \return bool - whether character is valid. + */ +bool MAdjustSerialNumberHDResponse::isValid(const QChar &vChar) +{ + return vChar.isLetterOrNumber() || vChar == '-'; +} + +/** + * \brief MAdjustSerialNumberHDResponse::fromByteArray + * \details Removes any invalid characters from HD serial string. + * \param vByteArray - HD serial string represented as a byte array. + * \return bool - whether serial contains any valid characters. + */ bool MAdjustSerialNumberHDResponse::fromByteArray(const QByteArray &vByteArray, int *) { - _data.mSerialNumber = qPrintable(vByteArray); - return true; + QString serial; + for ( char c: vByteArray ) { + // stop if end of file found while iterating through serial + if ( !c ) break; + QChar ch(c); + if ( isValid(ch) ) { + serial += ch; + } + } + + // whitespace cannot be in serial and empty serial is invalid + _data.mSerialNumber = serial.trimmed(); + return ! _data.mSerialNumber.isEmpty(); } MAdjustSerialNumberHDResponse::Data MAdjustSerialNumberHDResponse::data() const { Index: sources/model/hd/adjustment/settings/MAdjustHDSerialNumberResponse.h =================================================================== diff -u -r27cc308ff5113a9386899d3c8f8b29962a8498e1 -r44550c670a421059754a70e2ce517e81f29c2e5d --- sources/model/hd/adjustment/settings/MAdjustHDSerialNumberResponse.h (.../MAdjustHDSerialNumberResponse.h) (revision 27cc308ff5113a9386899d3c8f8b29962a8498e1) +++ sources/model/hd/adjustment/settings/MAdjustHDSerialNumberResponse.h (.../MAdjustHDSerialNumberResponse.h) (revision 44550c670a421059754a70e2ce517e81f29c2e5d) @@ -53,6 +53,7 @@ friend class ::tst_models; QVariantList parameters() const override; + bool isValid(const QChar &vChar); public: