anchor.diff:       {http_torrent_file, HTTPTorrentFn},
        {udp_torrent_file, UDPTorrentFn},
        {dir_torrent_file, DirTorrentFn},
  +     {bad_udp_torrent_file, BadUDPTorrentFn},
  +     {bad_udp_dir_torrent_file, BadUDPDirTorrentFn},
   
        %% Names of data on which torrents are based.
        {data_filename, Fn},
  
positive.code:     ct:pal("Data directory: ~s~n", [Directory]),
      AutoDir = filename:join(Directory, autogen),
      file:make_dir(AutoDir),
      Fn            = filename:join([AutoDir, "file30m.random"]),
      Dir           = filename:join([AutoDir, "dir2x30m"]),
      DumpTorrentFn = filename:join([AutoDir, "file30m-trackerless.torrent"]),
      HTTPTorrentFn = filename:join([AutoDir, "file30m-http.torrent"]),
      UDPTorrentFn  = filename:join([AutoDir, "file30m-udp.torrent"]),
      DirTorrentFn  = filename:join([AutoDir, "dir2x30m.torrent"]),
      ensure_random_file(Fn),
      ensure_random_dir(Dir),
      ensure_torrent_file(Fn,  HTTPTorrentFn, "http"),
      ensure_torrent_file(Fn,  UDPTorrentFn,  "udp"),
      ensure_torrent_file(Dir, DirTorrentFn,  "http"),
      ensure_torrent_file(Fn, DumpTorrentFn),
      %% Literal infohash.
      %% Both HTTP and UDP versions have the same infohash.
      {ok, TorrentIH}    = etorrent_dotdir:info_hash(HTTPTorrentFn),
  
negative.code: 
  -export([seed_leech/0, seed_leech/1,
       udp_seed_leech/0, udp_seed_leech/1,
       down_udp_tracker/0, down_udp_tracker/1,
       choked_seed_leech/0, choked_seed_leech/1,
  	 seed_transmission/0, seed_transmission/1,
  	 leech_transmission/0, leech_transmission/1,
  