#include "classxml.h"
|
#include "crc16.h"
|
#include <unistd.h>
|
#include <QDebug>
|
|
|
ClassXML::ClassXML()
|
{
|
|
}
|
|
bool ClassXML::CreateSysParamXml(SYSTEM_PARAM_XML &sysparam)
|
{
|
QFile file(sysParmFile);
|
|
if(!file.exists())
|
{
|
if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))
|
return false;
|
|
QDomDocument doc;
|
QDomProcessingInstruction instruction;
|
instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
|
doc.appendChild(instruction);
|
QDomElement root=doc.createElement("SYS_PARAM_ROOT");
|
doc.appendChild(root);
|
|
QDomElement DE = doc.createElement("dev_addr");
|
DE.appendChild(doc.createTextNode(QString::number(sysparam.dev_addr)));
|
root.appendChild(DE);
|
|
DE = doc.createElement("save_time_interval");
|
DE.appendChild(doc.createTextNode(QString::number(sysparam.save_time_interval)));
|
root.appendChild(DE);
|
|
DE = doc.createElement("tcp_type");
|
DE.appendChild(doc.createTextNode(QString::number(sysparam.tcp_type)));
|
root.appendChild(DE);
|
|
DE = doc.createElement("server_port");
|
DE.appendChild(doc.createTextNode(QString::number(sysparam.server_port)));
|
root.appendChild(DE);
|
|
DE = doc.createElement("server_ip");
|
DE.appendChild(doc.createTextNode(sysparam.server_ip));
|
root.appendChild(DE);
|
|
QTextStream out( &file );
|
doc.save(out, 4);
|
file.close();
|
|
return true;
|
}
|
|
return false;
|
}
|
|
bool ClassXML::ReadSysParamXml(SYSTEM_PARAM_XML &sysparam)
|
{
|
QDomDocument doc;
|
QFile file(sysParmFile);
|
|
if( !file.open( QFile::ReadOnly | QFile::Truncate) )
|
return false;
|
|
if(!doc.setContent(&file))
|
return false;
|
|
file.close();
|
|
QDomElement root = doc.documentElement();
|
QDomNode DN;
|
|
if(!(DN=root.elementsByTagName("dev_addr").at(0)).isNull())
|
{
|
sysparam.dev_addr = DN.toElement().text().toInt();
|
}
|
else
|
sysparam.dev_addr = 1;
|
|
if(!(DN=root.elementsByTagName("save_time_interval").at(0)).isNull())
|
{
|
sysparam.save_time_interval = DN.toElement().text().toInt();
|
}
|
else
|
sysparam.save_time_interval = 60;
|
|
if(!(DN=root.elementsByTagName("tcp_type").at(0)).isNull())
|
{
|
sysparam.tcp_type = DN.toElement().text().toInt();
|
}
|
else
|
sysparam.tcp_type = 1;
|
|
if(!(DN=root.elementsByTagName("server_port").at(0)).isNull())
|
{
|
sysparam.server_port = DN.toElement().text().toInt();
|
}
|
else
|
sysparam.server_port = 6666;
|
|
if(!(DN=root.elementsByTagName("server_ip").at(0)).isNull())
|
{
|
sysparam.server_ip = DN.toElement().text();
|
}
|
else
|
sysparam.server_ip = "192.168.10.199";
|
|
return true;
|
}
|
|
bool ClassXML::SaveSysParamXml(SYSTEM_PARAM_XML &sysparam)
|
{
|
QFile file(sysParmFile);
|
|
if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))
|
return false;
|
|
QDomDocument doc;
|
QDomProcessingInstruction instruction;
|
instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
|
doc.appendChild(instruction);
|
QDomElement root=doc.createElement("SYS_PARAM_ROOT");
|
doc.appendChild(root);
|
|
QDomElement DE = doc.createElement("dev_addr");
|
DE.appendChild(doc.createTextNode(QString::number(sysparam.dev_addr)));
|
root.appendChild(DE);
|
|
DE = doc.createElement("save_time_interval");
|
DE.appendChild(doc.createTextNode(QString::number(sysparam.save_time_interval)));
|
root.appendChild(DE);
|
|
DE = doc.createElement("tcp_type");
|
DE.appendChild(doc.createTextNode(QString::number(sysparam.tcp_type)));
|
root.appendChild(DE);
|
|
DE = doc.createElement("server_port");
|
DE.appendChild(doc.createTextNode(QString::number(sysparam.server_port)));
|
root.appendChild(DE);
|
|
DE = doc.createElement("server_ip");
|
DE.appendChild(doc.createTextNode(sysparam.server_ip));
|
root.appendChild(DE);
|
|
QTextStream out( &file );
|
doc.save(out, 4);
|
|
file.flush();
|
int fd = file.handle();
|
fsync(fd);
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::CreateTestParamFile(TEST_PARAM &testparam)
|
{
|
QFile file(testParmFile);
|
|
if(file.exists())
|
return false;
|
|
if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))
|
return false;
|
|
QDataStream dataStream(&file);
|
|
dataStream.writeRawData((char *)&testparam, sizeof(TEST_PARAM));
|
|
file.flush();
|
|
int fd = file.handle();
|
|
fsync(fd);
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::ReadTestParamFile(TEST_PARAM &testparam)
|
{
|
QFile file(testParmFile);
|
|
if( !file.open(QFile::ReadOnly|QIODevice::Truncate) )
|
return false;
|
|
QDataStream dataStream(&file);
|
dataStream.readRawData((char *)&testparam, sizeof(TEST_PARAM));
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::SaveTestParamFile(TEST_PARAM &testparam)
|
{
|
QFile file(testParmFile);
|
|
if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))
|
return false;
|
|
QDataStream dataStream(&file);
|
|
dataStream.writeRawData((char *)&testparam, sizeof(TEST_PARAM));
|
|
file.flush();
|
|
int fd = file.handle();
|
|
fsync(fd);
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::CreatePackParamFile(PACK_PARAM &packparam)
|
{
|
QFile file(packParmFile);
|
|
if(file.exists())
|
return false;
|
|
if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))
|
return false;
|
|
QDataStream dataStream(&file);
|
|
dataStream.writeRawData((char *)&packparam, sizeof(PACK_PARAM));
|
|
file.flush();
|
|
int fd = file.handle();
|
|
fsync(fd);
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::ReadPackParamFile(PACK_PARAM &packparam)
|
{
|
QFile file(packParmFile);
|
|
if( !file.open(QFile::ReadOnly|QIODevice::Truncate) )
|
return false;
|
|
QDataStream dataStream(&file);
|
dataStream.readRawData((char *)&packparam, sizeof(PACK_PARAM));
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::SavePackParamFile(PACK_PARAM &packparam)
|
{
|
QFile file(packParmFile);
|
|
if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))
|
return false;
|
|
QDataStream dataStream(&file);
|
|
dataStream.writeRawData((char *)&packparam, sizeof(PACK_PARAM));
|
|
file.flush();
|
|
int fd = file.handle();
|
|
fsync(fd);
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::CreateFBO_Data(const QString &fname,FBO_DATA_HEAD_START &datainfo)
|
{
|
QFile file(fname);
|
|
if(!file.open(QFile::ReadWrite))
|
return false;
|
|
QDataStream dataStream(&file);
|
file.seek(0);
|
|
quint8 *pInfo = (quint8 *)&datainfo;
|
|
for(quint16 i=0;i<FBO_DATA_HEAD_START_LENTH;i++)
|
{
|
dataStream.operator << (*pInfo++);
|
}
|
|
for(int i=FBO_DATA_HEAD_START_LENTH;i<FBO_DATA_HEAD_INFO_LENTH;i++)
|
{
|
dataStream.operator << ((quint8)(0xFF));
|
}
|
|
file.flush();
|
|
int fd = file.handle();
|
|
fsync(fd);
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::SaveFBO_Data(const QString &fname, FBO_DATA &fbo_data)
|
{
|
QFile file(fname);
|
|
if(!file.exists())
|
return false;
|
|
if(!file.open(QIODevice::ReadWrite))
|
return false;
|
|
QDataStream dataStream(&file);
|
file.seek(file.size());
|
|
int monnum = fbo_data.BattGroup*fbo_data.BattSum;
|
int datalen = sizeof(FBO_DATA) - MONOMER_NUM_MAX*sizeof(quint16) + monnum*sizeof(quint16);
|
|
fbo_data.crc16 = 0;
|
fbo_data.crc16 = CRC16::CalCRC16(&fbo_data,datalen);
|
|
dataStream.writeRawData((char *)&fbo_data,datalen);
|
|
file.flush();
|
|
//int fd = file.handle();
|
|
//fsync(fd);
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::CloseFBO_Data(const QString &fname,FBO_DATA_HEAD_STOP &datainfo)
|
{
|
QFile file(fname);
|
|
if(!file.exists())
|
return false;
|
|
if(!file.open(QIODevice::ReadWrite))
|
return false;
|
|
QDataStream dataStream(&file);
|
file.seek(FBO_DATA_HEAD_START_LENTH);
|
|
dataStream.writeRawData((char *)&datainfo,FBO_DATA_HEAD_STOP_LENTH);
|
|
file.flush();
|
|
int fd = file.handle();
|
|
fsync(fd);
|
|
file.close();
|
|
return true;
|
}
|
|
bool ClassXML::AnalysisFBOHead(const QString &fname,TEST_DATA_INFO &info)
|
{
|
QFile file(fname);
|
if( !file.open(QFile::ReadOnly) )
|
return false;
|
QDataStream dataStream(&file);
|
|
quint8 datas[FBO_DATA_HEAD_INFO_LENTH];
|
memset(datas,0,FBO_DATA_HEAD_INFO_LENTH*sizeof(char));
|
dataStream.readRawData((char *)&datas,FBO_DATA_HEAD_INFO_LENTH);
|
file.close();
|
|
memcpy(&info,datas,sizeof(TEST_DATA_INFO));
|
|
return true;
|
}
|
|
void ClassXML::read_interface(QString ð0_ip, QString ð0_netmask, QString ð0_gateway)
|
{
|
QFile readFile("/etc/network/interfaces");
|
|
QString ip0,ip1,mask0,mask1,gate0,gate1;
|
|
QString strAll;
|
if(readFile.open((QIODevice::ReadOnly|QIODevice::Text)))
|
{
|
QTextStream stream(&readFile);
|
strAll=stream.readAll();
|
}
|
readFile.close();
|
|
QStringList strList;
|
strList=strAll.split("\n");
|
|
int eth_index = -1;
|
for(int i=0;i<strList.size();i++)
|
{
|
if(strList.at(i) == "iface eth0 inet static")
|
{
|
eth_index = 0;
|
}
|
else if(strList.at(i) == "iface eth1 inet static")
|
{
|
eth_index = 1;
|
}
|
else if(strList.at(i).contains("iface eth"))
|
{
|
eth_index = -1;
|
}
|
else if(strList.at(i).contains("address"))
|
{
|
if(eth_index==0)
|
{
|
ip0 = strList.at(i);
|
}
|
else if(eth_index==1)
|
{
|
ip1 = strList.at(i);
|
}
|
}
|
else if(strList.at(i).contains("netmask"))
|
{
|
if(eth_index==0)
|
{
|
mask0 = strList.at(i);
|
}
|
else if(eth_index==1)
|
{
|
mask1 = strList.at(i);
|
}
|
}
|
else if(strList.at(i).contains("gateway"))
|
{
|
if(eth_index==0)
|
{
|
gate0 = strList.at(i);
|
}
|
else if(eth_index==1)
|
{
|
gate1 = strList.at(i);
|
}
|
}
|
}
|
|
ip0 = ip0.mid(ip0.indexOf(" ")).replace(" ","");
|
mask0 = mask0.mid(mask0.indexOf(" ")).replace(" ","");
|
gate0 = gate0.mid(gate0.indexOf(" ")).replace(" ","");
|
ip1 = ip1.mid(ip1.indexOf(" ")).replace(" ","");
|
mask1 = mask1.mid(mask1.indexOf(" ")).replace(" ","");
|
gate1 = gate1.mid(gate1.indexOf(" ")).replace(" ","");
|
qDebug()<<"ip0:"<<ip0;
|
qDebug()<<"mask0:"<<mask0;
|
qDebug()<<"gate0:"<<gate0;
|
qDebug()<<"ip1:"<<ip1;
|
qDebug()<<"mask1:"<<mask1;
|
qDebug()<<"gate1:"<<gate1;
|
|
eth0_ip = ip0;
|
eth0_netmask = mask0;
|
eth0_gateway = gate0;
|
}
|
|
void ClassXML::write_interface(QString ð0_ip, QString ð0_netmask, QString ð0_gateway)
|
{
|
QString strAll;
|
QStringList strList;
|
QFile readFile("/etc/network/interfaces");
|
if(readFile.open((QIODevice::ReadOnly|QIODevice::Text)))
|
{
|
QTextStream stream(&readFile);
|
strAll=stream.readAll();
|
}
|
readFile.close();
|
|
QFile writeFile("/etc/network/interfaces");
|
|
QString ip;
|
QString mask;
|
QString gateway;
|
|
if(writeFile.open(QIODevice::WriteOnly))
|
{
|
QTextStream stream(&writeFile);
|
strList=strAll.split("\n");
|
qDebug()<<"strList size = "<<strList.count();
|
for(int i=0;i<strList.count();i++)
|
{
|
if(i==strList.count()-1)
|
{
|
stream<<strList.at(i);
|
}
|
else
|
{
|
stream<<strList.at(i)<<'\n';
|
}
|
|
if(strList.at(i).contains("iface eth0 inet static"))
|
{
|
ip = "address " + eth0_ip;
|
mask = "netmask " + eth0_netmask;
|
gateway = "gateway " + eth0_gateway;
|
qDebug()<<"eth0 ip = "<<ip;
|
qDebug()<<"eth0 mask = "<<mask;
|
qDebug()<<"eth0 gateway = "<<gateway;
|
|
QString tempStr=strList.at(i+1);
|
// qDebug()<<ip;
|
// qDebug()<<tempStr;
|
// qDebug("ip.length = %d, tempStr.length = %d",ip.length(),tempStr.length());
|
tempStr.replace(0,tempStr.length(),ip);
|
stream<<tempStr<<'\n';
|
|
tempStr=strList.at(i+2);
|
// qDebug()<<mask;
|
// qDebug()<<tempStr;
|
// qDebug("mask.length = %d, tempStr.length = %d",mask.length(),tempStr.length());
|
tempStr.replace(0,tempStr.length(),mask);
|
stream<<tempStr<<'\n';
|
|
tempStr=strList.at(i+3);
|
tempStr.replace(0,tempStr.length(),"network 192.168.0.12");
|
stream<<tempStr<<'\n';
|
|
tempStr=strList.at(i+4);
|
// qDebug()<<gateway;
|
// qDebug()<<tempStr;
|
// qDebug("gateway.length = %d, tempStr.length = %d",gateway.length(),tempStr.length());
|
tempStr.replace(0,tempStr.length(),gateway);
|
stream<<tempStr<<'\n';
|
i+=4;
|
}
|
|
ip.clear();
|
mask.clear();
|
gateway.clear();
|
if(strList.at(i).contains("iface eth1 inet static"))
|
{
|
|
}
|
}
|
}
|
|
writeFile.flush();
|
|
int fd = writeFile.handle();
|
|
fsync(fd);
|
|
writeFile.close();
|
}
|
|
bool ClassXML::isIPaddress(QString &IP)
|
{
|
QRegExp regExp("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");
|
if( !regExp.exactMatch(IP) )
|
return false;
|
return true;
|
|
}
|
//----------------------------------------------------------------------------------------
|