void SslServerConnection::slotStartRead() { // // Read the block until the complete block is avaiable // Debug::log (QLatin1String("Start reading")); this->blockSize = 0; QDataStream in(socket); in.setVersion(QDataStream::Qt_4_6); if (blockSize == 0) { if ((quint32) socket->bytesAvailable() < sizeof(qint64)) { return; } in >> blockSize; } if (socket->bytesAvailable() < blockSize) { return; } QString command(""); QString params(""); in >> command; in >> params; // // Ab hier kann man munter drauf los mit den Daten ;) // // Den Befehl auswerten if (command.isEmpty()) { // Kein Befehl keine Aktion return; } // Debug::log(QLatin1String("Command: ") + command); Debug::log(QLatin1String("Params: ") + params); // command = command.trimmed().toUpper(); if (command == QLatin1String("OPEN")) { // // Öffnet eine Verbindung // // Hat die Parameterliste die richtige Länge QStringList fields (params.split(";")); if (fields.size() == 4) { // 0: ID; 1: Config Path; 2: Interact // Ist der Eintrag schon in der Liste int configId (fields.at(0).toInt()); OpenVpn *item = this->foundItemInList(configId); Q_ASSERT(item); if (!item) { Debug::log(QLatin1String("Open: No valid item. Build new one")); } else { // Objekt ist schon in der Liste, nicht gut = Fehler this->removeItemFromList(fields.at(0).toInt()); Debug::error(QLatin1String("Open: Object is already in list. Id: ") + fields.at(0)); //SrvCLI::instance()->send(fields.at(0) + QLatin1String(";") + QLatin1String("Object is already in list."), QLatin1String("ERROR")); Debug::log(QLatin1String("Remove item from list: Id: ") + fields.at(0)); Sleep(150); } // Alls ok, wir bauen us ein neues Objekt OpenVpn *sslVpn = new OpenVpn (); // Nun die Parameter setzen QString configPath = fields.at(1).left(fields.at(1).lastIndexOf("/")); QString configName = fields.at(1).right(fields.at(1).size() - fields.at(1).lastIndexOf("/") - 1); configName = configName.left(configName.size() - 5); sslVpn->setConfigPath(configPath); sslVpn->setConfigName(configName); sslVpn->setUseInteract(fields.at(2)); sslVpn->setProxyString(fields.at(3)); sslVpn->setId(configId); QObject::connect(sslVpn, SIGNAL(foobar(int)), this, SLOT(recDig(int))); // Noch ein paar Signale binden // // Das Objekt hat sich zum löschen markiert QObject::connect(sslVpn, SIGNAL(removeItemFromList(int)), this, SLOT(removeItemFromList(int))); // // Nachrichten aus dem Objekt senden QObject::connect(sslVpn, SIGNAL(sendMessage(QString,QString)), SrvCLI::instance(), SLOT(send(QString,QString))); Debug::log(QLatin1String("Add item to list")); // Nun das Objekt an die Liste anfügen vpnList.append(qMakePair(configId, sslVpn)); // // Nun das OpenVpn verbinden Debug::log(QLatin1String("Start connection")); SrvCLI::instance()->send(QString("%2;Try to start OpenVPN connection %1").arg(configName).arg(configId), QLatin1String("LOG")); // Ohne Verzögerung den connect aufrufen sslVpn->connectToVpn(); // }