{"action":"closed","number":1682,"pull_request":{"url":"https://api.github.com/repos/mumble-voip/mumble/pulls/1682","id":36136808,"html_url":"https://github.com/mumble-voip/mumble/pull/1682","diff_url":"https://github.com/mumble-voip/mumble/pull/1682.diff","patch_url":"https://github.com/mumble-voip/mumble/pull/1682.patch","issue_url":"https://api.github.com/repos/mumble-voip/mumble/issues/1682","number":1682,"state":"closed","locked":false,"title":"murmur grpc support","user":{"login":"bontibon","id":110883,"avatar_url":"https://avatars.githubusercontent.com/u/110883?v=3","gravatar_id":"","url":"https://api.github.com/users/bontibon","html_url":"https://github.com/bontibon","followers_url":"https://api.github.com/users/bontibon/followers","following_url":"https://api.github.com/users/bontibon/following{/other_user}","gists_url":"https://api.github.com/users/bontibon/gists{/gist_id}","starred_url":"https://api.github.com/users/bontibon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bontibon/subscriptions","organizations_url":"https://api.github.com/users/bontibon/orgs","repos_url":"https://api.github.com/users/bontibon/repos","events_url":"https://api.github.com/users/bontibon/events{/privacy}","received_events_url":"https://api.github.com/users/bontibon/received_events","type":"User","site_admin":false},"body":"This PR adds [grpc](http://grpc.io) support to murmur, as part of a [Google Summer of Code project](https://www.google-melange.com/gsoc/project/details/google/gsoc2015/timcooper/5649050225344512). The goal is to provide increased availability to murmur's RPC functionality to those who are unable to use Ice.\r\n\r\nIn order for this project to be successful, it is very important that you, the community, help in providing feedback to what I am working on. In the early stage of the project, this will be input on the structure of the protocol buffer file. For those of you who are familiar with Ice, the feel of grpc may take some getting used to. However, with your help, I'm hoping to make the API as natural as possible.\r\n\r\nIf this interests you, I would encourage you to subscribe to this PR to receive notifications about its development. Thanks!\r\n\r\n---\r\n\r\n**TODO**\r\n\r\n- Service implementations\r\n  - [x] ServerService\r\n  - [x] MetaService\r\n  - [x] ContextActionService\r\n  - [x] TextMessageService\r\n  - [x] LogService\r\n  - [x] ConfigService\r\n  - [x] ChannelService\r\n  - [x] UserService\r\n  - [x] TreeService\r\n  - [x] BanService\r\n  - [x] ACLService\r\n  - [x] AuthenticatorService\r\n  - [x] DatabaseService\r\n  - [x] AudioService\r\n- Documentation\r\n  - [x] Protocol file comments\r\n  - [x] [\"Getting started\" guide](http://wiki.mumble.info/wiki/GRPC#Sample_application)\r\n  - [x] Code comments\r\n- [x] Fix TODO items\r\n- [x] Sample application ([murmur-cli](https://github.com/layeh/murmur-cli))\r\n- Extra features (outside of the proposed scope of the project)\r\n  - [x] `TextMessageService.Filter`.\r\n  - `UserService.Ban`.\r\n  - Include client IP address, session ID in `Authenticator.Request.Authenticate`.\r\n  - Support setting textures via `UserUpdate`.\r\n  - API authentication (access APIs with keys, or maybe certificates?).\r\n  - [x] Track user context actions to prevent users from triggering actions they have not explicitly been sent.\r\n  - Have `Authenticator.Request.Find` provide a hint as to what information it is interested in.\r\n  - Add method that returns the names of available configuration options.\r\n  - Query redirect whisper groups.\r\n  - Include timestamps in streaming events messages.","created_at":"2015-05-25T12:30:45Z","updated_at":"2016-05-08T15:02:15Z","closed_at":"2016-05-08T15:02:15Z","merged_at":null,"merge_commit_sha":"28a9586f4dd72d409236ec6d94b1846936998cad","assignee":{"login":"mkrautz","id":36527,"avatar_url":"https://avatars.githubusercontent.com/u/36527?v=3","gravatar_id":"","url":"https://api.github.com/users/mkrautz","html_url":"https://github.com/mkrautz","followers_url":"https://api.github.com/users/mkrautz/followers","following_url":"https://api.github.com/users/mkrautz/following{/other_user}","gists_url":"https://api.github.com/users/mkrautz/gists{/gist_id}","starred_url":"https://api.github.com/users/mkrautz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkrautz/subscriptions","organizations_url":"https://api.github.com/users/mkrautz/orgs","repos_url":"https://api.github.com/users/mkrautz/repos","events_url":"https://api.github.com/users/mkrautz/events{/privacy}","received_events_url":"https://api.github.com/users/mkrautz/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/mumble-voip/mumble/milestones/1","html_url":"https://github.com/mumble-voip/mumble/milestones/1.3.0","labels_url":"https://api.github.com/repos/mumble-voip/mumble/milestones/1/labels","id":267303,"number":1,"title":"1.3.0","description":"http://mumble.sourceforge.net/1.3.0","creator":{"login":"Kissaki","id":93181,"avatar_url":"https://avatars.githubusercontent.com/u/93181?v=3","gravatar_id":"","url":"https://api.github.com/users/Kissaki","html_url":"https://github.com/Kissaki","followers_url":"https://api.github.com/users/Kissaki/followers","following_url":"https://api.github.com/users/Kissaki/following{/other_user}","gists_url":"https://api.github.com/users/Kissaki/gists{/gist_id}","starred_url":"https://api.github.com/users/Kissaki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kissaki/subscriptions","organizations_url":"https://api.github.com/users/Kissaki/orgs","repos_url":"https://api.github.com/users/Kissaki/repos","events_url":"https://api.github.com/users/Kissaki/events{/privacy}","received_events_url":"https://api.github.com/users/Kissaki/received_events","type":"User","site_admin":false},"open_issues":66,"closed_issues":146,"state":"open","created_at":"2013-02-14T19:05:26Z","updated_at":"2016-05-08T15:02:15Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/mumble-voip/mumble/pulls/1682/commits","review_comments_url":"https://api.github.com/repos/mumble-voip/mumble/pulls/1682/comments","review_comment_url":"https://api.github.com/repos/mumble-voip/mumble/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mumble-voip/mumble/issues/1682/comments","statuses_url":"https://api.github.com/repos/mumble-voip/mumble/statuses/6a0a32210cbc7797eecae6fc16f566a46b163c08","head":{"label":"bontibon:grpc","ref":"grpc","sha":"6a0a32210cbc7797eecae6fc16f566a46b163c08","user":{"login":"bontibon","id":110883,"avatar_url":"https://avatars.githubusercontent.com/u/110883?v=3","gravatar_id":"","url":"https://api.github.com/users/bontibon","html_url":"https://github.com/bontibon","followers_url":"https://api.github.com/users/bontibon/followers","following_url":"https://api.github.com/users/bontibon/following{/other_user}","gists_url":"https://api.github.com/users/bontibon/gists{/gist_id}","starred_url":"https://api.github.com/users/bontibon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bontibon/subscriptions","organizations_url":"https://api.github.com/users/bontibon/orgs","repos_url":"https://api.github.com/users/bontibon/repos","events_url":"https://api.github.com/users/bontibon/events{/privacy}","received_events_url":"https://api.github.com/users/bontibon/received_events","type":"User","site_admin":false},"repo":{"id":18245666,"name":"mumble","full_name":"bontibon/mumble","owner":{"login":"bontibon","id":110883,"avatar_url":"https://avatars.githubusercontent.com/u/110883?v=3","gravatar_id":"","url":"https://api.github.com/users/bontibon","html_url":"https://github.com/bontibon","followers_url":"https://api.github.com/users/bontibon/followers","following_url":"https://api.github.com/users/bontibon/following{/other_user}","gists_url":"https://api.github.com/users/bontibon/gists{/gist_id}","starred_url":"https://api.github.com/users/bontibon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bontibon/subscriptions","organizations_url":"https://api.github.com/users/bontibon/orgs","repos_url":"https://api.github.com/users/bontibon/repos","events_url":"https://api.github.com/users/bontibon/events{/privacy}","received_events_url":"https://api.github.com/users/bontibon/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bontibon/mumble","description":"Mumble VoIP Client/Server","fork":true,"url":"https://api.github.com/repos/bontibon/mumble","forks_url":"https://api.github.com/repos/bontibon/mumble/forks","keys_url":"https://api.github.com/repos/bontibon/mumble/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bontibon/mumble/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bontibon/mumble/teams","hooks_url":"https://api.github.com/repos/bontibon/mumble/hooks","issue_events_url":"https://api.github.com/repos/bontibon/mumble/issues/events{/number}","events_url":"https://api.github.com/repos/bontibon/mumble/events","assignees_url":"https://api.github.com/repos/bontibon/mumble/assignees{/user}","branches_url":"https://api.github.com/repos/bontibon/mumble/branches{/branch}","tags_url":"https://api.github.com/repos/bontibon/mumble/tags","blobs_url":"https://api.github.com/repos/bontibon/mumble/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bontibon/mumble/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bontibon/mumble/git/refs{/sha}","trees_url":"https://api.github.com/repos/bontibon/mumble/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bontibon/mumble/statuses/{sha}","languages_url":"https://api.github.com/repos/bontibon/mumble/languages","stargazers_url":"https://api.github.com/repos/bontibon/mumble/stargazers","contributors_url":"https://api.github.com/repos/bontibon/mumble/contributors","subscribers_url":"https://api.github.com/repos/bontibon/mumble/subscribers","subscription_url":"https://api.github.com/repos/bontibon/mumble/subscription","commits_url":"https://api.github.com/repos/bontibon/mumble/commits{/sha}","git_commits_url":"https://api.github.com/repos/bontibon/mumble/git/commits{/sha}","comments_url":"https://api.github.com/repos/bontibon/mumble/comments{/number}","issue_comment_url":"https://api.github.com/repos/bontibon/mumble/issues/comments{/number}","contents_url":"https://api.github.com/repos/bontibon/mumble/contents/{+path}","compare_url":"https://api.github.com/repos/bontibon/mumble/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bontibon/mumble/merges","archive_url":"https://api.github.com/repos/bontibon/mumble/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bontibon/mumble/downloads","issues_url":"https://api.github.com/repos/bontibon/mumble/issues{/number}","pulls_url":"https://api.github.com/repos/bontibon/mumble/pulls{/number}","milestones_url":"https://api.github.com/repos/bontibon/mumble/milestones{/number}","notifications_url":"https://api.github.com/repos/bontibon/mumble/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bontibon/mumble/labels{/name}","releases_url":"https://api.github.com/repos/bontibon/mumble/releases{/id}","deployments_url":"https://api.github.com/repos/bontibon/mumble/deployments","created_at":"2014-03-29T16:49:07Z","updated_at":"2016-01-13T02:16:02Z","pushed_at":"2016-05-02T20:41:05Z","git_url":"git://github.com/bontibon/mumble.git","ssh_url":"git@github.com:bontibon/mumble.git","clone_url":"https://github.com/bontibon/mumble.git","svn_url":"https://github.com/bontibon/mumble","homepage":"http://mumble.info","size":33326,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":0,"default_branch":"grpc"}},"base":{"label":"mumble-voip:master","ref":"master","sha":"a59e166c9b4bfe1d4edded7ec8ce3a6870cd2843","user":{"login":"mumble-voip","id":639008,"avatar_url":"https://avatars.githubusercontent.com/u/639008?v=3","gravatar_id":"","url":"https://api.github.com/users/mumble-voip","html_url":"https://github.com/mumble-voip","followers_url":"https://api.github.com/users/mumble-voip/followers","following_url":"https://api.github.com/users/mumble-voip/following{/other_user}","gists_url":"https://api.github.com/users/mumble-voip/gists{/gist_id}","starred_url":"https://api.github.com/users/mumble-voip/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mumble-voip/subscriptions","organizations_url":"https://api.github.com/users/mumble-voip/orgs","repos_url":"https://api.github.com/users/mumble-voip/repos","events_url":"https://api.github.com/users/mumble-voip/events{/privacy}","received_events_url":"https://api.github.com/users/mumble-voip/received_events","type":"Organization","site_admin":false},"repo":{"id":1413319,"name":"mumble","full_name":"mumble-voip/mumble","owner":{"login":"mumble-voip","id":639008,"avatar_url":"https://avatars.githubusercontent.com/u/639008?v=3","gravatar_id":"","url":"https://api.github.com/users/mumble-voip","html_url":"https://github.com/mumble-voip","followers_url":"https://api.github.com/users/mumble-voip/followers","following_url":"https://api.github.com/users/mumble-voip/following{/other_user}","gists_url":"https://api.github.com/users/mumble-voip/gists{/gist_id}","starred_url":"https://api.github.com/users/mumble-voip/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mumble-voip/subscriptions","organizations_url":"https://api.github.com/users/mumble-voip/orgs","repos_url":"https://api.github.com/users/mumble-voip/repos","events_url":"https://api.github.com/users/mumble-voip/events{/privacy}","received_events_url":"https://api.github.com/users/mumble-voip/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mumble-voip/mumble","description":"Mumble VoIP Client/Server","fork":false,"url":"https://api.github.com/repos/mumble-voip/mumble","forks_url":"https://api.github.com/repos/mumble-voip/mumble/forks","keys_url":"https://api.github.com/repos/mumble-voip/mumble/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mumble-voip/mumble/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mumble-voip/mumble/teams","hooks_url":"https://api.github.com/repos/mumble-voip/mumble/hooks","issue_events_url":"https://api.github.com/repos/mumble-voip/mumble/issues/events{/number}","events_url":"https://api.github.com/repos/mumble-voip/mumble/events","assignees_url":"https://api.github.com/repos/mumble-voip/mumble/assignees{/user}","branches_url":"https://api.github.com/repos/mumble-voip/mumble/branches{/branch}","tags_url":"https://api.github.com/repos/mumble-voip/mumble/tags","blobs_url":"https://api.github.com/repos/mumble-voip/mumble/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mumble-voip/mumble/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mumble-voip/mumble/git/refs{/sha}","trees_url":"https://api.github.com/repos/mumble-voip/mumble/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mumble-voip/mumble/statuses/{sha}","languages_url":"https://api.github.com/repos/mumble-voip/mumble/languages","stargazers_url":"https://api.github.com/repos/mumble-voip/mumble/stargazers","contributors_url":"https://api.github.com/repos/mumble-voip/mumble/contributors","subscribers_url":"https://api.github.com/repos/mumble-voip/mumble/subscribers","subscription_url":"https://api.github.com/repos/mumble-voip/mumble/subscription","commits_url":"https://api.github.com/repos/mumble-voip/mumble/commits{/sha}","git_commits_url":"https://api.github.com/repos/mumble-voip/mumble/git/commits{/sha}","comments_url":"https://api.github.com/repos/mumble-voip/mumble/comments{/number}","issue_comment_url":"https://api.github.com/repos/mumble-voip/mumble/issues/comments{/number}","contents_url":"https://api.github.com/repos/mumble-voip/mumble/contents/{+path}","compare_url":"https://api.github.com/repos/mumble-voip/mumble/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mumble-voip/mumble/merges","archive_url":"https://api.github.com/repos/mumble-voip/mumble/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mumble-voip/mumble/downloads","issues_url":"https://api.github.com/repos/mumble-voip/mumble/issues{/number}","pulls_url":"https://api.github.com/repos/mumble-voip/mumble/pulls{/number}","milestones_url":"https://api.github.com/repos/mumble-voip/mumble/milestones{/number}","notifications_url":"https://api.github.com/repos/mumble-voip/mumble/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mumble-voip/mumble/labels{/name}","releases_url":"https://api.github.com/repos/mumble-voip/mumble/releases{/id}","deployments_url":"https://api.github.com/repos/mumble-voip/mumble/deployments","created_at":"2011-02-26T01:30:08Z","updated_at":"2016-05-08T13:27:54Z","pushed_at":"2016-05-08T15:00:14Z","git_url":"git://github.com/mumble-voip/mumble.git","ssh_url":"git@github.com:mumble-voip/mumble.git","clone_url":"https://github.com/mumble-voip/mumble.git","svn_url":"https://github.com/mumble-voip/mumble","homepage":"http://www.mumble.info","size":40923,"stargazers_count":1262,"watchers_count":1262,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":395,"mirror_url":null,"open_issues_count":513,"forks":395,"open_issues":513,"watchers":1262,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mumble-voip/mumble/pulls/1682"},"html":{"href":"https://github.com/mumble-voip/mumble/pull/1682"},"issue":{"href":"https://api.github.com/repos/mumble-voip/mumble/issues/1682"},"comments":{"href":"https://api.github.com/repos/mumble-voip/mumble/issues/1682/comments"},"review_comments":{"href":"https://api.github.com/repos/mumble-voip/mumble/pulls/1682/comments"},"review_comment":{"href":"https://api.github.com/repos/mumble-voip/mumble/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mumble-voip/mumble/pulls/1682/commits"},"statuses":{"href":"https://api.github.com/repos/mumble-voip/mumble/statuses/6a0a32210cbc7797eecae6fc16f566a46b163c08"}},"merged":false,"mergeable":false,"mergeable_state":"dirty","merged_by":null,"comments":21,"review_comments":0,"commits":179,"additions":4084,"deletions":6,"changed_files":18}}