[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kioslave/http
From:       Dawit Alemayehu <adawit () kde ! org>
Date:       2010-07-19 5:17:45
Message-ID: 20100719051746.051CAAC76B () svn ! kde ! org
[Download RAW message or body]

SVN commit 1151494 by adawit:

- Added a flag to make the immediately send buffered logic configurable in readBuffered.

- Set this newly added flag to false when calling readBuffered from readLimited to ensure that
  all available data upto the required buffer size is read before sending to the client.
  This change addresses the recent Gmail chat problem when using kdewebkit based browsers.

  See http://lists.kde.org/?t=127934729000001&r=1&w=2 for details.


 M  +8 -4      http.cpp  
 M  +1 -1      http.h  


--- trunk/KDE/kdelibs/kioslave/http/http.cpp #1151493:1151494
@@ -1975,7 +1975,7 @@
     }
 }
 
-size_t HTTPProtocol::readBuffered(char *buf, size_t size)
+size_t HTTPProtocol::readBuffered(char *buf, size_t size, bool unlimited)
 {
     size_t bytesRead = 0;
     if (!m_unreadBuf.isEmpty()) {
@@ -1987,8 +1987,11 @@
         }
         m_unreadBuf.truncate(bufSize - bytesRead);
 
-        // if we have an unread buffer, return here, since we may already have enough data to
-        // complete the response, so we don't want to wait for more.
+        // If we have an unread buffer and the size of the content returned by the
+        // server is unknown, e.g. chuncked transfer, return the bytes read here since
+        // we may already have enough data to complete the response and don't want to
+        // for more. See BR# 180631.
+        if (unlimited)
         return bytesRead;
     }
     if (bytesRead < size) {
@@ -4057,7 +4060,7 @@
   else
      bytesToReceive = m_iBytesLeft;
 
-  int bytesReceived = readBuffered(m_receiveBuf.data(), bytesToReceive);
+  const int bytesReceived = readBuffered(m_receiveBuf.data(), bytesToReceive /*, false*/);
 
   if (bytesReceived <= 0)
      return -1; // Error: connection lost
@@ -4148,6 +4151,7 @@
         m_mimeTypeBuffer.resize(0);
       }
 
+      kDebug(7013) << "Sending data of size" << d.size();
       data( d );
       if (m_request.cacheTag.ioMode == WriteToCache) {
         cacheFileWritePayload(d);
--- trunk/KDE/kdelibs/kioslave/http/http.h #1151493:1151494
@@ -501,7 +501,7 @@
   QByteArray m_unreadBuf;
   void clearUnreadBuffer();
   void unread(char *buf, size_t size);
-  size_t readBuffered(char *buf, size_t size);
+  size_t readBuffered(char *buf, size_t size, bool unlimited = true);
   bool readDelimitedText(char *buf, int *idx, int end, int numNewlines);
 };
 #endif
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic