Beispiel #1
0
    def test_decode_SDES(self):
        item = []
        cont = []
        item.append(("CNAME", "*****@*****.**"))
        item.append(("NAME", "memyselfandi"))
        item.append(("TOOL", "sropulpof_test"))
        cont.append((424242, item))

        rtcp = RTCPPacket("SDES", ptcode=202, contents=cont)
        rtcp_pac = rtcp.encode()

        packets = RTCPCompound(rtcp_pac)

        for packet in packets:
            packet_type = packet.getPT()
            cont = packet.getContents()

            assert packet_type == "SDES", self.fail("Wrong type select by RTCPCompound")
            assert cont[0][0] == 424242, self.fail("Wrong ssrc")
            for elt in cont[0][1]:
                if elt[0] == "CNAME":
                    assert elt[1] == "*****@*****.**", self.fail("wrong encoded for Cname")

                elif elt[0] == "NAME":
                    assert elt[1] == "memyselfandi", self.fail("wrong encoded for Name")

                elif elt[0] == "TOOL":
                    assert elt[1] == "sropulpof_test", self.fail("wrong encoded for Tool")
Beispiel #2
0
    def test_encode_RR(self):
        ttt = time.time()
        (ssrc, ntp, rtp_ts, total_packets, total_bytes, ssrc_1, \
             frac_lost, lost, highest, jitter, lsr, dlsr) \
             = (424242, ttt, 143, 100, 800, 424243, 1, 1, 65535, 15, \
                    int(time.time()-10), 10)

        frac_lost = int(lost / float(total_packets + lost))

        members = {}
        new_member = self.member.copy()
        new_member['last_ts'] = rtp_ts
        new_member['last_seq'] = highest
        new_member['jitter'] = jitter
        new_member['lost'] = lost
        new_member['lsr'] = lsr
        new_member['dlsr'] = dlsr

        members_table = {}
        members_table[ssrc_1] = new_member

        arg_list = (ssrc, members_table)

        rtcp = RTCPPacket("RR", ptcode=201, contents=arg_list)
        rtcp_pac = rtcp.encode()

        #Testing result
        assert(type(rtcp_pac)==str), self.fail("Wrong type returned for RR" \
                                                   + " RTCP packet")
        assert(len(rtcp_pac) == 32), self.fail("Wrong size returned for RR" \
                                                   + " RTCP packet")
Beispiel #3
0
    def test_checksum(self):

        #Testing good checksum packet
        reason = "because"
        arg_list = ([self.rtcp.rtp.ssrc], reason)

        #Testing BYE PAcket
        packet_to_test = RTCPPacket("BYE", ptcode=203, contents=arg_list)
        bytes = packet_to_test.encode()
        res = self.rtcp.checksum(bytes)
        assert(res==1), self.fail("Wrong checksum for BYE packet")


        arg_list = (self.rtcp.rtp.ssrc, self.rtcp.rtp.rtp_ts, \
                self.rtcp.rtp.total_packets, \
                self.rtcp.rtp.total_bytes, self.rtcp.members_table)

        #Test SR packet
        packet_to_test = RTCPPacket("SR", ptcode=201, contents=arg_list)
        compound = RTCPCompound()
        compound.addPacket(packet_to_test)
        bytes = compound.encode()
        res = self.rtcp.checksum(bytes)
        assert(res==1), self.fail("Wrong checksum for SR packet")

        arg_list = (self.rtcp.rtp.ssrc, self.rtcp.members_table)

        #Test RR packet
        packet_to_test = RTCPPacket("RR", ptcode=200, contents=arg_list)
        compound = RTCPCompound()
        compound.addPacket(packet_to_test)
        bytes = compound.encode()
        res = self.rtcp.checksum(bytes)
        assert(res==1), self.fail("Wrong checksum for RR packet")
Beispiel #4
0
    def test_decode_SDES(self):
        item = []
        cont = []
        item.append(("CNAME", "*****@*****.**"))
        item.append(("NAME", "memyselfandi"))
        item.append(("TOOL", "sropulpof_test"))
        cont.append((424242, item))

        rtcp = RTCPPacket("SDES", ptcode=202, contents=cont)
        rtcp_pac = rtcp.encode()

        packets = RTCPCompound(rtcp_pac)

        for packet in packets:
            packet_type = packet.getPT()
            cont = packet.getContents()

            assert(packet_type=="SDES"), self.fail("Wrong type select by RTCPCompound")
            assert(cont[0][0]==424242), self.fail("Wrong ssrc")
            for elt in cont[0][1]:
                if elt[0] == "CNAME":
                    assert(elt[1]=="*****@*****.**"), self.fail("wrong encoded for Cname")

                elif elt[0] == "NAME":
                    assert(elt[1]=="memyselfandi"), self.fail("wrong encoded for Name")

                elif elt[0] == "TOOL":
                    assert(elt[1]=="sropulpof_test"), self.fail("wrong encoded for Tool")
Beispiel #5
0
    def test_encode_SR(self):
        """Testing encode functione for SR"""
        ttt = time.time()
        cont \
            = (ssrc, ntp, rtp_ts, total_packets, total_bytes, ssrc_1,
               frac_lost, lost, highest, jitter, lsr, dlsr) \
            = (424242, ttt, 143, 100, 800, 424243, 1, 1, 65535, 15,
               int(time.time()-10), 10)

        members = {}
        new_member = self.member.copy()
        new_member['last_ts'] = rtp_ts
        new_member['last_seq'] = highest
        new_member['jitter'] = jitter
        new_member['lost'] = lost
        members_table = {}
        members_table[ssrc] = new_member

        arg_list = (ssrc, rtp_ts,
                    total_packets,
                    total_bytes, members_table)



        rtcp = RTCPPacket("SR", ptcode=200, contents=arg_list)
        rtcp_pac = rtcp.encode()

        #Testing result
        assert(type(rtcp_pac)==str), self.fail("Wrong type returned for SR" \
                                                   + " RTCP packet")

        assert(len(rtcp_pac) == 28), self.fail("Wrong size returned for SR" \
                                                   + " RTCP packet")
Beispiel #6
0
    def test_encode_BYE(self):
        """Test encode BYE packet with a single SSRC"""
        cont = (ssrc, reason) = ([4242], "because")
        rtcp = RTCPPacket("BYE", ptcode=203, contents=cont)
        rtcp_pac = rtcp.encode()

        assert type(rtcp_pac) == str, self.fail("Wrong type returned by encode RTCP BYE packet")
        # MUST be padd ??
        assert len(rtcp_pac) == 16, self.fail("Wrong size returned by encode RTCP BYE packet")
Beispiel #7
0
    def test_decode_RR(self):
        ttt = time.time()
        (ssrc, ntp, rtp_ts, total_packets, total_bytes, ssrc_1, frac_lost, lost, highest, jitter, lsr, dlsr) = (
            424242,
            ttt,
            143,
            100,
            800,
            424243,
            1,
            1,
            65535,
            15,
            int(time.time() - 10),
            10,
        )

        frac_lost = int(lost / float(total_packets + lost))

        members = {}
        new_member = self.member.copy()
        new_member["last_ts"] = rtp_ts
        new_member["last_seq"] = highest
        new_member["jitter"] = jitter
        new_member["lost"] = lost
        new_member["lsr"] = lsr
        new_member["dlsr"] = dlsr

        members_table = {}
        members_table[ssrc_1] = new_member

        arg_list = (ssrc, members_table)

        rtcp = RTCPPacket("RR", ptcode=201, contents=arg_list)
        rtcp_pac = rtcp.encode()

        # Unpacking
        # Decoding packet
        packet = RTCPCompound(rtcp_pac)

        # Getting content of the first block
        cont = packet._rtcp[0].getContents()

        lsr = ext_32_out_of_64(lsr)
        lsr = unformat_from_32(lsr)

        dlsr = ext_32_out_of_64(dlsr)
        dlsr = unformat_from_32(dlsr)

        # Testing content decode
        assert cont[0] == ssrc, self.fail("SSRC is not correctly encode or " + "decode")
        assert cont[1][0]["ssrc"] == ssrc_1, self.fail("SSRC_1 is not correctly encode or decode")
        assert cont[1][0]["jitter"] == jitter, self.fail("Jitter is not correctly encode or decode")
        assert cont[1][0]["fraclost"] == frac_lost, self.fail("Frac lost is not correctly encode or decode")

        assert cont[1][0]["lsr"] == lsr, self.fail("Last received is not correctly encode or decode")
        assert cont[1][0]["highest"] == highest, self.fail("Highest seq num is not correctly encode or decode")
Beispiel #8
0
    def test_encode_BYE(self):
        """Test encode BYE packet with a single SSRC"""
        cont = (ssrc, reason) = ([4242], "because")
        rtcp = RTCPPacket("BYE", ptcode=203, contents=cont)
        rtcp_pac = rtcp.encode()

        assert(type(rtcp_pac)==str), \
            self.fail("Wrong type returned by encode RTCP BYE packet")
        #MUST be padd ??
        assert(len(rtcp_pac) == 16), \
            self.fail("Wrong size returned by encode RTCP BYE packet")
Beispiel #9
0
    def test_decode_RR(self):
        ttt = time.time()
        (ssrc, ntp, rtp_ts, total_packets, total_bytes, ssrc_1, \
             frac_lost, lost, highest, jitter, lsr, dlsr) \
             = (424242, ttt, 143, 100, 800, 424243, 1, 1, 65535, 15, \
                    int(time.time()-10), 10)

        frac_lost = int(lost / float(total_packets + lost))

        members = {}
        new_member = self.member.copy()
        new_member['last_ts'] = rtp_ts
        new_member['last_seq'] = highest
        new_member['jitter'] = jitter
        new_member['lost'] = lost
        new_member['lsr'] = lsr
        new_member['dlsr'] = dlsr

        members_table = {}
        members_table[ssrc_1] = new_member

        arg_list = (ssrc, members_table)

        rtcp = RTCPPacket("RR", ptcode=201, contents=arg_list)
        rtcp_pac = rtcp.encode()

        #Unpacking
        #Decoding packet
        packet = RTCPCompound(rtcp_pac)

        #Getting content of the first block
        cont = packet._rtcp[0].getContents()

        lsr = ext_32_out_of_64(lsr)
        lsr = unformat_from_32(lsr)

        dlsr = ext_32_out_of_64(dlsr)
        dlsr = unformat_from_32(dlsr)

        #Testing content decode
        assert(cont[0]== ssrc), self.fail("SSRC is not correctly encode or " \
                                              + "decode")
        assert(cont[1][0]['ssrc']==ssrc_1), \
            self.fail("SSRC_1 is not correctly encode or decode")
        assert(cont[1][0]['jitter']==jitter), \
            self.fail("Jitter is not correctly encode or decode")
        assert(cont[1][0]['fraclost']==frac_lost), \
            self.fail("Frac lost is not correctly encode or decode")

        assert(cont[1][0]['lsr']==lsr), \
            self.fail("Last received is not correctly encode or decode")
        assert(cont[1][0]['highest']==highest), \
            self.fail("Highest seq num is not correctly encode or decode")
Beispiel #10
0
    def test_decode_BYE(self):
        """Test decode BYE packet with a single SSRC"""
        cont = (ssrc, reason) = ([4242], "because")
        rtcp = RTCPPacket("BYE", ptcode=203, contents=cont)
        rtcp_pac = rtcp.encode()

        # Unpacking
        # Decoding packet
        packet = RTCPCompound(rtcp_pac)

        # Getting content of the first block
        cont = packet._rtcp[0].getContents()

        assert cont[0][0] == ssrc[0], self.fail("SSRC is not correctly encode or decode")
        assert cont[1] == reason, self.fail("Reason is not correctly encode or decode")
Beispiel #11
0
    def test_decode_BYE(self):
        """Test decode BYE packet with a single SSRC"""
        cont = (ssrc, reason) = ([4242], "because")
        rtcp = RTCPPacket("BYE", ptcode=203, contents=cont)
        rtcp_pac = rtcp.encode()

        #Unpacking
        #Decoding packet
        packet = RTCPCompound(rtcp_pac)

        #Getting content of the first block
        cont = packet._rtcp[0].getContents()

        assert(cont[0][0]==ssrc[0]), \
            self.fail("SSRC is not correctly encode or decode")
        assert(cont[1]==reason), \
            self.fail("Reason is not correctly encode or decode")
Beispiel #12
0
    def test_checksum(self):

        #Testing good checksum packet
        reason = "because"
        arg_list = ([self.rtcp.rtp.ssrc], reason)

        #Testing BYE PAcket
        packet_to_test = RTCPPacket("BYE", ptcode=203, contents=arg_list)
        bytes = packet_to_test.encode()
        res = self.rtcp.checksum(bytes)
        assert (res == 1), self.fail("Wrong checksum for BYE packet")


        arg_list = (self.rtcp.rtp.ssrc, self.rtcp.rtp.rtp_ts, \
                self.rtcp.rtp.total_packets, \
                self.rtcp.rtp.total_bytes, self.rtcp.members_table)

        #Test SR packet
        packet_to_test = RTCPPacket("SR", ptcode=201, contents=arg_list)
        compound = RTCPCompound()
        compound.addPacket(packet_to_test)
        bytes = compound.encode()
        res = self.rtcp.checksum(bytes)
        assert (res == 1), self.fail("Wrong checksum for SR packet")

        arg_list = (self.rtcp.rtp.ssrc, self.rtcp.members_table)

        #Test RR packet
        packet_to_test = RTCPPacket("RR", ptcode=200, contents=arg_list)
        compound = RTCPCompound()
        compound.addPacket(packet_to_test)
        bytes = compound.encode()
        res = self.rtcp.checksum(bytes)
        assert (res == 1), self.fail("Wrong checksum for RR packet")
Beispiel #13
0
    def send_SR(self):
        """Sending Sender report"""
        arg_list = (self.rtp.ssrc, self.rtp.ts, \
                        self.rtp.currentSentPacketsTotal, \
                        self.rtp.currentSentBytesTotal, self.members_table)

        rtcp = RTCPPacket("SR", ptcode=200, contents=arg_list)

        return rtcp
Beispiel #14
0
    def test_encode_SDES(self):

        item = []
        cont = []
        item.append(("CNAME", "*****@*****.**"))
        item.append(("NAME", "memyselfandi"))
        item.append(("TOOL", "sropulpof_test"))
        cont.append((424242, item))

        rtcp = RTCPPacket("SDES", ptcode=202, contents=cont)
        rtcp_pac = rtcp.encode()

        assert type(rtcp_pac) == str, self.fail("Wrong type returned by encode RTCP SDES packet")

        # MUST be padd
        length_wait = 8 + 2 + len("*****@*****.**") + 2 + len("memyselfandi") + 2 + len("sropulpof_test")
        pad = 4 - (length_wait % 4)
        length_wait += pad

        assert len(rtcp_pac) == length_wait, self.fail("Wrong size returned by encode RTCP SDES packet")
Beispiel #15
0
    def test_receiveBYE(self):
        #First test
        reason = "Normal quit"
        arg_list = ([self.rtcp.rtp.ssrc], reason)

        rtcp = RTCPPacket("BYE", ptcode=203, contents=arg_list)
        rtcp_pac = rtcp.encode()

        #Decoding as datagram received
        packets = RTCPCompound(rtcp_pac)
        packet_type = packets[0].getPT()
        cont = packets[0].getContents()
        ssrc = cont[0][0]
        reas_gave = cont[1]

        #Checking BYE format
        assert(packet_type == "BYE"), \
            self.fail("Wrong packet type encoded or decoded for BYE")
        assert(ssrc == self.rtcp.rtp.ssrc), \
            self.fail("Wrong SSRC encoded or decoded for BYE")
        assert(reas_gave == reason), \
            self.fail("Wrong reason encoded or decoded for BYE")


        #SEcond TEst
        arg_list = ([434343], reason)
        rtcp = RTCPPacket("BYE", ptcode=203, contents=arg_list)
        rtcp_pac = rtcp.encode()
        #Decoding as datagram received
        packets = RTCPCompound(rtcp_pac)
        packet_type = packets[0].getPT()
        cont = packets[0].getContents()
        self.rtcp.receiveBYE(cont)

        #Checking members table
        assert(len(self.rtcp.members_table)==1), \
            self.fail("Forget to delete member when receiving BYE packet from him!")
        for ssrc in self.rtcp.members_table:
            assert(ssrc==424242), \
                self.fail("Wrong member erase after receiving BYE packet")
Beispiel #16
0
    def test_encode_SDES(self):

        item = []
        cont = []
        item.append(("CNAME", "*****@*****.**"))
        item.append(("NAME", "memyselfandi"))
        item.append(("TOOL", "sropulpof_test"))
        cont.append((424242, item))

        rtcp = RTCPPacket("SDES", ptcode=202, contents=cont)
        rtcp_pac = rtcp.encode()

        assert(type(rtcp_pac)==str), \
            self.fail("Wrong type returned by encode RTCP SDES packet")

        #MUST be padd
        length_wait = 8 + 2 + len("*****@*****.**") + 2 + len("memyselfandi") + 2 + len("sropulpof_test")
        pad = 4 - (length_wait%4)
        length_wait += pad

        assert(len(rtcp_pac) == length_wait), \
            self.fail("Wrong size returned by encode RTCP SDES packet")
Beispiel #17
0
    def test_encode_RR(self):
        ttt = time.time()
        (ssrc, ntp, rtp_ts, total_packets, total_bytes, ssrc_1, frac_lost, lost, highest, jitter, lsr, dlsr) = (
            424242,
            ttt,
            143,
            100,
            800,
            424243,
            1,
            1,
            65535,
            15,
            int(time.time() - 10),
            10,
        )

        frac_lost = int(lost / float(total_packets + lost))

        members = {}
        new_member = self.member.copy()
        new_member["last_ts"] = rtp_ts
        new_member["last_seq"] = highest
        new_member["jitter"] = jitter
        new_member["lost"] = lost
        new_member["lsr"] = lsr
        new_member["dlsr"] = dlsr

        members_table = {}
        members_table[ssrc_1] = new_member

        arg_list = (ssrc, members_table)

        rtcp = RTCPPacket("RR", ptcode=201, contents=arg_list)
        rtcp_pac = rtcp.encode()

        # Testing result
        assert type(rtcp_pac) == str, self.fail("Wrong type returned for RR" + " RTCP packet")
        assert len(rtcp_pac) == 32, self.fail("Wrong size returned for RR" + " RTCP packet")
Beispiel #18
0
    def send_BYE(self, reason):
        """Sending a BYE packet to inform others participant that we are
        leaving the session
        """
        ssrcs = list(self.members_table.keys())
        arg_list = ([self.rtp.ssrc], reason)

        rtcp = RTCPPacket("BYE", ptcode=203, contents=arg_list)

        #ssrcs, reason
        if len(self.members_table) >= 50:
            self.last_sent_time = time()
            self.pmembers = 1
            self.members = 1
            self.initial = True
            self.we_sent = False
            self.avg_rtcp_size = 0  #BYE packet size ??

            self.compute_transmission_interval()
            self.next_scheduled_time = time() + self.transmission_interval
            self.rescheduled_sending()

        rtcp_pac = rtcp.encode()
        self.sendDatagram(rtcp_pac)
Beispiel #19
0
    def test_encode_SR(self):
        """Testing encode functione for SR"""
        ttt = time.time()
        cont = (ssrc, ntp, rtp_ts, total_packets, total_bytes, ssrc_1, frac_lost, lost, highest, jitter, lsr, dlsr) = (
            424242,
            ttt,
            143,
            100,
            800,
            424243,
            1,
            1,
            65535,
            15,
            int(time.time() - 10),
            10,
        )

        members = {}
        new_member = self.member.copy()
        new_member["last_ts"] = rtp_ts
        new_member["last_seq"] = highest
        new_member["jitter"] = jitter
        new_member["lost"] = lost
        members_table = {}
        members_table[ssrc] = new_member

        arg_list = (ssrc, rtp_ts, total_packets, total_bytes, members_table)

        rtcp = RTCPPacket("SR", ptcode=200, contents=arg_list)
        rtcp_pac = rtcp.encode()

        # Testing result
        assert type(rtcp_pac) == str, self.fail("Wrong type returned for SR" + " RTCP packet")

        assert len(rtcp_pac) == 28, self.fail("Wrong size returned for SR" + " RTCP packet")
Beispiel #20
0
    def send_BYE(self, reason):
        """Sending a BYE packet to inform others participant that we are
        leaving the session
        """
        ssrcs = self.members_table.keys()
        arg_list = ([self.rtp.ssrc], reason)

        rtcp = RTCPPacket("BYE", ptcode=203, contents=arg_list)

        #ssrcs, reason
        if len(self.members_table) >= 50:
            self.last_sent_time = time()
            self.pmembers = 1
            self.members = 1
            self.initial = True
            self.we_sent = False
            self.avg_rtcp_size = 0 #BYE packet size ??

            self.compute_transmission_interval()
            self.next_scheduled_time = time() + self.transmission_interval
            self.rescheduled_sending()

        rtcp_pac = rtcp.encode()
        self.sendDatagram(rtcp_pac)
Beispiel #21
0
    def send_SDES(self):
        arg_list = []
        for member in self.members_table:
            item = []
            cname = self.members_table[member]['cname']
            #CNAME is mandatory !
            if cname != "user@host":
                item.append(("CNAME", cname))

                name = self.members_table[member]['user_name']
                item.append(("NAME", name))

                tool = self.members_table[member]['tool']
                item.append(("TOOL", tool))
                arg_list.append((member, item))

        rtcp = RTCPPacket("SDES", ptcode=202, contents=arg_list)
        return rtcp
Beispiel #22
0
    def test_receiveBYE(self):
        #First test
        reason = "Normal quit"
        arg_list = ([self.rtcp.rtp.ssrc], reason)

        rtcp = RTCPPacket("BYE", ptcode=203, contents=arg_list)
        rtcp_pac = rtcp.encode()

        #Decoding as datagram received
        packets = RTCPCompound(rtcp_pac)
        packet_type = packets[0].getPT()
        cont = packets[0].getContents()
        ssrc = cont[0][0]
        reas_gave = cont[1]

        #Checking BYE format
        assert(packet_type == "BYE"), \
            self.fail("Wrong packet type encoded or decoded for BYE")
        assert(ssrc == self.rtcp.rtp.ssrc), \
            self.fail("Wrong SSRC encoded or decoded for BYE")
        assert(reas_gave == reason), \
            self.fail("Wrong reason encoded or decoded for BYE")

        #SEcond TEst
        arg_list = ([434343], reason)
        rtcp = RTCPPacket("BYE", ptcode=203, contents=arg_list)
        rtcp_pac = rtcp.encode()
        #Decoding as datagram received
        packets = RTCPCompound(rtcp_pac)
        packet_type = packets[0].getPT()
        cont = packets[0].getContents()
        self.rtcp.receiveBYE(cont)

        #Checking members table
        assert(len(self.rtcp.members_table)==1), \
            self.fail("Forget to delete member when receiving BYE packet from him!")
        for ssrc in self.rtcp.members_table:
            assert(ssrc==424242), \
                self.fail("Wrong member erase after receiving BYE packet")
Beispiel #23
0
 def send_RR(self):
     """Send Receiver report"""
     arg_list = (self.rtp.ssrc, self.members_table)
     rtcp = RTCPPacket("RR", ptcode=201, contents=arg_list)
     return rtcp