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