xref: /haiku/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp (revision 617b62c9d90f72c084a294d82203559d29b1aba4)
1*617b62c9SDario Casalinuovo /*
2*617b62c9SDario Casalinuovo  * Copyright 2016, Dario Casalinuovo
3*617b62c9SDario Casalinuovo  * Distributed under the terms of the MIT License.
4*617b62c9SDario Casalinuovo  */
5*617b62c9SDario Casalinuovo 
6*617b62c9SDario Casalinuovo 
7*617b62c9SDario Casalinuovo #include "HTTPMediaIO.h"
8*617b62c9SDario Casalinuovo 
9*617b62c9SDario Casalinuovo 
10*617b62c9SDario Casalinuovo HTTPMediaIO::HTTPMediaIO(BUrl* url)
11*617b62c9SDario Casalinuovo 	:
12*617b62c9SDario Casalinuovo 	fContext(),
13*617b62c9SDario Casalinuovo 	fBuffer(),
14*617b62c9SDario Casalinuovo 	fInitErr(B_ERROR)
15*617b62c9SDario Casalinuovo {
16*617b62c9SDario Casalinuovo 	fContext->AcquireReference();
17*617b62c9SDario Casalinuovo 
18*617b62c9SDario Casalinuovo 	fReq = new BHttpRequest(*url);
19*617b62c9SDario Casalinuovo 	fReq->SetContext(fContext);
20*617b62c9SDario Casalinuovo 	fReq->Run();
21*617b62c9SDario Casalinuovo 	fReq->AdoptInputData(fBuffer);
22*617b62c9SDario Casalinuovo 
23*617b62c9SDario Casalinuovo 	if (!fReq->IsRunning())
24*617b62c9SDario Casalinuovo 		return;
25*617b62c9SDario Casalinuovo 
26*617b62c9SDario Casalinuovo 	fInitErr = _IntegrityCheck();
27*617b62c9SDario Casalinuovo }
28*617b62c9SDario Casalinuovo 
29*617b62c9SDario Casalinuovo 
30*617b62c9SDario Casalinuovo HTTPMediaIO::~HTTPMediaIO()
31*617b62c9SDario Casalinuovo {
32*617b62c9SDario Casalinuovo 	fContext->ReleaseReference();
33*617b62c9SDario Casalinuovo 	delete fContext;
34*617b62c9SDario Casalinuovo 	delete fReq;
35*617b62c9SDario Casalinuovo }
36*617b62c9SDario Casalinuovo 
37*617b62c9SDario Casalinuovo 
38*617b62c9SDario Casalinuovo status_t
39*617b62c9SDario Casalinuovo HTTPMediaIO::InitCheck() const
40*617b62c9SDario Casalinuovo {
41*617b62c9SDario Casalinuovo 	return fInitErr;
42*617b62c9SDario Casalinuovo }
43*617b62c9SDario Casalinuovo 
44*617b62c9SDario Casalinuovo 
45*617b62c9SDario Casalinuovo ssize_t
46*617b62c9SDario Casalinuovo HTTPMediaIO::ReadAt(off_t position, void* buffer, size_t size)
47*617b62c9SDario Casalinuovo {
48*617b62c9SDario Casalinuovo 	return fBuffer->ReadAt(position, buffer, size);
49*617b62c9SDario Casalinuovo }
50*617b62c9SDario Casalinuovo 
51*617b62c9SDario Casalinuovo 
52*617b62c9SDario Casalinuovo ssize_t
53*617b62c9SDario Casalinuovo HTTPMediaIO::WriteAt(off_t position, const void* buffer, size_t size)
54*617b62c9SDario Casalinuovo {
55*617b62c9SDario Casalinuovo 	return B_NOT_SUPPORTED;
56*617b62c9SDario Casalinuovo }
57*617b62c9SDario Casalinuovo 
58*617b62c9SDario Casalinuovo 
59*617b62c9SDario Casalinuovo off_t
60*617b62c9SDario Casalinuovo HTTPMediaIO::Seek(off_t position, uint32 seekMode)
61*617b62c9SDario Casalinuovo {
62*617b62c9SDario Casalinuovo 	return fBuffer->Seek(position, seekMode);
63*617b62c9SDario Casalinuovo }
64*617b62c9SDario Casalinuovo 
65*617b62c9SDario Casalinuovo off_t
66*617b62c9SDario Casalinuovo HTTPMediaIO::Position() const
67*617b62c9SDario Casalinuovo {
68*617b62c9SDario Casalinuovo 	return fBuffer->Position();
69*617b62c9SDario Casalinuovo }
70*617b62c9SDario Casalinuovo 
71*617b62c9SDario Casalinuovo 
72*617b62c9SDario Casalinuovo status_t
73*617b62c9SDario Casalinuovo HTTPMediaIO::SetSize(off_t size)
74*617b62c9SDario Casalinuovo {
75*617b62c9SDario Casalinuovo 	return B_NOT_SUPPORTED;
76*617b62c9SDario Casalinuovo }
77*617b62c9SDario Casalinuovo 
78*617b62c9SDario Casalinuovo 
79*617b62c9SDario Casalinuovo status_t
80*617b62c9SDario Casalinuovo HTTPMediaIO::GetSize(off_t* size) const
81*617b62c9SDario Casalinuovo {
82*617b62c9SDario Casalinuovo 	return B_NOT_SUPPORTED;
83*617b62c9SDario Casalinuovo }
84*617b62c9SDario Casalinuovo 
85*617b62c9SDario Casalinuovo 
86*617b62c9SDario Casalinuovo bool
87*617b62c9SDario Casalinuovo HTTPMediaIO::IsSeekable() const
88*617b62c9SDario Casalinuovo {
89*617b62c9SDario Casalinuovo 	return false;
90*617b62c9SDario Casalinuovo }
91*617b62c9SDario Casalinuovo 
92*617b62c9SDario Casalinuovo 
93*617b62c9SDario Casalinuovo bool
94*617b62c9SDario Casalinuovo HTTPMediaIO::IsEndless() const
95*617b62c9SDario Casalinuovo {
96*617b62c9SDario Casalinuovo 	return true;
97*617b62c9SDario Casalinuovo }
98*617b62c9SDario Casalinuovo 
99*617b62c9SDario Casalinuovo 
100*617b62c9SDario Casalinuovo status_t
101*617b62c9SDario Casalinuovo HTTPMediaIO::_IntegrityCheck()
102*617b62c9SDario Casalinuovo {
103*617b62c9SDario Casalinuovo 	const BHttpResult& r = dynamic_cast<const BHttpResult&>(fReq->Result());
104*617b62c9SDario Casalinuovo 	if (r.StatusCode() != 200)
105*617b62c9SDario Casalinuovo 		return B_ERROR;
106*617b62c9SDario Casalinuovo 
107*617b62c9SDario Casalinuovo 	if (BString("OK")!=  r.StatusText())
108*617b62c9SDario Casalinuovo 		return B_ERROR;
109*617b62c9SDario Casalinuovo 
110*617b62c9SDario Casalinuovo 	return B_OK;
111*617b62c9SDario Casalinuovo }
112