def anomosify(data, announce="https://tracker.anomos.info:5555/announce"): r = bdecode(data) if 'announce-list' in r: for a, l in enumerate(r['announce-list']): if a == 0: r['announce-list'][a] = announce else: del r['announce-list'][a:] r['announce'] = announce r['anon'] = '1' return bencode(r)
def anomosify(data, announce="https://tracker.anomos.info:5555/announce"): r = bdecode(data) if 'announce-list' in r: for a,l in enumerate(r['announce-list']): if a == 0: r['announce-list'][a] = announce else: del r['announce-list'][a:] r['announce'] = announce r['anon'] = '1' return bencode(r)
def make_meta_file(path, url, piece_len_exp, flag=Event(), progress=dummy, comment=None, target=None, encoding='ascii'): piece_length = 2 ** piece_len_exp a, b = os.path.split(path) if not target: if b == '': f = a + '.atorrent' else: f = os.path.join(a, b + '.atorrent') else: f = target info = makeinfo(path, piece_length, flag, progress, encoding) if flag.isSet(): return check_info(info) h = file(f, 'wb') data = {'info': info, 'announce': url.strip(), 'creation date': int(bttime()), 'anon': '1'} if comment: data['comment'] = comment h.write(bencode(data)) h.close()
new_file = new_files[p] v = new_file[0] if new_file[1] in new_parsed: # duplicate if p not in blocked or files[p][0] != v: errfunc('**warning** ' + p + ' is a duplicate torrent for ' + new_parsed[new_file[1]]['path']) new_blocked[p] = None continue if NOISY: errfunc('adding ' + p) try: ff = open(p, 'rb') d = bdecode(ff.read()) check_message(d) h = hashlib.sha1(bencode(d['info'])).digest() new_file[1] = h if new_parsed.has_key(h): errfunc('**warning** ' + p + ' is a duplicate torrent for ' + new_parsed[h]['path']) new_blocked[p] = None continue a = {} a['path'] = p f = os.path.basename(p) a['file'] = f i = d['info'] l = 0 nf = 0 if i.has_key('length'):
# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Written by Henry 'Pi' James and Bram Cohen from sys import argv from Anomos.bencode import bencode, bdecode if len(argv) < 3: print '%s http://new.uri:port/announce file1.torrent file2.torrent' % argv[ 0] print exit(2) # common exit code for syntax error for f in argv[2:]: h = open(f, 'rb') metainfo = bdecode(h.read()) h.close() if metainfo['announce'] != argv[1]: print 'old announce for %s: %s' % (f, metainfo['announce']) metainfo['announce'] = argv[1] h = open(f, 'wb') h.write(bencode(metainfo)) h.close()
def __init__(self, metainfo): self.bad_torrent_wrongfield = False self.bad_torrent_unsolvable = False self.bad_torrent_noncharacter = False self.bad_conversion = False self.bad_windows = False self.bad_path = False self.reported_errors = False self.is_batch = False self.orig_files = None self.files_fs = None self.file_size = 0 self.sizes = [] self.anon = None if metainfo.has_key('anon'): self.anon = bool(metainfo['anon']) btformats.check_message(metainfo, check_paths=False) info = metainfo['info'] if info.has_key('length'): self.file_size = info['length'] self.sizes.append(self.file_size) else: self.is_batch = True r = [] self.orig_files = [] self.sizes = [] i = 0 for f in info['files']: l = f['length'] self.file_size += l self.sizes.append(l) path = self._get_attr_utf8(f, 'path') for x in path: if not btformats.allowed_path_re.match(x): if l > 0: raise BTFailure("Bad file path component: "+x) # BitComet makes bad .torrent files with empty # filename part self.bad_path = True break else: path = [(self._enforce_utf8(x), x) for x in path] self.orig_files.append('/'.join([x[0] for x in path])) r.append(([(self._to_fs_2(u), u, o) for u, o in path], i)) i += 1 # If two or more file/subdirectory names in the same directory # would map to the same name after encoding conversions + Windows # workarounds, change them. Files are changed as # 'a.b.c'->'a.b.0.c', 'a.b.1.c' etc, directories or files without # '.' as 'a'->'a.0', 'a.1' etc. If one of the multiple original # names was a "clean" conversion, that one is always unchanged # and the rest are adjusted. r.sort() self.files_fs = [None] * len(r) prev = [None] res = [] stack = [{}] for x in r: j = 0 x, i = x while x[j] == prev[j]: j += 1 del res[j:] del stack[j+1:] name = x[j][0][1] if name in stack[-1]: for name in generate_names(x[j][1], j != len(x) - 1): name = self._to_fs(name) if name not in stack[-1]: break stack[-1][name] = None res.append(name) for j in range(j + 1, len(x)): name = x[j][0][1] stack.append({name: None}) res.append(name) self.files_fs[i] = os.path.join(*res) prev = x self.name = self._get_field_utf8(info, 'name') self.name_fs = self._to_fs(self.name) self.piece_length = info['piece length'] self.announce = metainfo['announce'] self.hashes = [info['pieces'][x:x+20] for x in xrange(0, len(info['pieces']), 20)] self.infohash = hashlib.sha1(bencode(info)).digest()
new_file = new_files[p] v = new_file[0] if new_file[1] in new_parsed: # duplicate if p not in blocked or files[p][0] != v: errfunc('**warning** '+ p + ' is a duplicate torrent for ' + new_parsed[new_file[1]]['path']) new_blocked[p] = None continue if NOISY: errfunc('adding '+p) try: ff = open(p, 'rb') d = bdecode(ff.read()) check_message(d) h = hashlib.sha1(bencode(d['info'])).digest() new_file[1] = h if new_parsed.has_key(h): errfunc('**warning** '+ p + ' is a duplicate torrent for '+new_parsed[h]['path']) new_blocked[p] = None continue a = {} a['path'] = p f = os.path.basename(p) a['file'] = f i = d['info'] l = 0 nf = 0 if i.has_key('length'):
# (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Written by Henry 'Pi' James and Bram Cohen from sys import argv from Anomos.bencode import bencode, bdecode if len(argv) < 3: print '%s http://new.uri:port/announce file1.torrent file2.torrent' % argv[0] print exit(2) # common exit code for syntax error for f in argv[2:]: h = open(f, 'rb') metainfo = bdecode(h.read()) h.close() if metainfo['announce'] != argv[1]: print 'old announce for %s: %s' % (f, metainfo['announce']) metainfo['announce'] = argv[1] h = open(f, 'wb') h.write(bencode(metainfo)) h.close()