X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=xbmc%2Ffilesystem%2FCurlFile.cpp;h=4808465c1dfc9e7e7712f03a9e11bb3d7784e615;hb=f92a074a74a570f52e546ba4f28d9346bf8ddd31;hp=1d9ec922299d1aba2575229c45e1a35e2bc45b13;hpb=d9b86270ed9be4531a2fc16db1315ee3615cbc53;p=vuplus_xbmc diff --git a/xbmc/filesystem/CurlFile.cpp b/xbmc/filesystem/CurlFile.cpp index 1d9ec92..4808465 100644 --- a/xbmc/filesystem/CurlFile.cpp +++ b/xbmc/filesystem/CurlFile.cpp @@ -394,7 +394,7 @@ CCurlFile::CCurlFile() m_username = ""; m_password = ""; m_httpauth = ""; - m_cipherlist = "DEFAULT"; + m_cipherlist = ""; m_proxytype = PROXY_HTTP; m_state = new CReadState(); m_oldState = NULL; @@ -608,7 +608,8 @@ void CCurlFile::SetCommonOptions(CReadState* state) g_curlInterface.easy_setopt(h, CURLOPT_IGNORE_CONTENT_LENGTH, 1); // Setup allowed TLS/SSL ciphers. New versions of cURL may deprecate things that are still in use. - g_curlInterface.easy_setopt(h, CURLOPT_SSL_CIPHER_LIST, m_cipherlist.c_str()); + if (!m_cipherlist.empty()) + g_curlInterface.easy_setopt(h, CURLOPT_SSL_CIPHER_LIST, m_cipherlist.c_str()); } void CCurlFile::SetRequestHeaders(CReadState* state) @@ -744,8 +745,6 @@ void CCurlFile::ParseAndCorrectUrl(CURL &url2) url2.GetProtocolOptions(options); if (options.size() > 0) { - // clear protocol options - url2.SetProtocolOptions(""); // set xbmc headers for(std::map::const_iterator it = options.begin(); it != options.end(); ++it) { @@ -781,6 +780,9 @@ void CCurlFile::ParseAndCorrectUrl(CURL &url2) } } } + + // Unset the protocol options to have an url without protocol options + url2.SetProtocolOptions(""); if (m_username.length() > 0 && m_password.length() > 0) m_url = url2.GetWithoutUserDetails(); @@ -1132,6 +1134,10 @@ bool CCurlFile::Exists(const CURL& url) int64_t CCurlFile::Seek(int64_t iFilePosition, int iWhence) { int64_t nextPos = m_state->m_filePos; + + if(!m_seekable) + return -1; + switch(iWhence) { case SEEK_SET: @@ -1156,28 +1162,31 @@ int64_t CCurlFile::Seek(int64_t iFilePosition, int iWhence) if(m_state->Seek(nextPos)) return nextPos; - if (m_oldState && m_oldState->Seek(nextPos)) + if (m_multisession) { - CReadState *tmp = m_state; - m_state = m_oldState; - m_oldState = tmp; - return nextPos; - } - - if(!m_seekable) - return -1; - - CReadState* oldstate = NULL; - if(m_multisession) - { - CURL url(m_url); - oldstate = m_oldState; - m_oldState = m_state; - m_state = new CReadState(); - - g_curlInterface.easy_aquire(url.GetProtocol(), url.GetHostName(), &m_state->m_easyHandle, &m_state->m_multiHandle ); - - m_state->m_fileSize = m_oldState->m_fileSize; + if (!m_oldState) + { + CURL url(m_url); + m_oldState = m_state; + m_state = new CReadState(); + m_state->m_fileSize = m_oldState->m_fileSize; + g_curlInterface.easy_aquire(url.GetProtocol(), + url.GetHostName(), + &m_state->m_easyHandle, + &m_state->m_multiHandle ); + } + else + { + CReadState *tmp; + tmp = m_state; + m_state = m_oldState; + m_oldState = tmp; + + if (m_state->Seek(nextPos)) + return nextPos; + + m_state->Disconnect(); + } } else m_state->Disconnect(); @@ -1194,18 +1203,26 @@ int64_t CCurlFile::Seek(int64_t iFilePosition, int iWhence) long response = m_state->Connect(m_bufferSize); if(response < 0 && (m_state->m_fileSize == 0 || m_state->m_fileSize != m_state->m_filePos)) { - m_seekable = false; - if(m_multisession && m_oldState) + if(m_multisession) { - delete m_state; - m_state = m_oldState; - m_oldState = oldstate; + if (m_oldState) + { + delete m_state; + m_state = m_oldState; + m_oldState = NULL; + } + // Retry without mutlisession + m_multisession = false; + return Seek(iFilePosition, iWhence); } - return -1; + else + { + m_seekable = false; + return -1; + } } SetCorrectHeaders(m_state); - delete oldstate; return m_state->m_filePos; }