XMLGenerator::XMLGenerator(const QString &baseDir) { QList<QEngine*> qengines = QtEngines::self()->engines(); foreach(QEngine *engine, qengines) { QString engineDir = engine->name(); QString fileName = engineDir + "/" + "data.xml"; if (!baseDir.isEmpty()) { engineDir = QString("%1/%2").arg(baseDir).arg(engineDir); fileName = QString("%1/%2").arg(baseDir).arg(fileName); } if (!QFile::exists(fileName)) continue; XMLReader handler; QXmlSimpleReader reader; reader.setContentHandler(&handler); reader.setErrorHandler(&handler); QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { qWarning("Cannot open file '%s', because: %s", qPrintable(fileName), qPrintable(file.errorString())); continue; } QXmlInputSource xmlInputSource(&file); if (reader.parse(xmlInputSource)) { XMLEngine *engine = handler.xmlEngine(); checkDirs(engine->generationDate, engineDir); engines.insert(engine->name, engine); } }
// 初始化 void MyApp::init(QApplication &app) { m_strAppPath = app.applicationDirPath() + "/"; #ifdef Q_OS_UNIX if (!m_strAppPath.startsWith("/")) { myDebug("m_strAppPath no start with /" << m_strAppPath) ; m_strAppPath = "/" + m_strAppPath; } #endif m_strDataPath = m_strAppPath + "data/"; m_strLogPath = m_strDataPath + "log"; m_strTestPath = m_strDataPath + "test/"; m_strDownloadPath = m_strAppPath + "download/"; m_strScreenShotPath = m_strDataPath + "screen_shot/"; m_strWavPath = m_strDataPath + "wav_normal/"; m_strRecordPath = m_strDataPath + "record/"; m_strDbPath = m_strDataPath + "database/"; m_strBackupPath = m_strDataPath + "backup/"; m_strConfPath = m_strDataPath + "conf/"; m_strIniFile = m_strConfPath + "config.ini"; // 检查目录 checkDirs(); // 创建配置文件 creatorSettingFile(); // 读取设备编号 m_strDevId = getSettingKeyValue("SysConfig", "DeviceId", "59909200001").toString(); // 数据上传服务器配置 m_strDataServerAddr = getSettingKeyValue("DataServer", "IpAddr", "222.180.250.162").toString(); m_nDataServerPort = getSettingKeyValue("DataServer", "Port", 5100).toInt(); // 系统升级配置 m_strUpServerUrl = getSettingKeyValue("Version", "AppUrl", "http://121.40.121.132:9191/apps/vict_app").toString(); m_strCheckVersion = getSettingKeyValue("Version", "VerUrl", "http://121.40.121.132:9191/vict_version.php").toString(); m_strAppName = getSettingKeyValue("Version", "AppName", "vict_app").toString(); // 音量控制 m_nSysVolume = getSettingKeyValue("SysConfig", "SysVolume", 127).toInt(); m_nRecVolume = getSettingKeyValue("SysConfig", "RecVolume", 85).toInt(); // SMTP m_strSmtpAddr = getSettingKeyValue("Server", "SmtpAddr", "220.181.12.12").toString(); // 读取用户配置 m_strMsgServer = getSettingKeyValue("Server", "MsgServer", "183.230.8.172").toString(); m_nUdpRoomPort = getSettingKeyValue("Server", "UdpRoom", 43434).toInt(); m_nTcpMsgPort = getSettingKeyValue("Server", "MsgProt", 60001).toInt(); m_nTcpFilePort = getSettingKeyValue("Server", "FilePort", 60001).toInt(); m_nUserId = getSettingKeyValue("MsgUser", "Id", 101).toInt(); m_strPwd = getSettingKeyValue("MsgUser", "Passwd", "123").toString(); }
void fsCheck(Fsck *chk) { Block *b; Super super; checkInit(chk); b = superGet(chk->cache, &super); if(b == nil){ chk->print("could not load super block: %R"); return; } blockPut(b); chk->hint = super.active; checkEpochs(chk); chk->smap = vtMemAllocZ(chk->nblocks/8+1); checkDirs(chk); vtMemFree(chk->smap); }
/* Input thread proc */ static void inputSendThreadProc(void* context) { SOCK_RET err; PPACKET_HOLDER holder; char encryptedBuffer[MAX_INPUT_PACKET_SIZE]; size_t encryptedSize; while (!PltIsThreadInterrupted(&inputSendThread)) { int encryptedLengthPrefix; err = LbqWaitForQueueElement(&packetQueue, (void**) &holder); if (err != LBQ_SUCCESS) { return; } // If it's a multi-controller packet we can do batching if (holder->packet.multiController.header.packetType == htonl(PACKET_TYPE_MULTI_CONTROLLER)) { PPACKET_HOLDER controllerBatchHolder; PNV_MULTI_CONTROLLER_PACKET origPkt; int dirs[6]; memset(dirs, 0, sizeof(dirs)); origPkt = &holder->packet.multiController; for (;;) { PNV_MULTI_CONTROLLER_PACKET newPkt; // Peek at the next packet if (LbqPeekQueueElement(&packetQueue, (void**)&controllerBatchHolder) != LBQ_SUCCESS) { break; } // If it's not a controller packet, we're done if (controllerBatchHolder->packet.multiController.header.packetType != htonl(PACKET_TYPE_MULTI_CONTROLLER)) { break; } // Check if it's able to be batched newPkt = &controllerBatchHolder->packet.multiController; if (newPkt->buttonFlags != origPkt->buttonFlags || newPkt->controllerNumber != origPkt->controllerNumber || !checkDirs(origPkt->leftTrigger, newPkt->leftTrigger, &dirs[0]) || !checkDirs(origPkt->rightTrigger, newPkt->rightTrigger, &dirs[1]) || !checkDirs(origPkt->leftStickX, newPkt->leftStickX, &dirs[2]) || !checkDirs(origPkt->leftStickY, newPkt->leftStickY, &dirs[3]) || !checkDirs(origPkt->rightStickX, newPkt->rightStickX, &dirs[4]) || !checkDirs(origPkt->rightStickY, newPkt->rightStickY, &dirs[5])) { // Batching not allowed break; } // Remove the batchable controller packet if (LbqPollQueueElement(&packetQueue, (void**)&controllerBatchHolder) != LBQ_SUCCESS) { break; } // Update the original packet origPkt->leftTrigger = newPkt->leftTrigger; origPkt->rightTrigger = newPkt->rightTrigger; origPkt->leftStickX = newPkt->leftStickX; origPkt->leftStickY = newPkt->leftStickY; origPkt->rightStickX = newPkt->rightStickX; origPkt->rightStickY = newPkt->rightStickY; // Free the batched packet holder free(controllerBatchHolder); } } // If it's a mouse move packet, we can also do batching else if (holder->packet.mouseMove.header.packetType == htonl(PACKET_TYPE_MOUSE_MOVE)) { PPACKET_HOLDER mouseBatchHolder; int totalDeltaX = (short)htons(holder->packet.mouseMove.deltaX); int totalDeltaY = (short)htons(holder->packet.mouseMove.deltaY); for (;;) { int partialDeltaX; int partialDeltaY; // Peek at the next packet if (LbqPeekQueueElement(&packetQueue, (void**)&mouseBatchHolder) != LBQ_SUCCESS) { break; } // If it's not a mouse move packet, we're done if (mouseBatchHolder->packet.mouseMove.header.packetType != htonl(PACKET_TYPE_MOUSE_MOVE)) { break; } partialDeltaX = (short)htons(mouseBatchHolder->packet.mouseMove.deltaX); partialDeltaY = (short)htons(mouseBatchHolder->packet.mouseMove.deltaY); // Check for overflow if (partialDeltaX + totalDeltaX > INT16_MAX || partialDeltaX + totalDeltaX < INT16_MIN || partialDeltaY + totalDeltaY > INT16_MAX || partialDeltaY + totalDeltaY < INT16_MIN) { // Total delta would overflow our 16-bit short break; } // Remove the batchable mouse move packet if (LbqPollQueueElement(&packetQueue, (void**)&mouseBatchHolder) != LBQ_SUCCESS) { break; } totalDeltaX += partialDeltaX; totalDeltaY += partialDeltaY; // Free the batched packet holder free(mouseBatchHolder); } // Update the original packet holder->packet.mouseMove.deltaX = htons((short)totalDeltaX); holder->packet.mouseMove.deltaY = htons((short)totalDeltaY); } encryptedSize = sizeof(encryptedBuffer); err = oaes_encrypt(oaesContext, (const unsigned char*) &holder->packet, holder->packetLength, (unsigned char*) encryptedBuffer, &encryptedSize); free(holder); if (err != OAES_RET_SUCCESS) { Limelog("Input: Encryption failed: %d\n", (int)err); ListenerCallbacks.connectionTerminated(err); return; } // The first 32-bytes of the output are internal OAES stuff that we want to ignore encryptedSize -= OAES_DATA_OFFSET; // Overwrite the last 4 bytes before the encrypted data with the length so // we can send the message all at once. GFE can choke if it gets the header // before the rest of the message. encryptedLengthPrefix = htonl((unsigned long) encryptedSize); memcpy(&encryptedBuffer[OAES_DATA_OFFSET - sizeof(encryptedLengthPrefix)], &encryptedLengthPrefix, sizeof(encryptedLengthPrefix)); // Send the encrypted payload err = send(inputSock, (const char*) &encryptedBuffer[OAES_DATA_OFFSET - sizeof(encryptedLengthPrefix)], (int)(encryptedSize + sizeof(encryptedLengthPrefix)), 0); if (err <= 0) { Limelog("Input: send() failed: %d\n", (int)LastSocketError()); ListenerCallbacks.connectionTerminated(LastSocketError()); return; } } }