HTTPMediaIO: Implement SetSize and GetSize

* SetSize requests are denied where GetSize return the request
lengths. Note that flags are changed accordingly.
This commit is contained in:
Dario Casalinuovo
2016-06-23 00:38:33 +02:00
parent bcab157e9d
commit f1c771f8d1
2 changed files with 28 additions and 2 deletions
@@ -19,7 +19,8 @@ public:
: :
BUrlProtocolAsynchronousListener(true), BUrlProtocolAsynchronousListener(true),
fRequest(NULL), fRequest(NULL),
fAdapterIO(owner) fAdapterIO(owner),
fTotalSize(0)
{ {
fInputAdapter = fAdapterIO->BuildInputAdapter(); fInputAdapter = fAdapterIO->BuildInputAdapter();
} }
@@ -39,6 +40,7 @@ public:
fRequest->Stop(); fRequest->Stop();
fRequest = request; fRequest = request;
fTotalSize = request->Result().Length();
} }
void DataReceived(BUrlRequest* request, const char* data, void DataReceived(BUrlRequest* request, const char* data,
@@ -62,17 +64,23 @@ public:
delete request; delete request;
} }
off_t TotalSize() const
{
return fTotalSize;
}
private: private:
BUrlRequest* fRequest; BUrlRequest* fRequest;
BAdapterIO* fAdapterIO; BAdapterIO* fAdapterIO;
BInputAdapter* fInputAdapter; BInputAdapter* fInputAdapter;
off_t fTotalSize;
}; };
HTTPMediaIO::HTTPMediaIO(BUrl* url) HTTPMediaIO::HTTPMediaIO(BUrl* url)
: :
BAdapterIO( BAdapterIO(
B_MEDIA_STREAMING | B_MEDIA_MUTABLE_SIZE | B_MEDIA_SEEK_BACKWARD, B_MEDIA_STREAMING | B_MEDIA_SEEK_BACKWARD,
B_INFINITE_TIMEOUT), B_INFINITE_TIMEOUT),
fInitErr(B_OK) fInitErr(B_OK)
{ {
@@ -110,3 +118,18 @@ HTTPMediaIO::WriteAt(off_t position, const void* buffer, size_t size)
{ {
return B_NOT_SUPPORTED; 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;
}
@@ -25,6 +25,9 @@ public:
virtual ssize_t WriteAt(off_t position, virtual ssize_t WriteAt(off_t position,
const void* buffer, size_t size); const void* buffer, size_t size);
virtual status_t SetSize(off_t size);
virtual status_t GetSize(off_t* size) const;
private: private:
BUrlContext* fContext; BUrlContext* fContext;
BUrlRequest* fReq; BUrlRequest* fReq;