<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://w96.wiki/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2A02%3A8428%3A848%3A1001%3A515E%3A35C1%3AED2E%3A3D59</id>
	<title>Wiki96 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://w96.wiki/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2A02%3A8428%3A848%3A1001%3A515E%3A35C1%3AED2E%3A3D59"/>
	<link rel="alternate" type="text/html" href="https://w96.wiki/wiki/Special:Contributions/2A02:8428:848:1001:515E:35C1:ED2E:3D59"/>
	<updated>2026-05-02T10:32:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://w96.wiki/w/index.php?title=P3&amp;diff=661</id>
		<title>P3</title>
		<link rel="alternate" type="text/html" href="https://w96.wiki/w/index.php?title=P3&amp;diff=661"/>
		<updated>2023-02-12T16:15:19Z</updated>

		<summary type="html">&lt;p&gt;2A02:8428:848:1001:515E:35C1:ED2E:3D59: Add more documentation around packets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;P3, also known as '''Pseudo Peer-to-Peer''' or '''PPP''', is a communication protocol and program that was introduced in Windows96 v2.34 ([[Windows 96 v2]] Service Pack 2). Its purpose is to allow developers to have intercommunication between programs, without having to rely on hosting a server themselves.&lt;br /&gt;
&lt;br /&gt;
P3 has been marked as obsolete since [[Windows 96 v3]] release 3.0.1, with no replacement being officially announced.&lt;br /&gt;
&lt;br /&gt;
== Network function ==&lt;br /&gt;
In order to initiate a connection with a peer, the system must first connect to a P3 relay server (by default, this server is &amp;lt;code&amp;gt;wss://p3.windows96.net&amp;lt;/code&amp;gt;) using Socket.IO. The relay handles address assignment, authentication, message exchange and peer discovery.&lt;br /&gt;
&lt;br /&gt;
=== HELLO ===&lt;br /&gt;
Logging in on the relay is accomplished by sending a &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; packet containing the address secret as well as the desired subdomain in a JSON-encoded, semicolon-separated string.&lt;br /&gt;
 [&amp;quot;sub=hello;mySecret&amp;quot;]&lt;br /&gt;
If the user does not wish to use  a subdomain, the &amp;lt;code&amp;gt;sub&amp;lt;/code&amp;gt; argument can be omitted:&lt;br /&gt;
 [&amp;quot;mySecret&amp;quot;]&lt;br /&gt;
If the user has a [[Windows 96 Product Key]], the secret is ignored, and the key's domain is used instead. Product key authentication is done by sending the &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; HTTP header before connecting:&lt;br /&gt;
 Authorization: Bearer &amp;lt;product-key&amp;gt;&lt;br /&gt;
Successful authentication will result in a &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; response, indicating the user's address, secret and MOTD if the server has one:&lt;br /&gt;
 [{ &amp;quot;success&amp;quot;: true, &amp;quot;address&amp;quot;: &amp;quot;hello.kyblozsdhc.ppp&amp;quot;, &amp;quot;secret&amp;quot;: &amp;quot;mySecret&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;example MOTD&amp;quot; }]&lt;br /&gt;
Invalid parameters will result in a message containing the error:&lt;br /&gt;
 [{ &amp;quot;success&amp;quot;: false, &amp;quot;message&amp;quot;: &amp;quot;PPP Server Error: Subdomain is invalid&amp;quot; }]&lt;br /&gt;
&lt;br /&gt;
=== PACKET ===&lt;br /&gt;
Messages can be exchanged between peers using the &amp;lt;code&amp;gt;packet&amp;lt;/code&amp;gt; message. A &amp;lt;code&amp;gt;packet&amp;lt;/code&amp;gt; message must contain the destination address, n&amp;lt;sub&amp;gt;once&amp;lt;/sub&amp;gt; and data.&lt;br /&gt;
&lt;br /&gt;
The destination address can be any valid &amp;lt;code&amp;gt;.ppp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.vip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.sys&amp;lt;/code&amp;gt; address, optinally with a port added as a suffix, such as &amp;lt;code&amp;gt;lo.sys:1234&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The n&amp;lt;sub&amp;gt;once&amp;lt;/sub&amp;gt; component is a single number that increases on each packet sent. This can allow for error detection and prevents old packets from being received twice.&lt;br /&gt;
&lt;br /&gt;
Example &amp;lt;code&amp;gt;packet&amp;lt;/code&amp;gt; message:&lt;br /&gt;
 [{ &amp;quot;dest&amp;quot;: &amp;quot;1424vqhvtu.ppp:28067&amp;quot;, &amp;quot;nonce&amp;quot;: 77, &amp;quot;data&amp;quot;: &amp;quot;hello, world&amp;quot; }]&lt;br /&gt;
If the message was sent successfully, the relay server replies with &amp;lt;code&amp;gt;packet.ok&amp;lt;/code&amp;gt; and the n&amp;lt;sub&amp;gt;once&amp;lt;/sub&amp;gt;:&lt;br /&gt;
 [ { &amp;quot;nonce&amp;quot;: 77 } ]&lt;br /&gt;
If the peer is offline, the &amp;lt;code&amp;gt;packet.err&amp;lt;/code&amp;gt; message is sent with the error message and n&amp;lt;sub&amp;gt;once&amp;lt;/sub&amp;gt;:&lt;br /&gt;
 [ { &amp;quot;nonce&amp;quot;: 77, &amp;quot;message&amp;quot;: &amp;quot;Peer offline&amp;quot; } ]&lt;br /&gt;
&lt;br /&gt;
=== PORT.PUBLISH ===&lt;br /&gt;
The &amp;lt;code&amp;gt;port.publish&amp;lt;/code&amp;gt; message registers a peer's port on network discovery. The message must contain the port that the peer wants to publish, and the identifier flags that other peers can search for with the &amp;lt;code&amp;gt;discover&amp;lt;/code&amp;gt; message.&lt;br /&gt;
&lt;br /&gt;
Example &amp;lt;code&amp;gt;port.publish&amp;lt;/code&amp;gt; message for port 1234, with the flags &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt;:&lt;br /&gt;
 [ 1234, [&amp;quot;foo&amp;quot;, &amp;quot;bar&amp;quot;]]&lt;br /&gt;
'''No reply is sent on success or error.'''&lt;br /&gt;
&lt;br /&gt;
=== PORT.REMOVE ===&lt;br /&gt;
The &amp;lt;code&amp;gt;port.remove&amp;lt;/code&amp;gt; message removes the specified port from network discovery.&lt;br /&gt;
&lt;br /&gt;
Example &amp;lt;code&amp;gt;port.remove&amp;lt;/code&amp;gt; message to remove port 1234:&lt;br /&gt;
 [ 1234 ]&lt;br /&gt;
'''No reply is sent on success or error.'''&lt;br /&gt;
&lt;br /&gt;
=== DISCOVER ===&lt;br /&gt;
The &amp;lt;code&amp;gt;discover&amp;lt;/code&amp;gt; message allows peers to automatically find each other on the network. Programs can use this packet to find peers on the network running the same protocol and contact them.&lt;br /&gt;
&lt;br /&gt;
The message must contain the flags to look for, the peer limit, and n&amp;lt;sub&amp;gt;once&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 [ [&amp;quot;flag1&amp;quot;, &amp;quot;flag2&amp;quot;], limit, nonce ]&lt;br /&gt;
Example packet to find all peers with the &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; flag:&lt;br /&gt;
 [ [&amp;quot;foo&amp;quot;], 0, 8 ]&lt;br /&gt;
Example packet to find at max 10 peers with the &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;bar&amp;lt;/code&amp;gt; flag:&lt;br /&gt;
 [ [&amp;quot;foo&amp;quot;, &amp;quot;bar&amp;quot;], 10, 9 ]&lt;br /&gt;
Successful replies are sent with the &amp;lt;code&amp;gt;discover&amp;lt;/code&amp;gt; message, containing a list of peer addresses, ports, flags, and the n&amp;lt;sub&amp;gt;once&amp;lt;/sub&amp;gt;:&lt;br /&gt;
 [ [ { &amp;quot;port&amp;quot;: &amp;quot;1234&amp;quot;, &amp;quot;address&amp;quot;: &amp;quot;1424vqhvtu.ppp&amp;quot;, &amp;quot;flags&amp;quot;: [&amp;quot;foo&amp;quot;] ], 9 ]&lt;br /&gt;
If an error occurred, the &amp;lt;code&amp;gt;discover.err&amp;lt;/code&amp;gt; message is sent instead:&lt;br /&gt;
 [ &amp;quot;Invalid limit&amp;quot;, 9 ]&lt;br /&gt;
&lt;br /&gt;
== Use ==&lt;br /&gt;
&lt;br /&gt;
* [[SuperTerm]] uses the Rich Text over P3 (RToP) protocol with 121 as default port.&lt;br /&gt;
* [[Remote Console]] uses RToP on port 140.&lt;br /&gt;
* [[P3FS]] uses P3 on port 737.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[P3.Compiled]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/socketio/socket.io Socket.IO on GitHub]&lt;br /&gt;
* [https://github.com/themirrazzalt/p3protocol Unofficial P3 documentation]&lt;/div&gt;</summary>
		<author><name>2A02:8428:848:1001:515E:35C1:ED2E:3D59</name></author>
	</entry>
	<entry>
		<id>https://w96.wiki/w/index.php?title=P3&amp;diff=660</id>
		<title>P3</title>
		<link rel="alternate" type="text/html" href="https://w96.wiki/w/index.php?title=P3&amp;diff=660"/>
		<updated>2023-02-12T14:47:10Z</updated>

		<summary type="html">&lt;p&gt;2A02:8428:848:1001:515E:35C1:ED2E:3D59: Remove See also links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;P3, also known as '''Pseudo Peer-to-Peer''' or '''PPP''', is a communication protocol and program that was introduced in Windows96 v2.34 ([[Windows 96 v2]] Service Pack 2). Its purpose is to allow developers to have intercommunication between programs, without having to rely on hosting a server themselves.&lt;br /&gt;
&lt;br /&gt;
P3 has been marked as obsolete since [[Windows 96 v3]] release 3.0.1, with no replacement being officially announced.&lt;br /&gt;
&lt;br /&gt;
== Network function ==&lt;br /&gt;
In order to initiate a connection with a peer, the system must first connect to a P3 relay server (by default, this server is &amp;lt;code&amp;gt;wss://p3.windows96.net&amp;lt;/code&amp;gt;) using Socket.IO. The relay handles address assignment, authentication, message exchange and peer discovery.&lt;br /&gt;
&lt;br /&gt;
=== HELLO ===&lt;br /&gt;
Logging in on the relay is accomplished by sending a &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; packet containing the address secret as well as the desired subdomain in a JSON-encoded, semicolon-separated string.&lt;br /&gt;
 &amp;quot;sub=hello;mySecret&amp;quot;&lt;br /&gt;
If the user does not wish to use  a subdomain, the &amp;lt;code&amp;gt;sub&amp;lt;/code&amp;gt; argument can be omitted:&lt;br /&gt;
 &amp;quot;mySecret&amp;quot;&lt;br /&gt;
If the user has a [[Windows 96 Product Key]], the secret is ignored, and the key's domain is used instead. Product key authentication is done by sending the &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; HTTP header before connecting:&lt;br /&gt;
 Authorization: Bearer &amp;lt;product-key&amp;gt;&lt;br /&gt;
Successful authentication will result in a &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; response, indicating the user's address, secret and MOTD if the server has one:&lt;br /&gt;
 { &amp;quot;success&amp;quot;: true, &amp;quot;address&amp;quot;: &amp;quot;hello.kyblozsdhc.ppp&amp;quot;, &amp;quot;secret&amp;quot;: &amp;quot;mySecret&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;example MOTD&amp;quot; } &lt;br /&gt;
Invalid parameters will result in a message containing the error:&lt;br /&gt;
 { &amp;quot;success&amp;quot;: false, &amp;quot;message&amp;quot;: &amp;quot;PPP Server Error: Subdomain is invalid&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
== Use ==&lt;br /&gt;
&lt;br /&gt;
* [[SuperTerm]] uses the Rich Text over P3 (RToP) protocol with 121 as default port.&lt;br /&gt;
* [[Remote Console]] uses RToP on port 140.&lt;br /&gt;
* [[P3FS]] uses P3 on port 737.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[P3.Compiled]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/socketio/socket.io Socket.IO on GitHub]&lt;br /&gt;
* [https://github.com/themirrazzalt/p3protocol Unofficial P3 documentation]&lt;/div&gt;</summary>
		<author><name>2A02:8428:848:1001:515E:35C1:ED2E:3D59</name></author>
	</entry>
	<entry>
		<id>https://w96.wiki/w/index.php?title=P3&amp;diff=659</id>
		<title>P3</title>
		<link rel="alternate" type="text/html" href="https://w96.wiki/w/index.php?title=P3&amp;diff=659"/>
		<updated>2023-02-12T14:45:10Z</updated>

		<summary type="html">&lt;p&gt;2A02:8428:848:1001:515E:35C1:ED2E:3D59: Restructure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;P3, also known as '''Pseudo Peer-to-Peer''' or '''PPP''', is a communication protocol and program that was introduced in Windows96 v2.34 ([[Windows 96 v2]] Service Pack 2). Its purpose is to allow developers to have intercommunication between programs, without having to rely on hosting a server themselves.&lt;br /&gt;
&lt;br /&gt;
P3 has been marked as obsolete since [[Windows 96 v3]] release 3.0.1, with no replacement being officially announced.&lt;br /&gt;
&lt;br /&gt;
== Network function ==&lt;br /&gt;
In order to initiate a connection with a peer, the system must first connect to a P3 relay server (by default, this server is &amp;lt;code&amp;gt;wss://p3.windows96.net&amp;lt;/code&amp;gt;) using Socket.IO. The relay handles address assignment, authentication, message exchange and peer discovery.&lt;br /&gt;
&lt;br /&gt;
=== HELLO ===&lt;br /&gt;
Logging in on the relay is accomplished by sending a &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; packet containing the address secret as well as the desired subdomain in a JSON-encoded, semicolon-separated string.&lt;br /&gt;
 &amp;quot;sub=hello;mySecret&amp;quot;&lt;br /&gt;
If the user does not wish to use  a subdomain, the &amp;lt;code&amp;gt;sub&amp;lt;/code&amp;gt; argument can be omitted:&lt;br /&gt;
 &amp;quot;mySecret&amp;quot;&lt;br /&gt;
If the user has a [[Windows 96 Product Key]], the secret is ignored, and the key's domain is used instead. Product key authentication is done by sending the &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt; HTTP header before connecting:&lt;br /&gt;
 Authorization: Bearer &amp;lt;product-key&amp;gt;&lt;br /&gt;
Successful authentication will result in a &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; response, indicating the user's address, secret and MOTD if the server has one:&lt;br /&gt;
 { &amp;quot;success&amp;quot;: true, &amp;quot;address&amp;quot;: &amp;quot;hello.kyblozsdhc.ppp&amp;quot;, &amp;quot;secret&amp;quot;: &amp;quot;mySecret&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;example MOTD&amp;quot; } &lt;br /&gt;
Invalid parameters will result in a message containing the error:&lt;br /&gt;
 { &amp;quot;success&amp;quot;: false, &amp;quot;message&amp;quot;: &amp;quot;PPP Server Error: Subdomain is invalid&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
== Use ==&lt;br /&gt;
&lt;br /&gt;
* [[SuperTerm]] uses the Rich Text over P3 (RToP) protocol with 121 as default port.&lt;br /&gt;
* [[Remote Console]] uses RToP on port 140.&lt;br /&gt;
* [[P3FS]] uses P3 on port 737.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[P3FS]]&lt;br /&gt;
* [[P3.Compiled]]&lt;br /&gt;
* [[Remote Console]]&lt;br /&gt;
* [[SuperTerm]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/socketio/socket.io Socket.IO on GitHub]&lt;br /&gt;
* [https://github.com/themirrazzalt/p3protocol Unofficial P3 documentation]&lt;/div&gt;</summary>
		<author><name>2A02:8428:848:1001:515E:35C1:ED2E:3D59</name></author>
	</entry>
</feed>