Skip to content

Commit

Permalink
HTTPMediaIO: Implement SetSize and GetSize
Browse files Browse the repository at this point in the history
* SetSize requests are denied where GetSize return the request
lengths. Note that flags are changed accordingly.
  • Loading branch information
Numerio committed Jun 22, 2016
1 parent bcab157 commit f1c771f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
27 changes: 25 additions & 2 deletions src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ class FileListener : public BUrlProtocolAsynchronousListener
:
BUrlProtocolAsynchronousListener(true),
fRequest(NULL),
fAdapterIO(owner)
fAdapterIO(owner),
fTotalSize(0)
{
fInputAdapter = fAdapterIO->BuildInputAdapter();
}
Expand All @@ -39,6 +40,7 @@ class FileListener : public BUrlProtocolAsynchronousListener
fRequest->Stop();

fRequest = request;
fTotalSize = request->Result().Length();
}

void DataReceived(BUrlRequest* request, const char* data,
Expand All @@ -62,17 +64,23 @@ class FileListener : public BUrlProtocolAsynchronousListener
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)
{
Expand Down Expand Up @@ -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;
}
3 changes: 3 additions & 0 deletions src/add-ons/media/plugins/http_streamer/HTTPMediaIO.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ class HTTPMediaIO : public BAdapterIO {
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;
Expand Down

0 comments on commit f1c771f

Please sign in to comment.