Added close socket and clean buffer to Downloader URIReader and InputHLS

This commit is contained in:
Katri 2022-06-13 15:52:43 +00:00 committed by Thulinma
parent 503a9591c9
commit 12246581e6
3 changed files with 22 additions and 0 deletions

View file

@ -87,6 +87,7 @@ namespace HTTP{
if (!proxied || needSSL){ if (!proxied || needSSL){
if (!getSocket() || link.host != connectedHost || link.getPort() != connectedPort || needSSL != ssl){ if (!getSocket() || link.host != connectedHost || link.getPort() != connectedPort || needSSL != ssl){
getSocket().close(); getSocket().close();
getSocket().Received().clear();
connectedHost = link.host; connectedHost = link.host;
connectedPort = link.getPort(); connectedPort = link.getPort();
#ifdef SSL #ifdef SSL
@ -102,6 +103,7 @@ namespace HTTP{
}else{ }else{
if (!getSocket() || proxyUrl.host != connectedHost || proxyUrl.getPort() != connectedPort || needSSL != ssl){ if (!getSocket() || proxyUrl.host != connectedHost || proxyUrl.getPort() != connectedPort || needSSL != ssl){
getSocket().close(); getSocket().close();
getSocket().Received().clear();
connectedHost = proxyUrl.host; connectedHost = proxyUrl.host;
connectedPort = proxyUrl.getPort(); connectedPort = proxyUrl.getPort();
getSocket().open(connectedHost, connectedPort, true); getSocket().open(connectedHost, connectedPort, true);
@ -195,6 +197,16 @@ namespace HTTP{
// Data! Check if we can parse it... // Data! Check if we can parse it...
if (H.Read(getSocket())){ if (H.Read(getSocket())){
H.headerOnly = false; H.headerOnly = false;
// If the return status code is invalid, close the socket, wipe all buffers, and return false
if(!getStatusCode()){
H.headerOnly = false;
getSocket().close();
getSocket().Received().clear();
H.Clean();
return false;
}
if (shouldContinue()){ if (shouldContinue()){
if (maxRecursiveDepth == 0){ if (maxRecursiveDepth == 0){
FAIL_MSG("Maximum recursion depth reached"); FAIL_MSG("Maximum recursion depth reached");

View file

@ -107,6 +107,9 @@ namespace HTTP{
if (!downer.head(myURI) || !downer.isOk()){ if (!downer.head(myURI) || !downer.isOk()){
FAIL_MSG("Error getting URI info for '%s': %" PRIu32 " %s", myURI.getUrl().c_str(), FAIL_MSG("Error getting URI info for '%s': %" PRIu32 " %s", myURI.getUrl().c_str(),
downer.getStatusCode(), downer.getStatusText().c_str()); downer.getStatusCode(), downer.getStatusText().c_str());
// Close the socket, and clean up the buffer
downer.getSocket().close();
downer.getSocket().Received().clear();
if (!downer.isOk()){return false;} if (!downer.isOk()){return false;}
supportRangeRequest = false; supportRangeRequest = false;
totalSize = std::string::npos; totalSize = std::string::npos;
@ -256,6 +259,8 @@ namespace HTTP{
void URIReader::close(){ void URIReader::close(){
// Close downloader socket if open // Close downloader socket if open
downer.getSocket().close(); downer.getSocket().close();
downer.getSocket().Received().clear();
downer.getHTTP().Clean();
// Unmap file if mapped // Unmap file if mapped
if (mapped){ if (mapped){
munmap(mapped, totalSize); munmap(mapped, totalSize);

View file

@ -679,6 +679,11 @@ namespace Mist{
break; // we have all tracks discovered, next playlist! break; // we have all tracks discovered, next playlist!
} }
}while (!segDowner.atEnd()); }while (!segDowner.atEnd());
if (!segDowner.atEnd()){
segDowner.close();
tsStream.clear();
}
if (prepidCounter < pidCounter){break;}// We're done reading this playlist! if (prepidCounter < pidCounter){break;}// We're done reading this playlist!
} }
} }