Files
home-sensors/proto/signaler_service.proto
T
2023-09-17 16:29:46 -07:00

76 lines
2.3 KiB
Protocol Buffer

syntax = "proto3";
service SignalerService {
rpc ListCameras(ListCamerasRequest) returns (ListCamerasResponse);
// CreateSession creates a new session that can be seen bv the provided Camera and Peer.
//
// Optionally, wait_for_update can be set to prevent returning until the Camera has seen the
// session request, populated candidates, and returned a session offer.
rpc CreateSession(CreateSessionRequest) returns (Session);
// UpdateSession updates the session
rpc UpdateSession(UpdateSessionRequest) returns (Session);
// ListSessions lists all sessions the client should consider.
//
// TODO: it would be better if we could alert a camera to poll for sessions
// i.e., with websockets (or streaming RPCs).
rpc ListSessions(ListSessionsRequest) returns (ListSessionsResponse);
}
message ListCamerasRequest {}
message ListCamerasResponse {
repeated Camera cameras = 1;
}
message CreateSessionRequest {
Session session = 1;
// If true, will keep the connection alive until an update is received.
// This is useful if we need to wait for a remote to detect the session
// request and update it with their candidates, offer, or answer.
bool wait_for_update = 2;
}
message UpdateSessionRequest {
Session session = 1;
// If true, will keep the connection alive until an update is received.
// This is useful if we need to wait for a remote to detect the session
// request and update it with their candidates, offer, or answer.
bool wait_for_update = 2;
}
message Camera {
message Identifier {
string id = 1;
}
Identifier identifier = 1;
}
message IceCandidate {
// Copied from https://pkg.go.dev/github.com/pion/webrtc/v4#ICECandidateInit
string candidate = 1;
optional string sdp_mid = 2;
optional int32 sdp_line_index = 3;
optional string username_fragment = 4;
}
message IceSessionDescription {
// Copied from https://pkg.go.dev/github.com/pion/webrtc/v4#SessionDescription
int sdp_type = 1;
string sdp = 2;
}
message Session {
message Identifier {
string id = 1;
}
Identifier id = 1;
Camera.Identifier camera = 2;
repeated IceCandidate client_ice_candidates = 3;
repeated IceCandidate camera_ice_candidates = 4;
IceSessionDescription camera_offer = 5;
IceSessionDescription client_answer = 6;
}