summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Goetz <Markus.Goetz@nokia.com>2010-03-15 14:26:41 (GMT)
committerMarkus Goetz <Markus.Goetz@nokia.com>2010-03-16 08:31:04 (GMT)
commitdd6c5cad88a56fb3a342fe9d4fc3b113ffe3fd53 (patch)
treed2a9d7c6762b883c16b8fb42389a4620cbd8d817
parent6f814d58036867a28333770bd55f5fe49bb9ac82 (diff)
downloadQt-dd6c5cad88a56fb3a342fe9d4fc3b113ffe3fd53.zip
Qt-dd6c5cad88a56fb3a342fe9d4fc3b113ffe3fd53.tar.gz
Qt-dd6c5cad88a56fb3a342fe9d4fc3b113ffe3fd53.tar.bz2
QNetworkReply: Fix canReadLine()
Reviewed-by: Peter Hartmann
-rw-r--r--src/corelib/tools/qbytedata_p.h7
-rw-r--r--src/network/access/qnetworkreplyimpl.cpp7
-rw-r--r--src/network/access/qnetworkreplyimpl_p.h3
-rw-r--r--tests/auto/qnetworkreply/tst_qnetworkreply.cpp17
4 files changed, 33 insertions, 1 deletions
diff --git a/src/corelib/tools/qbytedata_p.h b/src/corelib/tools/qbytedata_p.h
index 9aad6a9..c48bb33 100644
--- a/src/corelib/tools/qbytedata_p.h
+++ b/src/corelib/tools/qbytedata_p.h
@@ -206,6 +206,13 @@ public:
{
return buffers[i];
}
+
+ inline bool canReadLine() const {
+ for (int i = 0; i < buffers.length(); i++)
+ if (buffers.at(i).contains('\n'))
+ return true;
+ return false;
+ }
};
QT_END_NAMESPACE
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp
index 162cff1..8505a41 100644
--- a/src/network/access/qnetworkreplyimpl.cpp
+++ b/src/network/access/qnetworkreplyimpl.cpp
@@ -723,6 +723,13 @@ void QNetworkReplyImpl::close()
d->finished();
}
+bool QNetworkReplyImpl::canReadLine () const
+{
+ Q_D(const QNetworkReplyImpl);
+ return QNetworkReply::canReadLine() || d->readBuffer.canReadLine();
+}
+
+
/*!
Returns the number of bytes available for reading with
QIODevice::read(). The number of bytes available may grow until
diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h
index fdcfa33..6045ef4 100644
--- a/src/network/access/qnetworkreplyimpl_p.h
+++ b/src/network/access/qnetworkreplyimpl_p.h
@@ -77,10 +77,11 @@ public:
~QNetworkReplyImpl();
virtual void abort();
- // reimplemented from QNetworkReply
+ // reimplemented from QNetworkReply / QIODevice
virtual void close();
virtual qint64 bytesAvailable() const;
virtual void setReadBufferSize(qint64 size);
+ virtual bool canReadLine () const;
virtual qint64 readData(char *data, qint64 maxlen);
virtual bool event(QEvent *);
diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
index cafeef0..76e69c5 100644
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
@@ -237,6 +237,8 @@ private Q_SLOTS:
void lastModifiedHeaderForFile();
void lastModifiedHeaderForHttp();
+ void httpCanReadLine();
+
void rateControl_data();
void rateControl();
@@ -3315,6 +3317,21 @@ void tst_QNetworkReply::lastModifiedHeaderForHttp()
QCOMPARE(header, realDate);
}
+void tst_QNetworkReply::httpCanReadLine()
+{
+ QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/rfc3252.txt"));
+ QNetworkReplyPtr reply = manager.get(request);
+
+ connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QTestEventLoop::instance().enterLoop(10);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+
+ QVERIFY(reply->canReadLine());
+ QVERIFY(!reply->readAll().isEmpty());
+ QVERIFY(!reply->canReadLine());
+}
+
void tst_QNetworkReply::rateControl_data()
{
QTest::addColumn<int>("rate");