示例#1
0
void SftpSession::handleLsOutput(SftpJobId jobId, const QByteArray &output)
{
    QList<SftpFileInfo> allFileInfo;
    for (const QByteArray &line : output.split('\n')) {
        if (line.startsWith("ls") || line.isEmpty())
            continue;
        const QByteArrayList components = line.simplified().split(' ');
        if (components.size() < 9) {
            qCWarning(sshLog) << "Don't know how to parse sftp ls output:" << line;
            continue;
        }
        const QByteArray typeAndPermissions = components.first();
        if (typeAndPermissions.size() != 10) {
            qCWarning(sshLog) << "Don't know how to parse sftp ls output:" << line;
            continue;
        }
        SftpFileInfo fileInfo;
        fileInfo.type = typeFromLsOutput(typeAndPermissions.at(0));
        fileInfo.permissions = permissionsFromLsOutput(QByteArray::fromRawData(
                                                           typeAndPermissions.constData() + 1,
                                                           typeAndPermissions.size() - 1));
        bool isNumber;
        fileInfo.size = components.at(4).toULongLong(&isNumber);
        if (!isNumber) {
            qCWarning(sshLog) << "Don't know how to parse sftp ls output:" << line;
            continue;
        }
        // TODO: This will not work for file names with weird whitespace combinations
        fileInfo.name = QFileInfo(QString::fromUtf8(components.mid(8).join(' '))).fileName();
        allFileInfo << fileInfo;
    }
    emit fileInfoAvailable(jobId, allFileInfo);
}
示例#2
0
void GsmTrack::slReadSerial()
{
    QByteArray data = gsmSerial->readAll().trimmed();
    //qDebug() << "the date:: " << data << endl;
    emit sendData(data);
    if(data.contains("+CSQ: ")){
        int csq;
        int csq_tail;
        std::sscanf(data.data(), "+CSQ: %d,%d", &csq, &csq_tail);
        qDebug("the csq is:: %d\n", csq);

        if(csq <= 10 || csq > 31){
            emit sendCsq(0);
            return;
        }
        emit sendCsq(csq);
    }

    // 读取网络类型与网路配置
    if(data.contains("^SYSCFG: ")){
        int type;
        std::sscanf(data.data(), "^SYSCFG: %d", &type);
        if(type == 13){
            emit sendText("2G network it is!!");
        }else if(type == 2){
            emit sendText("3G network it is!!");
        }
    }

    // 基站信息
    // BASE:: "AT+CREG=2;+CREG?"
    // OUT :: +CREG: 2,1,"A5D3","19E420F",2
    if(data.contains("+CREG: ")){
        qDebug() << data << endl;
        QByteArrayList cregList =  data.split(',');
        emit sendBase(QLatin1String( cregList.at(2) + "," + cregList.at(3) ));
    }


}