def read_extend_metadata_reject(self, conn, piece): while True: response = conn.recv() assert len(response) > 0 # print >>sys.stderr,"test: Got reject", getMessageName(response[0]) if response[0] == EXTEND: break assert response[0] == EXTEND assert ord(response[1]) == 3 payload, length = sloppy_bdecode(response[2:]) assert payload["msg_type"] in (1, 2), [payload, response[2:2 + length]] assert payload["piece"] == piece, [payload, response[2:2 + length]] # some clients return msg_type 1, unfortunately this is not a reject but a proper response. # instead libtorrent warns: max outstanding piece requests reached if payload["msg_type"] == 1: assert response[2 + length:] == self.metadata_list[piece] # some clients return msg_type 2, we must make sure no "data" is given (i.e. the request was # rejected) if payload["msg_type"] == 2: assert payload["piece"] == piece, [payload, response[2:2 + length]] assert not "data" in payload, [payload, response[2:2 + length]]
def read_extend_metadata_reply(self, conn, piece): while True: response = conn.recv() assert len(response) > 0 # print >>sys.stderr,"test: Got data", getMessageName(response[0]) if response[0] == EXTEND: break assert response[0] == EXTEND assert ord(response[1]) == 3 payload, length = sloppy_bdecode(response[2:]) assert payload["msg_type"] == 1 assert payload["piece"] == piece if "data" in payload: assert payload["data"] == self.metadata_list[piece] else: assert response[2 + length:] == self.metadata_list[piece]