work on palmdef
This commit is contained in:
commit
5ee02573e1
|
@ -0,0 +1 @@
|
||||||
|
/target
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MarkdownSettingsMigration">
|
||||||
|
<option name="stateVersion" value="1" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/palm.iml" filepath="$PROJECT_DIR$/.idea/palm.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="CPP_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,7 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "palm"
|
||||||
|
version = "0.1.0"
|
|
@ -0,0 +1,8 @@
|
||||||
|
[package]
|
||||||
|
name = "palm"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
|
@ -0,0 +1,56 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
/*
|
||||||
|
There are four types of messages that palm can send.
|
||||||
|
1. Unencrypted reflection. This is unencrypted communication between a relay and a client.
|
||||||
|
2. Encrypted reflection. This is encrypted communication between a relay and a client.
|
||||||
|
3. Unencrypted tunnel. This is unencrypted communication between a client and a client, through a relay. Note that it is encrypted both ways via encrypted reflection.
|
||||||
|
4. Encrypted tunnel. This is doubly-encrypted communcation between a client and a client, through a relay.
|
||||||
|
|
||||||
|
The following convention is used:
|
||||||
|
C2R Client to Relay - Reflection
|
||||||
|
R2C Relay to Client - Reflection
|
||||||
|
I2R Initiating Client to Receiving Client - Tunneled
|
||||||
|
R2I Receiving Client to Initiating Client - Tunneled
|
||||||
|
*/
|
||||||
|
|
||||||
|
/////// UNENCRYPTED REFLECTION ///////
|
||||||
|
|
||||||
|
// Sent by client at start of connection
|
||||||
|
message PalmC2RHandshakeStart {
|
||||||
|
bytes ClientPublicKey = 1; // 32-byte X25519 public key
|
||||||
|
bytes SessionIV = 2; // 12-byte randomized IV generated by the client
|
||||||
|
bytes Check = 3; // 32-byte randomized value used to check encryption
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sent by relay in response to PalmC2RHandshakeStart
|
||||||
|
message PalmR2CHandshakeFinish {
|
||||||
|
bytes ServerPublicKey = 1; // 32-byte X25519 public key
|
||||||
|
bytes Check = 2; // The same 32-byte value provided in PalmC2SHandshakeStart, used to tie this response to the original session
|
||||||
|
}
|
||||||
|
|
||||||
|
/////// ENCRYPTED REFLECTED MESSAGES ///////
|
||||||
|
|
||||||
|
// Sent by client after receiving PalmR2CHandshakeFinish.
|
||||||
|
// Used by the client to request a room on the server.
|
||||||
|
message PalmC2RRelayRequest {
|
||||||
|
bytes Check = 1; // The same 32-byte value used in initial reflected handshake, ties this to the session.
|
||||||
|
string ChannelID = 2; // The string channel ID this client is requested to be routed to.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Represents the states a room/channel can be in.
|
||||||
|
enum PalmRoomStatus {
|
||||||
|
NotReady = 0; // Waiting for a peer to join
|
||||||
|
Ready = 1; // A peer has joined, and the relay is ready to relay the connection
|
||||||
|
InUse = 2; // This channel is already in use and cannot be used currently
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send at *any time* by the server to indicate the current status of the server.
|
||||||
|
// Must also be sent in response to PalmC2RRelayRequest to indicate the current status of the room.
|
||||||
|
// If the other peer is disconnected, PalmR2CChannelStatus will be sent again with Status = NotReady;
|
||||||
|
// The client must handle this correctly.
|
||||||
|
message PalmR2CChannelStatus {
|
||||||
|
bytes Check = 1; // The same 32-byte value used in previous packets, ties this packet to the session.
|
||||||
|
string ChannelID = 2; // The channel that the client requested.
|
||||||
|
PalmRoomStatus Status = 3; // The current status of the room.
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
Loading…
Reference in New Issue