11156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber/* 21156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * Copyright (C) 2011 The Android Open Source Project 31156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * 41156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * you may not use this file except in compliance with the License. 61156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * You may obtain a copy of the License at 71156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * 81156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * 101156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * Unless required by applicable law or agreed to in writing, software 111156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * See the License for the specific language governing permissions and 141156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber * limitations under the License. 151156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber */ 161156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 171156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber#ifndef CHROME_HTTP_DATA_SOURCE_H_ 181156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 191156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber#define CHROME_HTTP_DATA_SOURCE_H_ 201156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 211156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber#include <media/stagefright/foundation/AString.h> 221156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber#include <utils/threads.h> 231156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 241156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber#include "HTTPBase.h" 251156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 261156dc913a5ba7b2bc86489468d4914430f03d14Andreas Hubernamespace android { 271156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 281156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huberstruct SfDelegate; 291156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 301156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huberstruct ChromiumHTTPDataSource : public HTTPBase { 311156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber ChromiumHTTPDataSource(uint32_t flags = 0); 321156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 331156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber virtual status_t connect( 341156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber const char *uri, 351156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber const KeyedVector<String8, String8> *headers = NULL, 361156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber off64_t offset = 0); 371156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 381156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber virtual void disconnect(); 391156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 401156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber virtual status_t initCheck() const; 411156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 421156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber virtual ssize_t readAt(off64_t offset, void *data, size_t size); 431156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber virtual status_t getSize(off64_t *size); 441156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber virtual uint32_t flags(); 451156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 469d2f386dd2885eaffa11fd494ae258bb09fe6397James Dong virtual sp<DecryptHandle> DrmInitialization(const char *mime); 471156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 48b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang virtual void getDrmInfo(sp<DecryptHandle> &handle, DrmManagerClient **client); 491156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 501156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber virtual String8 getUri(); 511156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 526511c9755c3a3360ba869772600c7aae048a7ffcAndreas Huber virtual String8 getMIMEType() const; 536511c9755c3a3360ba869772600c7aae048a7ffcAndreas Huber 540683eba6b35c396c21f10e926709f2f8fc05f090Andreas Huber virtual status_t reconnectAtOffset(off64_t offset); 550683eba6b35c396c21f10e926709f2f8fc05f090Andreas Huber 56b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber static status_t UpdateProxyConfig( 57b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber const char *host, int32_t port, const char *exclusionList); 58b7319a7eb0a06ef4fd3a0c9157ee63e637ad7aa1Andreas Huber 591156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huberprotected: 601156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber virtual ~ChromiumHTTPDataSource(); 611156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 621156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huberprivate: 631156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber friend struct SfDelegate; 641156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 651156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber enum State { 661156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber DISCONNECTED, 671156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber CONNECTING, 681156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber CONNECTED, 691156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber READING, 701156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber DISCONNECTING 711156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber }; 721156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 731156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber const uint32_t mFlags; 741156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 751156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber mutable Mutex mLock; 761156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber Condition mCondition; 771156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 781156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber State mState; 791156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 801156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber SfDelegate *mDelegate; 811156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 821156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber AString mURI; 831156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber KeyedVector<String8, String8> mHeaders; 841156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 851156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber off64_t mCurrentOffset; 861156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 871156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber // Any connection error or the result of a read operation 881156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber // (for the lattter this is the number of bytes read, if successful). 891156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber ssize_t mIOResult; 901156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 911156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber int64_t mContentSize; 921156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 936511c9755c3a3360ba869772600c7aae048a7ffcAndreas Huber String8 mContentType; 946511c9755c3a3360ba869772600c7aae048a7ffcAndreas Huber 95b5ce361d19e69fe156f7188c9ee0f4734b259874Gloria Wang sp<DecryptHandle> mDecryptHandle; 961156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber DrmManagerClient *mDrmManagerClient; 971156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 981156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber void disconnect_l(); 991156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 1001156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber status_t connect_l( 1011156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber const char *uri, 1021156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber const KeyedVector<String8, String8> *headers, 1031156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber off64_t offset); 1041156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 1051156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber static void InitiateRead( 1061156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber ChromiumHTTPDataSource *me, void *data, size_t size); 1071156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 1081156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber void initiateRead(void *data, size_t size); 1091156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 1106511c9755c3a3360ba869772600c7aae048a7ffcAndreas Huber void onConnectionEstablished( 1116511c9755c3a3360ba869772600c7aae048a7ffcAndreas Huber int64_t contentSize, const char *contentType); 1126511c9755c3a3360ba869772600c7aae048a7ffcAndreas Huber 1131156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber void onConnectionFailed(status_t err); 1141156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber void onReadCompleted(ssize_t size); 1151156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber void onDisconnectComplete(); 1161156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 1171156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber void clearDRMState_l(); 1181156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 1191156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(ChromiumHTTPDataSource); 1201156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber}; 1211156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 1221156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber} // namespace android 1231156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber 1241156dc913a5ba7b2bc86489468d4914430f03d14Andreas Huber#endif // CHROME_HTTP_DATA_SOURCE_H_ 125