Socket library and Config library restructuring, improvement to UDP socket reliability
This commit is contained in:
		
							parent
							
								
									97752f2c2d
								
							
						
					
					
						commit
						3d26741148
					
				
					 37 changed files with 151 additions and 110 deletions
				
			
		|  | @ -80,7 +80,7 @@ namespace Mist{ | |||
|     // If we have a streamname option, set internal streamname to that option
 | ||||
|     if (!streamName.size() && config->hasOption("streamname")){ | ||||
|       streamName = config->getString("streamname"); | ||||
|       Util::Config::streamName = streamName; | ||||
|       Util::streamName = streamName; | ||||
|     } | ||||
| 
 | ||||
|     /*LTS-START*/ | ||||
|  | @ -321,7 +321,7 @@ namespace Mist{ | |||
|         JSON::Value strCnf = Util::getStreamConfig(streamName); | ||||
|         if (strCnf && strCnf["fallback_stream"].asStringRef().size()){ | ||||
|           streamName = strCnf["fallback_stream"].asStringRef(); | ||||
|           Util::Config::streamName = streamName; | ||||
|           Util::streamName = streamName; | ||||
|           INFO_MSG("Switching to configured fallback stream '%s'", streamName.c_str()); | ||||
|           reconnect(); | ||||
|           return; | ||||
|  | @ -352,7 +352,7 @@ namespace Mist{ | |||
|                  newStrm.c_str()); | ||||
|         std::string origStream = streamName; | ||||
|         streamName = newStrm; | ||||
|         Util::Config::streamName = streamName; | ||||
|         Util::streamName = streamName; | ||||
|         if (!Util::startInput(streamName, "", true, isPushing())){ | ||||
|           onFail("Stream open failed (fallback stream for '" + origStream + "')", true); | ||||
|           return; | ||||
|  |  | |||
|  | @ -223,7 +223,7 @@ namespace Mist{ | |||
|   void OutDTSC::handlePlay(DTSC::Scan &dScan){ | ||||
|     streamName = dScan.getMember("stream").asString(); | ||||
|     Util::sanitizeName(streamName); | ||||
|     Util::Config::streamName = streamName; | ||||
|     Util::streamName = streamName; | ||||
|     parseData = true; | ||||
|     INFO_MSG("Handled play for stream %s", streamName.c_str()); | ||||
|     setBlocking(false); | ||||
|  | @ -233,7 +233,7 @@ namespace Mist{ | |||
|     streamName = dScan.getMember("stream").asString(); | ||||
|     std::string passString = dScan.getMember("password").asString(); | ||||
|     Util::sanitizeName(streamName); | ||||
|     Util::Config::streamName = streamName; | ||||
|     Util::streamName = streamName; | ||||
|     if (!allowPush(passString)){ | ||||
|       onFail("Push not allowed - stream and/or password incorrect", true); | ||||
|       return; | ||||
|  |  | |||
|  | @ -397,7 +397,7 @@ namespace Mist{ | |||
|     int argnum = 0; | ||||
|     argarr[argnum++] = (char *)tmparg.c_str(); | ||||
|     std::string temphost = getConnectedHost(); | ||||
|     std::string debuglevel = JSON::Value(Util::Config::printDebugLevel).asString(); | ||||
|     std::string debuglevel = JSON::Value(Util::printDebugLevel).asString(); | ||||
|     argarr[argnum++] = (char *)"--ip"; | ||||
|     argarr[argnum++] = (char *)(temphost.c_str()); | ||||
|     argarr[argnum++] = (char *)"--stream"; | ||||
|  | @ -405,7 +405,7 @@ namespace Mist{ | |||
|     argarr[argnum++] = (char *)"--prequest"; | ||||
|     argarr[argnum++] = (char *)(tmpPrequest.c_str()); | ||||
|     // set the debug level if non-default
 | ||||
|     if (Util::Config::printDebugLevel != DEBUG){ | ||||
|     if (Util::printDebugLevel != DEBUG){ | ||||
|       argarr[argnum++] = (char *)"--debug"; | ||||
|       argarr[argnum++] = (char *)(debuglevel.c_str()); | ||||
|     } | ||||
|  |  | |||
|  | @ -441,7 +441,7 @@ namespace Mist{ | |||
|             INFO_MSG("Falling back to default stream '%s' -> '%s'", defStrm.c_str(), newStrm.c_str()); | ||||
|             origStreamName = streamName; | ||||
|             streamName = newStrm; | ||||
|             Util::Config::streamName = streamName; | ||||
|             Util::streamName = streamName; | ||||
|             reconnect(); | ||||
|             return getStatusJSON(reqHost, useragent); | ||||
|           } | ||||
|  |  | |||
|  | @ -216,7 +216,7 @@ namespace Mist{ | |||
|     char ffcmd[256]; | ||||
|     ffcmd[255] = 0; // ensure there is an ending null byte
 | ||||
|     snprintf(ffcmd, 255, "ffmpeg %s -f h264 -i - %s -vframes 1 -f mjpeg -", | ||||
|              (Util::Config::printDebugLevel >= DLVL_MEDIUM ? "" : "-v quiet"), | ||||
|              (Util::printDebugLevel >= DLVL_MEDIUM ? "" : "-v quiet"), | ||||
|              config->getString("ffopts").c_str()); | ||||
| 
 | ||||
|     HIGH_MSG("Starting JPG command: %s", ffcmd); | ||||
|  |  | |||
|  | @ -828,11 +828,11 @@ namespace Mist{ | |||
|         if (streamName.find('?') != std::string::npos){ | ||||
|           std::string tmpVars = streamName.substr(streamName.find('?') + 1); | ||||
|           streamName = streamName.substr(0, streamName.find('?')); | ||||
|           Util::Config::streamName = streamName; | ||||
|           Util::streamName = streamName; | ||||
|           HTTP::parseVars(tmpVars, targetParams); | ||||
|         } | ||||
| 
 | ||||
|         Util::Config::streamName = streamName; | ||||
|         Util::streamName = streamName; | ||||
|         reqUrl += "/" + streamName; // LTS
 | ||||
| 
 | ||||
|         /*LTS-START*/ | ||||
|  | @ -850,17 +850,17 @@ namespace Mist{ | |||
|           size_t lSlash = newUrl.rfind('/'); | ||||
|           if (lSlash != std::string::npos){ | ||||
|             streamName = newUrl.substr(lSlash + 1); | ||||
|             Util::Config::streamName = streamName; | ||||
|             Util::streamName = streamName; | ||||
|           }else{ | ||||
|             streamName = newUrl; | ||||
|             Util::Config::streamName = streamName; | ||||
|             Util::streamName = streamName; | ||||
|           } | ||||
|         } | ||||
|         /*LTS-END*/ | ||||
| 
 | ||||
|         if (streamName.find('/')){ | ||||
|           streamName = streamName.substr(0, streamName.find('/')); | ||||
|           Util::Config::streamName = streamName; | ||||
|           Util::streamName = streamName; | ||||
|         } | ||||
| 
 | ||||
|         size_t colonPos = streamName.find(':'); | ||||
|  | @ -871,7 +871,7 @@ namespace Mist{ | |||
|           }else{ | ||||
|             streamName = oldName.substr(colonPos + 1) + std::string(".") + oldName.substr(0, colonPos); | ||||
|           } | ||||
|           Util::Config::streamName = streamName; | ||||
|           Util::streamName = streamName; | ||||
|         } | ||||
| 
 | ||||
|         Util::sanitizeName(streamName); | ||||
|  | @ -922,14 +922,14 @@ namespace Mist{ | |||
|       int8_t playMessageType = messageType; | ||||
|       int32_t playStreamId = streamId; | ||||
|       streamName = Encodings::URL::decode(amfData.getContentP(3)->StrValue()); | ||||
|       Util::Config::streamName = streamName; | ||||
|       Util::streamName = streamName; | ||||
|       reqUrl += "/" + streamName; // LTS
 | ||||
| 
 | ||||
|       // handle variables
 | ||||
|       if (streamName.find('?') != std::string::npos){ | ||||
|         std::string tmpVars = streamName.substr(streamName.find('?') + 1); | ||||
|         streamName = streamName.substr(0, streamName.find('?')); | ||||
|         Util::Config::streamName = streamName; | ||||
|         Util::streamName = streamName; | ||||
|         HTTP::parseVars(tmpVars, targetParams); | ||||
|       } | ||||
| 
 | ||||
|  | @ -941,7 +941,7 @@ namespace Mist{ | |||
|         }else{ | ||||
|           streamName = oldName.substr(colonPos + 1) + std::string(".") + oldName.substr(0, colonPos); | ||||
|         } | ||||
|         Util::Config::streamName = streamName; | ||||
|         Util::streamName = streamName; | ||||
|       } | ||||
|       Util::sanitizeName(streamName); | ||||
| 
 | ||||
|  |  | |||
|  | @ -485,8 +485,8 @@ namespace Mist{ | |||
|           continue; | ||||
|         } | ||||
|         lastRecv = Util::bootSecs(); // prevent disconnect of idle TCP connection when using UDP
 | ||||
|         myConn.addDown(s.data_len); | ||||
|         RTP::Packet pack(s.data, s.data_len); | ||||
|         myConn.addDown(s.data.size()); | ||||
|         RTP::Packet pack(s.data, s.data.size()); | ||||
|         if (!it->second.theirSSRC){it->second.theirSSRC = pack.getSSRC();} | ||||
|         it->second.sorter.addPacket(pack); | ||||
|       } | ||||
|  |  | |||
|  | @ -910,7 +910,7 @@ namespace Mist{ | |||
|     bool hadPack = false; | ||||
|     while (udp.Receive()){ | ||||
|       hadPack = true; | ||||
|       myConn.addDown(udp.data_len); | ||||
|       myConn.addDown(udp.data.size()); | ||||
| 
 | ||||
|       uint8_t fb = (uint8_t)udp.data[0]; | ||||
| 
 | ||||
|  | @ -936,7 +936,7 @@ namespace Mist{ | |||
| 
 | ||||
|     size_t nparsed = 0; | ||||
|     StunMessage stun_msg; | ||||
|     if (stunReader.parse((uint8_t *)udp.data, udp.data_len, nparsed, stun_msg) != 0){ | ||||
|     if (stunReader.parse((uint8_t *)(char*)udp.data, udp.data.size(), nparsed, stun_msg) != 0){ | ||||
|       FAIL_MSG("Failed to parse a stun message."); | ||||
|       return; | ||||
|     } | ||||
|  | @ -1006,7 +1006,7 @@ namespace Mist{ | |||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     if (dtlsHandshake.parse((const uint8_t *)udp.data, udp.data_len) != 0){ | ||||
|     if (dtlsHandshake.parse((const uint8_t *)(const char*)udp.data, udp.data.size()) != 0){ | ||||
|       FAIL_MSG("Failed to parse a DTLS packet."); | ||||
|       return; | ||||
|     } | ||||
|  | @ -1049,7 +1049,7 @@ namespace Mist{ | |||
| 
 | ||||
|     if ((pt < 64) || (pt >= 96)){ | ||||
| 
 | ||||
|       RTP::Packet rtp_pkt((const char *)udp.data, (unsigned int)udp.data_len); | ||||
|       RTP::Packet rtp_pkt((const char *)udp.data, (unsigned int)udp.data.size()); | ||||
|       uint16_t currSeqNum = rtp_pkt.getSequence(); | ||||
| 
 | ||||
|       size_t idx = M.trackIDToIndex(rtp_pkt.getPayloadType(), getpid()); | ||||
|  | @ -1071,8 +1071,8 @@ namespace Mist{ | |||
|       WebRTCTrack &rtcTrack = webrtcTracks[idx]; | ||||
| 
 | ||||
|       // Decrypt the SRTP to RTP
 | ||||
|       int len = (int)udp.data_len; | ||||
|       if (srtpReader.unprotectRtp((uint8_t *)udp.data, &len) != 0){ | ||||
|       int len = udp.data.size(); | ||||
|       if (srtpReader.unprotectRtp((uint8_t *)(char*)udp.data, &len) != 0){ | ||||
|         if (packetLog.is_open()){packetLog << "[" << Util::bootMS() << "]" << "RTP decrypt failure" << std::endl;} | ||||
|         FAIL_MSG("Failed to unprotect a RTP packet."); | ||||
|         return; | ||||
|  | @ -1102,8 +1102,8 @@ namespace Mist{ | |||
| 
 | ||||
|     }else{ | ||||
|       //Decrypt feedback packet
 | ||||
|       int len = udp.data_len; | ||||
|       if (srtpReader.unprotectRtcp((uint8_t *)udp.data, &len) != 0){ | ||||
|       int len = udp.data.size(); | ||||
|       if (srtpReader.unprotectRtcp((uint8_t *)(char*)udp.data, &len) != 0){ | ||||
|         if (packetLog.is_open()){packetLog << "[" << Util::bootMS() << "]" << "RTCP decrypt failure" << std::endl;} | ||||
|         FAIL_MSG("Failed to unprotect RTCP."); | ||||
|         return; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thulinma
						Thulinma