Add DNS Handshake section to README

This commit is contained in:
netkas 2024-09-02 19:04:51 -04:00
parent 91a8e8ae8b
commit ed6f5477c1
2 changed files with 132 additions and 34 deletions

149
.idea/workspace.xml generated
View file

@ -4,21 +4,9 @@
<option name="autoReloadType" value="SELECTIVE" /> <option name="autoReloadType" value="SELECTIVE" />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="18345731-10ed-4927-8692-8685f20e33be" name="Changes" comment="Removed stuff"> <list default="true" id="18345731-10ed-4927-8692-8685f20e33be" name="Changes" comment="Corrected Error tables as messages itself can be descriptive, but the code remains the same">
<change afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/c.list" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/cfg/buildprofiles.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/images/decentralized.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/images/peer2peer.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/s.tree" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/topics/LICENSE.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/topics/RPC-Communication.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/topics/Speficiations.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/topics/UUID-v4.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/topics/starter-topic.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/v.list" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Writerside/writerside.cfg" beforeDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -91,9 +79,9 @@
</map> </map>
</option> </option>
</component> </component>
<component name="ProjectColorInfo"><![CDATA[{ <component name="ProjectColorInfo">{
"associatedIndex": 6 &quot;associatedIndex&quot;: 6
}]]></component> }</component>
<component name="ProjectId" id="2lWgQfEpxIfOsaEIDScN13jtcTJ" /> <component name="ProjectId" id="2lWgQfEpxIfOsaEIDScN13jtcTJ" />
<component name="ProjectLevelVcsManager"> <component name="ProjectLevelVcsManager">
<ConfirmationsSetting value="2" id="Add" /> <ConfirmationsSetting value="2" id="Add" />
@ -104,24 +92,33 @@
<option name="showMembers" value="true" /> <option name="showMembers" value="true" />
<option name="showVisibilityIcons" value="true" /> <option name="showVisibilityIcons" value="true" />
</component> </component>
<component name="PropertiesComponent"><![CDATA[{ <component name="PropertiesComponent">{
"keyToString": { &quot;keyToString&quot;: {
"RunOnceActivity.ShowReadmeOnStart": "true", &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
"dart.analysis.tool.window.visible": "false", &quot;dart.analysis.tool.window.visible&quot;: &quot;false&quot;,
"git-widget-placeholder": "master", &quot;git-widget-placeholder&quot;: &quot;master&quot;,
"nodejs_package_manager_path": "npm", &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
"vue.rearranger.settings.migration": "true" &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
}, },
"keyToStringList": { &quot;keyToStringList&quot;: {
"stardust.markdown.MarkdownSplitEditorSuppressor:keyList": [ &quot;stardust.markdown.MarkdownSplitEditorSuppressor:keyList&quot;: [
"C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/LICENSE.md", &quot;C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/LICENSE.md&quot;,
"C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/RPC-Communication.md", &quot;C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/RPC-Communication.md&quot;,
"C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/Speficiations.md", &quot;C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/Speficiations.md&quot;,
"C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/UUID-v4.md", &quot;C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/UUID-v4.md&quot;,
"C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/starter-topic.md" &quot;C:/Users/Netkas/WritersideProjects/socialbox-standard/Writerside/topics/starter-topic.md&quot;
] ]
} }
}]]></component> }</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\Users\Netkas\WritersideProjects\socialbox-standard\images" />
</key>
</component>
<component name="SharedIndexes"> <component name="SharedIndexes">
<attachedChunks> <attachedChunks>
<set> <set>
@ -138,8 +135,82 @@
<option name="number" value="Default" /> <option name="number" value="Default" />
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1725301232290</updated> <updated>1725301232290</updated>
<workItem from="1725301233351" duration="16000" /> <workItem from="1725301233351" duration="4877000" />
<workItem from="1725312281181" duration="918000" />
</task> </task>
<task id="LOCAL-00001" summary="Nothing ever went wrong with plain-old markdown, right?">
<option name="closed" value="true" />
<created>1725301320766</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1725301320766</updated>
</task>
<task id="LOCAL-00002" summary="Added missing images">
<option name="closed" value="true" />
<created>1725301413291</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1725301413291</updated>
</task>
<task id="LOCAL-00003" summary="Added RPC Communication &amp; Error Codes">
<option name="closed" value="true" />
<created>1725303392965</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1725303392965</updated>
</task>
<task id="LOCAL-00004" summary="Updated .gitignore">
<option name="closed" value="true" />
<created>1725303438083</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1725303438083</updated>
</task>
<task id="LOCAL-00005" summary="Corrected missing information">
<option name="closed" value="true" />
<created>1725303543837</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1725303543837</updated>
</task>
<task id="LOCAL-00006" summary="Add link to JSON-RPC 2.0 specification in README">
<option name="closed" value="true" />
<created>1725303621421</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1725303621421</updated>
</task>
<task id="LOCAL-00007" summary="Add HTTP status codes section as part of the RPC implementation">
<option name="closed" value="true" />
<created>1725304137750</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1725304137750</updated>
</task>
<task id="LOCAL-00008" summary="Added footnote for RPC errors under RPC Communication &gt; Notification &amp; Request-Response communication">
<option name="closed" value="true" />
<created>1725304381274</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1725304381274</updated>
</task>
<task id="LOCAL-00009" summary="Corrected Error tables as messages itself can be descriptive, but the code remains the same">
<option name="closed" value="true" />
<created>1725305307476</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1725305307476</updated>
</task>
<option name="localTasksCounter" value="10" />
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
@ -147,6 +218,16 @@
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="Removed stuff" /> <MESSAGE value="Removed stuff" />
<option name="LAST_COMMIT_MESSAGE" value="Removed stuff" /> <MESSAGE value="Nothing ever went wrong with plain-old markdown, right?" />
<MESSAGE value="Added missing images" />
<MESSAGE value="Added RPC Communication &amp; Error Codes" />
<MESSAGE value="Updated .gitignore" />
<MESSAGE value="Corrected missing information" />
<MESSAGE value="Add link to JSON-RPC 2.0 specification in README" />
<MESSAGE value="Added HTTP status codes " />
<MESSAGE value="Add HTTP status codes section as part of the RPC implementation" />
<MESSAGE value="Added footnote for RPC errors under RPC Communication &gt; Notification &amp; Request-Response communication" />
<MESSAGE value="Corrected Error tables as messages itself can be descriptive, but the code remains the same" />
<option name="LAST_COMMIT_MESSAGE" value="Corrected Error tables as messages itself can be descriptive, but the code remains the same" />
</component> </component>
</project> </project>

View file

@ -53,6 +53,7 @@ This project is licensed under GNU Free Documentation License v1.3, see the [LIC
* [Table of contents](#table-of-contents) * [Table of contents](#table-of-contents)
* [Specifications](#specifications) * [Specifications](#specifications)
* [UUID v4](#uuid-v4) * [UUID v4](#uuid-v4)
* [DNS Handshake](#dns-handshake)
* [RPC Communication](#rpc-communication) * [RPC Communication](#rpc-communication)
* [Notification & Request-Response Communication](#notification--request-response-communication) * [Notification & Request-Response Communication](#notification--request-response-communication)
* [Request Object](#request-object) * [Request Object](#request-object)
@ -89,6 +90,22 @@ consumed for the variant.
Source: [Wikipedia](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)) Source: [Wikipedia](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random))
## DNS Handshake
When a client wants to connect to a Socialbox server, it first needs to perform a DNS handshake to discover the server
URL. Typically, the Socialbox server is hosted on a subdomain like socialbox.example.com. To determine this, the client
must first resolve the main domain, example.com, and get a TXT record that contains the URL of the Socialbox instance.
The required TXT record should be placed in the main domains DNS records with this format:
```text
example.com. IN TXT "socialbox=socialbox.example.com"
```
Here, socialbox is the key, and the value is the URL of the Socialbox instance. The client resolves the main domain to
retrieve the TXT record, which then provides the URL of the Socialbox server.The client uses this URL to establish a
connection to the Socialbox server. This process allows the client to dynamically discover the server URL.
## RPC Communication ## RPC Communication
Socialbox employs JSON-RPC over HTTP for server-client & server-server communication. JSON-RPC is a stateless, Socialbox employs JSON-RPC over HTTP for server-client & server-server communication. JSON-RPC is a stateless,