#!/usr/bin/env python3 """Seed a .torrent with libtorrent on 127.0.0.1 and print the listen port. Usage: seeder.py Runs until killed. Prints 'PORT ' once it is seeding.""" import libtorrent as lt, os, sys, time enc_policy = 0 if os.environ.get("NAUT_FORCE_MSE") == "1" else 1 torrent, save_path = sys.argv[1], sys.argv[2] ses = lt.session({ "listen_interfaces": "127.0.0.1:0", "unchoke_slots_limit": 64, # unchoke leechers fast "in_enc_policy": enc_policy, "out_enc_policy": enc_policy, "alert_mask": lt.alert_category.all, }) atp = lt.add_torrent_params() atp.ti = lt.torrent_info(torrent) atp.save_path = save_path atp.flags |= lt.torrent_flags.seed_mode # data already present; skip recheck atp.flags &= ~lt.torrent_flags.paused # must be active to accept peers atp.flags &= ~lt.torrent_flags.auto_managed # don't let the queue re-pause it h = ses.add_torrent(atp) h.resume() deadline = time.time() + 30 while not h.status().is_seeding and time.time() < deadline: time.sleep(0.05) if not h.status().is_seeding: print("ERROR: not seeding", flush=True); sys.exit(1) print("PORT %d" % ses.listen_port(), flush=True) while True: for a in ses.pop_alerts(): print("ALERT %s: %s" % (type(a).__name__, a.message()), flush=True) time.sleep(0.2)