SVG5/sambaclient.cpp
2025-10-12 13:55:56 +09:00

333 lines
7.5 KiB
C++

#include "sambaclient.h"
#include "mainwindow.h"
#include <QDebug>
SambaClient::SambaClient()
{
m_bError = 0;
connect(&m_Process1, SIGNAL(finished(int)), this, SLOT(Process1Finish(int)));
connect(&m_Process1, SIGNAL(readyReadStandardOutput()), this, SLOT(Process1ReadyReadStandardOutput()));
connect(&m_Process1, SIGNAL(readyReadStandardError()), this, SLOT(Process1ReadyReadStandardError()));
connect(&m_Process2, SIGNAL(finished(int)), this, SLOT(Process2Finish(int)));
connect(&m_Process2, SIGNAL(readyReadStandardOutput()), this, SLOT(Process2ReadyReadStandardOutput()));
connect(&m_Process2, SIGNAL(readyReadStandardError()), this, SLOT(Process2ReadyReadStandardError()));
connect(&m_Process3, SIGNAL(finished(int)), this, SLOT(Process3Finish(int)));
connect(&m_Process3, SIGNAL(readyReadStandardOutput()), this, SLOT(Process3ReadyReadStandardOutput()));
connect(&m_Process3, SIGNAL(readyReadStandardError()), this, SLOT(Process3ReadyReadStandardError()));
}
SambaClient::~SambaClient()
{
}
void SambaClient::Process1Finish(int nRet)
{
QByteArray buffer;
buffer.append(m_Process1.readAll());
}
void SambaClient::Process1ReadyReadStandardOutput()
{
QByteArray buffer;
buffer.append(m_Process1.readAllStandardOutput());
m_strInfo = buffer.toStdString().c_str();
}
void SambaClient::Process1ReadyReadStandardError()
{
QByteArray buffer;
buffer.append(m_Process1.readAllStandardError());
m_strInfo = buffer.toStdString().c_str();
if(m_strInfo.contains("password for")==true)
{
m_bError = 0;
return;
}
m_bError = 1;
}
void SambaClient::Process2Finish(int nRet)
{
QByteArray buffer;
buffer.append(m_Process2.readAll());
}
void SambaClient::Process2ReadyReadStandardOutput()
{
QByteArray buffer;
buffer.append(m_Process2.readAllStandardOutput());
m_strInfo = buffer.toStdString().c_str();
}
void SambaClient::Process2ReadyReadStandardError()
{
QByteArray buffer;
buffer.append(m_Process2.readAllStandardError());
m_strInfo = buffer.toStdString().c_str();
if(m_strInfo.contains("not mounted")==false)
{
m_bError = 1;
}
else
{
}
}
void SambaClient::Process3Finish(int nRet)
{
QByteArray buffer;
buffer.append(m_Process3.readAll());
}
void SambaClient::Process3ReadyReadStandardOutput()
{
QByteArray buffer;
buffer.append(m_Process3.readAllStandardOutput());
m_strInfo = buffer.toStdString().c_str();
}
void SambaClient::Process3ReadyReadStandardError()
{
QByteArray buffer;
buffer.append(m_Process3.readAllStandardError());
m_strInfo = buffer.toStdString().c_str();
if(m_strInfo.contains("password for")==true)
{
m_bError = 0;
return;
}
m_bError = 1;
}
void SambaClient::Mount()
{
m_bError = false;
m_strInfo.clear();
QProcess process1;
process1.setStandardOutputProcess(&m_Process1);
process1.start("echo 1");
NetworkShareInfo* pNetworkShareInfo = MainWindow::GetCommonData()->GetNetworkShareInfo();
QString strUserID = pNetworkShareInfo->m_strID;
QString strUserPassword = pNetworkShareInfo->m_strPassword;
QString strIP = pNetworkShareInfo->m_strIP;
QString strFolder = pNetworkShareInfo->m_strShareFolder;
QString strSMBVersion = pNetworkShareInfo->m_strVersion;
//QString strConnect = QString("username=%1,password=%2 //%3/%4 /home/birdhead/samba").arg(strUserID).arg(strUserPassword).arg(strIP).arg(strFolder);
//QString strCommand = QString("sudo -S mount -t cifs -o uid=1000,gid=1000,%1").arg(strConnect);
QString strCommand = QString("sudo -S mount -t cifs //%1/%2 /home/birdhead/samba").arg(strIP).arg(strFolder);
QString strOption = QString(" -o username=%1,password=%2,uid=1000,gid=1000,echo_interval=5").arg(strUserID).arg(strUserPassword);
if(strSMBVersion.size()>0)
{
strOption += QString(",vers=%1").arg(strSMBVersion);
}
strCommand += strOption;
qDebug() << strCommand;
//m_Process.start("sudo -S mount -t cifs -o uid=1000,gid=1000,username=ftpadmin,password=ftpadmin? //192.168.1.19/test1 /home/birdhead/samba");
m_Process1.start(strCommand.toStdString().c_str());
m_Process1.setProcessChannelMode(QProcess::ForwardedChannels);
if(!process1.waitForStarted())
return;
while(m_Process1.isOpen()==false || m_Process1.isReadable()==false)
{
QThread::usleep(100);
}
bool retval = false;
QByteArray buffer;
// To be fair: you only need to wait here for a bit with shutdown,
// but I will still leave the rest here for a generic solution
while ((retval = m_Process1.waitForFinished()))
{
buffer.append(m_Process1.readAll());
}
m_Process1.close();
if(m_Process1.isOpen()==true)
{
m_Process1.terminate();
m_Process1.waitForFinished(100);
m_Process1.deleteLater();
}
process1.close();
if(process1.isOpen()==true)
{
process1.terminate();
process1.waitForFinished(100);
process1.deleteLater();
}
buffer.clear();
QString strInfo;
if(m_bError==false)
{
//SetExportEnable(true);
//strInfo = "Ready to Export 'Shared Network'";
//ui->pushButton_Export->click();
}
else
{
//SetExportEnable(false);
//strInfo = m_strInfo;
//strInfo = "Check Your Network Server!!";
}
//SetInfoString(strInfo);
}
void SambaClient::Umount()
{
if(m_bError==true)
{
return;
}
m_strInfo.clear();
QProcess process1;
process1.setStandardOutputProcess(&m_Process2);
process1.start("echo 1");
m_Process2.start("sudo -S umount /home/birdhead/samba");
m_Process2.setProcessChannelMode(QProcess::ForwardedChannels);
// Wait for it to start
if(!process1.waitForStarted())
return;
bool retval = false;
QByteArray buffer;
// To be fair: you only need to wait here for a bit with shutdown,
// but I will still leave the rest here for a generic solution
while ((retval = m_Process2.waitForFinished()))
{
buffer.append(m_Process2.readAll());
}
m_Process2.close();
if(m_Process2.isOpen()==true)
{
m_Process2.terminate();
m_Process2.waitForFinished(100);
m_Process2.deleteLater();
}
process1.close();
if(process1.isOpen()==true)
{
process1.terminate();
process1.waitForFinished(100);
process1.deleteLater();
}
buffer.clear();
if(m_bError==true)
{
//SetInfoString(m_strInfo);
}
}
bool SambaClient::IsError()
{
if(m_bError>0)
{
return true;
}
return false;
}
bool SambaClient::IsMount()
{
m_bError = false;
m_strInfo.clear();
QString strCommand = QString("mount");
m_Process3.start(strCommand.toStdString().c_str());
bool retval = false;
QByteArray buffer;
// To be fair: you only need to wait here for a bit with shutdown,
// but I will still leave the rest here for a generic solution
while ((retval = m_Process3.waitForFinished()))
{
buffer.append(m_Process3.readAll());
}
m_Process3.close();
if(m_Process3.isOpen()==true)
{
m_Process3.terminate();
}
buffer.clear();
QStringList listLine = m_strInfo.split("\n");
int i=0;
for(i=0 ; i<listLine.size() ; i++)
{
QString strTmp = listLine[i];
if(strTmp.contains("/home/birdhead/samba")==true)
{
return true;
}
}
return false;
}