<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hlwiki.com/index.php?action=history&amp;feed=atom&amp;title=Hotsprings_Protocol</id>
	<title>Hotsprings Protocol - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://hlwiki.com/index.php?action=history&amp;feed=atom&amp;title=Hotsprings_Protocol"/>
	<link rel="alternate" type="text/html" href="https://hlwiki.com/index.php?title=Hotsprings_Protocol&amp;action=history"/>
	<updated>2026-05-02T19:03:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://hlwiki.com/index.php?title=Hotsprings_Protocol&amp;diff=308&amp;oldid=prev</id>
		<title>Lostarch: Updating Hotsprings Protocol</title>
		<link rel="alternate" type="text/html" href="https://hlwiki.com/index.php?title=Hotsprings_Protocol&amp;diff=308&amp;oldid=prev"/>
		<updated>2026-03-03T20:00:15Z</updated>

		<summary type="html">&lt;p&gt;Updating Hotsprings Protocol&lt;/p&gt;
&lt;a href=&quot;https://hlwiki.com/index.php?title=Hotsprings_Protocol&amp;amp;diff=308&amp;amp;oldid=306&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Lostarch</name></author>
	</entry>
	<entry>
		<id>https://hlwiki.com/index.php?title=Hotsprings_Protocol&amp;diff=306&amp;oldid=prev</id>
		<title>Lostarch: Created page with &quot;__TOC__  == Protocol Overview == The Hotline client provides end-user services (chat, messaging, file services), while the server facilitates communication between connected clients. The Tracker application stores and provides lists of available servers. All communication occurs via TCP/IP.  === Port Assignments === IP port number, set in the Hotline client for a specific server, is called the &#039;&#039;&#039;base port number&#039;&#039;&#039;. Additional ports are determined relative to this:  {|...&quot;</title>
		<link rel="alternate" type="text/html" href="https://hlwiki.com/index.php?title=Hotsprings_Protocol&amp;diff=306&amp;oldid=prev"/>
		<updated>2026-03-03T18:44:26Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;__TOC__  == Protocol Overview == The Hotline client provides end-user services (chat, messaging, file services), while the server facilitates communication between connected clients. The Tracker application stores and provides lists of available servers. All communication occurs via TCP/IP.  === Port Assignments === IP port number, set in the Hotline client for a specific server, is called the &amp;#039;&amp;#039;&amp;#039;base port number&amp;#039;&amp;#039;&amp;#039;. Additional ports are determined relative to this:  {|...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== Protocol Overview ==&lt;br /&gt;
The Hotline client provides end-user services (chat, messaging, file services), while the server facilitates communication between connected clients. The Tracker application stores and provides lists of available servers. All communication occurs via TCP/IP.&lt;br /&gt;
&lt;br /&gt;
=== Port Assignments ===&lt;br /&gt;
IP port number, set in the Hotline client for a specific server, is called the &amp;#039;&amp;#039;&amp;#039;base port number&amp;#039;&amp;#039;&amp;#039;. Additional ports are determined relative to this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Port !! Usage&lt;br /&gt;
|-&lt;br /&gt;
| Base port || Regular transactions&lt;br /&gt;
|-&lt;br /&gt;
| Base port + 1 || Upload/download&lt;br /&gt;
|-&lt;br /&gt;
| Base port + 2 || HTTP tunneling (transactions)&lt;br /&gt;
|-&lt;br /&gt;
| Base port + 3 || HTTP tunneling (files)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; Numeric data is always transmitted in &amp;#039;&amp;#039;&amp;#039;network byte order (big-endian)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Session Initialization ==&lt;br /&gt;
Both parties perform a handshake (TRTP) to identify protocols and versions. If capabilities do not comply, the connection is dropped.&lt;br /&gt;
&lt;br /&gt;
=== Client Request ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description !! Size !! Data !! Note&lt;br /&gt;
|-&lt;br /&gt;
| Protocol ID || 4 || &amp;#039;TRTP&amp;#039; || 0x54525450&lt;br /&gt;
|-&lt;br /&gt;
| Sub-protocol ID || 4 || || User defined&lt;br /&gt;
|-&lt;br /&gt;
| Version || 2 || 1 || Currently 1&lt;br /&gt;
|-&lt;br /&gt;
| Sub-version || 2 || || User defined&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Server Reply ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description !! Size !! Data !! Note&lt;br /&gt;
|-&lt;br /&gt;
| Protocol ID || 4 || &amp;#039;TRTP&amp;#039; ||&lt;br /&gt;
|-&lt;br /&gt;
| Error code || 4 || || 0 = no error&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Transaction Structure ==&lt;br /&gt;
Communication consists of sending and receiving transactions composed of a header and a parameter list.&lt;br /&gt;
&lt;br /&gt;
=== Transaction Header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description !! Size !! Data !! Note&lt;br /&gt;
|-&lt;br /&gt;
| Flags || 1 || 0 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| Is reply || 1 || 0 or 1 || Request (0) or reply (1)&lt;br /&gt;
|-&lt;br /&gt;
| Type || 2 || || Requested operation ID&lt;br /&gt;
|-&lt;br /&gt;
| ID || 4 || Not 0 || Unique transaction ID&lt;br /&gt;
|-&lt;br /&gt;
| Error code || 4 || || 0 = no error&lt;br /&gt;
|-&lt;br /&gt;
| Total size || 4 || || Total data size&lt;br /&gt;
|-&lt;br /&gt;
| Data size || 4 || || Size of this part&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Parameter List &amp;amp; Field Structure ===&lt;br /&gt;
Transactions contain a 2-byte field for the &amp;#039;&amp;#039;&amp;#039;Number of parameters&amp;#039;&amp;#039;&amp;#039;, followed by the parameters themselves:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Field ID:&amp;#039;&amp;#039;&amp;#039; 2 bytes&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Field size:&amp;#039;&amp;#039;&amp;#039; 2 bytes&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Field data:&amp;#039;&amp;#039;&amp;#039; Variable size (Integer, String, or Binary)&lt;br /&gt;
&lt;br /&gt;
== Transaction Types ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
! ID !! Type !! Initiator !! Constant&lt;br /&gt;
|-&lt;br /&gt;
| 101 || Get messages || Client || &amp;lt;nowiki&amp;gt;myTran_GetMsgs&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 102 || New message || Server || &amp;lt;nowiki&amp;gt;myTran_NewMsg&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 105 || Send chat || Client || &amp;lt;nowiki&amp;gt;myTran_ChatSend&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 106 || Chat message || Server || &amp;lt;nowiki&amp;gt;myTran_ChatMsg&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 107 || Login || Client || &amp;lt;nowiki&amp;gt;myTran_Login&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 108 || Send instant message || Client || &amp;lt;nowiki&amp;gt;myTran_SendInstantMsg&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 110 || Disconnect user || Client || &amp;lt;nowiki&amp;gt;myTran_DisconnectUser&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 115 || Join chat || Client || &amp;lt;nowiki&amp;gt;myTran_JoinChat&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 200 || Get file name list || Client || &amp;lt;nowiki&amp;gt;myTran_GetFileNameList&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 202 || Download file || Client || &amp;lt;nowiki&amp;gt;myTran_DownloadFile&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 300 || Get user name list || Client || &amp;lt;nowiki&amp;gt;myTran_GetUserNameList&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Detailed Transaction Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Login (107) ===&lt;br /&gt;
Starts the login sequence with the server.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Constant:&amp;#039;&amp;#039;&amp;#039; &amp;lt;nowiki&amp;gt;myTran_Login&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Initiator:&amp;#039;&amp;#039;&amp;#039; Client&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fields in Request:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ID !! Field Name !! Note&lt;br /&gt;
|-&lt;br /&gt;
| 105 || User login ||&lt;br /&gt;
|-&lt;br /&gt;
| 106 || User password ||&lt;br /&gt;
|-&lt;br /&gt;
| 160 || Version || Currently 151&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fields in Reply:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ID !! Field Name !! Note&lt;br /&gt;
|-&lt;br /&gt;
| 160 || Version ||&lt;br /&gt;
|-&lt;br /&gt;
| 161 || Banner ID || If version &amp;gt;= 151&lt;br /&gt;
|-&lt;br /&gt;
| 162 || Server name || If version &amp;gt;= 151&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Send Chat (105) ===&lt;br /&gt;
Sends a message to the public chat.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Constant:&amp;#039;&amp;#039;&amp;#039; &amp;lt;nowiki&amp;gt;myTran_ChatSend&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Access:&amp;#039;&amp;#039;&amp;#039; Send Chat (10)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Initiator:&amp;#039;&amp;#039;&amp;#039; Client&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Fields in Request:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ID !! Field Name !! Note&lt;br /&gt;
|-&lt;br /&gt;
| 101 || Data || Chat message string&lt;br /&gt;
|-&lt;br /&gt;
| 109 || Chat options || Optional - Normal (0) or Alternate (1)&lt;br /&gt;
|-&lt;br /&gt;
| 114 || Chat ID || Optional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flattened File Object (FILP) ==&lt;br /&gt;
Used in file transfers (Transactions 202, 203, 210, 213). It uses a fork-based structure:&lt;br /&gt;
&lt;br /&gt;
=== Flat File Header ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Format:&amp;#039;&amp;#039;&amp;#039; &amp;#039;FILP&amp;#039; (0x46494C50)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 2 bytes (1)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fork Count:&amp;#039;&amp;#039;&amp;#039; 2 bytes (Currently 2)&lt;br /&gt;
&lt;br /&gt;
=== Information Fork (INFO) ===&lt;br /&gt;
Contains metadata:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Platform:&amp;#039;&amp;#039;&amp;#039; &amp;#039;AMAC&amp;#039; (Mac) or &amp;#039;MWIN&amp;#039; (Windows)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Type/Creator:&amp;#039;&amp;#039;&amp;#039; 4-byte signatures&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Create/Modify Dates:&amp;#039;&amp;#039;&amp;#039; 8 bytes each&lt;br /&gt;
&lt;br /&gt;
=== Data Fork (DATA) ===&lt;br /&gt;
Contains the actual file content.&lt;br /&gt;
&lt;br /&gt;
== Access Privileges ==&lt;br /&gt;
Represented as a 64-bit bitmap (Field 110).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bit !! Name !! Constant !! Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Delete File || &amp;lt;nowiki&amp;gt;myAcc_DeleteFile&amp;lt;/nowiki&amp;gt; || folder&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Upload File || &amp;lt;nowiki&amp;gt;myAcc_UploadFile&amp;lt;/nowiki&amp;gt; || general&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Download File || &amp;lt;nowiki&amp;gt;myAcc_DownloadFile&amp;lt;/nowiki&amp;gt; || general&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Read Chat || &amp;lt;nowiki&amp;gt;myAcc_ReadChat&amp;lt;/nowiki&amp;gt; || general&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Send Chat || &amp;lt;nowiki&amp;gt;myAcc_SendChat&amp;lt;/nowiki&amp;gt; || general&lt;br /&gt;
|-&lt;br /&gt;
| 22 || Disconnect User || &amp;lt;nowiki&amp;gt;myAcc_DisconUser&amp;lt;/nowiki&amp;gt; || general&lt;br /&gt;
|-&lt;br /&gt;
| 32 || Broadcast || &amp;lt;nowiki&amp;gt;myAcc_Broadcast&amp;lt;/nowiki&amp;gt; || general&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tracker Interface ==&lt;br /&gt;
Trackers facilitate server discovery.&lt;br /&gt;
&lt;br /&gt;
=== Server List Record ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Description !! Size !! Note&lt;br /&gt;
|-&lt;br /&gt;
| IP address || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| IP port number || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| Number of users || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| Name size/data || Var || Server Name&lt;br /&gt;
|-&lt;br /&gt;
| Desc size/data || Var || Server Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HTTP Tunneling ==&lt;br /&gt;
Used when TCP is blocked. Utilizes &amp;#039;&amp;#039;&amp;#039;GET&amp;#039;&amp;#039;&amp;#039; (receiving) and &amp;#039;&amp;#039;&amp;#039;POST&amp;#039;&amp;#039;&amp;#039; (sending) requests via a proxy. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MIME Type:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;hotline/protocol&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Header:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Code 0:&amp;#039;&amp;#039;&amp;#039; Pending Disconnect&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Code 1:&amp;#039;&amp;#039;&amp;#039; Standard Transaction Data&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Code 2:&amp;#039;&amp;#039;&amp;#039; Keep-alive padding&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
Licensed under the &amp;#039;&amp;#039;&amp;#039;GPL&amp;#039;&amp;#039;&amp;#039; by Hotsprings Inc. Contact Hotsprings for commercial (closed-source) licensing.&lt;br /&gt;
&lt;br /&gt;
[[Category:Network Protocols]]&lt;br /&gt;
[[Category:Hotline]]&lt;/div&gt;</summary>
		<author><name>Lostarch</name></author>
	</entry>
</feed>