HTTPBase.h revision a93fd2be99d21629bed504b9b7df035fc2f54562
180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright (C) 2011 The Android Open Source Project 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Licensed under the Apache License, Version 2.0 (the "License"); 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * you may not use this file except in compliance with the License. 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * You may obtain a copy of the License at 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * http://www.apache.org/licenses/LICENSE-2.0 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Unless required by applicable law or agreed to in writing, software 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * distributed under the License is distributed on an "AS IS" BASIS, 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * See the License for the specific language governing permissions and 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * limitations under the License. 1558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef HTTP_BASE_H_ 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define HTTP_BASE_H_ 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include <media/stagefright/foundation/ABase.h> 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include <media/stagefright/DataSource.h> 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include <media/stagefright/MediaErrors.h> 247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include <utils/threads.h> 2558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 2658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergernamespace android { 27363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger 28d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerstruct HTTPBase : public DataSource { 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru enum Flags { 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // Don't log any URLs. 3158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kFlagIncognito = 1 3258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger }; 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru HTTPBase(); 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual status_t connect( 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char *uri, 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const KeyedVector<String8, String8> *headers = NULL, 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru off64_t offset = 0) = 0; 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual void disconnect() = 0; 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // Returns true if bandwidth could successfully be estimated, 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // false otherwise. 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual bool estimateBandwidth(int32_t *bandwidth_bps); 4658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 4758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual status_t getEstimatedBandwidthKbps(int32_t *kbps); 4858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 4958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual status_t setBandwidthStatCollectFreq(int32_t freqMs); 5058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 5158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual void setBandwidthHistorySize(size_t numHistoryItems); 5258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 5358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static void RegisterSocketUserTag(int sockfd, uid_t uid, uint32_t kTag); 5458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static void UnRegisterSocketUserTag(int sockfd); 5558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 5658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static void RegisterSocketUserMark(int sockfd, uid_t uid); 5758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static void UnRegisterSocketUserMark(int sockfd); 5858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 5958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprotected: 6058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual void addBandwidthMeasurement(size_t numBytes, int64_t delayUs); 6158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 6258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate: 6358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger struct BandwidthEntry { 6458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger int64_t mDelayUs; 6558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger size_t mNumBytes; 6658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger }; 6758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 6858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger Mutex mLock; 6958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 7058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger List<BandwidthEntry> mBandwidthHistory; 7158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger size_t mNumBandwidthHistoryItems; 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int64_t mTotalTransferTimeUs; 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru size_t mTotalTransferBytes; 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru size_t mMaxBandwidthHistoryItems; 75d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru enum { 7758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kMinBandwidthCollectFreqMs = 1000, // 1 second 7858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kMaxBandwidthCollectFreqMs = 60000, // one minute 7958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger }; 8058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int64_t mPrevBandwidthMeasureTimeUs; 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int32_t mPrevEstimatedBandWidthKbps; 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int32_t mBandWidthCollectFreqMs; 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru DISALLOW_EVIL_CONSTRUCTORS(HTTPBase); 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} // namespace android 897839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 907839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#endif // HTTP_BASE_H_ 917839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger