<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.simtx.net/index.php?action=history&amp;feed=atom&amp;title=SimTX_API%2FSession_status</id>
	<title>SimTX API/Session status - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.simtx.net/index.php?action=history&amp;feed=atom&amp;title=SimTX_API%2FSession_status"/>
	<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API/Session_status&amp;action=history"/>
	<updated>2026-11-04T21:34:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.simtx.net/index.php?title=SimTX_API/Session_status&amp;diff=2385&amp;oldid=prev</id>
		<title>Clanker: Remove development history and server internals</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API/Session_status&amp;diff=2385&amp;oldid=prev"/>
		<updated>2026-10-24T17:14:21Z</updated>

		<summary type="html">&lt;p&gt;Remove development history and server internals&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:14, 24 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{SimTX API navigation}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{SimTX API navigation}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Every receiver and transmitter session &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;of protocol v25 &lt;/del&gt;is described to the client by [[SimTX API/Packets/SessionStatus|SessionStatus]] frames: once when the server accepts the start, whenever the session changes and keeps running, and when it is refused or stopped. This page describes that life cycle. It applies to &amp;lt;code&amp;gt;ROLE_RECEIVER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ROLE_TX_AUDIO&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ROLE_TX_GENERATED&amp;lt;/code&amp;gt;; control and moderation sessions report failures with [[SimTX API/Packets/Error|Error]] instead.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Every receiver and transmitter session is described to the client by [[SimTX API/Packets/SessionStatus|SessionStatus]] frames: once when the server accepts the start, whenever the session changes and keeps running, and when it is refused or stopped. This page describes that life cycle. It applies to &amp;lt;code&amp;gt;ROLE_RECEIVER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ROLE_TX_AUDIO&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ROLE_TX_GENERATED&amp;lt;/code&amp;gt;; control and moderation sessions report failures with [[SimTX API/Packets/Error|Error]] instead.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;protobuf&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;protobuf&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l82&quot;&gt;Line 82:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 82:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Station edits and protocol revisions ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Station edits and protocol revisions ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A station-bound session keeps the station snapshot it was bound with. When the owner edits the station, its antenna or its rig in a way the session can follow, a server sends &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;STATION_EDIT&amp;lt;/code&amp;gt; and the new snapshot, with the revisions bumped. It does this only for clients whose [[SimTX API/Packets/ClientHello|ClientHello]] carried &amp;lt;code&amp;gt;protocol_revision&amp;lt;/code&amp;gt; ≥ 1. A client that announced revision &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;0 &lt;/del&gt;gets &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; instead and must reconnect to pick up the new revision. See [[SimTX API/Compatibility and versioning#Protocol revisions|Protocol revisions]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A station-bound session keeps the station snapshot it was bound with. When the owner edits the station, its antenna or its rig in a way the session can follow, a server sends &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;STATION_EDIT&amp;lt;/code&amp;gt; and the new snapshot, with the revisions bumped. It does this only for clients whose [[SimTX API/Packets/ClientHello|ClientHello]] carried &amp;lt;code&amp;gt;protocol_revision&amp;lt;/code&amp;gt; ≥ 1. A client that announced &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;no &lt;/ins&gt;revision gets &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; instead and must reconnect to pick up the new revision. See [[SimTX API/Compatibility and versioning#Protocol revisions|Protocol revisions]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Edits a session cannot follow always end it, whatever the revision: the station is deleted, its bound antenna or rig is removed, or the account loses access to it.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Edits a session cannot follow always end it, whatever the revision: the station is deleted, its bound antenna or rig is removed, or the account loses access to it.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l107&quot;&gt;Line 107:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 107:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;LIMIT_REACHED&amp;lt;/code&amp;gt; || A server, address, account or station limit, or the wideband budget.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;LIMIT_REACHED&amp;lt;/code&amp;gt; || A server, address, account or station limit, or the wideband budget.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;UNAVAILABLE&amp;lt;/code&amp;gt; || The server cannot place the session right now, for example no transmitter capacity &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;on any node&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;UNAVAILABLE&amp;lt;/code&amp;gt; || The server cannot place the session right now, for example no transmitter capacity.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key simtxwiki:diff:1.41:old-2258:rev-2385:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Clanker</name></author>
	</entry>
	<entry>
		<id>https://wiki.simtx.net/index.php?title=SimTX_API/Session_status&amp;diff=2258&amp;oldid=prev</id>
		<title>Clanker: Protocol v25 reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API/Session_status&amp;diff=2258&amp;oldid=prev"/>
		<updated>2026-10-24T16:19:16Z</updated>

		<summary type="html">&lt;p&gt;Protocol v25 reference&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{SimTX API navigation}}&lt;br /&gt;
Every receiver and transmitter session of protocol v25 is described to the client by [[SimTX API/Packets/SessionStatus|SessionStatus]] frames: once when the server accepts the start, whenever the session changes and keeps running, and when it is refused or stopped. This page describes that life cycle. It applies to &amp;lt;code&amp;gt;ROLE_RECEIVER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ROLE_TX_AUDIO&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ROLE_TX_GENERATED&amp;lt;/code&amp;gt;; control and moderation sessions report failures with [[SimTX API/Packets/Error|Error]] instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;protobuf&amp;quot;&amp;gt;&lt;br /&gt;
message SessionStatus {&lt;br /&gt;
  SessionState state = 1;&lt;br /&gt;
  string reason = 2;&lt;br /&gt;
  ErrorCode code = 3;&lt;br /&gt;
  bytes session_id = 4;          // per-connection id (the transmission id for TX)&lt;br /&gt;
  BoundStation station = 5;      // unset for ad-hoc sessions&lt;br /&gt;
  double frequency_hz = 6;&lt;br /&gt;
  Tracking tracking = 7;&lt;br /&gt;
  AntennaPointing pointing = 8;&lt;br /&gt;
  int64 request_id = 9;          // echoes AntennaPointingUpdate / ReceiverRetune request_id&lt;br /&gt;
  UpdateReason update_reason = 10;  // UPDATED only&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Life cycle ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 client                                                 server&lt;br /&gt;
   | -- [10] receiver_start / [12] transmitter_start --&amp;gt; |&lt;br /&gt;
   | &amp;lt;------------- [10] session_status  REJECTED ------- |   code + reason, then close&lt;br /&gt;
   |                         or                           |&lt;br /&gt;
   | &amp;lt;------------- [10] session_status  BOUND ---------- |   session_id, station, frequency&lt;br /&gt;
   |                    ... stream runs ...               |&lt;br /&gt;
   | &amp;lt;------------- [10] session_status  UPDATED -------- |   update_reason + current state&lt;br /&gt;
   | &amp;lt;------------- [10] session_status  UPDATED -------- |&lt;br /&gt;
   |                    ... stream runs ...               |&lt;br /&gt;
   | &amp;lt;------------- [10] session_status  ENDED ---------- |   code + reason, then close&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! State !! When !! Afterwards&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;BOUND&amp;lt;/code&amp;gt; || Once, when the start is accepted. || The stream begins: [[SimTX API/Packets/IqStreamDescriptor|IqStreamDescriptor]] for a receiver, [[SimTX API/Packets/TxQueue|TxQueue]] and [[SimTX API/Packets/TxAccept|TxAccept]] for a transmitter.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;REJECTED&amp;lt;/code&amp;gt; || Instead of &amp;lt;code&amp;gt;BOUND&amp;lt;/code&amp;gt;, when the start cannot be accepted. || The connection closes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; || Any number of times, when something about the running session changed. || The session continues.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; || When the server stops a running session. || The connection closes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;REJECTED&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; are the only refusal and kick signal, for receivers and transmitters alike. They carry an [[SimTX API/Data types#ErrorCode|ErrorCode]] in &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt; and a human-readable &amp;lt;code&amp;gt;reason&amp;lt;/code&amp;gt;. Show the reason to the user; branch on the code.&lt;br /&gt;
&lt;br /&gt;
A session can also end without a SessionStatus, when the connection itself fails or the account&amp;#039;s lease runs out. Treat a closed connection as the end of the session.&lt;br /&gt;
&lt;br /&gt;
== BOUND ==&lt;br /&gt;
&amp;lt;code&amp;gt;BOUND&amp;lt;/code&amp;gt; describes the session as the server runs it:&lt;br /&gt;
* &amp;lt;code&amp;gt;session_id&amp;lt;/code&amp;gt;: a 16-byte id for this session. For a transmitter it is the transmission id. It identifies the session in [[SimTX API/Packets/StationList|station lists]], [[SimTX API/Packets/ServerHealthReport|health reports]] and the [[SimTX API/Packets/StartMonitor|own-transmitter monitor]]. Keep it.&lt;br /&gt;
* &amp;lt;code&amp;gt;station&amp;lt;/code&amp;gt;: for a station-bound session, the [[SimTX API/Data types#BoundStation|BoundStation]] the server resolved: station, antenna and rig with their revisions, the effective PA cap, and the antenna as modelled. Show the user what the station dictates from it. Unset for ad-hoc sessions.&lt;br /&gt;
* &amp;lt;code&amp;gt;frequency_hz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tracking&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pointing&amp;lt;/code&amp;gt;: the current values. Unset &amp;lt;code&amp;gt;tracking&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pointing&amp;lt;/code&amp;gt; means none.&lt;br /&gt;
&lt;br /&gt;
== UPDATED ==&lt;br /&gt;
&amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; means the session keeps running with a changed state. &amp;lt;code&amp;gt;update_reason&amp;lt;/code&amp;gt; gives the most significant cause:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &amp;lt;code&amp;gt;UPDATE_REASON_UNSPECIFIED&amp;lt;/code&amp;gt; || Not an &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; status. On an &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; status: apply the snapshot fields.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || &amp;lt;code&amp;gt;UPDATE_REASON_POINTING&amp;lt;/code&amp;gt; || This session&amp;#039;s [[SimTX API/Packets/AntennaPointingUpdate|AntennaPointingUpdate]] was applied (&amp;lt;code&amp;gt;request_id&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || &amp;lt;code&amp;gt;UPDATE_REASON_TRACKING&amp;lt;/code&amp;gt; || The server changed tracking, for example because the target was deleted or reentered.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || &amp;lt;code&amp;gt;UPDATE_REASON_STATION_EDIT&amp;lt;/code&amp;gt; || The station, its antenna or its rig was edited; revisions are bumped.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || &amp;lt;code&amp;gt;UPDATE_REASON_ORBIT_CHANGE&amp;lt;/code&amp;gt; || The bound satellite&amp;#039;s elements or attitude changed.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || &amp;lt;code&amp;gt;UPDATE_REASON_DEORBIT_SCHEDULED&amp;lt;/code&amp;gt; || The bound satellite fired its deorbit burn; &amp;lt;code&amp;gt;station.core.deorbit&amp;lt;/code&amp;gt; says when it reenters.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || &amp;lt;code&amp;gt;UPDATE_REASON_RETUNE&amp;lt;/code&amp;gt; || This session&amp;#039;s [[SimTX API/Packets/ReceiverRetune|ReceiverRetune]] took effect (&amp;lt;code&amp;gt;request_id&amp;lt;/code&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Rules for applying an update:&lt;br /&gt;
* &amp;lt;code&amp;gt;frequency_hz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tracking&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;pointing&amp;lt;/code&amp;gt; are always the current values. Replace the client&amp;#039;s copies.&lt;br /&gt;
* &amp;lt;code&amp;gt;station&amp;lt;/code&amp;gt; is set only when the station changed (&amp;lt;code&amp;gt;STATION_EDIT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORBIT_CHANGE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DEORBIT_SCHEDULED&amp;lt;/code&amp;gt;). It replaces the client&amp;#039;s copy as a whole. Unset means unchanged.&lt;br /&gt;
* &amp;lt;code&amp;gt;request_id&amp;lt;/code&amp;gt; is set when the update confirms the client&amp;#039;s own request: an [[SimTX API/Packets/AntennaPointingUpdate|AntennaPointingUpdate]] (&amp;lt;code&amp;gt;POINTING&amp;lt;/code&amp;gt;) or a [[SimTX API/Packets/ReceiverRetune|ReceiverRetune]] (&amp;lt;code&amp;gt;RETUNE&amp;lt;/code&amp;gt;).&lt;br /&gt;
* A reason the client does not know, or &amp;lt;code&amp;gt;UPDATE_REASON_UNSPECIFIED&amp;lt;/code&amp;gt;, means &amp;quot;apply the snapshot fields&amp;quot;.&lt;br /&gt;
* Statuses arrive in order on one connection, so the last one received is the current state.&lt;br /&gt;
&lt;br /&gt;
=== Station edits and protocol revisions ===&lt;br /&gt;
A station-bound session keeps the station snapshot it was bound with. When the owner edits the station, its antenna or its rig in a way the session can follow, a server sends &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;STATION_EDIT&amp;lt;/code&amp;gt; and the new snapshot, with the revisions bumped. It does this only for clients whose [[SimTX API/Packets/ClientHello|ClientHello]] carried &amp;lt;code&amp;gt;protocol_revision&amp;lt;/code&amp;gt; ≥ 1. A client that announced revision 0 gets &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; instead and must reconnect to pick up the new revision. See [[SimTX API/Compatibility and versioning#Protocol revisions|Protocol revisions]].&lt;br /&gt;
&lt;br /&gt;
Edits a session cannot follow always end it, whatever the revision: the station is deleted, its bound antenna or rig is removed, or the account loses access to it.&lt;br /&gt;
&lt;br /&gt;
=== Satellites ===&lt;br /&gt;
A session bound to a satellite also gets &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; when the satellite&amp;#039;s orbit or attitude changes (&amp;lt;code&amp;gt;ORBIT_CHANGE&amp;lt;/code&amp;gt;) and when its owner fires the deorbit burn (&amp;lt;code&amp;gt;DEORBIT_SCHEDULED&amp;lt;/code&amp;gt;). After &amp;lt;code&amp;gt;DEORBIT_SCHEDULED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;station.core.deorbit.reentry_at_ms&amp;lt;/code&amp;gt; says when the session will end. At that time the server ends it with &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; and the reason &amp;#039;&amp;#039;Satellite burned up on reentry&amp;#039;&amp;#039;. See [[SimTX API/Satellites#Deorbit|Deorbit]].&lt;br /&gt;
&lt;br /&gt;
When the target of a session&amp;#039;s tracking disappears, for example because the tracked satellite reentered, the server changes the tracking and sends &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;TRACKING&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== REJECTED ==&lt;br /&gt;
Typical codes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code !! Typical cause&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;INVALID_REQUEST&amp;lt;/code&amp;gt; || A value outside its range, no site, an unknown modulation or antenna type, an invalid NEC deck.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FORBIDDEN&amp;lt;/code&amp;gt; || A station-bound start without a ticket for that station; a binding that does not match the ticket; a ticket bound to a station used with an ad-hoc site; transmitting through someone else&amp;#039;s station.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;STATION_INACTIVE&amp;lt;/code&amp;gt; || The station was deleted, or the satellite has reentered.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;STATION_REQUIRED&amp;lt;/code&amp;gt; || An ad-hoc transmitter without &amp;lt;code&amp;gt;tx.adhoc&amp;lt;/code&amp;gt; on a server whose policy refuses ad-hoc transmitters.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LIMIT_REACHED&amp;lt;/code&amp;gt; || A server, address, account or station limit, or the wideband budget.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;UNAVAILABLE&amp;lt;/code&amp;gt; || The server cannot place the session right now, for example no transmitter capacity on any node.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ENDED ==&lt;br /&gt;
Typical causes are a moderator&amp;#039;s kick, a ban of the client&amp;#039;s address, the station being deleted or losing its antenna or rig, the account losing access, and a satellite&amp;#039;s reentry. A session that simply ended may carry &amp;lt;code&amp;gt;ERROR_CODE_UNSPECIFIED&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There is no session resumption. To continue, mint a new [[SimTX API/Game tickets|ticket]] if the connection was authenticated, and reconnect with exponential backoff. See [[SimTX API/Limits and errors#Reconnecting|Reconnecting]].&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;session_status_rejected_station_required&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; (server to client, 56 bytes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
37                                 frame length 55&lt;br /&gt;
52 35                              session_status (SessionStatus), 53 bytes&lt;br /&gt;
  08 02                            state = 2 (SESSION_STATE_REJECTED)&lt;br /&gt;
  12 2F 41 64 2D 68 6F 63 20 74 …  reason = &amp;quot;Ad-hoc transmitters are disabled on this server&amp;quot;&lt;br /&gt;
  18 09                            code = 9 (ERROR_CODE_STATION_REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;session_status_updated_retune&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; (server to client, 36 bytes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
23                            frame length 35&lt;br /&gt;
52 21                         session_status (SessionStatus), 33 bytes&lt;br /&gt;
  08 04                       state = 4 (SESSION_STATE_UPDATED)&lt;br /&gt;
  22 10 AA AA AA AA …         session_id = aaaaaaaa-bbbb-4ccc-8ddd-ffffffffffff&lt;br /&gt;
  31 00 00 00 00 12 D8 6A 41  frequency_hz = 14074000.0&lt;br /&gt;
  48 29                       request_id = 41&lt;br /&gt;
  50 06                       update_reason = 6 (UPDATE_REASON_RETUNE)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;session_status_ended_kicked&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; (server to client, 46 bytes):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2D                                 frame length 45&lt;br /&gt;
52 2B                              session_status (SessionStatus), 43 bytes&lt;br /&gt;
  08 03                            state = 3 (SESSION_STATE_ENDED)&lt;br /&gt;
  12 15 4B 69 63 6B 65 64 20 62 …  reason = &amp;quot;Kicked by a moderator&amp;quot;&lt;br /&gt;
  22 10 AA AA AA AA …              session_id = aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More examples, including a satellite &amp;lt;code&amp;gt;BOUND&amp;lt;/code&amp;gt; with its station snapshot, are on the [[SimTX API/Packets/SessionStatus|SessionStatus]] page.&lt;br /&gt;
&lt;br /&gt;
{{SimTX API navbox}}&lt;br /&gt;
[[Category:SimTX API]]&lt;br /&gt;
[[Category:SimTX API sessions]]&lt;/div&gt;</summary>
		<author><name>Clanker</name></author>
	</entry>
</feed>