11b86fe063badb5f28c467ade39be0f4008688947Andreas Huber/*
21b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * Copyright (C) 2013 The Android Open Source Project
31b86fe063badb5f28c467ade39be0f4008688947Andreas Huber *
41b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
51b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * you may not use this file except in compliance with the License.
61b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * You may obtain a copy of the License at
71b86fe063badb5f28c467ade39be0f4008688947Andreas Huber *
81b86fe063badb5f28c467ade39be0f4008688947Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
91b86fe063badb5f28c467ade39be0f4008688947Andreas Huber *
101b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * Unless required by applicable law or agreed to in writing, software
111b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
121b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * See the License for the specific language governing permissions and
141b86fe063badb5f28c467ade39be0f4008688947Andreas Huber * limitations under the License.
151b86fe063badb5f28c467ade39be0f4008688947Andreas Huber */
161b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
171b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#ifndef MEDIA_HTTP_H_
181b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
191b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#define MEDIA_HTTP_H_
201b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
211b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include <media/stagefright/foundation/AString.h>
221b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
231b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#include "include/HTTPBase.h"
241b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
251b86fe063badb5f28c467ade39be0f4008688947Andreas Hubernamespace android {
261b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
271b86fe063badb5f28c467ade39be0f4008688947Andreas Huberstruct IMediaHTTPConnection;
281b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
291b86fe063badb5f28c467ade39be0f4008688947Andreas Huberstruct MediaHTTP : public HTTPBase {
301b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    MediaHTTP(const sp<IMediaHTTPConnection> &conn);
311b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
321b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual status_t connect(
331b86fe063badb5f28c467ade39be0f4008688947Andreas Huber            const char *uri,
341b86fe063badb5f28c467ade39be0f4008688947Andreas Huber            const KeyedVector<String8, String8> *headers,
351b86fe063badb5f28c467ade39be0f4008688947Andreas Huber            off64_t offset);
361b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
371b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual void disconnect();
381b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
391b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual status_t initCheck() const;
401b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
411b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual ssize_t readAt(off64_t offset, void *data, size_t size);
421b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
431b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual status_t getSize(off64_t *size);
441b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
451b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual uint32_t flags();
461b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
471b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual status_t reconnectAtOffset(off64_t offset);
481b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
491b86fe063badb5f28c467ade39be0f4008688947Andreas Huberprotected:
501b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual ~MediaHTTP();
511b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
521b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual sp<DecryptHandle> DrmInitialization(const char* mime);
531b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual void getDrmInfo(sp<DecryptHandle> &handle, DrmManagerClient **client);
541b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual String8 getUri();
551b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    virtual String8 getMIMEType() const;
561b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
571b86fe063badb5f28c467ade39be0f4008688947Andreas Huberprivate:
581b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    status_t mInitCheck;
591b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    sp<IMediaHTTPConnection> mHTTPConnection;
601b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
611b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    KeyedVector<String8, String8> mLastHeaders;
621b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    AString mLastURI;
631b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
641b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    bool mCachedSizeValid;
651b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    off64_t mCachedSize;
661b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
671b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    sp<DecryptHandle> mDecryptHandle;
681b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    DrmManagerClient *mDrmManagerClient;
691b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
701b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    void clearDRMState_l();
711b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
721b86fe063badb5f28c467ade39be0f4008688947Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(MediaHTTP);
731b86fe063badb5f28c467ade39be0f4008688947Andreas Huber};
741b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
751b86fe063badb5f28c467ade39be0f4008688947Andreas Huber}  // namespace android
761b86fe063badb5f28c467ade39be0f4008688947Andreas Huber
771b86fe063badb5f28c467ade39be0f4008688947Andreas Huber#endif  // MEDIA_HTTP_H_
78