From 1453f74cc5617894c98f09428c3062dfa448044e Mon Sep 17 00:00:00 2001 From: "Jonas M. Gastal" Date: Wed, 11 Jan 2012 10:48:08 -0200 Subject: Make QFtp private. All references to QFtp in documentation have been removed, QFtp's documentaiton was marked internal. The QFtp example was removed. Task-number: QTBUG-23199 Change-Id: Ifff83cac069fb350e8ebeae63e605850e65c0c30 Reviewed-by: Shane Kearns --- dist/changes-5.0.0 | 3 + doc/src/core/threads.qdoc | 2 +- doc/src/network/network-programming/qtnetwork.qdoc | 63 +--- doc/src/snippets/code/src_corelib_io_qurl.cpp | 4 +- examples/network/network.pro | 1 - examples/network/qftp/ftp.qrc | 7 - examples/network/qftp/ftpwindow.cpp | 406 --------------------- examples/network/qftp/ftpwindow.h | 110 ------ examples/network/qftp/images/cdtoparent.png | Bin 139 -> 0 bytes examples/network/qftp/images/dir.png | Bin 154 -> 0 bytes examples/network/qftp/images/file.png | Bin 129 -> 0 bytes examples/network/qftp/main.cpp | 52 --- examples/network/qftp/qftp.desktop | 11 - examples/network/qftp/qftp.pro | 13 - src/corelib/io/qbuffer.cpp | 8 +- src/corelib/io/qprocess.cpp | 2 +- src/network/access/access.pri | 2 +- src/network/access/qftp.cpp | 53 ++- src/network/access/qftp.h | 171 --------- src/network/access/qftp_p.h | 182 +++++++++ src/network/access/qnetworkaccessftpbackend_p.h | 2 +- src/network/kernel/qnetworkproxy.cpp | 7 +- src/network/socket/qabstractsocket.cpp | 2 +- src/network/socket/qtcpsocket.cpp | 2 +- src/tools/uic/qclass_lib_map.h | 1 - src/widgets/widgets/qprogressbar.cpp | 5 +- tests/auto/network/access/access.pro | 3 +- tests/auto/network/access/qftp/tst_qftp.cpp | 2 +- .../access/qnetworkreply/tst_qnetworkreply.cpp | 42 +-- 29 files changed, 276 insertions(+), 880 deletions(-) delete mode 100644 examples/network/qftp/ftp.qrc delete mode 100644 examples/network/qftp/ftpwindow.cpp delete mode 100644 examples/network/qftp/ftpwindow.h delete mode 100644 examples/network/qftp/images/cdtoparent.png delete mode 100644 examples/network/qftp/images/dir.png delete mode 100644 examples/network/qftp/images/file.png delete mode 100644 examples/network/qftp/main.cpp delete mode 100644 examples/network/qftp/qftp.desktop delete mode 100644 examples/network/qftp/qftp.pro delete mode 100644 src/network/access/qftp.h create mode 100644 src/network/access/qftp_p.h diff --git a/dist/changes-5.0.0 b/dist/changes-5.0.0 index 03858e66eb..aafe57422e 100644 --- a/dist/changes-5.0.0 +++ b/dist/changes-5.0.0 @@ -146,6 +146,9 @@ information about a particular change. - The QHttp, QHttpHeader, QHttpResponseHeader and QHttpRequestHeader classes have been removed, QNetworkAccessManager should be used instead. +- The QFtp class is no longer exported, QNetworkAccessManager should be used + instead. + - QProcess * On Windows, QProcess::ForwardedChannels will not forward the output of GUI diff --git a/doc/src/core/threads.qdoc b/doc/src/core/threads.qdoc index 2ed0330bdd..c38a7f3141 100644 --- a/doc/src/core/threads.qdoc +++ b/doc/src/core/threads.qdoc @@ -338,7 +338,7 @@ \section1 QObject Reentrancy QObject is reentrant. Most of its non-GUI subclasses, such as - QTimer, QTcpSocket, QUdpSocket, QFtp, and QProcess, are also + QTimer, QTcpSocket, QUdpSocket and QProcess, are also reentrant, making it possible to use these classes from multiple threads simultaneously. Note that these classes are designed to be created and used from within a single thread; creating an object diff --git a/doc/src/network/network-programming/qtnetwork.qdoc b/doc/src/network/network-programming/qtnetwork.qdoc index b5725e4bdb..122aa5784b 100644 --- a/doc/src/network/network-programming/qtnetwork.qdoc +++ b/doc/src/network/network-programming/qtnetwork.qdoc @@ -40,8 +40,7 @@ \brief An Introduction to Network Programming with Qt The QtNetwork module offers classes that allow you to write TCP/IP clients - and servers. It offers classes such as QFtp that implement specific - application-level protocols, lower-level classes such as QTcpSocket, + and servers. It offers lower-level classes such as QTcpSocket, QTcpServer and QUdpSocket that represent low level network concepts, and high level classes such as QNetworkRequest, QNetworkReply and QNetworkAccessManager to perform network operations using common protocols. @@ -92,64 +91,6 @@ Each application or library can create one or more instances of QNetworkAccessManager to handle network communication. - \section1 Writing FTP Clients with QFtp - - FTP (File Transfer Protocol) is a protocol used almost exclusively - for browsing remote directories and for transferring files. - - \image httpstack.png FTP Client and Server - - FTP uses two network connections, one for sending - commands and one for transferring data. The - FTP protocol has a state and requires the client to send several - commands before a file transfer takes place. - FTP clients establish a connection - and keeps it open throughout the session. In each session, multiple - transfers can occur. - - The QFtp class provides client-side support for FTP. - It has the following characteristics: - \list - - \o \e{Non-blocking behavior.} QFtp is asynchronous. - You can schedule a series of commands which are executed later, - when control returns to Qt's event loop. - - \o \e{Command IDs.} Each command has a unique ID number that you - can use to follow the execution of the command. For example, QFtp - emits the \l{QFtp::commandStarted()}{commandStarted()} and - \l{QFtp::commandFinished()}{commandFinished()} signal with the - command ID for each command that is executed. - - \o \e{Data transfer progress indicators.} QFtp emits signals - whenever data is transferred (QFtp::dataTransferProgress(), - QNetworkReply::downloadProgress(), and - QNetworkReply::uploadProgress()). You could connect these signals - to QProgressBar::setProgress() or QProgressDialog::setProgress(), - for example. - - \o \e{QIODevice support.} The class supports convenient - uploading from and downloading to \l{QIODevice}s, in addition to a - QByteArray-based API. - - \endlist - - There are two main ways of using QFtp. The most common - approach is to keep track of the command IDs and follow the - execution of every command by connecting to the appropriate - signals. The other approach is to schedule all commands at once - and only connect to the done() signal, which is emitted when all - scheduled commands have been executed. The first approach - requires more work, but it gives you more control over the - execution of individual commands and allows you to initiate new - commands based on the result of a previous command. It also - enables you to provide detailed feedback to the user. - - The \l{network/qftp}{FTP} example - illustrates how to write an FTP client. - Writing your own FTP (or HTTP) server is possible using the - lower-level classes QTcpSocket and QTcpServer. - \section1 Using TCP with QTcpSocket and QTcpServer TCP (Transmission Control Protocol) is a low-level network @@ -172,7 +113,7 @@ will then stop immediately. QTcpSocket works asynchronously and emits signals to report status - changes and errors, just like QNetworkAccessManager and QFtp. It + changes and errors, just like QNetworkAccessManager. It relies on the event loop to detect incoming data and to automatically flush outgoing data. You can write data to the socket using QTcpSocket::write(), and read data using diff --git a/doc/src/snippets/code/src_corelib_io_qurl.cpp b/doc/src/snippets/code/src_corelib_io_qurl.cpp index 81c02cdada..98d8e37ebd 100644 --- a/doc/src/snippets/code/src_corelib_io_qurl.cpp +++ b/doc/src/snippets/code/src_corelib_io_qurl.cpp @@ -62,8 +62,8 @@ bool checkUrl(const QUrl &url) { //! [3] -QFtp ftp; -ftp.connectToHost(url.host(), url.port(21)); +QTcpSocket sock; +sock.connectToHost(url.host(), url.port(80)); //! [3] diff --git a/examples/network/network.pro b/examples/network/network.pro index f12a6a1d47..0496cbb242 100644 --- a/examples/network/network.pro +++ b/examples/network/network.pro @@ -10,7 +10,6 @@ SUBDIRS = \ broadcastsender \ fortuneclient \ fortuneserver \ - qftp \ http \ loopback \ threadedfortuneserver \ diff --git a/examples/network/qftp/ftp.qrc b/examples/network/qftp/ftp.qrc deleted file mode 100644 index b598ab8829..0000000000 --- a/examples/network/qftp/ftp.qrc +++ /dev/null @@ -1,7 +0,0 @@ - - - images/cdtoparent.png - images/dir.png - images/file.png - - diff --git a/examples/network/qftp/ftpwindow.cpp b/examples/network/qftp/ftpwindow.cpp deleted file mode 100644 index 26a934ea9f..0000000000 --- a/examples/network/qftp/ftpwindow.cpp +++ /dev/null @@ -1,406 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -#include "ftpwindow.h" - -FtpWindow::FtpWindow(QWidget *parent) - : QDialog(parent), ftp(0), networkSession(0) -{ - ftpServerLabel = new QLabel(tr("Ftp &server:")); - ftpServerLineEdit = new QLineEdit("ftp.qt.nokia.com"); - ftpServerLabel->setBuddy(ftpServerLineEdit); - - statusLabel = new QLabel(tr("Please enter the name of an FTP server.")); - - fileList = new QTreeWidget; - fileList->setEnabled(false); - fileList->setRootIsDecorated(false); - fileList->setHeaderLabels(QStringList() << tr("Name") << tr("Size") << tr("Owner") << tr("Group") << tr("Time")); - fileList->header()->setStretchLastSection(false); - - connectButton = new QPushButton(tr("Connect")); - connectButton->setDefault(true); - - cdToParentButton = new QPushButton; - cdToParentButton->setIcon(QPixmap(":/images/cdtoparent.png")); - cdToParentButton->setEnabled(false); - - downloadButton = new QPushButton(tr("Download")); - downloadButton->setEnabled(false); - - quitButton = new QPushButton(tr("Quit")); - - buttonBox = new QDialogButtonBox; - buttonBox->addButton(downloadButton, QDialogButtonBox::ActionRole); - buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole); - - progressDialog = new QProgressDialog(this); - - connect(fileList, SIGNAL(itemActivated(QTreeWidgetItem*,int)), - this, SLOT(processItem(QTreeWidgetItem*,int))); - connect(fileList, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), - this, SLOT(enableDownloadButton())); - connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload())); - connect(connectButton, SIGNAL(clicked()), this, SLOT(connectOrDisconnect())); - connect(cdToParentButton, SIGNAL(clicked()), this, SLOT(cdToParent())); - connect(downloadButton, SIGNAL(clicked()), this, SLOT(downloadFile())); - connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); - - QHBoxLayout *topLayout = new QHBoxLayout; - topLayout->addWidget(ftpServerLabel); - topLayout->addWidget(ftpServerLineEdit); - topLayout->addWidget(cdToParentButton); - topLayout->addWidget(connectButton); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addLayout(topLayout); - mainLayout->addWidget(fileList); - mainLayout->addWidget(statusLabel); - mainLayout->addWidget(buttonBox); - setLayout(mainLayout); - - setWindowTitle(tr("FTP")); -} - -QSize FtpWindow::sizeHint() const -{ - return QSize(500, 300); -} - -//![0] -void FtpWindow::connectOrDisconnect() -{ - if (ftp) { - ftp->abort(); - ftp->deleteLater(); - ftp = 0; -//![0] - fileList->setEnabled(false); - cdToParentButton->setEnabled(false); - downloadButton->setEnabled(false); - connectButton->setEnabled(true); - connectButton->setText(tr("Connect")); -#ifndef QT_NO_CURSOR - setCursor(Qt::ArrowCursor); -#endif - statusLabel->setText(tr("Please enter the name of an FTP server.")); - return; - } - -#ifndef QT_NO_CURSOR - setCursor(Qt::WaitCursor); -#endif - - if (!networkSession || !networkSession->isOpen()) { - if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { - if (!networkSession) { - // Get saved network configuration - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); - settings.beginGroup(QLatin1String("QtNetwork")); - const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); - settings.endGroup(); - - // If the saved network configuration is not currently discovered use the system default - QNetworkConfiguration config = manager.configurationFromIdentifier(id); - if ((config.state() & QNetworkConfiguration::Discovered) != - QNetworkConfiguration::Discovered) { - config = manager.defaultConfiguration(); - } - - networkSession = new QNetworkSession(config, this); - connect(networkSession, SIGNAL(opened()), this, SLOT(connectToFtp())); - connect(networkSession, SIGNAL(error(QNetworkSession::SessionError)), this, SLOT(enableConnectButton())); - } - connectButton->setEnabled(false); - statusLabel->setText(tr("Opening network session.")); - networkSession->open(); - return; - } - } - connectToFtp(); -} - -void FtpWindow::connectToFtp() -{ -//![1] - ftp = new QFtp(this); - connect(ftp, SIGNAL(commandFinished(int,bool)), - this, SLOT(ftpCommandFinished(int,bool))); - connect(ftp, SIGNAL(listInfo(QUrlInfo)), - this, SLOT(addToList(QUrlInfo))); - connect(ftp, SIGNAL(dataTransferProgress(qint64,qint64)), - this, SLOT(updateDataTransferProgress(qint64,qint64))); - - fileList->clear(); - currentPath.clear(); - isDirectory.clear(); -//![1] - -//![2] - QUrl url(ftpServerLineEdit->text()); - if (!url.isValid() || url.scheme().toLower() != QLatin1String("ftp")) { - ftp->connectToHost(ftpServerLineEdit->text(), 21); - ftp->login(); - } else { - ftp->connectToHost(url.host(), url.port(21)); - - if (!url.userName().isEmpty()) - ftp->login(QUrl::fromPercentEncoding(url.userName().toLatin1()), url.password()); - else - ftp->login(); - if (!url.path().isEmpty()) - ftp->cd(url.path()); - } -//![2] - - fileList->setEnabled(true); - connectButton->setEnabled(false); - connectButton->setText(tr("Disconnect")); - statusLabel->setText(tr("Connecting to FTP server %1...") - .arg(ftpServerLineEdit->text())); -} - -//![3] -void FtpWindow::downloadFile() -{ - QString fileName = fileList->currentItem()->text(0); -//![3] -// - if (QFile::exists(fileName)) { - QMessageBox::information(this, tr("FTP"), - tr("There already exists a file called %1 in " - "the current directory.") - .arg(fileName)); - return; - } - -//![4] - file = new QFile(fileName); - if (!file->open(QIODevice::WriteOnly)) { - QMessageBox::information(this, tr("FTP"), - tr("Unable to save the file %1: %2.") - .arg(fileName).arg(file->errorString())); - delete file; - return; - } - - ftp->get(fileList->currentItem()->text(0), file); - - progressDialog->setLabelText(tr("Downloading %1...").arg(fileName)); - downloadButton->setEnabled(false); - progressDialog->exec(); -} -//![4] - -//![5] -void FtpWindow::cancelDownload() -{ - ftp->abort(); - - if (file->exists()) { - file->close(); - file->remove(); - } - delete file; -} -//![5] - -//![6] -void FtpWindow::ftpCommandFinished(int, bool error) -{ -#ifndef QT_NO_CURSOR - setCursor(Qt::ArrowCursor); -#endif - - if (ftp->currentCommand() == QFtp::ConnectToHost) { - if (error) { - QMessageBox::information(this, tr("FTP"), - tr("Unable to connect to the FTP server " - "at %1. Please check that the host " - "name is correct.") - .arg(ftpServerLineEdit->text())); - connectOrDisconnect(); - return; - } - statusLabel->setText(tr("Logged onto %1.") - .arg(ftpServerLineEdit->text())); - fileList->setFocus(); - downloadButton->setDefault(true); - connectButton->setEnabled(true); - return; - } -//![6] - -//![7] - if (ftp->currentCommand() == QFtp::Login) - ftp->list(); -//![7] - -//![8] - if (ftp->currentCommand() == QFtp::Get) { - if (error) { - statusLabel->setText(tr("Canceled download of %1.") - .arg(file->fileName())); - file->close(); - file->remove(); - } else { - statusLabel->setText(tr("Downloaded %1 to current directory.") - .arg(file->fileName())); - file->close(); - } - delete file; - enableDownloadButton(); - progressDialog->hide(); -//![8] -//![9] - } else if (ftp->currentCommand() == QFtp::List) { - if (isDirectory.isEmpty()) { - fileList->addTopLevelItem(new QTreeWidgetItem(QStringList() << tr(""))); - fileList->setEnabled(false); - } - } -//![9] -} - -//![10] -void FtpWindow::addToList(const QUrlInfo &urlInfo) -{ - QTreeWidgetItem *item = new QTreeWidgetItem; - item->setText(0, urlInfo.name()); - item->setText(1, QString::number(urlInfo.size())); - item->setText(2, urlInfo.owner()); - item->setText(3, urlInfo.group()); - item->setText(4, urlInfo.lastModified().toString("MMM dd yyyy")); - - QPixmap pixmap(urlInfo.isDir() ? ":/images/dir.png" : ":/images/file.png"); - item->setIcon(0, pixmap); - - isDirectory[urlInfo.name()] = urlInfo.isDir(); - fileList->addTopLevelItem(item); - if (!fileList->currentItem()) { - fileList->setCurrentItem(fileList->topLevelItem(0)); - fileList->setEnabled(true); - } -} -//![10] - -//![11] -void FtpWindow::processItem(QTreeWidgetItem *item, int /*column*/) -{ - QString name = item->text(0); - if (isDirectory.value(name)) { - fileList->clear(); - isDirectory.clear(); - currentPath += '/'; - currentPath += name; - ftp->cd(name); - ftp->list(); - cdToParentButton->setEnabled(true); -#ifndef QT_NO_CURSOR - setCursor(Qt::WaitCursor); -#endif - return; - } -} -//![11] - -//![12] -void FtpWindow::cdToParent() -{ -#ifndef QT_NO_CURSOR - setCursor(Qt::WaitCursor); -#endif - fileList->clear(); - isDirectory.clear(); - currentPath = currentPath.left(currentPath.lastIndexOf('/')); - if (currentPath.isEmpty()) { - cdToParentButton->setEnabled(false); - ftp->cd("/"); - } else { - ftp->cd(currentPath); - } - ftp->list(); -} -//![12] - -//![13] -void FtpWindow::updateDataTransferProgress(qint64 readBytes, - qint64 totalBytes) -{ - progressDialog->setMaximum(totalBytes); - progressDialog->setValue(readBytes); -} -//![13] - -//![14] -void FtpWindow::enableDownloadButton() -{ - QTreeWidgetItem *current = fileList->currentItem(); - if (current) { - QString currentFile = current->text(0); - downloadButton->setEnabled(!isDirectory.value(currentFile)); - } else { - downloadButton->setEnabled(false); - } -} -//![14] - -void FtpWindow::enableConnectButton() -{ - // Save the used configuration - QNetworkConfiguration config = networkSession->configuration(); - QString id; - if (config.type() == QNetworkConfiguration::UserChoice) - id = networkSession->sessionProperty(QLatin1String("UserChoiceConfiguration")).toString(); - else - id = config.identifier(); - - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); - settings.beginGroup(QLatin1String("QtNetwork")); - settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); - settings.endGroup(); - - connectButton->setEnabled(true); - statusLabel->setText(tr("Please enter the name of an FTP server.")); -} - diff --git a/examples/network/qftp/ftpwindow.h b/examples/network/qftp/ftpwindow.h deleted file mode 100644 index 83ebf8eb98..0000000000 --- a/examples/network/qftp/ftpwindow.h +++ /dev/null @@ -1,110 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef FTPWINDOW_H -#define FTPWINDOW_H - -#include -#include -#include - -QT_BEGIN_NAMESPACE -class QDialogButtonBox; -class QFile; -class QFtp; -class QLabel; -class QLineEdit; -class QTreeWidget; -class QTreeWidgetItem; -class QProgressDialog; -class QPushButton; -class QUrlInfo; -class QNetworkSession; -QT_END_NAMESPACE - -class FtpWindow : public QDialog -{ - Q_OBJECT - -public: - FtpWindow(QWidget *parent = 0); - QSize sizeHint() const; - -//![0] -private slots: - void connectOrDisconnect(); - void downloadFile(); - void cancelDownload(); - void connectToFtp(); - - void ftpCommandFinished(int commandId, bool error); - void addToList(const QUrlInfo &urlInfo); - void processItem(QTreeWidgetItem *item, int column); - void cdToParent(); - void updateDataTransferProgress(qint64 readBytes, - qint64 totalBytes); - void enableDownloadButton(); - void enableConnectButton(); -//![0] - -private: - QLabel *ftpServerLabel; - QLineEdit *ftpServerLineEdit; - QLabel *statusLabel; - QTreeWidget *fileList; - QPushButton *cdToParentButton; - QPushButton *connectButton; - QPushButton *downloadButton; - QPushButton *quitButton; - QDialogButtonBox *buttonBox; - QProgressDialog *progressDialog; - -//![1] - QHash isDirectory; - QString currentPath; - QFtp *ftp; - QFile *file; - - QNetworkSession *networkSession; - QNetworkConfigurationManager manager; -//![1] -}; - -#endif diff --git a/examples/network/qftp/images/cdtoparent.png b/examples/network/qftp/images/cdtoparent.png deleted file mode 100644 index 24b6180829..0000000000 Binary files a/examples/network/qftp/images/cdtoparent.png and /dev/null differ diff --git a/examples/network/qftp/images/dir.png b/examples/network/qftp/images/dir.png deleted file mode 100644 index 0ce5ae75fc..0000000000 Binary files a/examples/network/qftp/images/dir.png and /dev/null differ diff --git a/examples/network/qftp/images/file.png b/examples/network/qftp/images/file.png deleted file mode 100644 index be6c53089a..0000000000 Binary files a/examples/network/qftp/images/file.png and /dev/null differ diff --git a/examples/network/qftp/main.cpp b/examples/network/qftp/main.cpp deleted file mode 100644 index 8330052b3e..0000000000 --- a/examples/network/qftp/main.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "ftpwindow.h" - - -int main(int argc, char *argv[]) -{ - Q_INIT_RESOURCE(ftp); - QApplication app(argc, argv); - FtpWindow ftpWin; - ftpWin.show(); - return ftpWin.exec(); -} diff --git a/examples/network/qftp/qftp.desktop b/examples/network/qftp/qftp.desktop deleted file mode 100644 index 6149fe96df..0000000000 --- a/examples/network/qftp/qftp.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Version=1.0 -Type=Application -Terminal=false -Name=FTP -Exec=/opt/usr/bin/qftp -Icon=qftp -X-Window-Icon= -X-HildonDesk-ShowInToolbar=true -X-Osso-Type=application/x-executable diff --git a/examples/network/qftp/qftp.pro b/examples/network/qftp/qftp.pro deleted file mode 100644 index c554b37a03..0000000000 --- a/examples/network/qftp/qftp.pro +++ /dev/null @@ -1,13 +0,0 @@ -QT += widgets - -HEADERS = ftpwindow.h -SOURCES = ftpwindow.cpp \ - main.cpp -RESOURCES += ftp.qrc -QT += network - -# install -target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/network/qftp -sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro images -sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/network/qftp -INSTALLS += target sources diff --git a/src/corelib/io/qbuffer.cpp b/src/corelib/io/qbuffer.cpp index dd7e9d2427..a5e605b9d5 100644 --- a/src/corelib/io/qbuffer.cpp +++ b/src/corelib/io/qbuffer.cpp @@ -143,12 +143,8 @@ QByteArray QBufferPrivate::peek(qint64 maxSize) QBuffer emits readyRead() when new data has arrived in the buffer. By connecting to this signal, you can use QBuffer to - store temporary data before processing it. For example, you can - pass the buffer to QFtp when downloading a file from an FTP - server. Whenever a new payload of data has been downloaded, - readyRead() is emitted, and you can process the data that just - arrived. QBuffer also emits bytesWritten() every time new data - has been written to the buffer. + store temporary data before processing it. QBuffer also emits + bytesWritten() every time new data has been written to the buffer. \sa QFile, QDataStream, QTextStream, QByteArray */ diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index e68fe883e7..8f76e0e4b9 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -471,7 +471,7 @@ void QProcessPrivate::Channel::clear() read the standard output by calling read(), readLine(), and getChar(). Because it inherits QIODevice, QProcess can also be used as an input source for QXmlReader, or for generating data to - be uploaded using QFtp. + be uploaded using QNetworkAccessManager. \note On Windows CE and Symbian, reading and writing to a process is not supported. diff --git a/src/network/access/access.pri b/src/network/access/access.pri index 944855e9d1..0047084eb1 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -1,7 +1,7 @@ # Qt network access module HEADERS += \ - access/qftp.h \ + access/qftp_p.h \ access/qhttpheader_p.h \ access/qhttpnetworkheader_p.h \ access/qhttpnetworkrequest_p.h \ diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp index 3dc22424f4..6fafff0f56 100644 --- a/src/network/access/qftp.cpp +++ b/src/network/access/qftp.cpp @@ -42,7 +42,7 @@ //#define QFTPPI_DEBUG //#define QFTPDTP_DEBUG -#include "qftp.h" +#include "private/qftp_p.h" #include "qabstractsocket.h" #ifndef QT_NO_FTP @@ -825,6 +825,8 @@ void QFtpPI::connectToHost(const QString &host, quint16 port) } /* + \internal + Sends the sequence of commands \a cmds to the FTP server. When the commands are all done the finished() signal is emitted. When an error occurs, the error() signal is emitted. @@ -970,6 +972,8 @@ void QFtpPI::readyRead() } /* + \internal + Process a reply from the FTP server. Returns true if the reply was processed or false if the reply has to be @@ -1150,6 +1154,8 @@ bool QFtpPI::processReply() } /* + \internal + Starts next pending command. Returns false if there are no pending commands, otherwise it returns true. */ @@ -1306,6 +1312,7 @@ int QFtpPrivate::addCommand(QFtpCommand *cmd) * *********************************************************************/ /*! + \internal \class QFtp \brief The QFtp class provides an implementation of the client side of FTP protocol. @@ -1409,6 +1416,7 @@ int QFtpPrivate::addCommand(QFtpCommand *cmd) /*! + \internal Constructs a QFtp object with the given \a parent. */ QFtp::QFtp(QObject *parent) @@ -1435,6 +1443,7 @@ QFtp::QFtp(QObject *parent) } /*! + \internal \enum QFtp::State This enum defines the connection state: @@ -1451,6 +1460,7 @@ QFtp::QFtp(QObject *parent) \sa stateChanged() state() */ /*! + \internal \enum QFtp::TransferMode FTP works with two socket connections; one for commands and @@ -1468,6 +1478,7 @@ QFtp::QFtp(QObject *parent) data. */ /*! + \internal \enum QFtp::TransferType This enum identifies the data transfer type used with get and @@ -1479,6 +1490,7 @@ QFtp::QFtp(QObject *parent) characters will be converted to the local format. */ /*! + \internal \enum QFtp::Error This enum identifies the error that occurred. @@ -1495,6 +1507,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \enum QFtp::Command This enum is used as the return value for the currentCommand() function. @@ -1524,6 +1537,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \fn void QFtp::stateChanged(int state) This signal is emitted when the state of the connection changes. @@ -1538,6 +1552,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \fn void QFtp::listInfo(const QUrlInfo &i); This signal is emitted for each directory entry the list() command @@ -1547,6 +1562,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \fn void QFtp::commandStarted(int id) This signal is emitted when processing the command identified by @@ -1556,6 +1572,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \fn void QFtp::commandFinished(int id, bool error) This signal is emitted when processing the command identified by @@ -1566,6 +1583,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \fn void QFtp::done(bool error) This signal is emitted when the last pending command has finished; @@ -1577,6 +1595,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \fn void QFtp::readyRead() This signal is emitted in response to a get() command when there @@ -1597,6 +1616,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \fn void QFtp::dataTransferProgress(qint64 done, qint64 total) This signal is emitted in response to a get() or put() request to @@ -1617,6 +1637,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal \fn void QFtp::rawCommandReply(int replyCode, const QString &detail); This signal is emitted in response to the rawCommand() function. @@ -1627,6 +1648,7 @@ QFtp::QFtp(QObject *parent) */ /*! + \internal Connects to the FTP server \a host using port \a port. The stateChanged() signal is emitted when the state of the @@ -1655,6 +1677,7 @@ int QFtp::connectToHost(const QString &host, quint16 port) } /*! + \internal Logs in to the FTP server with the username \a user and the password \a password. @@ -1681,6 +1704,7 @@ int QFtp::login(const QString &user, const QString &password) } /*! + \internal Closes the connection to the FTP server. The stateChanged() signal is emitted when the state of the @@ -1704,6 +1728,7 @@ int QFtp::close() } /*! + \internal Sets the current FTP transfer mode to \a mode. The default is QFtp::Passive. \sa QFtp::TransferMode @@ -1717,6 +1742,7 @@ int QFtp::setTransferMode(TransferMode mode) } /*! + \internal Enables use of the FTP proxy on host \a host and port \a port. Calling this function with \a host empty disables proxying. @@ -1731,6 +1757,7 @@ int QFtp::setProxy(const QString &host, quint16 port) } /*! + \internal Lists the contents of directory \a dir on the FTP server. If \a dir is empty, it lists the contents of the current directory. @@ -1760,6 +1787,7 @@ int QFtp::list(const QString &dir) } /*! + \internal Changes the working directory of the server to \a dir. The function does not block and returns immediately. The command @@ -1779,6 +1807,7 @@ int QFtp::cd(const QString &dir) } /*! + \internal Downloads the file \a file from the server. If \a dev is 0, then the readyRead() signal is emitted when there @@ -1832,6 +1861,7 @@ int QFtp::get(const QString &file, QIODevice *dev, TransferType type) } /*! + \internal \overload Writes a copy of the given \a data to the file called \a file on @@ -1869,6 +1899,7 @@ int QFtp::put(const QByteArray &data, const QString &file, TransferType type) } /*! + \internal Reads the data from the IO device \a dev, and writes it to the file called \a file on the server. The data is read in chunks from the IO device, so this overload allows you to transmit large @@ -1897,6 +1928,7 @@ int QFtp::put(QIODevice *dev, const QString &file, TransferType type) } /*! + \internal Deletes the file called \a file from the server. The function does not block and returns immediately. The command @@ -1916,6 +1948,7 @@ int QFtp::remove(const QString &file) } /*! + \internal Creates a directory called \a dir on the server. The function does not block and returns immediately. The command @@ -1935,6 +1968,7 @@ int QFtp::mkdir(const QString &dir) } /*! + \internal Removes the directory called \a dir from the server. The function does not block and returns immediately. The command @@ -1954,6 +1988,7 @@ int QFtp::rmdir(const QString &dir) } /*! + \internal Renames the file called \a oldname to \a newname on the server. The function does not block and returns immediately. The command @@ -1976,6 +2011,7 @@ int QFtp::rename(const QString &oldname, const QString &newname) } /*! + \internal Sends the raw FTP command \a command to the FTP server. This is useful for low-level FTP access. If the operation you wish to perform has an equivalent QFtp function, we recommend using the @@ -2000,6 +2036,7 @@ int QFtp::rawCommand(const QString &command) } /*! + \internal Returns the number of bytes that can be read from the data socket at the moment. @@ -2011,6 +2048,7 @@ qint64 QFtp::bytesAvailable() const } /*! + \internal Reads \a maxlen bytes from the data socket into \a data and returns the number of bytes read. Returns -1 if an error occurred. @@ -2022,6 +2060,7 @@ qint64 QFtp::read(char *data, qint64 maxlen) } /*! + \internal Reads all the bytes available from the data socket and returns them. @@ -2033,6 +2072,7 @@ QByteArray QFtp::readAll() } /*! + \internal Aborts the current command and deletes all scheduled commands. If there is an unfinished command (i.e. a command for which the @@ -2071,6 +2111,7 @@ void QFtp::abort() } /*! + \internal Returns the identifier of the FTP command that is being executed or 0 if there is no command being executed. @@ -2084,6 +2125,7 @@ int QFtp::currentId() const } /*! + \internal Returns the command type of the FTP command being executed or \c None if there is no command being executed. @@ -2097,6 +2139,7 @@ QFtp::Command QFtp::currentCommand() const } /*! + \internal Returns the QIODevice pointer that is used by the FTP command to read data from or store data to. If there is no current FTP command being executed or if the command does not use an IO device, this function returns 0. @@ -2117,6 +2160,7 @@ QIODevice* QFtp::currentDevice() const } /*! + \internal Returns true if there are any commands scheduled that have not yet been executed; otherwise returns false. @@ -2131,6 +2175,7 @@ bool QFtp::hasPendingCommands() const } /*! + \internal Deletes all pending commands from the list of scheduled commands. This does not affect the command that is being executed. If you want to stop this as well, use abort(). @@ -2145,6 +2190,7 @@ void QFtp::clearPendingCommands() } /*! + \internal Returns the current state of the object. When the state changes, the stateChanged() signal is emitted. @@ -2156,6 +2202,7 @@ QFtp::State QFtp::state() const } /*! + \internal Returns the last error that occurred. This is useful to find out what went wrong when receiving a commandFinished() or a done() signal with the \c error argument set to \c true. @@ -2168,6 +2215,7 @@ QFtp::Error QFtp::error() const } /*! + \internal Returns a human-readable description of the last error that occurred. This is useful for presenting a error message to the user when receiving a commandFinished() or a done() signal with @@ -2385,6 +2433,7 @@ void QFtpPrivate::_q_piFtpReply(int code, const QString &text) } /*! + \internal Destructor. */ QFtp::~QFtp() @@ -2397,6 +2446,6 @@ QT_END_NAMESPACE #include "qftp.moc" -#include "moc_qftp.cpp" +#include "moc_qftp_p.cpp" #endif // QT_NO_FTP diff --git a/src/network/access/qftp.h b/src/network/access/qftp.h deleted file mode 100644 index 326e967f3b..0000000000 --- a/src/network/access/qftp.h +++ /dev/null @@ -1,171 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtNetwork module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QFTP_H -#define QFTP_H - -#include -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Network) - -#ifndef QT_NO_FTP - -class QFtpPrivate; - -class Q_NETWORK_EXPORT QFtp : public QObject -{ - Q_OBJECT - -public: - explicit QFtp(QObject *parent = 0); - virtual ~QFtp(); - - enum State { - Unconnected, - HostLookup, - Connecting, - Connected, - LoggedIn, - Closing - }; - enum Error { - NoError, - UnknownError, - HostNotFound, - ConnectionRefused, - NotConnected - }; - enum Command { - None, - SetTransferMode, - SetProxy, - ConnectToHost, - Login, - Close, - List, - Cd, - Get, - Put, - Remove, - Mkdir, - Rmdir, - Rename, - RawCommand - }; - enum TransferMode { - Active, - Passive - }; - enum TransferType { - Binary, - Ascii - }; - - int setProxy(const QString &host, quint16 port); - int connectToHost(const QString &host, quint16 port=21); - int login(const QString &user = QString(), const QString &password = QString()); - int close(); - int setTransferMode(TransferMode mode); - int list(const QString &dir = QString()); - int cd(const QString &dir); - int get(const QString &file, QIODevice *dev=0, TransferType type = Binary); - int put(const QByteArray &data, const QString &file, TransferType type = Binary); - int put(QIODevice *dev, const QString &file, TransferType type = Binary); - int remove(const QString &file); - int mkdir(const QString &dir); - int rmdir(const QString &dir); - int rename(const QString &oldname, const QString &newname); - - int rawCommand(const QString &command); - - qint64 bytesAvailable() const; - qint64 read(char *data, qint64 maxlen); - QByteArray readAll(); - - int currentId() const; - QIODevice* currentDevice() const; - Command currentCommand() const; - bool hasPendingCommands() const; - void clearPendingCommands(); - - State state() const; - - Error error() const; - QString errorString() const; - -public Q_SLOTS: - void abort(); - -Q_SIGNALS: - void stateChanged(int); - void listInfo(const QUrlInfo&); - void readyRead(); - void dataTransferProgress(qint64, qint64); - void rawCommandReply(int, const QString&); - - void commandStarted(int); - void commandFinished(int, bool); - void done(bool); - -private: - Q_DISABLE_COPY(QFtp) - Q_DECLARE_PRIVATE(QFtp) - - Q_PRIVATE_SLOT(d_func(), void _q_startNextCommand()) - Q_PRIVATE_SLOT(d_func(), void _q_piFinished(const QString&)) - Q_PRIVATE_SLOT(d_func(), void _q_piError(int, const QString&)) - Q_PRIVATE_SLOT(d_func(), void _q_piConnectState(int)) - Q_PRIVATE_SLOT(d_func(), void _q_piFtpReply(int, const QString&)) -}; - -#endif // QT_NO_FTP - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QFTP_H diff --git a/src/network/access/qftp_p.h b/src/network/access/qftp_p.h new file mode 100644 index 0000000000..0dc6a2006f --- /dev/null +++ b/src/network/access/qftp_p.h @@ -0,0 +1,182 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtNetwork module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the Network Access API. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +#ifndef QFTP_H +#define QFTP_H + +#include +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Network) + +#ifndef QT_NO_FTP + +class QFtpPrivate; + +class Q_AUTOTEST_EXPORT QFtp : public QObject +{ + Q_OBJECT + +public: + explicit QFtp(QObject *parent = 0); + virtual ~QFtp(); + + enum State { + Unconnected, + HostLookup, + Connecting, + Connected, + LoggedIn, + Closing + }; + enum Error { + NoError, + UnknownError, + HostNotFound, + ConnectionRefused, + NotConnected + }; + enum Command { + None, + SetTransferMode, + SetProxy, + ConnectToHost, + Login, + Close, + List, + Cd, + Get, + Put, + Remove, + Mkdir, + Rmdir, + Rename, + RawCommand + }; + enum TransferMode { + Active, + Passive + }; + enum TransferType { + Binary, + Ascii + }; + + int setProxy(const QString &host, quint16 port); + int connectToHost(const QString &host, quint16 port=21); + int login(const QString &user = QString(), const QString &password = QString()); + int close(); + int setTransferMode(TransferMode mode); + int list(const QString &dir = QString()); + int cd(const QString &dir); + int get(const QString &file, QIODevice *dev=0, TransferType type = Binary); + int put(const QByteArray &data, const QString &file, TransferType type = Binary); + int put(QIODevice *dev, const QString &file, TransferType type = Binary); + int remove(const QString &file); + int mkdir(const QString &dir); + int rmdir(const QString &dir); + int rename(const QString &oldname, const QString &newname); + + int rawCommand(const QString &command); + + qint64 bytesAvailable() const; + qint64 read(char *data, qint64 maxlen); + QByteArray readAll(); + + int currentId() const; + QIODevice* currentDevice() const; + Command currentCommand() const; + bool hasPendingCommands() const; + void clearPendingCommands(); + + State state() const; + + Error error() const; + QString errorString() const; + +public Q_SLOTS: + void abort(); + +Q_SIGNALS: + void stateChanged(int); + void listInfo(const QUrlInfo&); + void readyRead(); + void dataTransferProgress(qint64, qint64); + void rawCommandReply(int, const QString&); + + void commandStarted(int); + void commandFinished(int, bool); + void done(bool); + +private: + Q_DISABLE_COPY(QFtp) + Q_DECLARE_PRIVATE(QFtp) + + Q_PRIVATE_SLOT(d_func(), void _q_startNextCommand()) + Q_PRIVATE_SLOT(d_func(), void _q_piFinished(const QString&)) + Q_PRIVATE_SLOT(d_func(), void _q_piError(int, const QString&)) + Q_PRIVATE_SLOT(d_func(), void _q_piConnectState(int)) + Q_PRIVATE_SLOT(d_func(), void _q_piFtpReply(int, const QString&)) +}; + +#endif // QT_NO_FTP + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QFTP_H diff --git a/src/network/access/qnetworkaccessftpbackend_p.h b/src/network/access/qnetworkaccessftpbackend_p.h index 0e286d99c7..7338121493 100644 --- a/src/network/access/qnetworkaccessftpbackend_p.h +++ b/src/network/access/qnetworkaccessftpbackend_p.h @@ -57,7 +57,7 @@ #include "qnetworkaccesscache_p.h" #include "qnetworkrequest.h" #include "qnetworkreply.h" -#include "QtNetwork/qftp.h" +#include "private/qftp_p.h" #include "QtCore/qpointer.h" diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp index 551b90116a..a8873d3be9 100644 --- a/src/network/kernel/qnetworkproxy.cpp +++ b/src/network/kernel/qnetworkproxy.cpp @@ -53,8 +53,8 @@ QNetworkProxy provides the method for configuring network layer proxy support to the Qt network classes. The currently supported - classes are QAbstractSocket, QTcpSocket, QUdpSocket, QTcpServer, - QNetworkAccessManager and QFtp. The proxy support is designed to + classes are QAbstractSocket, QTcpSocket, QUdpSocket, QTcpServer + and QNetworkAccessManager. The proxy support is designed to be as transparent as possible. This means that existing network-enabled applications that you have written should automatically support network proxy using the following code. @@ -166,8 +166,7 @@ \row \o Caching FTP \o Implemented using an FTP proxy, it is useful only in the - context of FTP requests (see QFtp, - QNetworkAccessManager) + context of FTP requests (see QNetworkAccessManager) \o CachingCapability, HostNameLookupCapability \endtable diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 11a9d45990..4d70684563 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -163,7 +163,7 @@ issue to be aware of, though: You must make sure that enough data is available before attempting to read it using operator>>(). - \sa QFtp, QNetworkAccessManager, QTcpServer + \sa QNetworkAccessManager, QTcpServer */ /*! diff --git a/src/network/socket/qtcpsocket.cpp b/src/network/socket/qtcpsocket.cpp index f960010e0c..f900ca752c 100644 --- a/src/network/socket/qtcpsocket.cpp +++ b/src/network/socket/qtcpsocket.cpp @@ -60,7 +60,7 @@ \bold{Note:} TCP sockets cannot be opened in QIODevice::Unbuffered mode. - \sa QTcpServer, QUdpSocket, QFtp, QNetworkAccessManager, + \sa QTcpServer, QUdpSocket, QNetworkAccessManager, {Fortune Server Example}, {Fortune Client Example}, {Threaded Fortune Server Example}, {Blocking Fortune Client Example}, {Loopback Example}, {Torrent Example} diff --git a/src/tools/uic/qclass_lib_map.h b/src/tools/uic/qclass_lib_map.h index 030be12076..820e8b04d2 100644 --- a/src/tools/uic/qclass_lib_map.h +++ b/src/tools/uic/qclass_lib_map.h @@ -397,7 +397,6 @@ QT_CLASS_LIB(QXmlStreamStringRef, QtXml, qxmlstream.h) QT_CLASS_LIB(QXmlStreamWriter, QtXml, qxmlstream.h) QT_CLASS_LIB(QNetworkCacheMetaData, QtNetwork, qabstractnetworkcache.h) QT_CLASS_LIB(QAbstractNetworkCache, QtNetwork, qabstractnetworkcache.h) -QT_CLASS_LIB(QFtp, QtNetwork, qftp.h) QT_CLASS_LIB(QHttpHeader, QtNetwork, qhttpheader_p.h) QT_CLASS_LIB(QHttpResponseHeader, QtNetwork, qhttpheader_p.h) QT_CLASS_LIB(QNetworkAccessManager, QtNetwork, qnetworkaccessmanager.h) diff --git a/src/widgets/widgets/qprogressbar.cpp b/src/widgets/widgets/qprogressbar.cpp index 01837e1a4c..e731b63c66 100644 --- a/src/widgets/widgets/qprogressbar.cpp +++ b/src/widgets/widgets/qprogressbar.cpp @@ -192,9 +192,8 @@ bool QProgressBarPrivate::repaintRequired() const If minimum and maximum both are set to 0, the bar shows a busy indicator instead of a percentage of steps. This is useful, for - example, when using QFtp or QNetworkAccessManager to download - items when they are unable to determine the size of the item being - downloaded. + example, when using QNetworkAccessManager to download items when + they are unable to determine the size of the item being downloaded. \table \row \o \inlineimage macintosh-progressbar.png Screenshot of a Macintosh style progress bar diff --git a/tests/auto/network/access/access.pro b/tests/auto/network/access/access.pro index 69ed189712..1e98d3cf85 100644 --- a/tests/auto/network/access/access.pro +++ b/tests/auto/network/access/access.pro @@ -8,12 +8,11 @@ SUBDIRS=\ qhttpnetworkconnection \ qnetworkreply \ qnetworkcachemetadata \ - qftp \ qhttpnetworkreply \ qabstractnetworkcache \ !contains(QT_CONFIG, private_tests): SUBDIRS -= \ qhttpnetworkconnection \ qhttpnetworkreply \ - + qftp \ diff --git a/tests/auto/network/access/qftp/tst_qftp.cpp b/tests/auto/network/access/qftp/tst_qftp.cpp index 49e1f4b230..35abd68415 100644 --- a/tests/auto/network/access/qftp/tst_qftp.cpp +++ b/tests/auto/network/access/qftp/tst_qftp.cpp @@ -45,7 +45,7 @@ #include #include #include -#include "qftp.h" +#include "private/qftp_p.h" #include #include #include diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 6ed241175d..e2c5798c53 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -54,7 +54,9 @@ #include #include #include -#include +#include +#include +#include #include #include #include @@ -1849,23 +1851,22 @@ void tst_QNetworkReply::putToFtp() // download the file again from FTP to make sure it was uploaded // correctly - QFtp ftp; - ftp.connectToHost(url.host()); - ftp.login(); - ftp.get(url.path()); + QNetworkAccessManager qnam; + QNetworkRequest req(url); + QNetworkReply *r = qnam.get(req); - QObject::connect(&ftp, SIGNAL(done(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); + QObject::connect(r, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(10); - QObject::disconnect(&ftp, SIGNAL(done(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); + QObject::disconnect(r, SIGNAL(finished(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); - QByteArray uploaded = ftp.readAll(); + QByteArray uploaded = r->readAll(); QCOMPARE(uploaded.size(), data.size()); QCOMPARE(uploaded, data); - ftp.close(); - QObject::connect(&ftp, SIGNAL(done(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); + r->close(); + QObject::connect(r, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(10); - QObject::disconnect(&ftp, SIGNAL(done(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); + QObject::disconnect(r, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); } void tst_QNetworkReply::putToHttp_data() @@ -3901,23 +3902,22 @@ void tst_QNetworkReply::ioPutToFtpFromFile() // download the file again from FTP to make sure it was uploaded // correctly - QFtp ftp; - ftp.connectToHost(url.host()); - ftp.login(); - ftp.get(url.path()); + QNetworkAccessManager qnam; + QNetworkRequest req(url); + QNetworkReply *r = qnam.get(req); - QObject::connect(&ftp, SIGNAL(done(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); + QObject::connect(r, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(3); - QObject::disconnect(&ftp, SIGNAL(done(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); + QObject::disconnect(r, SIGNAL(finished(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); - QByteArray uploaded = ftp.readAll(); + QByteArray uploaded = r->readAll(); QCOMPARE(qint64(uploaded.size()), sourceFile.size()); QCOMPARE(uploaded, sourceFile.readAll()); - ftp.close(); - QObject::connect(&ftp, SIGNAL(done(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); + r->close(); + QObject::connect(r, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(10); - QObject::disconnect(&ftp, SIGNAL(done(bool)), &QTestEventLoop::instance(), SLOT(exitLoop())); + QObject::disconnect(r, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); } void tst_QNetworkReply::ioPutToHttpFromFile_data() -- cgit v1.2.3