{"action":"created","issue":{"url":"https://api.github.com/repos/qbittorrent/qBittorrent/issues/4984","repository_url":"https://api.github.com/repos/qbittorrent/qBittorrent","labels_url":"https://api.github.com/repos/qbittorrent/qBittorrent/issues/4984/labels{/name}","comments_url":"https://api.github.com/repos/qbittorrent/qBittorrent/issues/4984/comments","events_url":"https://api.github.com/repos/qbittorrent/qBittorrent/issues/4984/events","html_url":"https://github.com/qbittorrent/qBittorrent/pull/4984","id":142095791,"number":4984,"title":"Embedded tracker: Return external IPs to a peer with external IP","user":{"login":"SeigneurSerpent","id":17599485,"avatar_url":"https://avatars.githubusercontent.com/u/17599485?v=3","gravatar_id":"","url":"https://api.github.com/users/SeigneurSerpent","html_url":"https://github.com/SeigneurSerpent","followers_url":"https://api.github.com/users/SeigneurSerpent/followers","following_url":"https://api.github.com/users/SeigneurSerpent/following{/other_user}","gists_url":"https://api.github.com/users/SeigneurSerpent/gists{/gist_id}","starred_url":"https://api.github.com/users/SeigneurSerpent/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SeigneurSerpent/subscriptions","organizations_url":"https://api.github.com/users/SeigneurSerpent/orgs","repos_url":"https://api.github.com/users/SeigneurSerpent/repos","events_url":"https://api.github.com/users/SeigneurSerpent/events{/privacy}","received_events_url":"https://api.github.com/users/SeigneurSerpent/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":12,"created_at":"2016-03-19T19:50:18Z","updated_at":"2016-04-05T13:57:12Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/qbittorrent/qBittorrent/pulls/4984","html_url":"https://github.com/qbittorrent/qBittorrent/pull/4984","diff_url":"https://github.com/qbittorrent/qBittorrent/pull/4984.diff","patch_url":"https://github.com/qbittorrent/qBittorrent/pull/4984.patch"},"body":"A tracker behind NAT serving a private torrent should provide suitable IPs\r\no peers\r\n\r\n-Each peer has announcement and connection IP addresses. When announcement request comes from a public client to a tracker behind NAT serving a private torrent, the tracker should provide public IP in response, selecting between connection and announcement IPs. It allows the client to start downloading immediately without waiting for other peers to connect.\r\n-Set announce_ip to external ip obtained during external_ip_alert handler\r\n-Handle url parameter decoding by the tracker itself. Bittorrent tracker protocol uses RFC1738 to percent-decode parameters, which is based on decoding single bytes. Qt5 QUrlQuery decoding function has difficulty decoding sequences 0x80-0xFF."},"comment":{"url":"https://api.github.com/repos/qbittorrent/qBittorrent/issues/comments/205817971","html_url":"https://github.com/qbittorrent/qBittorrent/pull/4984#issuecomment-205817971","issue_url":"https://api.github.com/repos/qbittorrent/qBittorrent/issues/4984","id":205817971,"user":{"login":"SeigneurSerpent","id":17599485,"avatar_url":"https://avatars.githubusercontent.com/u/17599485?v=3","gravatar_id":"","url":"https://api.github.com/users/SeigneurSerpent","html_url":"https://github.com/SeigneurSerpent","followers_url":"https://api.github.com/users/SeigneurSerpent/followers","following_url":"https://api.github.com/users/SeigneurSerpent/following{/other_user}","gists_url":"https://api.github.com/users/SeigneurSerpent/gists{/gist_id}","starred_url":"https://api.github.com/users/SeigneurSerpent/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SeigneurSerpent/subscriptions","organizations_url":"https://api.github.com/users/SeigneurSerpent/orgs","repos_url":"https://api.github.com/users/SeigneurSerpent/repos","events_url":"https://api.github.com/users/SeigneurSerpent/events{/privacy}","received_events_url":"https://api.github.com/users/SeigneurSerpent/received_events","type":"User","site_admin":false},"created_at":"2016-04-05T13:57:11Z","updated_at":"2016-04-05T13:57:11Z","body":"@glassez \r\nDone. \r\nYour suggestion seems to be the perfect solution to the problem. Thanks!"}}