void MainParser::parse(const QCoreApplication& app) { m_parser.process(app); int pos; bool ok; // server address QString serverAddress = m_parser.value(m_serverAddressOption); QString ipRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])"; QRegExp ipRegex ("^" + ipRange + "\\." + ipRange + "\\." + ipRange + "\\." + ipRange + "$"); QRegExpValidator ipValidator(ipRegex); if (ipValidator.validate(serverAddress, pos) == QValidator::Acceptable) { m_serverAddress = serverAddress; } else { qWarning() << "MainParser::parse: server address invalid. Defaulting to " << m_serverAddress; } // server port QString serverPortStr = m_parser.value(m_serverPortOption); int serverPort = serverPortStr.toInt(&ok); if (ok && (serverPort > 1023) && (serverPort < 65536)) { m_serverPort = serverPort; } else { qWarning() << "MainParser::parse: server port invalid. Defaulting to " << m_serverPort; } }
void addSiteDialog::on_pushButton_2_clicked() //clicking on the "add site" button { QString inputIpAddress=ui->lineEdit_2->text(); bool noSubnetMask=ui->lineEdit_3->text().isEmpty(); if ( (!ipValidator(inputIpAddress)) || (noSubnetMask) ) { QMessageBox::critical(this, tr("Invalid IP address"), tr("Invalid IPv4 address or subnet mask."));} //checking if the IP address and mask provided are valid else { QString inputSiteName=ui->lineEdit->text(); QSqlQuery checkSiteName; checkSiteName.prepare(QString("select * from sites where UPPER(siteName)=UPPER('%1') AND vpnId=%2").arg(inputSiteName).arg(vpnId)); if(checkSiteName.exec()) { if (checkSiteName.next()) { QMessageBox::critical(this, tr("Name already exists!"), tr("Cannot create SITE: name is alreay in use in this VPN.")); qDebug()<<Q(QString("Site name %1 already used in vpn %2.").arg(inputSiteName,vpnName)); } else { QSqlQuery newSiteQry; QSqlQuery getNextSiteId; getNextSiteId.exec("select nextId from nextId where idName='siteId'"); bool exists=getNextSiteId.first(); //qDebug()<<"exists="<<exists; unsigned int nextSiteId; QString updateSiteId; if(exists){nextSiteId=getNextSiteId.value(0).toUInt(); updateSiteId=QString("update nextId set nextId=%2 Where idName='siteId'").arg(nextSiteId+1);} else{nextSiteId=0;updateSiteId=QString("insert into nextId values('siteId',1)");} //si l'entrée siteId pour nextId n'existe pas dans la base de données (base de données vide) //on le crée au moment d'ajouter le nouveau SITE QString inputMask=ui->lineEdit_3->text(); QString qryText=QString("insert into sites(vpnId,siteId,siteName,siteAddressRange) values(%1,%2,'%3','%4/%5')").arg(vpnId).arg(nextSiteId).arg(inputSiteName).arg(inputIpAddress).arg(inputMask); //qDebug()<<"qryText="<<qryText; //qDebug()<<"vpnId="<<vpnId; newSiteQry.prepare(qryText); //bool ok=getNextVpnId.exec(updateVpnId); QString rangeValidError; rangeValidError=addressRangeValidAvailable(networkIp, broadcastIp, vpnAddressRange, vpnId); bool ok=(rangeValidError=="ok"); if(ok){ rangeValidError=""; getNextSiteId.exec(updateSiteId);} if(ok){ ok=newSiteQry.exec();} if(ok) { QMessageBox::information(this, tr("site added"), tr("site added!")); addrecent(vpnId); emit addedSite(); this->close(); qDebug()<<Q(QString("Successfully added site %1 (%2/%3) to VPN %4.").arg(inputSiteName).arg(inputIpAddress).arg(inputMask).arg(vpnName)); } else { QString errorMessage="Site not added. Error: "+QString(newSiteQry.lastError().databaseText())+QString(getNextSiteId.lastError().databaseText())+rangeValidError; QMessageBox::critical(this, tr("Site not added"), errorMessage); qDebug()<<Q(errorMessage); } } } else { QMessageBox::critical(this, tr("Error"), tr("Couldn't check SITE availability, check database connection.")); } } }
///Maybe I'll organize the next part in classes or functions void addVpnDialog::on_pushButton_2_clicked() ///clicking on the "add VPN" button { int vlanStart=ui->lineEdit_4->text().toInt(); int vlanEnd=ui->lineEdit_5->text().toInt(); QString inputIpAddress=ui->lineEdit_2->text(); bool noSubnetMask=ui->lineEdit_3->text().isEmpty(); while(true) { if ( (!ipValidator(inputIpAddress)) || (noSubnetMask) ) ///checking if the IP address and { /// mask provided are valid QMessageBox::critical(this, tr("Invalid IP address"), tr("Invalid IPv4 address or subnet mask.")); break; } QString inputVpnName=ui->lineEdit->text(); QString inputDescription=ui->plainTextEdit->toPlainText(); QString inputMask=ui->lineEdit_3->text(); QSqlQuery checkVpnName; checkVpnName.prepare(QString("select vpnName, vpnAddressRange, vlanRange, description from VPNs where UPPER(vpnName)=UPPER('%1')").arg(inputVpnName)); ///this query checks whether the name is already taken, case insensitive ///this is redundant if the databse uses UNIQUE ids, maybe I'll remove it if(checkVpnName.exec()) { if (checkVpnName.next()) { QMessageBox::critical(this, tr("Name used!"), tr("Cannot create VPN: name is alreay in use.")); qDebug()<<Q(QString("VPN name %1 is already in use (%2, %3, %4 ,\"%5\").").arg(inputVpnName,checkVpnName.value(0).toString(),checkVpnName.value(1).toString(),checkVpnName.value(2).toString(),checkVpnName.value(3).toString())); break; } qDebug()<<Q(QString("VPN Name %1 available").arg(inputVpnName)); QSqlQuery newVpnQry; QSqlQuery getNextVpnId; getNextVpnId.exec("select nextId from nextId where idName='vpnId'"); bool exists=getNextVpnId.first(); unsigned int nextVpnId; QString updateVpnId; if(exists) { nextVpnId=getNextVpnId.value(0).toUInt(); updateVpnId=QString("update nextId set nextId=%2 Where idName='vpnId'").arg(nextVpnId+1); } else { nextVpnId=0; updateVpnId=QString("insert into nextId values('vpnId',1)"); } //si l'entrée vpnId pour nextId n'existe pas dans la base de données (base de données vide) //on le crée au moment d'ajouter le nouveau VPN rangeStart=qstringAddressToUint(networkIp); rangeEnd=qstringAddressToUint(broadcastIp); if(!vpnIpAvailable(rangeStart,rangeEnd)) ///check if the address range is not in use { QMessageBox::critical(this, tr("Address range in use!"), tr("address range used by another VPN")); qDebug()<<"VPN address range in use, view the above list for conflicting VPNs."; break; } qDebug()<<Q(QString("VPN address range %1/%2 available.").arg(inputIpAddress,inputMask)); if(vlanStart>vlanEnd) ///check for valid VPN range entered { QMessageBox::critical(this, tr("Invalid VLAN range!"), tr("Invalid VLAN range")); qDebug()<<Q(QString("Invalid VLAN range entered")); break; } if(!vpnVlanAvailable(vlanStart,vlanEnd)) ///check if the vpn Range is available { QMessageBox::critical(this, tr("VLAN range in use!"), tr("VLAN range used by another VPN")); qDebug()<<Q(QString("VPN VLAN range in use, view the above list for conflicting VPNs.")); break; } qDebug()<<"VPN address range available"; bool ok=getNextVpnId.exec(updateVpnId); ///update the nextVpnId table qDebug()<<"Updating database."; if (ok) ///if successful update the vpnIpIntervals table { QString rangeQryText=QString("insert into vpnIpIntervals values(%1,%2,%3)").arg(rangeStart).arg(rangeEnd).arg(nextVpnId); ok=getNextVpnId.exec(rangeQryText); } if (ok) ///if successful update the vpnVlanRanges table { //qDebug()<<"rangeintervals updated"; QString vlanQryText=QString("insert into vpnVlanRanges values(%1,%2,%3)").arg(vlanStart).arg(vlanEnd).arg(nextVpnId); ok=getNextVpnId.exec(vlanQryText); } if (ok) ///isert values into VPNs table { //qDebug()<<"VLANintervals updated"; QString qryText=QString("insert into VPNs values(%1,'%2','%3','%4/%5','%6-%7')").arg(nextVpnId).arg(inputVpnName).arg(inputDescription).arg(inputIpAddress).arg(inputMask).arg(vlanStart).arg(vlanEnd); newVpnQry.prepare(qryText); ok=newVpnQry.exec(); } if(ok) ///successfully added VPN message { addrecent(nextVpnId); qDebug()<<Q(QString("Successfully added VPN %1 (address range: %2/%3, VLAN range: %4-%5) with description: \"%6\".").arg(inputVpnName).arg(inputIpAddress).arg(inputMask).arg(vlanStart).arg(vlanEnd).arg(inputDescription)); QMessageBox::information(this, tr("VPN added"), tr("VPN added!")); emit addedVpn(); this->close(); break; } ///if (!ok) display the error message QString errorMessage="VPN not added: "+QString(newVpnQry.lastError().databaseText())+QString(getNextVpnId.lastError().databaseText()); QMessageBox::critical(this, tr("VPN not added"), errorMessage); qDebug()<<errorMessage; break; //to implement: //not successful?-->rollback changes //db.exec("delete from VPNs where vpnId=%1"); //etc } ///if couldn't check vpn name availability QMessageBox::critical(this, tr("Error"), tr("Couldn't check VPN availability, check database connection.")); break; } }