[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdepim/kioslaves/sieve
From: Marc Mutz <Marc.Mutz () uni-bielefeld ! de>
Date: 2004-10-24 17:10:38
Message-ID: 20041024171038.934099908 () office ! kde ! org
[Download RAW message or body]
CVS commit by mutz:
From KDE_3_3_BRANCH:
BUG:76314
Patch as posted here, plus a limitation of the receive buffer to 64K
M +32 -15 sieve.cpp 1.15
--- kdepim/kioslaves/sieve/sieve.cpp #1.14:1.15
@@ -39,4 +39,5 @@ extern "C" {
#include <kurl.h>
#include <kmdcodec.h>
+#include <kglobal.h>
#include <qcstring.h>
@@ -647,23 +648,39 @@ void kio_sieveProtocol::get(const KURL&
if (receiveData() && r.getType() == kio_sieveResponse::QUANTITY) {
// determine script size
- ssize_t bufLen = r.getQuantity();
- totalSize( bufLen );
+ ssize_t total_len = r.getQuantity();
+ totalSize( total_len );
- QByteArray dat( bufLen );
- ssize_t readLen = read( dat.data(), dat.size() );
+ int recv_len = 0;
+ do {
+ // wait for data...
+ if ( !waitForResponse( 600 ) ) {
+ error( KIO::ERR_SERVER_TIMEOUT, m_sServer );
+ disconnect( true );
+ return;
+ }
- if (readLen != bufLen) {
- error(ERR_COULD_NOT_READ, i18n("Network error."));
- disconnect(true);
+ // ...read data...
+ // Only read as much as we need, otherwise we slurp in the OK that
+ // operationSuccessful() is expecting below.
+ QByteArray dat( kMin( total_len - recv_len, 64 * 1024 ) );
+ ssize_t this_recv_len = read( dat.data(), dat.size() );
+
+ if ( this_recv_len < 1 && !isConnectionValid() ) {
+ error( KIO::ERR_CONNECTION_BROKEN, m_sServer );
+ disconnect( true );
return;
}
+ dat.resize( this_recv_len );
inplace_crlf2lf( dat );
// send data to slaveinterface
- data(dat);
- processedSize(readLen);
- data(QByteArray());
+ data( dat );
+
+ recv_len += this_recv_len;
+ processedSize( recv_len );
+ } while ( recv_len < total_len );
infoMessage(i18n("Finishing up...") );
+ data(QByteArray());
if (operationSuccessful())
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic