{"action":"created","issue":{"url":"https://api.github.com/repos/WhisperSystems/Signal-iOS/issues/951","repository_url":"https://api.github.com/repos/WhisperSystems/Signal-iOS","labels_url":"https://api.github.com/repos/WhisperSystems/Signal-iOS/issues/951/labels{/name}","comments_url":"https://api.github.com/repos/WhisperSystems/Signal-iOS/issues/951/comments","events_url":"https://api.github.com/repos/WhisperSystems/Signal-iOS/issues/951/events","html_url":"https://github.com/WhisperSystems/Signal-iOS/issues/951","id":116743794,"number":951,"title":"Address \"double-sends\"","user":{"login":"FredericJacobs","id":400296,"avatar_url":"https://avatars.githubusercontent.com/u/400296?v=3","gravatar_id":"","url":"https://api.github.com/users/FredericJacobs","html_url":"https://github.com/FredericJacobs","followers_url":"https://api.github.com/users/FredericJacobs/followers","following_url":"https://api.github.com/users/FredericJacobs/following{/other_user}","gists_url":"https://api.github.com/users/FredericJacobs/gists{/gist_id}","starred_url":"https://api.github.com/users/FredericJacobs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FredericJacobs/subscriptions","organizations_url":"https://api.github.com/users/FredericJacobs/orgs","repos_url":"https://api.github.com/users/FredericJacobs/repos","events_url":"https://api.github.com/users/FredericJacobs/events{/privacy}","received_events_url":"https://api.github.com/users/FredericJacobs/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"michaelkirk","id":217057,"avatar_url":"https://avatars.githubusercontent.com/u/217057?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelkirk","html_url":"https://github.com/michaelkirk","followers_url":"https://api.github.com/users/michaelkirk/followers","following_url":"https://api.github.com/users/michaelkirk/following{/other_user}","gists_url":"https://api.github.com/users/michaelkirk/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelkirk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelkirk/subscriptions","organizations_url":"https://api.github.com/users/michaelkirk/orgs","repos_url":"https://api.github.com/users/michaelkirk/repos","events_url":"https://api.github.com/users/michaelkirk/events{/privacy}","received_events_url":"https://api.github.com/users/michaelkirk/received_events","type":"User","site_admin":false},"assignees":[{"login":"michaelkirk","id":217057,"avatar_url":"https://avatars.githubusercontent.com/u/217057?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelkirk","html_url":"https://github.com/michaelkirk","followers_url":"https://api.github.com/users/michaelkirk/followers","following_url":"https://api.github.com/users/michaelkirk/following{/other_user}","gists_url":"https://api.github.com/users/michaelkirk/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelkirk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelkirk/subscriptions","organizations_url":"https://api.github.com/users/michaelkirk/orgs","repos_url":"https://api.github.com/users/michaelkirk/repos","events_url":"https://api.github.com/users/michaelkirk/events{/privacy}","received_events_url":"https://api.github.com/users/michaelkirk/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/WhisperSystems/Signal-iOS/milestones/21","html_url":"https://github.com/WhisperSystems/Signal-iOS/milestones/2.4","labels_url":"https://api.github.com/repos/WhisperSystems/Signal-iOS/milestones/21/labels","id":1872332,"number":21,"title":"2.4","description":"","creator":{"login":"michaelkirk","id":217057,"avatar_url":"https://avatars.githubusercontent.com/u/217057?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelkirk","html_url":"https://github.com/michaelkirk","followers_url":"https://api.github.com/users/michaelkirk/followers","following_url":"https://api.github.com/users/michaelkirk/following{/other_user}","gists_url":"https://api.github.com/users/michaelkirk/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelkirk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelkirk/subscriptions","organizations_url":"https://api.github.com/users/michaelkirk/orgs","repos_url":"https://api.github.com/users/michaelkirk/repos","events_url":"https://api.github.com/users/michaelkirk/events{/privacy}","received_events_url":"https://api.github.com/users/michaelkirk/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":0,"state":"open","created_at":"2016-07-08T14:52:46Z","updated_at":"2016-07-17T16:05:27Z","due_on":null,"closed_at":null},"comments":3,"created_at":"2015-11-13T10:39:13Z","updated_at":"2016-07-19T09:34:23Z","closed_at":null,"body":"**Problem:** A common issue in single chats & group chats is to receive messages twice. The likely cause of most of them are issues on the message sending HTTP API that results in synchronous calls that can take some time to return. By that time, the call might time out or be interrupted by network signal dropping.\r\n\r\n**Solution:** This will be mitigated on the client-side by generating and storing the ciphertext of a given message along with the failed message in the local database.\r\n\r\nThis will prevent the message from being unnecessarily re-encrypted on when reattempting to send it. And if received twice, the receiving client will not process it a second time since keying material will already be gone. Yah, perfect forward secrecy!\r\n\r\nSome checks might need to be added to handle changes in `registrationId` or `deviceId`s.\r\n\r\nIdeally, sending messages should become an asynchronous task for the server over the WebSocket."},"comment":{"url":"https://api.github.com/repos/WhisperSystems/Signal-iOS/issues/comments/233580386","html_url":"https://github.com/WhisperSystems/Signal-iOS/issues/951#issuecomment-233580386","issue_url":"https://api.github.com/repos/WhisperSystems/Signal-iOS/issues/951","id":233580386,"user":{"login":"2-4601","id":174176,"avatar_url":"https://avatars.githubusercontent.com/u/174176?v=3","gravatar_id":"","url":"https://api.github.com/users/2-4601","html_url":"https://github.com/2-4601","followers_url":"https://api.github.com/users/2-4601/followers","following_url":"https://api.github.com/users/2-4601/following{/other_user}","gists_url":"https://api.github.com/users/2-4601/gists{/gist_id}","starred_url":"https://api.github.com/users/2-4601/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/2-4601/subscriptions","organizations_url":"https://api.github.com/users/2-4601/orgs","repos_url":"https://api.github.com/users/2-4601/repos","events_url":"https://api.github.com/users/2-4601/events{/privacy}","received_events_url":"https://api.github.com/users/2-4601/received_events","type":"User","site_admin":false},"created_at":"2016-07-19T09:34:23Z","updated_at":"2016-07-19T09:34:23Z","body":"I think double sends might some times happen when the iOS user writes a message, taps send and immediately goes to iOS home screen. Then when they return back to Signal, the message gets sent again.\r\nThis is just an observation from a non-iOS user and completely anecdotal."}}
{"actor":{"display_login":"2-4601"}}