summaryrefslogtreecommitdiff
path: root/src/AbstractCommand.h
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-01-16 16:55:41 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-01-16 16:55:41 +0900
commitea1b4b3ee533146763245ecbbb4a31e3ed791498 (patch)
tree5dfda14ff291403bcee9b24380c1e47673b8a98b /src/AbstractCommand.h
parent602a9d6ba3f8ee38c25448796ad51992f971da8c (diff)
Eliminated SocketCore::peekData() form HTTP/FTP downloads.
We introduced SocketRecvBuffer which buffers received bytes. Since HTTP response header and response body are divided with \r\n, we have to buffer up several bytes to find this delimiter. We use SocketRecvBuffer to hold these bytes and only consumes header and passes SocketRecvBuffer, which may contain head of response body, to next Command. Since FTPConnection doesn't use SocketCore::peekData(), we left it as is.
Diffstat (limited to 'src/AbstractCommand.h')
-rw-r--r--src/AbstractCommand.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/AbstractCommand.h b/src/AbstractCommand.h
index 687738b9..d612fada 100644
--- a/src/AbstractCommand.h
+++ b/src/AbstractCommand.h
@@ -56,6 +56,7 @@ class DownloadEngine;
class Segment;
class SocketCore;
class Option;
+class SocketRecvBuffer;
#ifdef ENABLE_ASYNC_DNS
class AsyncNameResolver;
#endif // ENABLE_ASYNC_DNS
@@ -70,6 +71,7 @@ private:
SharedHandle<FileEntry> fileEntry_;
DownloadEngine* e_;
SharedHandle<SocketCore> socket_;
+ SharedHandle<SocketRecvBuffer> socketRecvBuffer_;
std::vector<SharedHandle<Segment> > segments_;
#ifdef ENABLE_ASYNC_DNS
@@ -128,6 +130,11 @@ protected:
void createSocket();
+ const SharedHandle<SocketRecvBuffer>& getSocketRecvBuffer() const
+ {
+ return socketRecvBuffer_;
+ }
+
const std::vector<SharedHandle<Segment> >& getSegments() const
{
return segments_;
@@ -219,12 +226,16 @@ protected:
{
return checkPoint_;
}
+
+ void checkSocketRecvBuffer();
public:
AbstractCommand
(cuid_t cuid, const SharedHandle<Request>& req,
const SharedHandle<FileEntry>& fileEntry,
RequestGroup* requestGroup, DownloadEngine* e,
const SharedHandle<SocketCore>& s = SharedHandle<SocketCore>(),
+ const SharedHandle<SocketRecvBuffer>& socketRecvBuffer
+ = SharedHandle<SocketRecvBuffer>(),
bool incNumConnection = true);
virtual ~AbstractCommand();