HTTPBase.h revision 69d3d8a9540b0da787ea0beccad2517f057dd54d
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2011 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef HTTP_BASE_H_
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1963c4c06be44fe8bd4506e6f9f57361d31e947c21Shishir Agrawal#define HTTP_BASE_H_
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
21010bf374d8145528f8733dfa6ef101b15de23a8dAdam Lesinski#include <media/stagefright/foundation/ABase.h>
22740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen#include <media/stagefright/DataSource.h>
23ed4ca5ca2c40ed2c838aaf483fcd58abdfa0ff08Santos Cordon#include <media/stagefright/MediaErrors.h>
24740fb3bcca1366e20783dd7656d3ffe6ea3a744eNancy Chen#include <utils/threads.h>
25fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
26a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawalnamespace android {
2739daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu
28a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawalstruct HTTPBase : public DataSource {
292af2d57d578e0c3a2740628e7c6336b19961cc49Wink Saville    enum Flags {
3039daf8d6f14a01d2854352fe08d14195f7a2056bJack Yu        // Don't log any URLs.
31d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal        kFlagIncognito = 1
32d4f2bcdab5a43e6439babfd5eefeaff908b73870Shishir Agrawal    };
33a122e8df741456ea34e4a57d205411b8371a16dbShishir Agrawal
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    HTTPBase();
35aae9216320328e6b865725219a31a029ea46c1b0Sailesh Nepal
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t connect(
37767a662ecde33c3979bf02b793d392aca0403162Wink Saville            const char *uri,
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            const KeyedVector<String8, String8> *headers = NULL,
394a3084a46d80383c528198a48da5c327d7d08a00Andrew Lee            off64_t offset = 0) = 0;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void disconnect() = 0;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Returns true if bandwidth could successfully be estimated,
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // false otherwise.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual bool estimateBandwidth(int32_t *bandwidth_bps);
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t getEstimatedBandwidthKbps(int32_t *kbps);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t setBandwidthStatCollectFreq(int32_t freqMs);
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void setBandwidthHistorySize(size_t numHistoryItems);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void RegisterSocketUserTag(int sockfd, uid_t uid, uint32_t kTag);
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void UnRegisterSocketUserTag(int sockfd);
5516a16899505ec0a9ede5b76650bfb8817b3227c7Svet Ganov
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void RegisterSocketUserMark(int sockfd, uid_t uid);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static void UnRegisterSocketUserMark(int sockfd);
58f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual String8 toString() {
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mName;
614d396052deb54399cbadbeb8abd873df6f3af342Jeff Brown    }
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected:
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void addBandwidthMeasurement(size_t numBytes, int64_t delayUs);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    String8 mName;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
68fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    struct BandwidthEntry {
69fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        int64_t mDelayUs;
70fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville        size_t mNumBytes;
71fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    };
7263f03dd94c43c22f2c77306059b5748e5e1e0e3cWink Saville
73fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville    Mutex mLock;
74fb40dd4d00bd3361b2535bc866e6c21eadc52558Wink Saville
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    List<BandwidthEntry> mBandwidthHistory;
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t mNumBandwidthHistoryItems;
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int64_t mTotalTransferTimeUs;
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t mTotalTransferBytes;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t mMaxBandwidthHistoryItems;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    enum {
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        kMinBandwidthCollectFreqMs = 1000,   // 1 second
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        kMaxBandwidthCollectFreqMs = 60000,  // one minute
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int64_t mPrevBandwidthMeasureTimeUs;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t mPrevEstimatedBandWidthKbps;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t mBandWidthCollectFreqMs;
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DISALLOW_EVIL_CONSTRUCTORS(HTTPBase);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
9205e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville
9305e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville}  // namespace android
9405e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville
9505e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville#endif  // HTTP_BASE_H_
9605e6dde3a0b9ba1eb3d13d511fe2e27a0d10c851Wink Saville