{"action":"created","comment":{"url":"https://api.github.com/repos/Informo/specs/pulls/comments/229839303","pull_request_review_id":170435340,"id":229839303,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyOTgzOTMwMw==","diff_hunk":"@@ -54,14 +57,65 @@ the Matrix room to join.\n Once a Matrix room is joined, client implementations **must** retrieve and save\n the [list of\n aliases](https://matrix.org/docs/spec/client_server/r0.4.0.html#m-room-aliases)\n-for this room. In the event of an entry node that's currently being used being\n-unreachable, clients implementations and **must** use this list to provide users\n-with an updated list of alternative entry nodes and aliases to use. The address\n-of the node managing a given alias can be retrieved through a [DNS\n-query](https://github.com/matrix-org/synapse/#setting-up-federation). Client\n-implementations **can** check for pings in order to filter out the inactive\n-nodes from this list.\n+for this Matrix room. This can be done by processing all of the `m.room.aliases`\n+events in the state of the Matrix room, each of them containing the list of\n+aliases defined for a given node. The content for such an event looks like this:\n+\n+```\n+\"aliases\": [\n+    \"#alias1:example.com\",\n+    \"#alias2:example.com\"\n+]\n+```\n+\n+The example above shows the content of the `m.room.aliases` state event for the\n+node which uses `example.com` as its server name.\n+\n+Client implementations **must** process these lists of aliases to generate a map\n+mapping all of the entry nodes for this Matrix room with the aliases they\n+provide for this room.\n+\n+### Reaching an entry node\n+\n+Because the list of aliases only list the nodes' server names, and not their\n+FQDN, a node might not be reachable at the address  In order to find the\n+effective FQDN and port to reach a node at, client implementations **must**\n+perform a DNS query on an `SRV` record for the `_matrix._tcp` sub-domain of the\n+server's name which, in the example above, would look like\n+`_matrix._tcp.example.com`. If such a record doesn't exist, client\n+implementations **shoud** consider that the node is reachable using its server\n+name as its FQDN, and the default Matrix encrypted federation port, `8448`, as\n+its port.\n \n {{% notice note %}}\n-Nodes that aren't entry nodes are named \"relay nodes\".\n+Because most Matrix homeservers can also be reached through the standard `443`\n+HTTPS port, client implementations **should** try reaching a node using this\n+port instead of the `8448` one, and fall back to the latter port (or any port\n+defined in the node's `SRV` DNS record) if closed. This would result in making\n+the network traffic generated by Informo client implementations more difficult\n+to detect and filter on.\n {{% /notice %}}\n+\n+{{% notice tip %}}\n+Web-based client implementations **can** use the [DNS over\n+HTTPS](https://tools.ietf.org/html/rfc8484) standard to perform DNS queries\n+instead of standard DNS queries which they might not be able to perform.\n+{{% /notice %}}\n+\n+In the event of an entry node that's currently being used becoming unreachable,\n+clients implementations **must** use the generated map to provide its user(s)\n+with alternative entry nodes and aliases to use. Client implementations **can**\n+use received pings in order to filter out the inactive nodes from this list.\n+\n+### Joining a federation\n+\n+Once both an entry node and a room alias have been selected as the one to use in\n+order to join a federation, whether this selection originated from an explicit\n+action by a user or, either partially or entirely, from a client\n+implementation's inner mechanisms, client implementations **must** send a [join\n+request](https://matrix.org/speculator/spec/HEAD/client_server/unstable.html#post-matrix-client-r0-join-roomidoralias)\n+to the selected node using the selected alias.\n+\n+## Other types of nodes\n+\n+Nodes that aren't entry nodes are named \"relay nodes\".","path":"content/information-distribution/node.md","position":90,"original_position":90,"commit_id":"37187cf6ad3c1a4f650dad2582b974154cb4f3ac","original_commit_id":"32309c78549744c4ca1aa4bce5528d116f6fc551","user":{"login":"vabd","id":34184120,"node_id":"MDQ6VXNlcjM0MTg0MTIw","avatar_url":"https://avatars1.githubusercontent.com/u/34184120?v=4","gravatar_id":"","url":"https://api.github.com/users/vabd","html_url":"https://github.com/vabd","followers_url":"https://api.github.com/users/vabd/followers","following_url":"https://api.github.com/users/vabd/following{/other_user}","gists_url":"https://api.github.com/users/vabd/gists{/gist_id}","starred_url":"https://api.github.com/users/vabd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vabd/subscriptions","organizations_url":"https://api.github.com/users/vabd/orgs","repos_url":"https://api.github.com/users/vabd/repos","events_url":"https://api.github.com/users/vabd/events{/privacy}","received_events_url":"https://api.github.com/users/vabd/received_events","type":"User","site_admin":false},"body":"Act as a relay. If `A` can't reach `B` but can reach `C`, even if `C` isn't an entry node, `A`'s information will eventually manage to reach `B` via `C` (thanks to pings).","created_at":"2018-10-31T19:37:40Z","updated_at":"2018-10-31T19:39:42Z","html_url":"https://github.com/Informo/specs/pull/2#discussion_r229839303","pull_request_url":"https://api.github.com/repos/Informo/specs/pulls/2","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/Informo/specs/pulls/comments/229839303"},"html":{"href":"https://github.com/Informo/specs/pull/2#discussion_r229839303"},"pull_request":{"href":"https://api.github.com/repos/Informo/specs/pulls/2"}},"in_reply_to_id":229822886},"pull_request":{"url":"https://api.github.com/repos/Informo/specs/pulls/2","id":227340312,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI3MzQwMzEy","html_url":"https://github.com/Informo/specs/pull/2","diff_url":"https://github.com/Informo/specs/pull/2.diff","patch_url":"https://github.com/Informo/specs/pull/2.patch","issue_url":"https://api.github.com/repos/Informo/specs/issues/2","number":2,"state":"open","locked":false,"title":"Phase 2: Nodes","user":{"login":"vabd","id":34184120,"node_id":"MDQ6VXNlcjM0MTg0MTIw","avatar_url":"https://avatars1.githubusercontent.com/u/34184120?v=4","gravatar_id":"","url":"https://api.github.com/users/vabd","html_url":"https://github.com/vabd","followers_url":"https://api.github.com/users/vabd/followers","following_url":"https://api.github.com/users/vabd/following{/other_user}","gists_url":"https://api.github.com/users/vabd/gists{/gist_id}","starred_url":"https://api.github.com/users/vabd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vabd/subscriptions","organizations_url":"https://api.github.com/users/vabd/orgs","repos_url":"https://api.github.com/users/vabd/repos","events_url":"https://api.github.com/users/vabd/events{/privacy}","received_events_url":"https://api.github.com/users/vabd/received_events","type":"User","site_admin":false},"body":"Completion of the nodes' description page, aka the phase 2/complete form.","created_at":"2018-10-31T15:48:18Z","updated_at":"2018-10-31T19:39:41Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ed1c432ba74f83651fc070bce5717789d07641aa","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":1088923856,"node_id":"MDU6TGFiZWwxMDg4OTIzODU2","url":"https://api.github.com/repos/Informo/specs/labels/scsp:review","name":"scsp:review","color":"f5f8ae","default":false},{"id":1088922816,"node_id":"MDU6TGFiZWwxMDg4OTIyODE2","url":"https://api.github.com/repos/Informo/specs/labels/type:behaviour","name":"type:behaviour","color":"cfcfcf","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Informo/specs/pulls/2/commits","review_comments_url":"https://api.github.com/repos/Informo/specs/pulls/2/comments","review_comment_url":"https://api.github.com/repos/Informo/specs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Informo/specs/issues/2/comments","statuses_url":"https://api.github.com/repos/Informo/specs/statuses/37187cf6ad3c1a4f650dad2582b974154cb4f3ac","head":{"label":"Informo:vabd/nodes-p2","ref":"vabd/nodes-p2","sha":"37187cf6ad3c1a4f650dad2582b974154cb4f3ac","user":{"login":"Informo","id":34184183,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0MTg0MTgz","avatar_url":"https://avatars3.githubusercontent.com/u/34184183?v=4","gravatar_id":"","url":"https://api.github.com/users/Informo","html_url":"https://github.com/Informo","followers_url":"https://api.github.com/users/Informo/followers","following_url":"https://api.github.com/users/Informo/following{/other_user}","gists_url":"https://api.github.com/users/Informo/gists{/gist_id}","starred_url":"https://api.github.com/users/Informo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Informo/subscriptions","organizations_url":"https://api.github.com/users/Informo/orgs","repos_url":"https://api.github.com/users/Informo/repos","events_url":"https://api.github.com/users/Informo/events{/privacy}","received_events_url":"https://api.github.com/users/Informo/received_events","type":"Organization","site_admin":false},"repo":{"id":150414149,"node_id":"MDEwOlJlcG9zaXRvcnkxNTA0MTQxNDk=","name":"specs","full_name":"Informo/specs","private":false,"owner":{"login":"Informo","id":34184183,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0MTg0MTgz","avatar_url":"https://avatars3.githubusercontent.com/u/34184183?v=4","gravatar_id":"","url":"https://api.github.com/users/Informo","html_url":"https://github.com/Informo","followers_url":"https://api.github.com/users/Informo/followers","following_url":"https://api.github.com/users/Informo/following{/other_user}","gists_url":"https://api.github.com/users/Informo/gists{/gist_id}","starred_url":"https://api.github.com/users/Informo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Informo/subscriptions","organizations_url":"https://api.github.com/users/Informo/orgs","repos_url":"https://api.github.com/users/Informo/repos","events_url":"https://api.github.com/users/Informo/events{/privacy}","received_events_url":"https://api.github.com/users/Informo/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Informo/specs","description":"Informo specifications","fork":false,"url":"https://api.github.com/repos/Informo/specs","forks_url":"https://api.github.com/repos/Informo/specs/forks","keys_url":"https://api.github.com/repos/Informo/specs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Informo/specs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Informo/specs/teams","hooks_url":"https://api.github.com/repos/Informo/specs/hooks","issue_events_url":"https://api.github.com/repos/Informo/specs/issues/events{/number}","events_url":"https://api.github.com/repos/Informo/specs/events","assignees_url":"https://api.github.com/repos/Informo/specs/assignees{/user}","branches_url":"https://api.github.com/repos/Informo/specs/branches{/branch}","tags_url":"https://api.github.com/repos/Informo/specs/tags","blobs_url":"https://api.github.com/repos/Informo/specs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Informo/specs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Informo/specs/git/refs{/sha}","trees_url":"https://api.github.com/repos/Informo/specs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Informo/specs/statuses/{sha}","languages_url":"https://api.github.com/repos/Informo/specs/languages","stargazers_url":"https://api.github.com/repos/Informo/specs/stargazers","contributors_url":"https://api.github.com/repos/Informo/specs/contributors","subscribers_url":"https://api.github.com/repos/Informo/specs/subscribers","subscription_url":"https://api.github.com/repos/Informo/specs/subscription","commits_url":"https://api.github.com/repos/Informo/specs/commits{/sha}","git_commits_url":"https://api.github.com/repos/Informo/specs/git/commits{/sha}","comments_url":"https://api.github.com/repos/Informo/specs/comments{/number}","issue_comment_url":"https://api.github.com/repos/Informo/specs/issues/comments{/number}","contents_url":"https://api.github.com/repos/Informo/specs/contents/{+path}","compare_url":"https://api.github.com/repos/Informo/specs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Informo/specs/merges","archive_url":"https://api.github.com/repos/Informo/specs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Informo/specs/downloads","issues_url":"https://api.github.com/repos/Informo/specs/issues{/number}","pulls_url":"https://api.github.com/repos/Informo/specs/pulls{/number}","milestones_url":"https://api.github.com/repos/Informo/specs/milestones{/number}","notifications_url":"https://api.github.com/repos/Informo/specs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Informo/specs/labels{/name}","releases_url":"https://api.github.com/repos/Informo/specs/releases{/id}","deployments_url":"https://api.github.com/repos/Informo/specs/deployments","created_at":"2018-09-26T11:13:04Z","updated_at":"2018-10-31T19:26:42Z","pushed_at":"2018-10-31T19:39:16Z","git_url":"git://github.com/Informo/specs.git","ssh_url":"git@github.com:Informo/specs.git","clone_url":"https://github.com/Informo/specs.git","svn_url":"https://github.com/Informo/specs","homepage":"https://specs.informo.network","size":163,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":1,"watchers":1,"default_branch":"master"}},"base":{"label":"Informo:master","ref":"master","sha":"2619e007ba11acc18fc3bf366314dd3ada578198","user":{"login":"Informo","id":34184183,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0MTg0MTgz","avatar_url":"https://avatars3.githubusercontent.com/u/34184183?v=4","gravatar_id":"","url":"https://api.github.com/users/Informo","html_url":"https://github.com/Informo","followers_url":"https://api.github.com/users/Informo/followers","following_url":"https://api.github.com/users/Informo/following{/other_user}","gists_url":"https://api.github.com/users/Informo/gists{/gist_id}","starred_url":"https://api.github.com/users/Informo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Informo/subscriptions","organizations_url":"https://api.github.com/users/Informo/orgs","repos_url":"https://api.github.com/users/Informo/repos","events_url":"https://api.github.com/users/Informo/events{/privacy}","received_events_url":"https://api.github.com/users/Informo/received_events","type":"Organization","site_admin":false},"repo":{"id":150414149,"node_id":"MDEwOlJlcG9zaXRvcnkxNTA0MTQxNDk=","name":"specs","full_name":"Informo/specs","private":false,"owner":{"login":"Informo","id":34184183,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM0MTg0MTgz","avatar_url":"https://avatars3.githubusercontent.com/u/34184183?v=4","gravatar_id":"","url":"https://api.github.com/users/Informo","html_url":"https://github.com/Informo","followers_url":"https://api.github.com/users/Informo/followers","following_url":"https://api.github.com/users/Informo/following{/other_user}","gists_url":"https://api.github.com/users/Informo/gists{/gist_id}","starred_url":"https://api.github.com/users/Informo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Informo/subscriptions","organizations_url":"https://api.github.com/users/Informo/orgs","repos_url":"https://api.github.com/users/Informo/repos","events_url":"https://api.github.com/users/Informo/events{/privacy}","received_events_url":"https://api.github.com/users/Informo/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Informo/specs","description":"Informo specifications","fork":false,"url":"https://api.github.com/repos/Informo/specs","forks_url":"https://api.github.com/repos/Informo/specs/forks","keys_url":"https://api.github.com/repos/Informo/specs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Informo/specs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Informo/specs/teams","hooks_url":"https://api.github.com/repos/Informo/specs/hooks","issue_events_url":"https://api.github.com/repos/Informo/specs/issues/events{/number}","events_url":"https://api.github.com/repos/Informo/specs/events","assignees_url":"https://api.github.com/repos/Informo/specs/assignees{/user}","branches_url":"https://api.github.com/repos/Informo/specs/branches{/branch}","tags_url":"https://api.github.com/repos/Informo/specs/tags","blobs_url":"https://api.github.com/repos/Informo/specs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Informo/specs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Informo/specs/git/refs{/sha}","trees_url":"https://api.github.com/repos/Informo/specs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Informo/specs/statuses/{sha}","languages_url":"https://api.github.com/repos/Informo/specs/languages","stargazers_url":"https://api.github.com/repos/Informo/specs/stargazers","contributors_url":"https://api.github.com/repos/Informo/specs/contributors","subscribers_url":"https://api.github.com/repos/Informo/specs/subscribers","subscription_url":"https://api.github.com/repos/Informo/specs/subscription","commits_url":"https://api.github.com/repos/Informo/specs/commits{/sha}","git_commits_url":"https://api.github.com/repos/Informo/specs/git/commits{/sha}","comments_url":"https://api.github.com/repos/Informo/specs/comments{/number}","issue_comment_url":"https://api.github.com/repos/Informo/specs/issues/comments{/number}","contents_url":"https://api.github.com/repos/Informo/specs/contents/{+path}","compare_url":"https://api.github.com/repos/Informo/specs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Informo/specs/merges","archive_url":"https://api.github.com/repos/Informo/specs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Informo/specs/downloads","issues_url":"https://api.github.com/repos/Informo/specs/issues{/number}","pulls_url":"https://api.github.com/repos/Informo/specs/pulls{/number}","milestones_url":"https://api.github.com/repos/Informo/specs/milestones{/number}","notifications_url":"https://api.github.com/repos/Informo/specs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Informo/specs/labels{/name}","releases_url":"https://api.github.com/repos/Informo/specs/releases{/id}","deployments_url":"https://api.github.com/repos/Informo/specs/deployments","created_at":"2018-09-26T11:13:04Z","updated_at":"2018-10-31T19:26:42Z","pushed_at":"2018-10-31T19:39:16Z","git_url":"git://github.com/Informo/specs.git","ssh_url":"git@github.com:Informo/specs.git","clone_url":"https://github.com/Informo/specs.git","svn_url":"https://github.com/Informo/specs","homepage":"https://specs.informo.network","size":163,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":1,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Informo/specs/pulls/2"},"html":{"href":"https://github.com/Informo/specs/pull/2"},"issue":{"href":"https://api.github.com/repos/Informo/specs/issues/2"},"comments":{"href":"https://api.github.com/repos/Informo/specs/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/Informo/specs/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/Informo/specs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Informo/specs/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/Informo/specs/statuses/37187cf6ad3c1a4f650dad2582b974154cb4f3ac"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"vabd"}}