/// <summary> /// This test case is added to demonstrate the risk of handing a byte array to a constructor. /// A ctor can only return a single object even if the byte array it is given may contain more /// than one object. /// This violates OO as the caller is burdened with having to now about what should be a feature /// of using the class it is calling. /// </summary> public static void BackToBackRtspMessages() { System.Console.Clear(); Console.WriteLine("TestProcessFrameData Case3(): Two back to back RTSP Responses"); Console.WriteLine("Correct output would be 2 'ProcessInterleaveData():...' detailing RTSP responses CSeq 34 and 35:"); Console.WriteLine(""); TestFramework tf = new TestFramework(); Media.Rtsp.RtspMessage keepAlive = new Media.Rtsp.RtspMessage(Media.Rtsp.RtspMessageType.Response); keepAlive.RtspStatusCode = Media.Rtsp.RtspStatusCode.OK; keepAlive.CSeq = 34; keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Session, "A9B8C7D6"); keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Date, DateTime.Now.ToUniversalTime().ToString("r")); byte[] buffer = keepAlive.Prepare().ToArray(); tf.Send(buffer); keepAlive = new Media.Rtsp.RtspMessage(Media.Rtsp.RtspMessageType.Response); keepAlive.RtspStatusCode = Media.Rtsp.RtspStatusCode.OK; keepAlive.CSeq = 35; keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Session, "A9B8C7D6"); keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Date, DateTime.Now.ToUniversalTime().ToString("r")); buffer = keepAlive.Prepare().ToArray(); tf.Send(buffer); // Kick of the processing eventually ending up in RtpClient.ProcessFrameData() tf.HaveRtpClientWorkerThreadProcessSocketData(); }
private static void Issue17245_Case2(int breakingPaketLength) { int sequenceNumber = 0x3030; // "00" System.Console.Clear(); Console.WriteLine("TestProcessFrameData Issue17245_Case2(): Interleaved RTSPResponse"); Console.WriteLine("breakingPaketLength = " + breakingPaketLength); Console.WriteLine("Correct output is 3 rows saying 'ProcessRtpPacket()...', 1 yellow row, and finaly a single row 'ProcessRtpPacket()...':"); Console.WriteLine(""); TestFramework tf = new TestFramework(); //Console.WriteLine(line + sequenceNumber); byte[] buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p1 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p1.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); //Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p2 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p2.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); //Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(breakingPaketLength); Media.Rtp.RtpPacket p3 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p3.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); Media.Rtsp.RtspMessage keepAlive = new Media.Rtsp.RtspMessage(Media.Rtsp.RtspMessageType.Response); keepAlive.RtspStatusCode = Media.Rtsp.RtspStatusCode.OK; keepAlive.CSeq = 34; keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Session, "A9B8C7D6"); keepAlive.SetHeader(Media.Rtsp.RtspHeaders.UserAgent, "Testing $UserAgent $009\r\n$\0:\0"); keepAlive.SetHeader("Ignore", "$UserAgent $009\r\n$\0\0\aRTSP/1.0"); keepAlive.SetHeader("$", string.Empty); keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Date, DateTime.Now.ToUniversalTime().ToString("r")); buffer = keepAlive.Prepare().ToArray(); tf.Send(buffer); //Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p4 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p4.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); // Kick of the processing eventually ending up in RtpClient.ProcessFrameData() tf.HaveRtpClientWorkerThreadProcessSocketData(); }
private static void Issue17245_Case1(int breakingPaketLength) { int sequenceNumber = 0x3030; // "00" string line = "Case1(): SequenceNumber = "; System.Console.Clear(); Console.WriteLine("TestProcessFrameData Issue17245_Case1(): Discarding of Encapsulating Frame Header"); Console.WriteLine("breakingPaketLength = " + breakingPaketLength); Console.WriteLine("Correct output is 5 rows saying 'Case1()...' and 5 rows 'ProcessRtpPacket()...'"); Console.WriteLine("No yellow rows!!!"); Console.WriteLine(""); TestFramework tf = new TestFramework(); Console.WriteLine(line + sequenceNumber); byte[] buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p1 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p1.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p2 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p2.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(breakingPaketLength); // Length 1245 to 1247 looses packets and it does not recover Media.Rtp.RtpPacket p3 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p3.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p4 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p4.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p5 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p5.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); // Kick of the processing eventually ending up in RtpClient.ProcessFrameData() tf.HaveRtpClientWorkerThreadProcessSocketData(); }
private static void Issue17245_Case2(int breakingPaketLength) { int sequenceNumber = 0x3030; // "00" System.Console.Clear(); Console.WriteLine("TestProcessFrameData Issue17245_Case2(): Interleaved RTSPResponse"); Console.WriteLine("breakingPaketLength = " + breakingPaketLength); Console.WriteLine("Correct output is 3 rows saying 'ProcessRtpPacket()...', 1 yellow row, and finaly a single row 'ProcessRtpPacket()...':"); Console.WriteLine(""); TestFramework tf = new TestFramework(); //Console.WriteLine(line + sequenceNumber); byte[] buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p1 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p1.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); //Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p2 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p2.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); //Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(breakingPaketLength); Media.Rtp.RtpPacket p3 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p3.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); Media.Rtsp.RtspMessage keepAlive = new Media.Rtsp.RtspMessage(Media.Rtsp.RtspMessageType.Response); keepAlive.StatusCode = Media.Rtsp.RtspStatusCode.OK; keepAlive.CSeq = 34; keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Session, "A9B8C7D6"); keepAlive.SetHeader(Media.Rtsp.RtspHeaders.UserAgent, "Testing $UserAgent $009\r\n$\0:\0"); keepAlive.SetHeader("Ignore", "$UserAgent $009\r\n$\0\0\aRTSP/1.0"); keepAlive.SetHeader("$", string.Empty); keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Date, DateTime.Now.ToUniversalTime().ToString("r")); buffer = keepAlive.Prepare().ToArray(); tf.Send(buffer); //Console.WriteLine(line + sequenceNumber); buffer = GeneratePayload(1400); Media.Rtp.RtpPacket p4 = new Media.Rtp.RtpPacket(2, false, false, false, 0, 0, _senderSSRC, sequenceNumber++, _timeStamp, buffer); buffer = p4.Prepare().ToArray(); tf.Send(GenerateEncapsulatingHeader(buffer.Length)); tf.Send(buffer); // Kick of the processing eventually ending up in RtpClient.ProcessFrameData() tf.HaveRtpClientWorkerThreadProcessSocketData(); }
/// <summary> /// This test case is added to demonstrate the risk of handing a byte array to a constructor. /// A ctor can only return a single object even if the byte array it is given may contain more /// than one object. /// This violates OO as the caller is burdened with having to now about what should be a feature /// of using the class it is calling. /// </summary> public static void BackToBackRtspMessages() { System.Console.Clear(); Console.WriteLine("TestProcessFrameData Case3(): Two back to back RTSP Responses"); Console.WriteLine("Correct output would be 2 'ProcessInterleaveData():...' detailing RTSP responses CSeq 34 and 35:"); Console.WriteLine(""); TestFramework tf = new TestFramework(); Media.Rtsp.RtspMessage keepAlive = new Media.Rtsp.RtspMessage(Media.Rtsp.RtspMessageType.Response); keepAlive.StatusCode = Media.Rtsp.RtspStatusCode.OK; keepAlive.CSeq = 34; keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Session, "A9B8C7D6"); keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Date, DateTime.Now.ToUniversalTime().ToString("r")); byte[] buffer = keepAlive.Prepare().ToArray(); tf.Send(buffer); keepAlive = new Media.Rtsp.RtspMessage(Media.Rtsp.RtspMessageType.Response); keepAlive.StatusCode = Media.Rtsp.RtspStatusCode.OK; keepAlive.CSeq = 35; keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Session, "A9B8C7D6"); keepAlive.SetHeader(Media.Rtsp.RtspHeaders.Date, DateTime.Now.ToUniversalTime().ToString("r")); buffer = keepAlive.Prepare().ToArray(); tf.Send(buffer); // Kick of the processing eventually ending up in RtpClient.ProcessFrameData() tf.HaveRtpClientWorkerThreadProcessSocketData(); }