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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user