def create_ohlist_wrong_no_hashes(self, chunkid): index, begin, length = chunkid ohlist = [(0, "#" * 20), (1, "$" * 20)] # should contain 3 for file2.wmv: own, sibling and root bohlist = bencode(ohlist) chunk = "*" * (2 ** 14) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_bad_chunk(self, chunkid): index, begin, length = chunkid ohlist = self.tree.get_hashes_for_piece(index) bohlist = bencode(ohlist) chunk = "*" * length payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_not_hashpiece(self, chunkid): index, begin, length = chunkid ohlist = [] bohlist = bencode(ohlist) chunk = self.read_chunk(index, begin, length) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + chr(231) + payload
def create_ohlist_wrong_no_hashes(self, chunkid): index, begin, length = chunkid ohlist = [(0, '#' * 20), (1, '$' * 20)] # should contain 3 for file2.wmv: own, sibling and root bohlist = bencode(ohlist) chunk = '*' * (2 ** 14) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_not_hashpiece(self, chunkid): index, begin, length = chunkid ohlist = [] bohlist = bencode(ohlist) chunk = self.read_chunk(index, begin, length) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + chr(231) + payload
def create_bad_chunk(self, chunkid): index, begin, length = chunkid ohlist = self.tree.get_hashes_for_piece(index) bohlist = bencode(ohlist) chunk = '*' * length payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_ohlist_wrong_bad_hash(self, chunkid): index, begin, length = chunkid ohlist = self.tree.get_hashes_for_piece(index) ohlist[1][1] = "$" * 20 bohlist = bencode(ohlist) chunk = self.read_chunk(index, begin, length) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_ohlist_wrong_bad_hash(self, chunkid): index, begin, length = chunkid ohlist = self.tree.get_hashes_for_piece(index) ohlist[1][1] = '$' * 20 bohlist = bencode(ohlist) chunk = self.read_chunk(index, begin, length) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_ohlist_wrong_no_root_hash(self, chunkid): index, begin, length = chunkid ohlist = self.tree.get_hashes_for_piece(index) newohlist = [] # Remove root hash for oh in ohlist: if oh[0] != 0: newohlist.append(oh) ohlist = newohlist bohlist = bencode(ohlist) chunk = self.read_chunk(index, begin, length) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_ohlist_wrong_no_root_hash(self, chunkid): index, begin, length = chunkid ohlist = self.tree.get_hashes_for_piece(index) newohlist = [] # Remove root hash for oh in ohlist: if oh[0] != 0: newohlist.append(oh) ohlist = newohlist bohlist = bencode(ohlist) chunk = self.read_chunk(index, begin, length) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def write_extend_message(self, metadata_message_id, payload): assert isinstance(payload, dict), "PAYLOAD has invalid type: %s" % type(payload) assert isinstance(metadata_message_id, str), "METADATA_MESSAGE_ID has invalid type: %s" % type(metadata_message_id) assert len(metadata_message_id) == 1, "METADATA_MESSAGE_ID has invalid length: %d" % len(metadata_message_id) if DEBUG: print >> sys.stderr, self._address, "MiniBitTorrent.write_extend_message()" payload = bencode(payload) self._socket.write("".join((tobinary(2 + len(payload)), # msg len EXTEND, # msg id metadata_message_id, # extend msg id payload))) # bencoded msg
def write_extend_message(self, metadata_message_id, payload): assert isinstance(payload, dict), "PAYLOAD has invalid type: %s" % type(payload) assert isinstance(metadata_message_id, str), "METADATA_MESSAGE_ID has invalid type: %s" % type(metadata_message_id) assert len(metadata_message_id) == 1, "METADATA_MESSAGE_ID has invalid length: %d" % len(metadata_message_id) if DEBUG: print >> sys.stderr, self._address, "MiniBitTorrent.write_extend_message()" payload = bencode(payload) self._socket.write("".join((tobinary(2 + len(payload)), # msg len EXTEND, # msg id metadata_message_id, # extend msg id payload))) # bencoded msg
def create_good_hashpiece(self, oldstyle, chunkid): index, begin, length = chunkid if begin == 0: ohlist = self.tree.get_hashes_for_piece(index) else: ohlist = [] chunk = self.read_chunk(index, begin, length) bohlist = bencode(ohlist) print >> sys.stderr, "test: create_good_hashpiece:", index, begin, length, "==len", len(chunk) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk if oldstyle: msg = HASHPIECE + payload else: # Offical: use the msg ID he defined in his handshake msg = EXTEND + HASHPIECE + payload return msg
def create_good_hashpiece(self, oldstyle, chunkid): index, begin, length = chunkid if begin == 0: ohlist = self.tree.get_hashes_for_piece(index) else: ohlist = [] chunk = self.read_chunk(index, begin, length) bohlist = bencode(ohlist) print >> sys.stderr, "test: create_good_hashpiece:", index, begin, length, "==len", len(chunk) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk if oldstyle: msg = HASHPIECE + payload else: # Offical: use the msg ID he defined in his handshake msg = EXTEND + HASHPIECE + payload return msg
def send_message(self, message): self.last_use = time() s = tobinary(len(message)) + message if DEBUG: print >> sys.stderr, "dlbconn: Sending message", len(message) self.write(s)
def create_ohlist_not_bdecodable(self, chunkid): index, begin, length = chunkid bohlist = 'bla' chunk = '*' * (2 ** 14) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_not_len_bohlist(self, chunkid): index, begin, length = chunkid payload = tobinary(index) + tobinary(begin) + 'bla' return EXTEND + HASHPIECE + payload
def create_request(self, chunkid): index, begin, length = chunkid return REQUEST + tobinary(index) + tobinary(begin) + tobinary(length)
def send_message(self,message): self.last_use = time() s = tobinary(len(message))+message if DEBUG: print >> sys.stderr,"dlbconn: Sending message",len(message) self.write(s)
def create_request(self, chunkid): index, begin, length = chunkid return REQUEST + tobinary(index) + tobinary(begin) + tobinary(length)
def create_ohlist_not_bdecodable(self, chunkid): index, begin, length = chunkid bohlist = "bla" chunk = "*" * (2 ** 14) payload = tobinary(index) + tobinary(begin) + tobinary(len(bohlist)) + bohlist + chunk return EXTEND + HASHPIECE + payload
def create_not_len_bohlist(self, chunkid): index, begin, length = chunkid payload = tobinary(index) + tobinary(begin) + "bla" return EXTEND + HASHPIECE + payload