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