Fixed multiple responses on errors
This commit is contained in:
		
							parent
							
								
									dc0cd0d451
								
							
						
					
					
						commit
						dc9d8c8097
					
				
					 3 changed files with 40 additions and 1 deletions
				
			
		|  | @ -55,12 +55,13 @@ namespace Mist{ | |||
| 
 | ||||
|   void HTTPOutput::onFail(const std::string &msg, bool critical){ | ||||
|     INFO_MSG("Failing '%s': %s", H.url.c_str(), msg.c_str()); | ||||
|     if (!webSock && !isRecording()){ | ||||
|     if (!webSock && !isRecording() && !responded){ | ||||
|       H.Clean(); // make sure no parts of old requests are left in any buffers
 | ||||
|       H.SetHeader("Server", APPIDENT); | ||||
|       H.setCORSHeaders(); | ||||
|       H.SetBody("Could not retrieve stream: " + msg); | ||||
|       H.SendResponse("404", "Error opening stream", myConn); | ||||
|       responded = true; | ||||
|     } | ||||
|     Output::onFail(msg, critical); | ||||
|   } | ||||
|  | @ -292,6 +293,7 @@ namespace Mist{ | |||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|       responded = false; | ||||
|       preHTTP(); | ||||
|       onHTTP(); | ||||
|       idleLast = Util::bootMS(); | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ namespace Mist{ | |||
| 
 | ||||
|   protected: | ||||
|     bool firstRun; | ||||
|     bool responded; | ||||
|     HTTP::Parser H; | ||||
|     HTTP::Websocket *webSock; | ||||
|     uint32_t idleInterval; | ||||
|  |  | |||
|  | @ -63,6 +63,10 @@ namespace Mist{ | |||
|   bool OutHTTP::listenMode(){return !(config->getString("ip").size());} | ||||
| 
 | ||||
|   void OutHTTP::onFail(const std::string &msg, bool critical){ | ||||
|     if (responded){ | ||||
|       HTTPOutput::onFail(msg, critical); | ||||
|       return; | ||||
|     } | ||||
|     std::string method = H.method; | ||||
|     // send logo icon
 | ||||
|     if (H.url.length() > 4 && H.url.substr(H.url.length() - 4, 4) == ".ico"){ | ||||
|  | @ -92,10 +96,12 @@ namespace Mist{ | |||
|       H.setCORSHeaders(); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|       H.SendResponse("200", "Stream not found", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -379,6 +385,7 @@ namespace Mist{ | |||
|     H.setCORSHeaders(); | ||||
|     if (method == "OPTIONS" || method == "HEAD"){ | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -406,10 +413,12 @@ namespace Mist{ | |||
|           uAgent.find("OS 15") == std::string::npos && uAgent.find("OS 16") == std::string::npos){ | ||||
|         H.SetHeader("Location", hlsUrl); | ||||
|         H.SendResponse("307", "HLS redirect", myConn); | ||||
|         responded = true; | ||||
|         return; | ||||
|       } | ||||
|     } | ||||
|     H.SendResponse("200", "OK", myConn); | ||||
|     responded = true; | ||||
|   } | ||||
| 
 | ||||
|   JSON::Value OutHTTP::getStatusJSON(std::string &reqHost, const std::string &useragent){ | ||||
|  | @ -601,6 +610,7 @@ namespace Mist{ | |||
|           H.setCORSHeaders(); | ||||
|           H.SetBody(it->asStringRef().substr(cbToken.size() + 1)); | ||||
|           H.SendResponse("200", "OK", myConn); | ||||
|           responded = true; | ||||
|           H.Clean(); | ||||
|           return; | ||||
|         } | ||||
|  | @ -611,6 +621,7 @@ namespace Mist{ | |||
|       H.setCORSHeaders(); | ||||
|       H.SetBody("No matching validation found for token '" + cbToken + "'"); | ||||
|       H.SendResponse("404", "Not found", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -622,6 +633,7 @@ namespace Mist{ | |||
|       H.setCORSHeaders(); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|  | @ -630,6 +642,7 @@ namespace Mist{ | |||
|                 "cross-domain-policy.dtd\"><cross-domain-policy><allow-access-from domain=\"*\" " | ||||
|                 "/><site-control permitted-cross-domain-policies=\"all\"/></cross-domain-policy>"); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     }// crossdomain.xml
 | ||||
|  | @ -641,6 +654,7 @@ namespace Mist{ | |||
|       H.setCORSHeaders(); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|  | @ -651,6 +665,7 @@ namespace Mist{ | |||
|           "uri=\"*\"/></allow-from><grant-to><resource path=\"/\" " | ||||
|           "include-subpaths=\"true\"/></grant-to></policy></cross-domain-access></access-policy>"); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     }// clientaccesspolicy.xml
 | ||||
|  | @ -661,6 +676,7 @@ namespace Mist{ | |||
|       H.SetHeader("Server", APPIDENT); | ||||
|       H.SetBody((const char *)FlashMediaPlayback_101_swf, FlashMediaPlayback_101_swf_len); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       return; | ||||
|     } | ||||
|     if (H.url == "/oldflashplayer.swf"){ | ||||
|  | @ -669,6 +685,7 @@ namespace Mist{ | |||
|       H.SetHeader("Server", APPIDENT); | ||||
|       H.SetBody((const char *)FlashMediaPlayback_swf, FlashMediaPlayback_swf_len); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       return; | ||||
|     } | ||||
|     // send logo icon
 | ||||
|  | @ -725,12 +742,14 @@ namespace Mist{ | |||
|       H.setCORSHeaders(); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|       H.SetBody("<smil>\n  <head>\n    <meta base='rtmp://" + reqHost + ":" + port + url_rel + | ||||
|                 "' />\n  </head>\n  <body>\n    <switch>\n" + trackSources + "    </switch>\n  </body>\n</smil>"); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -754,6 +773,7 @@ namespace Mist{ | |||
|       } | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|  | @ -766,6 +786,7 @@ namespace Mist{ | |||
|       } | ||||
|       H.SetBody(response); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     }// embed code generator
 | ||||
|  | @ -790,6 +811,7 @@ namespace Mist{ | |||
|       H.SetHeader("Content-Type", "application/javascript; charset=utf-8"); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|  | @ -850,6 +872,7 @@ namespace Mist{ | |||
| 
 | ||||
|       H.SetBody(response); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -863,6 +886,7 @@ namespace Mist{ | |||
|       H.SetHeader("Content-Type", "text/css"); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|  | @ -879,12 +903,14 @@ namespace Mist{ | |||
|       }else{ | ||||
|         H.SetBody("Unknown stylesheet: " + url); | ||||
|         H.SendResponse("404", "Unknown stylesheet", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
|       H.SetBody(response); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -896,6 +922,7 @@ namespace Mist{ | |||
|       H.SetHeader("Content-Type", "application/javascript"); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|  | @ -905,6 +932,7 @@ namespace Mist{ | |||
| 
 | ||||
|       H.SetBody(response); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -916,6 +944,7 @@ namespace Mist{ | |||
|       H.SetHeader("Content-Type", "application/javascript"); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|  | @ -927,6 +956,7 @@ namespace Mist{ | |||
| 
 | ||||
|       H.SetBody(response); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -938,6 +968,7 @@ namespace Mist{ | |||
|       H.SetHeader("Content-Type", "application/javascript"); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|  | @ -947,6 +978,7 @@ namespace Mist{ | |||
| 
 | ||||
|       H.SetBody(response); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -981,11 +1013,13 @@ namespace Mist{ | |||
|       H.setCORSHeaders(); | ||||
|       if (method == "OPTIONS" || method == "HEAD"){ | ||||
|         H.SendResponse("200", "OK", myConn); | ||||
|         responded = true; | ||||
|         H.Clean(); | ||||
|         return; | ||||
|       } | ||||
|       H.SetBody("Yup"); | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|  | @ -998,10 +1032,12 @@ namespace Mist{ | |||
|     H.setCORSHeaders(); | ||||
|     if (method == "OPTIONS" || method == "HEAD"){ | ||||
|       H.SendResponse("200", "OK", myConn); | ||||
|       responded = true; | ||||
|       H.Clean(); | ||||
|       return; | ||||
|     } | ||||
|     H.SendResponse("200", "OK", myConn); | ||||
|     responded = true; | ||||
|     myConn.SendNow((const char *)icon_data, icon_len); | ||||
|     H.Clean(); | ||||
|   } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thulinma
						Thulinma