示例#1
0
            /// <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();
            }
示例#2
0
            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();
            }
示例#3
0
            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();
            }
            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();
            }
            /// <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();
            }