{"action":"created","issue":{"url":"https://api.github.com/repos/mumble-voip/mumble/issues/3324","repository_url":"https://api.github.com/repos/mumble-voip/mumble","labels_url":"https://api.github.com/repos/mumble-voip/mumble/issues/3324/labels{/name}","comments_url":"https://api.github.com/repos/mumble-voip/mumble/issues/3324/comments","events_url":"https://api.github.com/repos/mumble-voip/mumble/issues/3324/events","html_url":"https://github.com/mumble-voip/mumble/issues/3324","id":292160867,"number":3324,"title":"Channel file transfer implementation","user":{"login":"Fahrradkette","id":4951351,"avatar_url":"https://avatars0.githubusercontent.com/u/4951351?v=4","gravatar_id":"","url":"https://api.github.com/users/Fahrradkette","html_url":"https://github.com/Fahrradkette","followers_url":"https://api.github.com/users/Fahrradkette/followers","following_url":"https://api.github.com/users/Fahrradkette/following{/other_user}","gists_url":"https://api.github.com/users/Fahrradkette/gists{/gist_id}","starred_url":"https://api.github.com/users/Fahrradkette/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Fahrradkette/subscriptions","organizations_url":"https://api.github.com/users/Fahrradkette/orgs","repos_url":"https://api.github.com/users/Fahrradkette/repos","events_url":"https://api.github.com/users/Fahrradkette/events{/privacy}","received_events_url":"https://api.github.com/users/Fahrradkette/received_events","type":"User","site_admin":false},"labels":[{"id":110133931,"url":"https://api.github.com/repos/mumble-voip/mumble/labels/feature-request","name":"feature-request","color":"5319e7","default":false},{"id":534316716,"url":"https://api.github.com/repos/mumble-voip/mumble/labels/priority/P2%20-%20Important","name":"priority/P2 - Important","color":"0052cc","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":8,"created_at":"2018-01-27T23:12:31Z","updated_at":"2018-02-08T19:19:28Z","closed_at":null,"author_association":"NONE","body":"I'd like to push [#channel file  transfer](https://github.com/mumble-voip/mumble/issues/1307), so a spec can be derived. \r\n\r\n### Users:\r\n- Alice: registered user, permissions to post files in the channel\r\n- Bob: registered user, trusting Alice (i.e. having Alice's Cert locally)\r\n- Charlie: unregistered user, trusting nobody\r\n- Dave: same as Alice\r\n### Story:\r\n- Alice drops a file in the chat window (or clicks \"post file\")\r\n- Bob clicks on the appearing link in the window and chooses a location for the file on his machine.\r\n- Charlie sees the file, when clicking on the link is prompted to trust Alice\r\n- Dave drops a file in the Chat window but hole punching/upnp fails, he sees an error message and is pointed to an external service\r\n\r\n### dividing it up\r\n1. - ACL's / permissions\r\n2. - Certificates / encryption handling\r\n3. - initiating connection / hole punching\r\n4. - transfer handling / error recovering\r\n5. - GUI\r\n\r\nI did some research on the hole punching part, I found there is are some solutions like raknet and its forks, for upnp there is a C library called miniupnpc (which is used by raknet I believe). Apparently hole-punching  works better with UDP, I have no experience with it since my router supports upnp.\r\n\r\nDo you guys agree with this way of breaking it up into parts? I'd be most delighted to read about your ideas and mental models of how it should work and how it should be layed out/divided up.\r\n\r\nI'd love to get this going."},"comment":{"url":"https://api.github.com/repos/mumble-voip/mumble/issues/comments/364219331","html_url":"https://github.com/mumble-voip/mumble/issues/3324#issuecomment-364219331","issue_url":"https://api.github.com/repos/mumble-voip/mumble/issues/3324","id":364219331,"user":{"login":"Avamander","id":5392141,"avatar_url":"https://avatars2.githubusercontent.com/u/5392141?v=4","gravatar_id":"","url":"https://api.github.com/users/Avamander","html_url":"https://github.com/Avamander","followers_url":"https://api.github.com/users/Avamander/followers","following_url":"https://api.github.com/users/Avamander/following{/other_user}","gists_url":"https://api.github.com/users/Avamander/gists{/gist_id}","starred_url":"https://api.github.com/users/Avamander/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Avamander/subscriptions","organizations_url":"https://api.github.com/users/Avamander/orgs","repos_url":"https://api.github.com/users/Avamander/repos","events_url":"https://api.github.com/users/Avamander/events{/privacy}","received_events_url":"https://api.github.com/users/Avamander/received_events","type":"User","site_admin":false},"created_at":"2018-02-08T19:19:28Z","updated_at":"2018-02-08T19:19:28Z","author_association":"NONE","body":"With file streams/sharing maybe it's worth considering other types of sharing like video? "}}
{"actor":{"display_login":"Avamander"}}