void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion) { decodeText(buffer, sizeBuffer); if (!*buffer) { *shortVersion = '\0'; return; } // Handle control codes: char *to=buffer; int len=strlen(to); int IsShortName=0; while (len > 0) { int l = Utf8CharLen(to); unsigned char *p = (unsigned char *)to; if (l == 2 && *p == 0xC2) // UTF-8 sequence p++; if (*p == 0x86 || *p == 0x87) { IsShortName += (*p == 0x86) ? 1 : -1; memmove(to, to + l, len - l + 1); // we also copy the terminating 0! len -= l; l = 0; } if (l && IsShortName) { if (l < sizeShortVersion) { for (int i = 0; i < l; i++) *shortVersion++ = to[i]; sizeShortVersion -= l; } } to += l; len -= l; } *shortVersion = '\0'; }
char *String::getText(const char* charset) { #else char *String::getText() { #endif int len=getLength(); if (len < 0 || len > 4095) return strdup("text error"); // caller will delete it! char *data=new char(len+1); // FIXME If this function is ever actually used, this buffer might // need to be bigger in order to hold the string as UTF-8. // Maybe decodeText should dynamically handle this? kls 2007-06-10 #ifdef USE_PROVIDERCHARSET decodeText(data, len+1, charset); #else decodeText(data, len+1); #endif return data; }
char *String::getText() { int len=getLength(); if (len < 0 || len > 4095) return strdup("text error"); // caller will delete it! char *data=new char(len+1); decodeText(data, len+1); return data; }
char *String::getText(char *buffer, int size, const char* charset) { #else char *String::getText(char *buffer, int size) { #endif int len=getLength(); if (len < 0 || len >= size) { strncpy(buffer, "text error", size); buffer[size-1] = 0; return buffer; } #ifdef USE_PROVIDERCHARSET decodeText(buffer, size, charset); #else decodeText(buffer, size); #endif return buffer; }
char *String::getText(char *buffer, int size) { int len=getLength(); if (len < 0 || len >= size) { strncpy(buffer, "text error", size); buffer[size-1] = 0; return buffer; } decodeText(buffer, size); return buffer; }
/** * Set the class attributes of this object from * the passed element node. * @param root the xmi element from which to load */ void TextBlock::setAttributesFromNode(QDomElement & root) { QString endLine = UMLApp::app()->commonPolicy()->getNewLineEndingChars(); setIndentationLevel(root.attribute("indentLevel", "0").toInt()); setTag(root.attribute("tag", "")); setText(decodeText(root.attribute("text", ""), endLine)); setWriteOutText(root.attribute("writeOutText", "true") == "true" ? true : false); m_canDelete = root.attribute("canDelete", "true") == "true" ? true : false; }
QString SecretsManager::decodePassword(const QString &encodedPassword) const { QString decodedPassword = ""; if (!encodedPassword.isEmpty()) { QString key = getKeyForEncryption(); decodedPassword = decodeText(encodedPassword, key); } return decodedPassword; }
QString SecretsManager::getKeyForEncryption() const { QString key; if (m_EncodedMasterPassword.isEmpty()) { key = m_DefaultMasterPassword; } else { key = decodeText(m_EncodedMasterPassword, m_PasswordForMasterPassword); } return key; }
/** * Set the class attributes of this object from * the passed element node. * @param root the xmi element from which to load */ void TextBlock::setAttributesFromNode(QDomElement & root) { QString endLine = UMLApp::app()->commonPolicy()->getNewLineEndingChars(); setIndentationLevel(root.attribute(QLatin1String("indentLevel"), QLatin1String("0")).toInt()); setTag(root.attribute(QLatin1String("tag"))); setText(decodeText(root.attribute(QLatin1String("text")), endLine)); const QString trueStr = QLatin1String("true"); setWriteOutText(root.attribute(QLatin1String("writeOutText"), trueStr) == trueStr); m_canDelete = root.attribute(QLatin1String("canDelete"), trueStr) == trueStr; }
char *String::getText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion) { int len=getLength(); if (len < 0 || len >= sizeBuffer) { strncpy(buffer, "text error", sizeBuffer); buffer[sizeBuffer-1] = 0; *shortVersion = 0; return buffer; } decodeText(buffer, shortVersion, sizeBuffer, sizeShortVersion); return buffer; }
Window::Window(QWidget *parent) : QMainWindow(parent), ui(new Ui::Window) { clipboard = QApplication::clipboard(); ui->setupUi(this); abtdlg = new AboutDialog(this); connect(ui->bCopy, SIGNAL(clicked()), this, SLOT(copyText())); connect(ui->bPaste, SIGNAL(clicked()), this, SLOT(pasteText())); connect(ui->bEncode, SIGNAL(clicked()), this, SLOT(encodeText())); connect(ui->bDecode, SIGNAL(clicked()), this, SLOT(decodeText())); connect(ui->bmd5, SIGNAL(clicked()), this, SLOT(getmd5())); connect(ui->bAbout, SIGNAL(clicked()), abtdlg, SLOT(show())); connect(ui->bExit, SIGNAL(clicked()), qApp, SLOT(quit())); }
ChangeInfo * ChangeInfo::fromString(lString8 s) { lString8Collection rows(s, cs8("\n")); if (rows.length() < 3 || rows[0] != START_TAG || rows[rows.length() - 1] != END_TAG) return NULL; ChangeInfo * ci = new ChangeInfo(); CRBookmark bmk; for (int i=1; i<rows.length() - 1; i++) { lString8 row = rows[i]; int p = row.pos("="); if (p<1) continue; lString8 name = row.substr(0, p); lString8 value = row.substr(p + 1); if (name == ACTION_TAG) { ci->_deleted = (value == ACTION_DELETE_TAG); } else if (name == FILE_TAG) { ci->_fileName = decodeText(value); } else if (name == TYPE_TAG) { bmk.setType(value.atoi()); } else if (name == START_POS_TAG) { bmk.setStartPos(decodeText(value)); } else if (name == END_POS_TAG) { bmk.setEndPos(decodeText(value)); } else if (name == TIMESTAMP_TAG) { ci->_timestamp = value.atoi64() / 1000; bmk.setTimestamp(ci->_timestamp); } else if (name == PERCENT_TAG) { bmk.setPercent(value.atoi()); } else if (name == SHORTCUT_TAG) { bmk.setShortcut(value.atoi()); } else if (name == TITLE_TEXT_TAG) { bmk.setTitleText(decodeText(value)); } else if (name == POS_TEXT_TAG) { bmk.setPosText(decodeText(value)); } else if (name == COMMENT_TEXT_TAG) { bmk.setCommentText(decodeText(value)); } } if (bmk.isValid()) ci->_bookmark = new CRBookmark(bmk); if (ci->_fileName.empty() || ci->_timestamp == 0 || (!ci->_bookmark && !ci->_deleted)) { delete ci; return NULL; } return ci; }
void DccChatWindow::ownMessage(const QString & text, bool bUserFeedback) { if(!m_pSlaveThread) { output(KVI_OUT_SYSTEMWARNING, __tr2qs_ctx("Can't send data: no active connection", "dcc")); return; } QByteArray szData = encodeText(text); const char * d = szData.data(); if(!d) return; #ifdef COMPILE_CRYPT_SUPPORT if(cryptSessionInfo()) { if(cryptSessionInfo()->m_bDoEncrypt) { if(*d != KviControlCodes::CryptEscape) { KviCString encrypted; cryptSessionInfo()->m_pEngine->setMaxEncryptLen(-1); switch(cryptSessionInfo()->m_pEngine->encrypt(d, encrypted)) { case KviCryptEngine::Encrypted: { KviCString buf(KviCString::Format, "%s\r\n", encrypted.ptr()); m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); if(bUserFeedback) g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSGCRYPTED, m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), m_pDescriptor->szLocalHost.toUtf8().data(), text, KviConsoleWindow::NoNotifications); } break; case KviCryptEngine::Encoded: { KviCString buf(KviCString::Format, "%s\r\n", encrypted.ptr()); m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); if(bUserFeedback) { QString encr = decodeText(encrypted.ptr()); g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), m_pDescriptor->szLocalHost.toUtf8().data(), encr, KviConsoleWindow::NoNotifications); } } break; default: // also case KviCryptEngine::EncryptError { QString szErr = cryptSessionInfo()->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, __tr2qs_ctx("The encryption engine was not able to encrypt the current message (%Q): %Q, no data was sent to the remote end", "dcc"), &text, &szErr); } break; } return; } else { d++; //eat the escape code KviCString buf(KviCString::Format, "%s\r\n", d); QString tmp = text.right(text.length() - 1); m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); if(bUserFeedback) g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), m_pDescriptor->szLocalHost.toUtf8().data(), tmp, KviConsoleWindow::NoNotifications); return; } } } #endif KviCString buf(KviCString::Format, "%s\r\n", d); m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); if(bUserFeedback) g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), m_pDescriptor->szLocalHost.toUtf8().data(), text, KviConsoleWindow::NoNotifications); }
QString SecretsManager::getMasterPassword() const { QString masterPassword = decodeText(m_EncodedMasterPassword, m_PasswordForMasterPassword); return masterPassword; }
QString SecretsManager::recodePassword(const QString &encodedPassword, const QString &oldMasterPassword, const QString &newMasterPassword) const { QString decodedPassword = decodeText(encodedPassword, oldMasterPassword); QString newEncodedPassword = encodeText(decodedPassword, newMasterPassword); return newEncodedPassword; }
void KviQueryWindow::ownAction(const QString & szBuffer) { if(!connection()) return; QString szTmpBuffer; //see bug ticket #220 if(KVI_OPTION_BOOL(KviOption_boolStripMircColorsInUserMessages)) szTmpBuffer = KviControlCodes::stripControlBytes(szBuffer); else szTmpBuffer = szBuffer; //my full mask as seen by other users QString szMyName = connection()->userInfo()->nickName(); QString szMyFullMask = szMyName + "!" + connection()->userInfo()->userName() + "@" + connection()->userInfo()->hostName(); QByteArray myFullMask = connection()->encodeText(szMyFullMask); QByteArray name = connection()->encodeText(windowName()); QByteArray data = encodeText(szTmpBuffer); /* max length of a PRIVMSG text. Max buffer length for our send is 512 byte, but we have to * remember that the server will prepend to the message our full mask and truncate the resulting * at 512 bytes again.. * So we have: * :[email protected] PRIVMSG #channel :text of message(CrLf) * [email protected]#channeltext of message * 512(rfc) -2(CrLf) -2(:) -3(spaces) -7(PRIVMSG) -8(\x01ACTION\x01) = 490 * usable bytes, excluding our full mask and the target name. */ int iMaxMsgLen = 490 - name.length() - myFullMask.length(); if(KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnMeAction, this, szTmpBuffer, windowName())) return; #ifdef COMPILE_CRYPT_SUPPORT if(cryptSessionInfo() && cryptSessionInfo()->m_bDoEncrypt) { if(szTmpBuffer[0] != KviControlCodes::CryptEscape) { KviCString szEncrypted; cryptSessionInfo()->m_pEngine->setMaxEncryptLen(iMaxMsgLen); switch(cryptSessionInfo()->m_pEngine->encrypt(data.data(), szEncrypted)) { case KviCryptEngine::Encrypted: { if(!connection()->sendFmtData("PRIVMSG %s :%cACTION %s%c", name.data(), 0x01, szEncrypted.ptr(), 0x01)) return; output(KVI_OUT_OWNACTIONCRYPTED, "\r!nc\r%Q\r %Q", &szMyName, &szTmpBuffer); } break; case KviCryptEngine::Encoded: { if(!connection()->sendFmtData("PRIVMSG %s :%cACTION %s%c", name.data(), 0x01, szEncrypted.ptr(), 0x01)) return; // ugly, but we must redecode here QString szRedecoded = decodeText(szEncrypted.ptr()); output(KVI_OUT_OWNACTIONCRYPTED, "\r!nc\r%Q\r %Q", &szMyName, &szRedecoded); } break; default: // also case KviCryptEngine::EncryptError { QString szEngineError = cryptSessionInfo()->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, __tr2qs("The encryption engine was unable to encrypt the current message (%Q): %Q, no data sent to the server"), &szBuffer, &szEngineError); } } userAction(szMyName, KVI_USERACTION_ACTION); return; } else { //eat the escape code szTmpBuffer.remove(0, 1); data = encodeText(szTmpBuffer); } } #endif //COMPILE_CRYPT_SUPPORT if(!connection()->sendFmtData("PRIVMSG %s :%cACTION %s%c", name.data(), 0x01, data.data(), 0x01)) return; output(KVI_OUT_OWNACTION, "\r!nc\r%Q\r %Q", &szMyName, &szTmpBuffer); m_pUserListView->userAction(szMyName, KVI_USERACTION_ACTION); }
void KviQueryWindow::ownMessage(const QString & szBuffer, bool bUserFeedback) { if(!connection()) { outputNoFmt(KVI_OUT_SYSTEMWARNING, __tr2qs("This query has no active targets, no message sent")); return; } //my full mask as seen by other users QString szTmpMask = connection()->userInfo()->nickName() + "!" + connection()->userInfo()->userName() + "@" + connection()->userInfo()->hostName(); QByteArray szMyFullMask = connection()->encodeText(szTmpMask); //target name QByteArray szName = connection()->encodeText(windowName()); //message QByteArray szData = encodeText(szBuffer); const char * pcData = szData.data(); /* max length of a PRIVMSG text. Max buffer length for our sszEnd is 512 byte, but we have to * remember that the server will prepszEnd to the message our full mask and truncate the resulting * at 512 bytes again.. * So we have: * :[email protected] PRIVMSG #channel :text of message(CrLf) * [email protected]#channeltext of message * 512(rfc) -2(CrLf) -2(:) -3(spaces) -7(PRIVMSG) = 498 * usable bytes, excluding our full mask and the target name. */ int iMaxMsgLen = 498 - szName.length() - szMyFullMask.length(); // our copy of the message QString szTmpBuffer(szBuffer); if(!pcData) return; #ifdef COMPILE_CRYPT_SUPPORT if(cryptSessionInfo()) { if(cryptSessionInfo()->m_bDoEncrypt) { if(*pcData != KviControlCodes::CryptEscape) { KviCString szEncrypted; cryptSessionInfo()->m_pEngine->setMaxEncryptLen(500 - szName.length()); switch(cryptSessionInfo()->m_pEngine->encrypt(pcData, szEncrypted)) { case KviCryptEngine::Encrypted: if(!connection()->sendFmtData("PRIVMSG %s :%s", szName.data(), szEncrypted.ptr())) return; if(bUserFeedback) m_pConsole->outputPrivmsg(this, KVI_OUT_OWNPRIVMSGCRYPTED, QString(), QString(), QString(), szBuffer, KviConsoleWindow::NoNotifications); break; case KviCryptEngine::Encoded: { if(!connection()->sendFmtData("PRIVMSG %s :%s", szName.data(), szEncrypted.ptr())) return; if(bUserFeedback) { // ugly,but we must redecode here QString szRedecoded = decodeText(szEncrypted.ptr()); m_pConsole->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, QString(), QString(), QString(), szRedecoded, KviConsoleWindow::NoNotifications); } } break; default: // also case KviCryptEngine::EncryptError { QString szEngineError = cryptSessionInfo()->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, __tr2qs("The encryption engine was unable to encrypt the current message (%Q): %s, no data sent to the server"), &szBuffer, &szEngineError); } break; } userAction(connection()->currentNickName(), KVI_USERACTION_PRIVMSG); return; } else { //eat the escape code pcData++; szTmpBuffer.remove(0, 1); //let the normal function do it } } } #endif if(szData.length() > iMaxMsgLen) { /* Multi message; we want to split the message, preferably on a word boundary, * and sszEnd each message part as a different PRIVMSG * Due to encoding stuff, this is frikin'time eater */ QTextEncoder * pEncoder = makeEncoder(); // our temp encoder QByteArray szTmp; // used to calculate the length of an encoded message int iPos; // contains the index where to truncate szTmpBuffer int iC; // cycles counter (debugging/profiling purpose) float fPosDiff; // optimization internal; aggressivity factor QString szCurSubString; // truncated parts as reported to the user // run until we've something remaining in the message while(szTmpBuffer.length()) { // init counters iPos = szTmpBuffer.length(); iC = 0; // first part (optimization): quickly find an high index that is _surely_lesser_ // than the correct one while(1) { iC++; szTmp = pEncoder->fromUnicode(szTmpBuffer.left(iPos)); if(szTmp.length() <= iMaxMsgLen) break; //if szTmp.length() == 0 we already have break'ed out from here, // so we can safely use it as a divisor fPosDiff = (float)iMaxMsgLen / (float)szTmp.length(); iPos = (int)(iPos * fPosDiff); // cut the string at each cycle //printf("OPTIMIZATION: fPosDiff %f, iPos %d\n", fPosDiff, iPos); } //printf("Multi message: %d optimization cyles", iC); // now, do it the simple way: increment our index until we perfectly fit into the // available space while(1) { iC++; szTmp = pEncoder->fromUnicode(szTmpBuffer.left(iPos)); // perfect match if(iPos == szTmpBuffer.length()) break; if(szTmp.length() > iMaxMsgLen) { // overflowed.. last one was the good one iPos--; szTmp = pEncoder->fromUnicode(szTmpBuffer.left(iPos)); break; } else { //there's still free space.. add another char iPos++; } } //printf(", finished at %d cycles, truncated at pos %d\n", iC, iPos); //prepare the feedback string for the user szCurSubString = szTmpBuffer.left(iPos); //sszEnd the string to the server if(connection()->sendFmtData("PRIVMSG %s :%s", szName.data(), szTmp.data())) { //feeedback the user if(bUserFeedback) m_pConsole->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, QString(), QString(), QString(), szCurSubString, KviConsoleWindow::NoNotifications); userAction(connection()->currentNickName(), KVI_USERACTION_PRIVMSG); } else { // skipped a part in this multi message.. we don't want to continue return; } // remove the sent part of the string szTmpBuffer.remove(0, iPos); //printf("Sent %d chars, %d remaining in the Qstring\n",iPos, szTmpBuffer.length()); } } else { if(connection()->sendFmtData("PRIVMSG %s :%s", szName.data(), pcData)) { if(bUserFeedback) m_pConsole->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, QString(), QString(), QString(), szTmpBuffer, KviConsoleWindow::NoNotifications); userAction(connection()->currentNickName(), KVI_USERACTION_PRIVMSG); } } }
bool DccChatWindow::event(QEvent * e) { if(e->type() == KVI_THREAD_EVENT) { switch(((KviThreadEvent *)e)->id()) { case KVI_DCC_THREAD_EVENT_ERROR: { KviError::Code * pError = ((KviThreadDataEvent<KviError::Code> *)e)->getData(); QString szErr = KviError::getDescription(*pError); if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatError, this, szErr, m_pDescriptor->idString())) output(KVI_OUT_DCCERROR, __tr2qs_ctx("ERROR: %Q", "dcc"), &szErr); KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatDisconnected, this, m_pDescriptor->idString()); delete pError; return true; } break; case KVI_DCC_THREAD_EVENT_DATA: { KviCString * encoded = ((KviThreadDataEvent<KviCString> *)e)->getData(); KviCString d = KviCString(decodeText(encoded->ptr())); if(d.firstCharIs(0x01)) { d.cutLeft(1); if(d.lastCharIs(0x01)) d.cutRight(1); if(kvi_strEqualCIN("ACTION", d.ptr(), 6)) d.cutLeft(6); d.stripLeftWhiteSpace(); output(KVI_OUT_ACTION, "%Q %s", &(m_pDescriptor->szNick), d.ptr()); if(!hasAttention(KviWindow::MainWindowIsVisible)) { if(KVI_OPTION_BOOL(KviOption_boolFlashDccChatWindowOnNewMessages)) { demandAttention(); } if(KVI_OPTION_BOOL(KviOption_boolPopupNotifierOnNewDccChatMessages)) { QString szMsg = "<b>"; szMsg += m_pDescriptor->szNick; szMsg += "</b> "; szMsg += KviQString::toHtmlEscaped(QString(d.ptr())); //qDebug("KviIrcServerParser_ctcp.cpp:975 debug: %s",szMsg.data()); g_pApp->notifierMessage(this, KVI_OPTION_MSGTYPE(KVI_OUT_ACTION).pixId(), szMsg, KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); } } } else { #ifdef COMPILE_CRYPT_SUPPORT if(KviCryptSessionInfo * cinf = cryptSessionInfo()) { if(cinf->m_bDoDecrypt) { KviCString decryptedStuff; switch(cinf->m_pEngine->decrypt(d.ptr(), decryptedStuff)) { case KviCryptEngine::DecryptOkWasEncrypted: case KviCryptEngine::DecryptOkWasEncoded: case KviCryptEngine::DecryptOkWasPlainText: if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage, this, QString(decryptedStuff.ptr()), m_pDescriptor->idString())) { g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_DCCCHATMSG, m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szUser.toUtf8().data(), m_pDescriptor->szHost.toUtf8().data(), decryptedStuff.ptr()); } delete encoded; return true; break; default: // also case KviCryptEngine::DecryptError { QString szErr = cinf->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, __tr2qs_ctx("The following message appears to be encrypted, but the encryption engine failed to decode it: %Q", "dcc"), &szErr); } break; } } } else { #endif // FIXME! if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage, this, QString(d.ptr()), m_pDescriptor->idString())) { g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_DCCCHATMSG, m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szUser.toUtf8().data(), m_pDescriptor->szHost.toUtf8().data(), d.ptr()); if(!hasAttention(KviWindow::MainWindowIsVisible)) { if(KVI_OPTION_BOOL(KviOption_boolFlashDccChatWindowOnNewMessages)) { demandAttention(); } if(KVI_OPTION_BOOL(KviOption_boolPopupNotifierOnNewDccChatMessages)) { QString szMsg = KviQString::toHtmlEscaped(QString(d.ptr())); g_pApp->notifierMessage(this, KviIconManager::DccChatMsg, szMsg, KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); } } } #ifdef COMPILE_CRYPT_SUPPORT } #endif } delete encoded; return true; } break; } } return KviWindow::event(e); }
void pgiticlog::load_licenses() { _key = "pgitickeyabcdefg"; QSqlQuery query; if(query.exec("SELECT * FROM license")) { if(query.next()) { int id = query.value(0).toInt(); QString _id = QString::number(id); _license1 = query.value(1).toString(); _license2 = query.value(2).toString(); _license3 = query.value(3).toString(); _license4 = query.value(4).toString(); if ( _license1 != "none") { _license1 = decodeText(_license1,_key); if ( _license1 == (HID + "a").c_str()) { _lic1 = true; } else { _lic1 = false; } } if ( _license2 != "none") { _license2 = decodeText(_license2,_key); if ( _license2 == (HID + "b").c_str()) { _lic2 = true; } else { _lic2 = false; } } if ( _license3 != "none") { _license3 = decodeText(_license3,_key); if ( _license3 == (HID + "c").c_str()) { _lic3 = true; } else { _lic3 = false; } } if ( _license4 != "none") { _license4 = decodeText(_license4,_key); if ( _license4 == (HID + "d").c_str()) { _lic4 = true; } else { _lic4 = false; } } mtlog->insert_log("pgiticlog","Licenses loaded done","DEBUG"); } } else { } }