diff options
author | Andreas Huber <andih@google.com> | 2010-05-12 09:24:35 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-05-12 09:24:35 -0700 |
commit | d974b80fe10235a4d8f8efe689d1569da944db77 (patch) | |
tree | f6a3ad28b0136cd520f196f1e5fd0739f410cfb0 /media | |
parent | e21aa3b154204e9b0945dc14ad32f3361680d185 (diff) | |
parent | 1d0e5599e286e21e36fe9953f8840a434e4ecaf9 (diff) | |
download | frameworks_base-d974b80fe10235a4d8f8efe689d1569da944db77.zip frameworks_base-d974b80fe10235a4d8f8efe689d1569da944db77.tar.gz frameworks_base-d974b80fe10235a4d8f8efe689d1569da944db77.tar.bz2 |
am 1d0e5599: am 11777d6f: am b003ad17: am e0dc80f8: Merge "Support for customizable socket-read timeouts through the HTTP response." into froyo
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/HTTPDataSource.cpp | 17 | ||||
-rw-r--r-- | media/libstagefright/HTTPStream.cpp | 17 | ||||
-rw-r--r-- | media/libstagefright/include/HTTPStream.h | 3 |
3 files changed, 33 insertions, 4 deletions
diff --git a/media/libstagefright/HTTPDataSource.cpp b/media/libstagefright/HTTPDataSource.cpp index 8e26c37e..f72a6cc 100644 --- a/media/libstagefright/HTTPDataSource.cpp +++ b/media/libstagefright/HTTPDataSource.cpp @@ -84,6 +84,7 @@ status_t HTTPDataSource::connectWithRedirectsAndRange(off_t rangeStart) { } if (httpStatus >= 200 && httpStatus < 300) { + applyTimeoutResponse(); return OK; } @@ -133,6 +134,22 @@ status_t HTTPDataSource::connectWithRedirectsAndRange(off_t rangeStart) { return ERROR_IO; } +void HTTPDataSource::applyTimeoutResponse() { + string timeout; + if (mHttp->find_header_value("X-SocketTimeout", &timeout)) { + const char *s = timeout.c_str(); + char *end; + long tmp = strtol(s, &end, 10); + if (end == s || *end != '\0') { + LOGW("Illegal X-SocketTimeout value given."); + return; + } + + LOGI("overriding default timeout, new timeout is %ld seconds", tmp); + mHttp->setReceiveTimeout(tmp); + } +} + HTTPDataSource::HTTPDataSource( const char *uri, const KeyedVector<String8, String8> *headers) { CHECK(!strncasecmp("http://", uri, 7)); diff --git a/media/libstagefright/HTTPStream.cpp b/media/libstagefright/HTTPStream.cpp index 6145ec2..9c99866 100644 --- a/media/libstagefright/HTTPStream.cpp +++ b/media/libstagefright/HTTPStream.cpp @@ -68,10 +68,7 @@ status_t HTTPStream::connect(const char *server, int port) { return UNKNOWN_ERROR; } - struct timeval tv; - tv.tv_usec = 0; - tv.tv_sec = 5; - CHECK_EQ(0, setsockopt(mSocket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))); + setReceiveTimeout(5); // Time out reads after 5 secs by default mState = CONNECTING; @@ -329,5 +326,17 @@ bool HTTPStream::find_header_value(const string &key, string *value) const { return true; } +void HTTPStream::setReceiveTimeout(int seconds) { + if (seconds < 0) { + // Disable the timeout. + seconds = 0; + } + + struct timeval tv; + tv.tv_usec = 0; + tv.tv_sec = seconds; + CHECK_EQ(0, setsockopt(mSocket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))); +} + } // namespace android diff --git a/media/libstagefright/include/HTTPStream.h b/media/libstagefright/include/HTTPStream.h index 5d638f3..35b0865 100644 --- a/media/libstagefright/include/HTTPStream.h +++ b/media/libstagefright/include/HTTPStream.h @@ -52,6 +52,9 @@ public: bool find_header_value( const string &key, string *value) const; + // Pass a negative value to disable the timeout. + void setReceiveTimeout(int seconds); + private: enum State { READY, |