diff --git a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp index b80597a4a9..4afad9756b 100644 --- a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp +++ b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp @@ -19,7 +19,8 @@ public: : BUrlProtocolAsynchronousListener(true), fRequest(NULL), - fAdapterIO(owner) + fAdapterIO(owner), + fTotalSize(0) { fInputAdapter = fAdapterIO->BuildInputAdapter(); } @@ -39,6 +40,7 @@ public: fRequest->Stop(); fRequest = request; + fTotalSize = request->Result().Length(); } void DataReceived(BUrlRequest* request, const char* data, @@ -62,17 +64,23 @@ public: delete request; } + off_t TotalSize() const + { + return fTotalSize; + } + private: BUrlRequest* fRequest; BAdapterIO* fAdapterIO; BInputAdapter* fInputAdapter; + off_t fTotalSize; }; HTTPMediaIO::HTTPMediaIO(BUrl* url) : BAdapterIO( - B_MEDIA_STREAMING | B_MEDIA_MUTABLE_SIZE | B_MEDIA_SEEK_BACKWARD, + B_MEDIA_STREAMING | B_MEDIA_SEEK_BACKWARD, B_INFINITE_TIMEOUT), fInitErr(B_OK) { @@ -110,3 +118,18 @@ HTTPMediaIO::WriteAt(off_t position, const void* buffer, size_t size) { return B_NOT_SUPPORTED; } + + +status_t +HTTPMediaIO::SetSize(off_t size) +{ + return B_NOT_SUPPORTED; +} + + +status_t +HTTPMediaIO::GetSize(off_t* size) const +{ + *size = fListener->TotalSize(); + return B_OK; +} diff --git a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h index a8fe049dd7..e68ff1c63e 100644 --- a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h +++ b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h @@ -25,6 +25,9 @@ public: virtual ssize_t WriteAt(off_t position, const void* buffer, size_t size); + virtual status_t SetSize(off_t size); + virtual status_t GetSize(off_t* size) const; + private: BUrlContext* fContext; BUrlRequest* fReq;