Compare commits

...

2 commits

Author SHA1 Message Date
6e13cef237 Add authorization_request.proto 2025-09-29 07:44:53 +09:00
7a77ec87d3 Remove duplicated tripod_id.proto 2025-09-28 08:39:01 +09:00
9 changed files with 151 additions and 275 deletions

View file

@ -1,9 +1,13 @@
fn main() -> Result<(), Box<dyn std::error::Error>> {
tonic_prost_build::configure()
.extern_path(".tripod_id", "::tripod_id::prost::generated")
.extern_path(".tripod_id", "::tripod_id::prost")
.compile_protos(
&["proto/caretta_sync.proto", "proto/caretta_sync.common.proto"],
&["proto"]
&[
"proto/caretta_sync.authorization_request.proto",
"proto/caretta_sync.peer_info.proto",
"proto/caretta_sync.common.proto"
],
&["proto", "../tripod-id/proto"]
)?;
Ok(())
}

View file

@ -0,0 +1,74 @@
syntax = "proto3";
package caretta_sync;
import "caretta_sync.common.proto";
import "tripod_id.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
service AuthorizationRequest {
rpc Send(AuthorizationRequestSendRequest) returns (AuthorizationRequestSendResponse);
rpc Accept(AuthorizationRequestAcceptRequest) returns (AuthorizationRequestAcceptResponse);
rpc Reject(AuthorizationRequestRejectRequest) returns (AuthorizationRequestRejectResponse);
rpc Info(AuthorizationRequestInfoRequest) returns (AuthorizationRequestInfoResponse);
rpc InfoStream(stream AuthorizationRequestInfoStreamRequest) returns (stream AuthorizationRequestInfoStreamResponse);
}
enum AuthorizationRequestKind {
SENT = 0;
RECEIVED = 1;
}
message AuthorizationRequestSendRequest {
caretta_sync.common.PeerIdentifier peer = 1;
}
message AuthorizationRequestSendResponse {
string passcode = 1;
}
message AuthorizationRequestInfo {
tripod_id.Double id = 1;
caretta_sync.common.PublicKey public_key = 2;
google.protobuf.Timestamp created_at = 3;
AuthorizationRequestKind kind = 4;
string node_info = 5;
}
message AuthorizationRequestIdentifier {
oneof identifier {
caretta_sync.common.Uuid uuid = 1;
tripod_id.Double id = 2;
}
}
message AuthorizationRequestAcceptRequest {
AuthorizationRequestIdentifier authorization_request = 1;
string passcode = 2;
}
message AuthorizationRequestAcceptResponse {
caretta_sync.common.AuthorizedNodeInfo authorized_node_info = 1;
}
message AuthorizationRequestRejectRequest {
AuthorizationRequestIdentifier authorization_request = 1;
}
message AuthorizationRequestRejectResponse {
AuthorizationRequestInfo request_info = 1;
}
message AuthorizationRequestInfoRequest {
AuthorizationRequestIdentifier request = 1;
}
message AuthorizationRequestInfoResponse{
AuthorizationRequestInfo info = 1;
}
message AuthorizationRequestInfoStreamRequest {}
message AuthorizationRequestInfoStreamResponse {
AuthorizationRequestInfo request_info = 1;
}

View file

@ -8,21 +8,27 @@ message PublicKey {
bytes key = 1;
}
message UuidMessage {
message Uuid {
uint64 first_half = 1;
uint64 second_half = 2;
}
message PeerIdentifierMessage {
message PeerIdentifier {
oneof peer_identifier {
tripod_id.Double id = 1;
PublicKey public_key = 2;
}
}
message PeerIdentifierErrorMessage {
oneof error {
string peer_id_not_found = 1;
string public_key_not_found = 2;
message AuthorizedNodeIdentifier {
oneof identifier {
tripod_id.Single id = 1;
PublicKey public_key = 2;
}
}
message AuthorizedNodeInfo {
tripod_id.Single id = 1;
PublicKey public_key = 2;
string note = 3;
}

View file

@ -0,0 +1,56 @@
syntax = "proto3";
package caretta_sync;
import "caretta_sync.common.proto";
import "tripod_id.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
service Peer {
rpc Info(PeerInfoRequest) returns (PeerInfoResponse);
rpc InfoStream(stream PeerInfoStreamRequest) returns (stream PeerInfoStreamResponse);
}
message PeerInfoRequest {
caretta_sync.common.PeerIdentifier peer = 1;
}
message PeerInfoStreamRequest {}
message PeerInfoResponse {
PeerInfo peer_info = 1;
}
message PeerInfoStreamResponse {
PeerInfo peer_info = 1;
}
message PeerInfo {
tripod_id.Double id = 1;
caretta_sync.common.PublicKey public_key = 2;
string relay_url = 3;
repeated DirectAddrInfo addrs = 4;
string conn_type = 5;
google.protobuf.Duration latency = 6;
google.protobuf.Duration last_used = 7;
}
message DirectAddrInfo {
string addr = 1;
google.protobuf.Duration latency = 2;
LastControl last_control = 3;
google.protobuf.Duration last_payload = 4;
google.protobuf.Duration last_alive = 5;
repeated Source sources = 6;
}
message LastControl {
google.protobuf.Duration duration = 1;
string control_msg = 2;
}
message Source {
string source = 1;
google.protobuf.Duration duration = 2;
}

View file

@ -1,51 +0,0 @@
syntax = "proto3";
package caretta_sync;
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
service CarettaSync {
rpc RemoteInfo(RemoteInfoRequest) returns (RemoteInfoResponse);
rpc RemoteInfoIter(RemoteInfoIterRequest) returns (stream RemoteInfoResponse);
}
message NodeIdMessage {
bytes node_id = 1;
}
message RemoteInfoRequest {
NodeIdMessage node_id = 1;
}
message RemoteInfoIterRequest {}
message RemoteInfoResponse {
RemoteInfoMessage remote_info = 1;
}
message RemoteInfoMessage {
NodeIdMessage node_id = 1;
string relay_url = 2;
repeated DirectAddrInfoMessage addrs = 3;
string conn_type = 4;
google.protobuf.Duration latency = 5;
google.protobuf.Duration last_used = 6;
}
message DirectAddrInfoMessage {
string addr = 1;
google.protobuf.Duration latency = 2;
LastControlMessage last_control = 3;
google.protobuf.Duration last_payload = 4;
google.protobuf.Duration last_alive = 5;
repeated SourceMessage sources = 6;
}
message LastControlMessage {
google.protobuf.Duration duration = 1;
string control_msg = 2;
}
message SourceMessage {
string source = 1;
google.protobuf.Duration duration = 2;
}

View file

@ -1,97 +0,0 @@
syntax = "proto3";
package caretta_sync;
import "common.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
service PeerInfo {
rpc PeerInfo(PeerInfoRequest) returns (PeerInfoResponse);
rpc PeerInfoIter(PeerInfoIterRequest) returns (stream PeerInfoResponse);
}
message PeerInfoRequest {
caretta_sync.common.PeerIdentifierMessage peer = 1;
}
message PeerInfoIterRequest {}
message PeerInfoResponse {
oneof result {
PeerInfoMessage remote_info = 1;
Error error = 2;
}
}
message PeerInfoMessage {
DoubleIdMessage id = 1;
PublicKeyMessage public_key = 2;
string relay_url = 3;
repeated DirectAddrInfoMessage addrs = 4;
string conn_type = 5;
google.protobuf.Duration latency = 6;
google.protobuf.Duration last_used = 7;
}
message DirectAddrInfoMessage {
string addr = 1;
google.protobuf.Duration latency = 2;
LastControlMessage last_control = 3;
google.protobuf.Duration last_payload = 4;
google.protobuf.Duration last_alive = 5;
repeated SourceMessage sources = 6;
}
message LastControlMessage {
google.protobuf.Duration duration = 1;
string control_msg = 2;
}
message SourceMessage {
string source = 1;
google.protobuf.Duration duration = 2;
}
message SendAuthorizationRequestRequest {
PeerMessage peer = 1;
}
message SendAuthorizationRequestResponse {
oneof result {
string passcode = 1;
Error error = 2;
}
}
message AuthorizationRequestMessage {
oneof authorization_request {
UuidMessage uuid = 1;
DoubleIdMessage id = 2;
}
}
message AcceptAuthorizationRequestRequest {
AuthorizationRequestMessage authorization_request = 1;
string passcode = 2;
}
message AcceptAuthorizationRequestResponse {
oneof result {
google.protobuf.Empty ok = 1;
Error error = 2;
}
}
message RejectAuthorizationRequestRequest {
AuthorizationRequestMessage authorization_request = 1;
}
message RejectAuthorizationRequestResponse {
oneof result {
google.protobuf.Empty ok = 1;
Error error = 2;
}
}

View file

@ -1,99 +0,0 @@
syntax = "proto3";
package caretta_sync;
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
service CarettaSync {
rpc SendAuthorizationRequest(SendAuthorizationRequestRequest) returns (SendAuthorizationRequestResponse);
rpc AcceptAuthorizationRequest(AcceptAuthorizationRequestRequest) returns (AcceptAuthorizationRequestResponse);
rpc RejectAuthorizationRequest(RejectAuthorizationRequestRequest) returns (RejectAuthorizationRequestResponse);
rpc RemoteInfo(RemoteInfoRequest) returns (RemoteInfoResponse);
rpc RemoteInfoIter(RemoteInfoIterRequest) returns (stream RemoteInfoResponse);
}
message RemoteInfoRequest {
PeerMessage peer = 1;
}
message RemoteInfoIterRequest {}
message RemoteInfoResponse {
oneof result {
RemoteInfoMessage remote_info = 1;
Error error = 2;
}
}
message RemoteInfoMessage {
DoubleIdMessage id = 1;
PublicKeyMessage public_key = 2;
string relay_url = 3;
repeated DirectAddrInfoMessage addrs = 4;
string conn_type = 5;
google.protobuf.Duration latency = 6;
google.protobuf.Duration last_used = 7;
}
message DirectAddrInfoMessage {
string addr = 1;
google.protobuf.Duration latency = 2;
LastControlMessage last_control = 3;
google.protobuf.Duration last_payload = 4;
google.protobuf.Duration last_alive = 5;
repeated SourceMessage sources = 6;
}
message LastControlMessage {
google.protobuf.Duration duration = 1;
string control_msg = 2;
}
message SourceMessage {
string source = 1;
google.protobuf.Duration duration = 2;
}
message SendAuthorizationRequestRequest {
PeerMessage peer = 1;
}
message SendAuthorizationRequestResponse {
oneof result {
string passcode = 1;
Error error = 2;
}
}
message AuthorizationRequestMessage {
oneof authorization_request {
UuidMessage uuid = 1;
DoubleIdMessage id = 2;
}
}
message AcceptAuthorizationRequestRequest {
AuthorizationRequestMessage authorization_request = 1;
string passcode = 2;
}
message AcceptAuthorizationRequestResponse {
oneof result {
google.protobuf.Empty ok = 1;
Error error = 2;
}
}
message RejectAuthorizationRequestRequest {
AuthorizationRequestMessage authorization_request = 1;
}
message RejectAuthorizationRequestResponse {
oneof result {
google.protobuf.Empty ok = 1;
Error error = 2;
}
}

View file

@ -1,17 +0,0 @@
syntax = "proto3";
package tripod_id;
// Single size tripod id message
message Single {
uint32 id = 1;
}
// Double size tripod id message
message Double {
uint32 id = 1;
}
// Triple size tripod id message
message Triple {
uint64 id = 1;
}

View file

@ -1,5 +1,5 @@
pub mod generated {
include!(concat!(env!("OUT_DIR"), "/fireturtle.tripod_id.rs"));
include!(concat!(env!("OUT_DIR"), "/tripod_id.rs"));
}
mod single;
@ -9,7 +9,7 @@ mod triple;
pub use generated::*;
use crate::TripodId;
const PACKAGE_NAME: &'static str = "fireturtle.tripod_id";
const PACKAGE_NAME: &'static str = "tripod_id";
pub type SingleMessage = Single;
pub type DoubleMessage = Double;
pub type TripleMessage = Triple;