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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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
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")
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")
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")
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")
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)
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")
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)
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
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