HttpInfo::HttpInfo(const QByteArray &data, PackageType type): m_httpVersion("HTTP/1.1"), m_errorCode(NoError) { m_url.setScheme("http"); QStringList list = QString::fromUtf8(data).split("\r\n"); if(!list.isEmpty()){ QByteArrayList tmp = list.first().toUtf8().split(' '); if(tmp.count() == 3){ if(type == Request){ setMethod(tmp[0]); QByteArray path = tmp[1].split('?').first(); m_url.setPath(path); if(path.count() < tmp[1].count()) m_url.setQuery(tmp[1].mid(path.count() + 1)); setHttpVersion(tmp[2]); }else{ setHttpVersion(tmp[0]); setError(ErrorCode(tmp[1].toInt())); setErrorString(tmp[2]); } }else{ setError(BadRequest); setErrorString(QString("%1 Bad Request").arg(BadRequest)); return; } int i = 1; for(; i < tmp.count(); ++i){ tmp = list[i].toUtf8().split(':'); if(tmp.count() == 2){ setRawHeader(tmp.first(), tmp.last().trimmed()); if(tmp.first() == "Host") m_url.setHost(tmp.last().trimmed()); }else{ setError(BadRequest); setErrorString(QString("%1 Bad Request").arg(BadRequest)); return; } } }else{ setError(BadRequest); setErrorString(QString("%1 Bad Request").arg(BadRequest)); return; } }
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); }