void tAt5PreAtlas::CreateEncryptionKeys(QIODevice& device, boost::shared_ptr< tChPreAtlasHdr > xPreAtlas, boost::shared_ptr< tChAtlasHdr> xAtlasHdr, QString typeStr, QString serialNum, std::vector<ulong>& keyList) { tAt5Stream stream; tChPreAtlasHdr* pPreAtlas = xPreAtlas.get(); if (!pPreAtlas) return; tChAtlasHdr* pAtlasHdr = xAtlasHdr.get(); if (!pAtlasHdr) return; tAt5AtlasVersion atlas_version = pAtlasHdr->GetAt5Version(); // Now build Signature string std::vector<uchar> Signature; // Add type string to Signature QByteArray tmpAsciiStr = typeStr.toAscii(); for (int ts = 0; ts < tmpAsciiStr.size(); ts++) Signature.push_back(tmpAsciiStr[ts]); // Add serial number for (int sn = 0; sn < serialNum.size(); sn+= 2) { QByteArray arr; arr.append(serialNum[sn].toAscii()); arr.append(serialNum[sn+1].toAscii()); uchar sigChar = (uchar) arr.toUShort(0, 16); Signature.push_back(sigChar); } // Add Atlas checksum Signature.insert(Signature.end(), (uchar*)&(pPreAtlas->AtlasHdrCksum.m_Val) , ((uchar*)&(pPreAtlas->AtlasHdrCksum.m_Val)+2)); // Add last byte of map. ulong LastCartPos = pPreAtlas->DataSize() + pPreAtlas->AtlasCartPos.m_Val + pPreAtlas->AtlasDataLen.m_Val - 1; stream.InsStrm(device, atlas_version.m_MajorAtlasVer, atlas_version.m_MinorAtlasVer, LastCartPos, 1); tCdUchar LastChar; stream >> LastChar; Signature.push_back(LastChar.m_Val); ulong AckStart = pPreAtlas->AtlasCartPos.m_Val + pPreAtlas->DataSize() + pPreAtlas->AtlasHdrLen.m_Val + pAtlasHdr->AcknowledgeListPos.m_Val; stream.ClearBuff(); if (pAtlasHdr->AcknowledgeListLen.m_Val != 0) { stream.InsStrm(device, atlas_version.m_MajorAtlasVer, atlas_version.m_MinorAtlasVer, AckStart, pAtlasHdr->AcknowledgeListLen.m_Val); for (uint ackIndex = 0; ackIndex < pAtlasHdr->AcknowledgeListLen.m_Val; ++ackIndex) { tCdUchar ackChar; stream >> ackChar; Signature.push_back(ackChar.m_Val); } }
/**@brief convert QString to unsigned short int (2 bytes, 16 bits); * *@param str [IN]: the string to convert; *@param data [OUT]: the result is stored in this parm; *@return bool, if convert succeed, return true; else, return false; *@note */ bool Lms511Thread::Str2Uint_16(QByteArray str, unsigned short int *data) { bool ok; *data = str.toUShort(&ok, 16); return ok; }
bool Field::setDefaultValue(const QByteArray& def) { if (def.isNull()) { m_defaultValue = QVariant(); return true; } bool ok; switch (type()) { case Byte: { unsigned int v = def.toUInt(&ok); if (!ok || v > 255) m_defaultValue = QVariant(); else m_defaultValue = QVariant(v); break; } case ShortInteger: { int v = def.toInt(&ok); if (!ok || (!(m_options & Unsigned) && (v < -32768 || v > 32767)) || ((m_options & Unsigned) && (v < 0 || v > 65535))) m_defaultValue = QVariant(); else m_defaultValue = QVariant(v); break; } case Integer: {//4 bytes long v = def.toLong(&ok); //js: FIXME if (!ok || (!(m_options & Unsigned) && (-v > 0x080000000 || v > (0x080000000-1))) || ((m_options & Unsigned) && (v < 0 || v > 0x100000000))) if (!ok || (!(m_options & Unsigned) && (-v > (int)0x07FFFFFFF || v > (int)(0x080000000 - 1)))) m_defaultValue = QVariant(); else m_defaultValue = QVariant((qint64)v); break; } case BigInteger: {//8 bytes //! @todo BigInteger support /* qint64 long v = def.toLongLong(&ok); //TODO: 2-part decoding if (!ok || (!(m_options & Unsigned) && (-v > 0x080000000 || v > (0x080000000-1)))) m_defaultValue = QVariant(); else if (m_options & Unsigned) m_defaultValue=QVariant((quint64) v); else m_defaultValue = QVariant((qint64)v);*/ break; } case Boolean: { unsigned short v = def.toUShort(&ok); if (!ok || v > 1) m_defaultValue = QVariant(); else m_defaultValue = QVariant((bool)v); break; } case Date: {//YYYY-MM-DD QDate date = QDate::fromString(def, Qt::ISODate); if (!date.isValid()) m_defaultValue = QVariant(); else m_defaultValue = QVariant(date); break; } case DateTime: {//YYYY-MM-DDTHH:MM:SS QDateTime dt = QDateTime::fromString(def, Qt::ISODate); if (!dt.isValid()) m_defaultValue = QVariant(); else m_defaultValue = QVariant(dt); break; } case Time: {//HH:MM:SS QTime time = QTime::fromString(def, Qt::ISODate); if (!time.isValid()) m_defaultValue = QVariant(); else m_defaultValue = QVariant(time); break; } case Float: { float v = def.toFloat(&ok); if (!ok || ((m_options & Unsigned) && (v < 0.0))) m_defaultValue = QVariant(); else m_defaultValue = QVariant(v); break; } case Double: { double v = def.toDouble(&ok); if (!ok || ((m_options & Unsigned) && (v < 0.0))) m_defaultValue = QVariant(); else m_defaultValue = QVariant(v); break; } case Text: { if (def.isNull() || (uint(def.length()) > maxLength())) m_defaultValue = QVariant(); else m_defaultValue = QVariant((QString)def); break; } case LongText: { if (def.isNull()) m_defaultValue = QVariant(); else m_defaultValue = QVariant((QString)def); break; } case BLOB: { //TODO if (def.isNull()) m_defaultValue = QVariant(); else m_defaultValue = QVariant(def); break; } default: m_defaultValue = QVariant(); } return m_defaultValue.isNull(); }