def test_srtp_unprotect_error(self): transport1, transport2 = dummy_ice_transport_pair() certificate1 = RTCCertificate.generateCertificate() session1 = RTCDtlsTransport(transport1, [certificate1]) receiver1 = DummyRtpReceiver() session1._register_rtp_receiver( receiver1, RTCRtpReceiveParameters( codecs=[ RTCRtpCodecParameters( mimeType="audio/PCMU", clockRate=8000, payloadType=0 ) ], encodings=[RTCRtpDecodingParameters(ssrc=1831097322, payloadType=0)], ), ) certificate2 = RTCCertificate.generateCertificate() session2 = RTCDtlsTransport(transport2, [certificate2]) receiver2 = DummyRtpReceiver() session2._register_rtp_receiver( receiver2, RTCRtpReceiveParameters( codecs=[ RTCRtpCodecParameters( mimeType="audio/PCMU", clockRate=8000, payloadType=0 ) ], encodings=[RTCRtpDecodingParameters(ssrc=4028317929, payloadType=0)], ), ) run( asyncio.gather( session1.start(session2.getLocalParameters()), session2.start(session1.getLocalParameters()), ) ) # send same RTP twice, to trigger error on the receiver side: # "replay check failed (bad index)" run(session1._send_rtp(RTP)) run(session1._send_rtp(RTP)) run(asyncio.sleep(0.1)) self.assertEqual(len(receiver2.rtcp_packets), 0) self.assertEqual(len(receiver2.rtp_packets), 1) # shutdown run(session1.stop()) run(session2.stop())
def test_rtp(self): transport1, transport2 = dummy_ice_transport_pair() certificate1 = RTCCertificate.generateCertificate() session1 = RTCDtlsTransport(transport1, [certificate1]) receiver1 = DummyRtpReceiver() session1._register_rtp_receiver( receiver1, RTCRtpReceiveParameters( codecs=[ RTCRtpCodecParameters( mimeType="audio/PCMU", clockRate=8000, payloadType=0 ) ], encodings=[RTCRtpDecodingParameters(ssrc=1831097322, payloadType=0)], ), ) certificate2 = RTCCertificate.generateCertificate() session2 = RTCDtlsTransport(transport2, [certificate2]) receiver2 = DummyRtpReceiver() session2._register_rtp_receiver( receiver2, RTCRtpReceiveParameters( codecs=[ RTCRtpCodecParameters( mimeType="audio/PCMU", clockRate=8000, payloadType=0 ) ], encodings=[RTCRtpDecodingParameters(ssrc=4028317929, payloadType=0)], ), ) run( asyncio.gather( session1.start(session2.getLocalParameters()), session2.start(session1.getLocalParameters()), ) ) self.assertCounters(session1, session2, 2, 2) # send RTP run(session1._send_rtp(RTP)) run(asyncio.sleep(0.1)) self.assertCounters(session1, session2, 3, 2) self.assertEqual(len(receiver2.rtcp_packets), 0) self.assertEqual(len(receiver2.rtp_packets), 1) # send RTCP run(session2._send_rtp(RTCP)) run(asyncio.sleep(0.1)) self.assertCounters(session1, session2, 3, 3) self.assertEqual(len(receiver1.rtcp_packets), 1) self.assertEqual(len(receiver1.rtp_packets), 0) # shutdown run(session1.stop()) run(asyncio.sleep(0.1)) self.assertCounters(session1, session2, 4, 3) self.assertEqual(session1.state, "closed") self.assertEqual(session2.state, "closed") # try closing again run(session1.stop()) run(session2.stop()) # try sending after close with self.assertRaises(ConnectionError): run(session1._send_rtp(RTP))