summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2011-02-03 16:41:34 -0800
committerLorenzo Colitti <lorenzo@google.com>2011-03-08 15:01:15 -0800
commit0ef631528fa7a2f061aea2bdd68ef734ed626b87 (patch)
treecef02f58235fab716efc3bbd704d898317546117 /media
parent7528e58daa21c43dd937d06b130a033f31c99604 (diff)
downloadframeworks_av-0ef631528fa7a2f061aea2bdd68ef734ed626b87.zip
frameworks_av-0ef631528fa7a2f061aea2bdd68ef734ed626b87.tar.gz
frameworks_av-0ef631528fa7a2f061aea2bdd68ef734ed626b87.tar.bz2
Support IPv6->IPv4 fallback in HTTP streaming.
Bug: 4068057 Change-Id: I425f65a99eb9e0986d9e9c0e264c3c8f61fcfdbd
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/HTTPStream.cpp38
1 files changed, 24 insertions, 14 deletions
diff --git a/media/libstagefright/HTTPStream.cpp b/media/libstagefright/HTTPStream.cpp
index adb6d01..4ad1c12 100644
--- a/media/libstagefright/HTTPStream.cpp
+++ b/media/libstagefright/HTTPStream.cpp
@@ -150,31 +150,41 @@ status_t HTTPStream::connect(const char *server, int port) {
}
CHECK_EQ(mSocket, -1);
- mSocket = socket(ai[0].ai_family, ai[0].ai_socktype, ai[0].ai_protocol);
- if (mSocket < 0) {
- freeaddrinfo(ai);
- return UNKNOWN_ERROR;
- }
+ mState = CONNECTING;
+ status_t res = -1;
+ struct addrinfo *tmp;
+ for (tmp = ai; tmp; tmp = tmp->ai_next) {
+ mSocket = socket(tmp->ai_family, tmp->ai_socktype, tmp->ai_protocol);
+ if (mSocket < 0) {
+ continue;
+ }
- setReceiveTimeout(30); // Time out reads after 30 secs by default
+ setReceiveTimeout(30); // Time out reads after 30 secs by default.
- mState = CONNECTING;
+ int s = mSocket;
- int s = mSocket;
+ mLock.unlock();
- mLock.unlock();
+ res = MyConnect(s, tmp->ai_addr, tmp->ai_addrlen);
- status_t res = MyConnect(s, ai[0].ai_addr, ai[0].ai_addrlen);
+ mLock.lock();
- freeaddrinfo(ai);
+ if (mState != CONNECTING) {
+ close(s);
+ freeaddrinfo(ai);
+ return UNKNOWN_ERROR;
+ }
- mLock.lock();
+ if (res == OK) {
+ break;
+ }
- if (mState != CONNECTING) {
- return UNKNOWN_ERROR;
+ close(s);
}
+ freeaddrinfo(ai);
+
if (res != OK) {
close(mSocket);
mSocket = -1;