{"action":"created","comment":{"url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/comments/236418061","pull_request_review_id":178490414,"id":236418061,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNjQxODA2MQ==","diff_hunk":"@@ -0,0 +1,230 @@\n+# RPC message protection\n+\n+* Proposal: [SDL-NNNN](NNNN-rpc-message-protection.md)\n+* Author: [Zhimin Yang](https://github.com/yang1070)\n+* Status: **Awaiting review**\n+* Impacted Platforms: [Core / Android/ iOS / RPC / SDL Policy server]\n+\n+## Introduction\n+This proposal proposes a design to protect (enable encryption for) RPC messages transmitted between a mobile application and the SDL.\n+\n+## Motivation\n+Security is good but it has cost. Each OEM can evaluate the risks and require certain RPC messages must be protected, which means the messages are encrypted and transmitted in a protected SDL service between an authenticated app and a vehicle head unit. How to authenticate a mobile app and how to set up a protected SDL service is out of the scope of this proposal. SDL supports it by integrating a security library in the mobile app. This proposal provides a solution to protect certain SDL RPC messages. It includes which RPCs need protection, when to start a protected SDL RPC service and what SDL shall do with these RPCs with the protected service.\n+\n+## Proposed solution\n+\n+RPCs that need protection and RPCs that do not need protection share the same RPC service 7 with encryption enabled. \n+\n+### Background\n+\n+SDL can require a service must be protected in the `smartdevicelink.ini` file by a configuration `ForceProtectedService`. It can validate and deny the start service request. However, it cannot start a protected service by itself. The application side shall initiate a protected service.\n+\n+Currently, SDL Android API `SdlProxyBase.startProtectedRPCService` supports start a protected RPC service. SDL can keep the existing un-encrypted service open and running at the same time of starting enable the encrypted service. It does not need to stop the RPC service before `startProtectedRPCService`. SDL Android also supports setting a RPC message as encrypted or unencrypted with API `RPCStruct.setPayloadProtected(Boolean)`. Without any mobile proxy and SDL core change, android mobile apps and the SDL can send/receive both encrypted and unencrypted messages (include requests/responses/notifications) in the same protected RPC service.\n+\n+\n+### Mobile app change\n+A mobile application shall start/restart RPC service 7 with encryption enabled (by app itself or by SDL proxy, either at certain stage after app registration or when the app is activated in HMI by the driver or just before sending the first RPC message that needs encryption). \n+\n+\n+### Mobile API change\n+We add a new Boolean parameter to the existing `PermissionItem` data type. A list of `PermissionItem` will be received by the app via `OnPermissionsChange` notification, so that the app side knows which RPCs need protection.\n+\n+```xml\n+<struct name=\"PermissionItem\" since=\"2.0\">\n+    <param name=\"rpcName\" type=\"String\" maxlength=\"100\" mandatory=\"true\">\n+        <description>Name of the individual RPC in the policy table.</description>\n+    </param>\n+    <param name=\"hmiPermissions\" type=\"HMIPermissions\"  mandatory=\"true\"/>\n+    <param name=\"parameterPermissions\" type=\"ParameterPermissions\"  mandatory=\"true\"/>\n++   <param name=\"needProtection\" type=\"Boolean\"  mandatory=\"false\" since=\"5.1\"/>\n+</struct>\n+```\n+\n+We also add a new result code. SDL sends this code to a mobile app when it receives a un-encrypted PRC request message that needs protection.\n+```xml\n+<enum name=\"Result\" internal_scope=\"base\" since=\"1.0\">\n+...\n+    <element name=\"ENCRYPTION_NEEDED\" since=\"5.1\">\n+        <description>SDL receives an un-encrypted PRC request that needs protection. </description>\n+    </element>\n+</enum>\n+```\n+\n+In this proposal, we say a RPC message needs encryption/protection if the RPC has `needProtection` with value `true` in the `PermissionItem`. We say a RPC message does not need encryption/protection if the RPC has `needProtection` with value `false` or the `needProtection` does not exist in the `PermissionItem`. \n+\n+\n+Here we list existing related RPC and data types for completeness of understanding.\n+```xml\n+<function name=\"OnPermissionsChange\" functionID=\"OnPermissionsChangeID\" messagetype=\"notification\" since=\"2.0\">\n+    <description>Provides update to app of which policy-table-enabled functions are available</description>\n+    <param name=\"permissionItem\" type=\"PermissionItem\" minsize=\"0\" maxsize=\"500\" array=\"true\" mandatory=\"true\">\n+        <description>Change in permissions for a given set of RPCs</description>\n+    </param>\n+</function>\n+\n+<struct name=\"HMIPermissions\" since=\"2.0\">\n+    <param name=\"allowed\" type=\"HMILevel\" minsize=\"0\" maxsize=\"100\" array=\"true\" mandatory=\"true\">\n+        <description>A set of all HMI levels that are permitted for this given RPC.</description>\n+    </param>\n+    <param name=\"userDisallowed\" type=\"HMILevel\" minsize=\"0\" maxsize=\"100\" array=\"true\" mandatory=\"true\">\n+        <description>A set of all HMI levels that are prohibited for this given RPC.</description>\n+    </param>\n+</struct>\n+\n+<struct name=\"ParameterPermissions\" since=\"2.0\">\n+    <param name=\"allowed\" type=\"String\" minsize=\"0\" maxsize=\"100\" maxlength = \"100\" array=\"true\" mandatory=\"true\">\n+        <description>A set of all parameters that are permitted for this given RPC.</description>\n+    </param>\n+    <param name=\"userDisallowed\" type=\"String\" minsize=\"0\" maxsize=\"100\" maxlength = \"100\" array=\"true\" mandatory=\"true\">\n+        <description>A set of all parameters that are prohibited for this given RPC.</description>\n+    </param>\n+</struct>\n+```\n+\n+### Mobile proxy change (Android and iOS)\n+SDL proxy shall support sending a PRC with both encrypted and unencrypted format as it currently does if the RPC service has encryption enabled. \n+\n+SDL proxy may restart service 7 with encryption enabled in several situations. \n+-\t1. Before mobile proxy sends the first RPC message that need encryption. This works like delay loading of a dynamic library. Only when encryption is truly needed, proxy enables encryption for RPC service.  This is the latest time. \n+-\t2. After mobile proxy receives an `OnPermissionsChange` notification and there is at least one RPC needs encryption. In this case, proxy enables encryption for any potential usage. This is earliest time that the app/proxy knows it may need encryption. \n+-\t3. Sometime in between. For example, when the driver activates the app and HMI brings the app to foreground (SDL proxy receives `OnHMIStatus` notification with `hmiLevel=FULL`). Due to the fact that it may take a long time (up to a minute) to get RPC service enabled, and there is no overhead after that, we strongly recommend proxy enable encryption after the app get activated and there is at least one RPC need protection.","path":"proposals/NNNN-rpc-message-protection.md","position":null,"original_position":90,"commit_id":"35f5babbe8e7e7c06ea14292af3fe337443f5678","original_commit_id":"3a78b7cc331b77a2d89628cd6cf065ece5ff5f39","user":{"login":"yang1070","id":12255391,"node_id":"MDQ6VXNlcjEyMjU1Mzkx","avatar_url":"https://avatars1.githubusercontent.com/u/12255391?v=4","gravatar_id":"","url":"https://api.github.com/users/yang1070","html_url":"https://github.com/yang1070","followers_url":"https://api.github.com/users/yang1070/followers","following_url":"https://api.github.com/users/yang1070/following{/other_user}","gists_url":"https://api.github.com/users/yang1070/gists{/gist_id}","starred_url":"https://api.github.com/users/yang1070/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yang1070/subscriptions","organizations_url":"https://api.github.com/users/yang1070/orgs","repos_url":"https://api.github.com/users/yang1070/repos","events_url":"https://api.github.com/users/yang1070/events{/privacy}","received_events_url":"https://api.github.com/users/yang1070/received_events","type":"User","site_admin":false},"body":"updated, thanks","created_at":"2018-11-26T20:41:32Z","updated_at":"2018-11-26T20:41:33Z","html_url":"https://github.com/smartdevicelink/sdl_evolution/pull/623#discussion_r236418061","pull_request_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/623","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/comments/236418061"},"html":{"href":"https://github.com/smartdevicelink/sdl_evolution/pull/623#discussion_r236418061"},"pull_request":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/623"}},"in_reply_to_id":236402483},"pull_request":{"url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/623","id":233611741,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMzNjExNzQx","html_url":"https://github.com/smartdevicelink/sdl_evolution/pull/623","diff_url":"https://github.com/smartdevicelink/sdl_evolution/pull/623.diff","patch_url":"https://github.com/smartdevicelink/sdl_evolution/pull/623.patch","issue_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/623","number":623,"state":"open","locked":false,"title":"RPC message protection","user":{"login":"yang1070","id":12255391,"node_id":"MDQ6VXNlcjEyMjU1Mzkx","avatar_url":"https://avatars1.githubusercontent.com/u/12255391?v=4","gravatar_id":"","url":"https://api.github.com/users/yang1070","html_url":"https://github.com/yang1070","followers_url":"https://api.github.com/users/yang1070/followers","following_url":"https://api.github.com/users/yang1070/following{/other_user}","gists_url":"https://api.github.com/users/yang1070/gists{/gist_id}","starred_url":"https://api.github.com/users/yang1070/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yang1070/subscriptions","organizations_url":"https://api.github.com/users/yang1070/orgs","repos_url":"https://api.github.com/users/yang1070/repos","events_url":"https://api.github.com/users/yang1070/events{/privacy}","received_events_url":"https://api.github.com/users/yang1070/received_events","type":"User","site_admin":false},"body":"This proposal proposes a design to protect (enable encryption for) RPC messages transmitted between a mobile application and the SDL.","created_at":"2018-11-26T16:07:46Z","updated_at":"2018-11-26T20:41:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9e986ce38e79e06ef5cdf3febce4132deb954d4d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/623/commits","review_comments_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/623/comments","review_comment_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/comments{/number}","comments_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/623/comments","statuses_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/statuses/35f5babbe8e7e7c06ea14292af3fe337443f5678","head":{"label":"yang1070:rpc_protection","ref":"rpc_protection","sha":"35f5babbe8e7e7c06ea14292af3fe337443f5678","user":{"login":"yang1070","id":12255391,"node_id":"MDQ6VXNlcjEyMjU1Mzkx","avatar_url":"https://avatars1.githubusercontent.com/u/12255391?v=4","gravatar_id":"","url":"https://api.github.com/users/yang1070","html_url":"https://github.com/yang1070","followers_url":"https://api.github.com/users/yang1070/followers","following_url":"https://api.github.com/users/yang1070/following{/other_user}","gists_url":"https://api.github.com/users/yang1070/gists{/gist_id}","starred_url":"https://api.github.com/users/yang1070/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yang1070/subscriptions","organizations_url":"https://api.github.com/users/yang1070/orgs","repos_url":"https://api.github.com/users/yang1070/repos","events_url":"https://api.github.com/users/yang1070/events{/privacy}","received_events_url":"https://api.github.com/users/yang1070/received_events","type":"User","site_admin":false},"repo":{"id":159196180,"node_id":"MDEwOlJlcG9zaXRvcnkxNTkxOTYxODA=","name":"sdl_evolution","full_name":"yang1070/sdl_evolution","private":false,"owner":{"login":"yang1070","id":12255391,"node_id":"MDQ6VXNlcjEyMjU1Mzkx","avatar_url":"https://avatars1.githubusercontent.com/u/12255391?v=4","gravatar_id":"","url":"https://api.github.com/users/yang1070","html_url":"https://github.com/yang1070","followers_url":"https://api.github.com/users/yang1070/followers","following_url":"https://api.github.com/users/yang1070/following{/other_user}","gists_url":"https://api.github.com/users/yang1070/gists{/gist_id}","starred_url":"https://api.github.com/users/yang1070/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yang1070/subscriptions","organizations_url":"https://api.github.com/users/yang1070/orgs","repos_url":"https://api.github.com/users/yang1070/repos","events_url":"https://api.github.com/users/yang1070/events{/privacy}","received_events_url":"https://api.github.com/users/yang1070/received_events","type":"User","site_admin":false},"html_url":"https://github.com/yang1070/sdl_evolution","description":"Tracking and proposing changes to SDL's public APIs.","fork":true,"url":"https://api.github.com/repos/yang1070/sdl_evolution","forks_url":"https://api.github.com/repos/yang1070/sdl_evolution/forks","keys_url":"https://api.github.com/repos/yang1070/sdl_evolution/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yang1070/sdl_evolution/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yang1070/sdl_evolution/teams","hooks_url":"https://api.github.com/repos/yang1070/sdl_evolution/hooks","issue_events_url":"https://api.github.com/repos/yang1070/sdl_evolution/issues/events{/number}","events_url":"https://api.github.com/repos/yang1070/sdl_evolution/events","assignees_url":"https://api.github.com/repos/yang1070/sdl_evolution/assignees{/user}","branches_url":"https://api.github.com/repos/yang1070/sdl_evolution/branches{/branch}","tags_url":"https://api.github.com/repos/yang1070/sdl_evolution/tags","blobs_url":"https://api.github.com/repos/yang1070/sdl_evolution/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yang1070/sdl_evolution/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yang1070/sdl_evolution/git/refs{/sha}","trees_url":"https://api.github.com/repos/yang1070/sdl_evolution/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yang1070/sdl_evolution/statuses/{sha}","languages_url":"https://api.github.com/repos/yang1070/sdl_evolution/languages","stargazers_url":"https://api.github.com/repos/yang1070/sdl_evolution/stargazers","contributors_url":"https://api.github.com/repos/yang1070/sdl_evolution/contributors","subscribers_url":"https://api.github.com/repos/yang1070/sdl_evolution/subscribers","subscription_url":"https://api.github.com/repos/yang1070/sdl_evolution/subscription","commits_url":"https://api.github.com/repos/yang1070/sdl_evolution/commits{/sha}","git_commits_url":"https://api.github.com/repos/yang1070/sdl_evolution/git/commits{/sha}","comments_url":"https://api.github.com/repos/yang1070/sdl_evolution/comments{/number}","issue_comment_url":"https://api.github.com/repos/yang1070/sdl_evolution/issues/comments{/number}","contents_url":"https://api.github.com/repos/yang1070/sdl_evolution/contents/{+path}","compare_url":"https://api.github.com/repos/yang1070/sdl_evolution/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yang1070/sdl_evolution/merges","archive_url":"https://api.github.com/repos/yang1070/sdl_evolution/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yang1070/sdl_evolution/downloads","issues_url":"https://api.github.com/repos/yang1070/sdl_evolution/issues{/number}","pulls_url":"https://api.github.com/repos/yang1070/sdl_evolution/pulls{/number}","milestones_url":"https://api.github.com/repos/yang1070/sdl_evolution/milestones{/number}","notifications_url":"https://api.github.com/repos/yang1070/sdl_evolution/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yang1070/sdl_evolution/labels{/name}","releases_url":"https://api.github.com/repos/yang1070/sdl_evolution/releases{/id}","deployments_url":"https://api.github.com/repos/yang1070/sdl_evolution/deployments","created_at":"2018-11-26T16:03:30Z","updated_at":"2018-11-26T16:03:33Z","pushed_at":"2018-11-26T20:41:10Z","git_url":"git://github.com/yang1070/sdl_evolution.git","ssh_url":"git@github.com:yang1070/sdl_evolution.git","clone_url":"https://github.com/yang1070/sdl_evolution.git","svn_url":"https://github.com/yang1070/sdl_evolution","homepage":"https://smartdevicelink.github.io/sdl_evolution/","size":10284,"stargazers_count":0,"watchers_count":0,"language":"XSLT","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"smartdevicelink:master","ref":"master","sha":"f9ac24f0e3799b8dea605e0bc01ac8c26079171a","user":{"login":"smartdevicelink","id":8671397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg2NzEzOTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8671397?v=4","gravatar_id":"","url":"https://api.github.com/users/smartdevicelink","html_url":"https://github.com/smartdevicelink","followers_url":"https://api.github.com/users/smartdevicelink/followers","following_url":"https://api.github.com/users/smartdevicelink/following{/other_user}","gists_url":"https://api.github.com/users/smartdevicelink/gists{/gist_id}","starred_url":"https://api.github.com/users/smartdevicelink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smartdevicelink/subscriptions","organizations_url":"https://api.github.com/users/smartdevicelink/orgs","repos_url":"https://api.github.com/users/smartdevicelink/repos","events_url":"https://api.github.com/users/smartdevicelink/events{/privacy}","received_events_url":"https://api.github.com/users/smartdevicelink/received_events","type":"Organization","site_admin":false},"repo":{"id":63362559,"node_id":"MDEwOlJlcG9zaXRvcnk2MzM2MjU1OQ==","name":"sdl_evolution","full_name":"smartdevicelink/sdl_evolution","private":false,"owner":{"login":"smartdevicelink","id":8671397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg2NzEzOTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8671397?v=4","gravatar_id":"","url":"https://api.github.com/users/smartdevicelink","html_url":"https://github.com/smartdevicelink","followers_url":"https://api.github.com/users/smartdevicelink/followers","following_url":"https://api.github.com/users/smartdevicelink/following{/other_user}","gists_url":"https://api.github.com/users/smartdevicelink/gists{/gist_id}","starred_url":"https://api.github.com/users/smartdevicelink/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smartdevicelink/subscriptions","organizations_url":"https://api.github.com/users/smartdevicelink/orgs","repos_url":"https://api.github.com/users/smartdevicelink/repos","events_url":"https://api.github.com/users/smartdevicelink/events{/privacy}","received_events_url":"https://api.github.com/users/smartdevicelink/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/smartdevicelink/sdl_evolution","description":"Tracking and proposing changes to SDL's public APIs.","fork":false,"url":"https://api.github.com/repos/smartdevicelink/sdl_evolution","forks_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/forks","keys_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/keys{/key_id}","collaborators_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/teams","hooks_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/hooks","issue_events_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/events{/number}","events_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/events","assignees_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/assignees{/user}","branches_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/branches{/branch}","tags_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/tags","blobs_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/refs{/sha}","trees_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/trees{/sha}","statuses_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/statuses/{sha}","languages_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/languages","stargazers_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/stargazers","contributors_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/contributors","subscribers_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/subscribers","subscription_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/subscription","commits_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/commits{/sha}","git_commits_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/git/commits{/sha}","comments_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/comments{/number}","issue_comment_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/comments{/number}","contents_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/contents/{+path}","compare_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/compare/{base}...{head}","merges_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/merges","archive_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/downloads","issues_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues{/number}","pulls_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls{/number}","milestones_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/milestones{/number}","notifications_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/labels{/name}","releases_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/releases{/id}","deployments_url":"https://api.github.com/repos/smartdevicelink/sdl_evolution/deployments","created_at":"2016-07-14T19:08:19Z","updated_at":"2018-11-21T19:10:21Z","pushed_at":"2018-11-26T20:41:11Z","git_url":"git://github.com/smartdevicelink/sdl_evolution.git","ssh_url":"git@github.com:smartdevicelink/sdl_evolution.git","clone_url":"https://github.com/smartdevicelink/sdl_evolution.git","svn_url":"https://github.com/smartdevicelink/sdl_evolution","homepage":"https://smartdevicelink.github.io/sdl_evolution/","size":10307,"stargazers_count":22,"watchers_count":22,"language":"XSLT","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":84,"mirror_url":null,"archived":false,"open_issues_count":17,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":84,"open_issues":17,"watchers":22,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/623"},"html":{"href":"https://github.com/smartdevicelink/sdl_evolution/pull/623"},"issue":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/623"},"comments":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/issues/623/comments"},"review_comments":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/623/comments"},"review_comment":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/pulls/623/commits"},"statuses":{"href":"https://api.github.com/repos/smartdevicelink/sdl_evolution/statuses/35f5babbe8e7e7c06ea14292af3fe337443f5678"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"yang1070"}}