fix: refactor signaler; fix logic for local watcher

This commit is contained in:
Charles Hathaway
2023-09-21 21:50:13 -07:00
parent 9bbe917e59
commit 7fbd4fff69
8 changed files with 920 additions and 1076 deletions
+79 -58
View File
@@ -27,14 +27,41 @@ const (
h264FrameDuration = time.Millisecond * 33
)
func withAuth[T any](token string, v *T) *connect.Request[T] {
req := connect.NewRequest[T](v)
req.Header().Add("authorization", "Bearer "+token)
return req
}
func main() { //nolint
ctx := context.Background()
client := servicepb.NewSignalerServiceClient(&http.Client{}, "http://localhost:8080/")
httpClient := &http.Client{}
client := servicepb.NewSignalerServiceClient(httpClient, "http://localhost:8080/")
authToken, err := client.CreateAuthToken(ctx, connect.NewRequest(&pb.CreateAuthTokenRequest{
Type: &pb.CreateAuthTokenRequest_Camera_{
Camera: &pb.CreateAuthTokenRequest_Camera{
Id: "movie",
},
},
}))
if err != nil {
log.Fatalf("Failed to get auth token: %v", err)
}
token := authToken.Msg.GetToken()
// Assert that we have an audio or video file
_, err := os.Stat(videoFileName)
_, err = os.Stat(videoFileName)
haveVideoFile := !os.IsNotExist(err)
iceConnectedCtx, iceConnectedCtxCancel := context.WithCancel(context.Background())
// Create a new RTCPeerConnection
// Wait for a session request
session, err := client.PopSession(ctx, withAuth(token, &pb.PopSessionRequest{}))
if err != nil {
log.Fatalf("error creating session: %v", err)
}
peerConnection, err := webrtc.NewPeerConnection(webrtc.Configuration{
ICEServers: []webrtc.ICEServer{
{
@@ -51,8 +78,6 @@ func main() { //nolint
}
}()
iceConnectedCtx, iceConnectedCtxCancel := context.WithCancel(context.Background())
if haveVideoFile {
// Create a video track
videoTrack, videoTrackErr := webrtc.NewTrackLocalStaticSample(webrtc.RTPCodecCapability{MimeType: webrtc.MimeTypeH264}, "video", "pion")
@@ -139,90 +164,86 @@ func main() { //nolint
}
})
var iceCandidates []*pb.IceCandidate
peerConnection.OnICECandidate(func(i *webrtc.ICECandidate) {
if i == nil {
return
}
c := i.ToJSON()
iceCandidates = append(iceCandidates, &pb.IceCandidate{
client.CreateIceMessage(ctx, withAuth(token, &pb.CreateIceMessageRequest{
SessionIdentifier: session.Msg.GetId(),
IceMessage: &pb.IceMessage{
Type: &pb.IceMessage_Candidate{
Candidate: &pb.IceCandidate{
Candidate: c.Candidate,
SdpMid: c.SDPMid,
SdpLineIndex: proto.Int32(int32(*c.SDPMLineIndex)),
UsernameFragment: proto.String(*c.UsernameFragment),
},
},
},
}))
})
})
// Wait for a session request
var session *pb.Session
for session == nil {
resp, err := client.ListSessions(ctx, connect.NewRequest(&pb.ListSessionsRequest{}))
if err != nil {
log.Fatalf("error creating session: %v", err)
}
if len(resp.Msg.Sessions) > 0 {
session = resp.Msg.Sessions[0]
}
time.Sleep(time.Millisecond * 500)
}
// Add ICE candidates from remote
for _, candidate := range session.GetClientIceCandidates() {
go func() {
for {
msg, err := client.PopIceMessage(ctx, withAuth(token, &pb.PopIceMessageRequest{
SessionIdentifier: session.Msg.GetId(),
}))
if err != nil {
log.Fatalf("failed to pop ice message: %v", err)
}
switch msg.Msg.Type.(type) {
case *pb.IceMessage_Candidate:
candidate := msg.Msg.GetCandidate()
var sdpMLine *uint16
if candidate.SdpLineIndex != nil {
t := uint16(candidate.GetSdpLineIndex())
sdpMLine = &t
}
peerConnection.AddICECandidate(webrtc.ICECandidateInit{
if err := peerConnection.AddICECandidate(webrtc.ICECandidateInit{
Candidate: candidate.GetCandidate(),
SDPMid: candidate.SdpMid,
SDPMLineIndex: sdpMLine,
})
}); err != nil {
log.Fatalf("Failed to add ice candidate: %v", err)
}
case *pb.IceMessage_Session:
session := msg.Msg.GetSession()
offer := webrtc.SessionDescription{
Type: webrtc.SDPType(session.SdpType),
SDP: session.Sdp,
}
if err := peerConnection.SetLocalDescription(offer); err != nil {
log.Fatalf("Failed to set location description: %v", err)
}
cameraOffer, err := peerConnection.CreateOffer(nil)
// Send back an answer
answer, err := peerConnection.CreateAnswer(nil)
if err != nil {
log.Fatalf("error creating session: %v", err)
log.Fatalf("Failed to create an answer: %v", err)
}
if err := peerConnection.SetRemoteDescription(answer); err != nil {
log.Fatalf("Failed to set remote description: %v", err)
}
// Set the remote SessionDescription
if err = peerConnection.SetRemoteDescription(cameraOffer); err != nil {
panic(err)
}
// Create channel that is blocked until ICE Gathering is complete
gatherComplete := webrtc.GatheringCompletePromise(peerConnection)
// Block until ICE Gathering is complete, disabling trickle ICE
// we do this because we only can exchange one signaling message
// in a production application you should exchange ICE Candidates via OnICECandidate
log.Printf("Waiting to gather ICE")
<-gatherComplete
log.Printf("Done gathering ICE")
session.CameraIceCandidates = iceCandidates
session.CameraOffer = &pb.IceSessionDescription{
SdpType: int64(cameraOffer.Type),
Sdp: cameraOffer.SDP,
}
// Send it back
resp, err := client.UpdateSession(ctx, connect.NewRequest(&pb.UpdateSessionRequest{
Session: session,
WaitForUpdate: true,
_, err = client.CreateIceMessage(ctx, withAuth(token, &pb.CreateIceMessageRequest{
IceMessage: &pb.IceMessage{
Type: &pb.IceMessage_Session{
Session: &pb.IceSessionDescription{
SdpType: int64(answer.Type),
Sdp: answer.SDP,
},
},
},
}))
if err != nil {
log.Fatalf("error creating session: %v", err)
log.Fatalf("Failed to send answer: %v", err)
}
answer := webrtc.SessionDescription{
Type: webrtc.SDPType(resp.Msg.ClientAnswer.SdpType),
SDP: resp.Msg.ClientAnswer.Sdp,
}
// Sets the LocalDescription, and starts our UDP listeners
if err = peerConnection.SetLocalDescription(answer); err != nil {
panic(err)
}
}()
// Block forever
select {}
+64 -149
View File
@@ -42,24 +42,15 @@ const (
// SignalerServiceCreateSessionProcedure is the fully-qualified name of the SignalerService's
// CreateSession RPC.
SignalerServiceCreateSessionProcedure = "/signaler.SignalerService/CreateSession"
// SignalerServiceUpdateSessionProcedure is the fully-qualified name of the SignalerService's
// UpdateSession RPC.
SignalerServiceUpdateSessionProcedure = "/signaler.SignalerService/UpdateSession"
// SignalerServiceListSessionsProcedure is the fully-qualified name of the SignalerService's
// ListSessions RPC.
SignalerServiceListSessionsProcedure = "/signaler.SignalerService/ListSessions"
// SignalerServiceCreateIceCandidateProcedure is the fully-qualified name of the SignalerService's
// CreateIceCandidate RPC.
SignalerServiceCreateIceCandidateProcedure = "/signaler.SignalerService/CreateIceCandidate"
// SignalerServicePopIceCandidateProcedure is the fully-qualified name of the SignalerService's
// PopIceCandidate RPC.
SignalerServicePopIceCandidateProcedure = "/signaler.SignalerService/PopIceCandidate"
// SignalerServiceCreateIceSessionDescriptionProcedure is the fully-qualified name of the
// SignalerService's CreateIceSessionDescription RPC.
SignalerServiceCreateIceSessionDescriptionProcedure = "/signaler.SignalerService/CreateIceSessionDescription"
// SignalerServicePopIceSessionDescriptionProcedure is the fully-qualified name of the
// SignalerService's PopIceSessionDescription RPC.
SignalerServicePopIceSessionDescriptionProcedure = "/signaler.SignalerService/PopIceSessionDescription"
// SignalerServicePopSessionProcedure is the fully-qualified name of the SignalerService's
// PopSession RPC.
SignalerServicePopSessionProcedure = "/signaler.SignalerService/PopSession"
// SignalerServiceCreateIceMessageProcedure is the fully-qualified name of the SignalerService's
// CreateIceMessage RPC.
SignalerServiceCreateIceMessageProcedure = "/signaler.SignalerService/CreateIceMessage"
// SignalerServicePopIceMessageProcedure is the fully-qualified name of the SignalerService's
// PopIceMessage RPC.
SignalerServicePopIceMessageProcedure = "/signaler.SignalerService/PopIceMessage"
)
// SignalerServiceClient is a client for the signaler.SignalerService service.
@@ -71,21 +62,16 @@ type SignalerServiceClient interface {
// 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.
CreateSession(context.Context, *connect.Request[gen.CreateSessionRequest]) (*connect.Response[gen.Session], error)
// UpdateSession updates the session
UpdateSession(context.Context, *connect.Request[gen.UpdateSessionRequest]) (*connect.Response[gen.Session], error)
// ListSessions lists all sessions the client should consider.
// PopSession deletes a session from the list of sessions, and returns it.
//
// TODO: it would be better if we could alert a camera to poll for sessions
// i.e., with websockets (or streaming RPCs).
ListSessions(context.Context, *connect.Request[gen.ListSessionsRequest]) (*connect.Response[gen.ListSessionsResponse], error)
// CreateIceCandidate adds the provided candidate to the list of candidates.
CreateIceCandidate(context.Context, *connect.Request[gen.CreateIceCandidateRequest]) (*connect.Response[gen.IceCandidate], error)
// PopIceCandidate delete a candidate from the list of candidates and returns it.
// If there are no sessions, this blocks until one becomes available.
PopSession(context.Context, *connect.Request[gen.PopSessionRequest]) (*connect.Response[gen.Session], error)
// CreateIceMessage adds the provided message to the list of candidates.
CreateIceMessage(context.Context, *connect.Request[gen.CreateIceMessageRequest]) (*connect.Response[gen.IceMessage], error)
// PopIceCandidate delete a message from the list of messages and returns it.
//
// If there are no candidates, this blocks until one becomes available.
PopIceCandidate(context.Context, *connect.Request[gen.PopIceCandidateRequest]) (*connect.Response[gen.IceCandidate], error)
CreateIceSessionDescription(context.Context, *connect.Request[gen.CreateIceSessionDescriptionRequest]) (*connect.Response[gen.IceSessionDescription], error)
PopIceSessionDescription(context.Context, *connect.Request[gen.PopIceSessionDescriptionRequest]) (*connect.Response[gen.IceSessionDescription], error)
// If there are no messages, this blocks until one becomes available.
PopIceMessage(context.Context, *connect.Request[gen.PopIceMessageRequest]) (*connect.Response[gen.IceMessage], error)
}
// NewSignalerServiceClient constructs a client for the signaler.SignalerService service. By
@@ -113,34 +99,19 @@ func NewSignalerServiceClient(httpClient connect.HTTPClient, baseURL string, opt
baseURL+SignalerServiceCreateSessionProcedure,
opts...,
),
updateSession: connect.NewClient[gen.UpdateSessionRequest, gen.Session](
popSession: connect.NewClient[gen.PopSessionRequest, gen.Session](
httpClient,
baseURL+SignalerServiceUpdateSessionProcedure,
baseURL+SignalerServicePopSessionProcedure,
opts...,
),
listSessions: connect.NewClient[gen.ListSessionsRequest, gen.ListSessionsResponse](
createIceMessage: connect.NewClient[gen.CreateIceMessageRequest, gen.IceMessage](
httpClient,
baseURL+SignalerServiceListSessionsProcedure,
baseURL+SignalerServiceCreateIceMessageProcedure,
opts...,
),
createIceCandidate: connect.NewClient[gen.CreateIceCandidateRequest, gen.IceCandidate](
popIceMessage: connect.NewClient[gen.PopIceMessageRequest, gen.IceMessage](
httpClient,
baseURL+SignalerServiceCreateIceCandidateProcedure,
opts...,
),
popIceCandidate: connect.NewClient[gen.PopIceCandidateRequest, gen.IceCandidate](
httpClient,
baseURL+SignalerServicePopIceCandidateProcedure,
opts...,
),
createIceSessionDescription: connect.NewClient[gen.CreateIceSessionDescriptionRequest, gen.IceSessionDescription](
httpClient,
baseURL+SignalerServiceCreateIceSessionDescriptionProcedure,
opts...,
),
popIceSessionDescription: connect.NewClient[gen.PopIceSessionDescriptionRequest, gen.IceSessionDescription](
httpClient,
baseURL+SignalerServicePopIceSessionDescriptionProcedure,
baseURL+SignalerServicePopIceMessageProcedure,
opts...,
),
}
@@ -151,12 +122,9 @@ type signalerServiceClient struct {
createAuthToken *connect.Client[gen.CreateAuthTokenRequest, gen.AuthToken]
listCameras *connect.Client[gen.ListCamerasRequest, gen.ListCamerasResponse]
createSession *connect.Client[gen.CreateSessionRequest, gen.Session]
updateSession *connect.Client[gen.UpdateSessionRequest, gen.Session]
listSessions *connect.Client[gen.ListSessionsRequest, gen.ListSessionsResponse]
createIceCandidate *connect.Client[gen.CreateIceCandidateRequest, gen.IceCandidate]
popIceCandidate *connect.Client[gen.PopIceCandidateRequest, gen.IceCandidate]
createIceSessionDescription *connect.Client[gen.CreateIceSessionDescriptionRequest, gen.IceSessionDescription]
popIceSessionDescription *connect.Client[gen.PopIceSessionDescriptionRequest, gen.IceSessionDescription]
popSession *connect.Client[gen.PopSessionRequest, gen.Session]
createIceMessage *connect.Client[gen.CreateIceMessageRequest, gen.IceMessage]
popIceMessage *connect.Client[gen.PopIceMessageRequest, gen.IceMessage]
}
// CreateAuthToken calls signaler.SignalerService.CreateAuthToken.
@@ -174,34 +142,19 @@ func (c *signalerServiceClient) CreateSession(ctx context.Context, req *connect.
return c.createSession.CallUnary(ctx, req)
}
// UpdateSession calls signaler.SignalerService.UpdateSession.
func (c *signalerServiceClient) UpdateSession(ctx context.Context, req *connect.Request[gen.UpdateSessionRequest]) (*connect.Response[gen.Session], error) {
return c.updateSession.CallUnary(ctx, req)
// PopSession calls signaler.SignalerService.PopSession.
func (c *signalerServiceClient) PopSession(ctx context.Context, req *connect.Request[gen.PopSessionRequest]) (*connect.Response[gen.Session], error) {
return c.popSession.CallUnary(ctx, req)
}
// ListSessions calls signaler.SignalerService.ListSessions.
func (c *signalerServiceClient) ListSessions(ctx context.Context, req *connect.Request[gen.ListSessionsRequest]) (*connect.Response[gen.ListSessionsResponse], error) {
return c.listSessions.CallUnary(ctx, req)
// CreateIceMessage calls signaler.SignalerService.CreateIceMessage.
func (c *signalerServiceClient) CreateIceMessage(ctx context.Context, req *connect.Request[gen.CreateIceMessageRequest]) (*connect.Response[gen.IceMessage], error) {
return c.createIceMessage.CallUnary(ctx, req)
}
// CreateIceCandidate calls signaler.SignalerService.CreateIceCandidate.
func (c *signalerServiceClient) CreateIceCandidate(ctx context.Context, req *connect.Request[gen.CreateIceCandidateRequest]) (*connect.Response[gen.IceCandidate], error) {
return c.createIceCandidate.CallUnary(ctx, req)
}
// PopIceCandidate calls signaler.SignalerService.PopIceCandidate.
func (c *signalerServiceClient) PopIceCandidate(ctx context.Context, req *connect.Request[gen.PopIceCandidateRequest]) (*connect.Response[gen.IceCandidate], error) {
return c.popIceCandidate.CallUnary(ctx, req)
}
// CreateIceSessionDescription calls signaler.SignalerService.CreateIceSessionDescription.
func (c *signalerServiceClient) CreateIceSessionDescription(ctx context.Context, req *connect.Request[gen.CreateIceSessionDescriptionRequest]) (*connect.Response[gen.IceSessionDescription], error) {
return c.createIceSessionDescription.CallUnary(ctx, req)
}
// PopIceSessionDescription calls signaler.SignalerService.PopIceSessionDescription.
func (c *signalerServiceClient) PopIceSessionDescription(ctx context.Context, req *connect.Request[gen.PopIceSessionDescriptionRequest]) (*connect.Response[gen.IceSessionDescription], error) {
return c.popIceSessionDescription.CallUnary(ctx, req)
// PopIceMessage calls signaler.SignalerService.PopIceMessage.
func (c *signalerServiceClient) PopIceMessage(ctx context.Context, req *connect.Request[gen.PopIceMessageRequest]) (*connect.Response[gen.IceMessage], error) {
return c.popIceMessage.CallUnary(ctx, req)
}
// SignalerServiceHandler is an implementation of the signaler.SignalerService service.
@@ -213,21 +166,16 @@ type SignalerServiceHandler interface {
// 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.
CreateSession(context.Context, *connect.Request[gen.CreateSessionRequest]) (*connect.Response[gen.Session], error)
// UpdateSession updates the session
UpdateSession(context.Context, *connect.Request[gen.UpdateSessionRequest]) (*connect.Response[gen.Session], error)
// ListSessions lists all sessions the client should consider.
// PopSession deletes a session from the list of sessions, and returns it.
//
// TODO: it would be better if we could alert a camera to poll for sessions
// i.e., with websockets (or streaming RPCs).
ListSessions(context.Context, *connect.Request[gen.ListSessionsRequest]) (*connect.Response[gen.ListSessionsResponse], error)
// CreateIceCandidate adds the provided candidate to the list of candidates.
CreateIceCandidate(context.Context, *connect.Request[gen.CreateIceCandidateRequest]) (*connect.Response[gen.IceCandidate], error)
// PopIceCandidate delete a candidate from the list of candidates and returns it.
// If there are no sessions, this blocks until one becomes available.
PopSession(context.Context, *connect.Request[gen.PopSessionRequest]) (*connect.Response[gen.Session], error)
// CreateIceMessage adds the provided message to the list of candidates.
CreateIceMessage(context.Context, *connect.Request[gen.CreateIceMessageRequest]) (*connect.Response[gen.IceMessage], error)
// PopIceCandidate delete a message from the list of messages and returns it.
//
// If there are no candidates, this blocks until one becomes available.
PopIceCandidate(context.Context, *connect.Request[gen.PopIceCandidateRequest]) (*connect.Response[gen.IceCandidate], error)
CreateIceSessionDescription(context.Context, *connect.Request[gen.CreateIceSessionDescriptionRequest]) (*connect.Response[gen.IceSessionDescription], error)
PopIceSessionDescription(context.Context, *connect.Request[gen.PopIceSessionDescriptionRequest]) (*connect.Response[gen.IceSessionDescription], error)
// If there are no messages, this blocks until one becomes available.
PopIceMessage(context.Context, *connect.Request[gen.PopIceMessageRequest]) (*connect.Response[gen.IceMessage], error)
}
// NewSignalerServiceHandler builds an HTTP handler from the service implementation. It returns the
@@ -251,34 +199,19 @@ func NewSignalerServiceHandler(svc SignalerServiceHandler, opts ...connect.Handl
svc.CreateSession,
opts...,
)
signalerServiceUpdateSessionHandler := connect.NewUnaryHandler(
SignalerServiceUpdateSessionProcedure,
svc.UpdateSession,
signalerServicePopSessionHandler := connect.NewUnaryHandler(
SignalerServicePopSessionProcedure,
svc.PopSession,
opts...,
)
signalerServiceListSessionsHandler := connect.NewUnaryHandler(
SignalerServiceListSessionsProcedure,
svc.ListSessions,
signalerServiceCreateIceMessageHandler := connect.NewUnaryHandler(
SignalerServiceCreateIceMessageProcedure,
svc.CreateIceMessage,
opts...,
)
signalerServiceCreateIceCandidateHandler := connect.NewUnaryHandler(
SignalerServiceCreateIceCandidateProcedure,
svc.CreateIceCandidate,
opts...,
)
signalerServicePopIceCandidateHandler := connect.NewUnaryHandler(
SignalerServicePopIceCandidateProcedure,
svc.PopIceCandidate,
opts...,
)
signalerServiceCreateIceSessionDescriptionHandler := connect.NewUnaryHandler(
SignalerServiceCreateIceSessionDescriptionProcedure,
svc.CreateIceSessionDescription,
opts...,
)
signalerServicePopIceSessionDescriptionHandler := connect.NewUnaryHandler(
SignalerServicePopIceSessionDescriptionProcedure,
svc.PopIceSessionDescription,
signalerServicePopIceMessageHandler := connect.NewUnaryHandler(
SignalerServicePopIceMessageProcedure,
svc.PopIceMessage,
opts...,
)
return "/signaler.SignalerService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
@@ -289,18 +222,12 @@ func NewSignalerServiceHandler(svc SignalerServiceHandler, opts ...connect.Handl
signalerServiceListCamerasHandler.ServeHTTP(w, r)
case SignalerServiceCreateSessionProcedure:
signalerServiceCreateSessionHandler.ServeHTTP(w, r)
case SignalerServiceUpdateSessionProcedure:
signalerServiceUpdateSessionHandler.ServeHTTP(w, r)
case SignalerServiceListSessionsProcedure:
signalerServiceListSessionsHandler.ServeHTTP(w, r)
case SignalerServiceCreateIceCandidateProcedure:
signalerServiceCreateIceCandidateHandler.ServeHTTP(w, r)
case SignalerServicePopIceCandidateProcedure:
signalerServicePopIceCandidateHandler.ServeHTTP(w, r)
case SignalerServiceCreateIceSessionDescriptionProcedure:
signalerServiceCreateIceSessionDescriptionHandler.ServeHTTP(w, r)
case SignalerServicePopIceSessionDescriptionProcedure:
signalerServicePopIceSessionDescriptionHandler.ServeHTTP(w, r)
case SignalerServicePopSessionProcedure:
signalerServicePopSessionHandler.ServeHTTP(w, r)
case SignalerServiceCreateIceMessageProcedure:
signalerServiceCreateIceMessageHandler.ServeHTTP(w, r)
case SignalerServicePopIceMessageProcedure:
signalerServicePopIceMessageHandler.ServeHTTP(w, r)
default:
http.NotFound(w, r)
}
@@ -322,26 +249,14 @@ func (UnimplementedSignalerServiceHandler) CreateSession(context.Context, *conne
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.CreateSession is not implemented"))
}
func (UnimplementedSignalerServiceHandler) UpdateSession(context.Context, *connect.Request[gen.UpdateSessionRequest]) (*connect.Response[gen.Session], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.UpdateSession is not implemented"))
func (UnimplementedSignalerServiceHandler) PopSession(context.Context, *connect.Request[gen.PopSessionRequest]) (*connect.Response[gen.Session], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.PopSession is not implemented"))
}
func (UnimplementedSignalerServiceHandler) ListSessions(context.Context, *connect.Request[gen.ListSessionsRequest]) (*connect.Response[gen.ListSessionsResponse], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.ListSessions is not implemented"))
func (UnimplementedSignalerServiceHandler) CreateIceMessage(context.Context, *connect.Request[gen.CreateIceMessageRequest]) (*connect.Response[gen.IceMessage], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.CreateIceMessage is not implemented"))
}
func (UnimplementedSignalerServiceHandler) CreateIceCandidate(context.Context, *connect.Request[gen.CreateIceCandidateRequest]) (*connect.Response[gen.IceCandidate], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.CreateIceCandidate is not implemented"))
}
func (UnimplementedSignalerServiceHandler) PopIceCandidate(context.Context, *connect.Request[gen.PopIceCandidateRequest]) (*connect.Response[gen.IceCandidate], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.PopIceCandidate is not implemented"))
}
func (UnimplementedSignalerServiceHandler) CreateIceSessionDescription(context.Context, *connect.Request[gen.CreateIceSessionDescriptionRequest]) (*connect.Response[gen.IceSessionDescription], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.CreateIceSessionDescription is not implemented"))
}
func (UnimplementedSignalerServiceHandler) PopIceSessionDescription(context.Context, *connect.Request[gen.PopIceSessionDescriptionRequest]) (*connect.Response[gen.IceSessionDescription], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.PopIceSessionDescription is not implemented"))
func (UnimplementedSignalerServiceHandler) PopIceMessage(context.Context, *connect.Request[gen.PopIceMessageRequest]) (*connect.Response[gen.IceMessage], error) {
return nil, connect.NewError(connect.CodeUnimplemented, errors.New("signaler.SignalerService.PopIceMessage is not implemented"))
}
+176 -218
View File
@@ -342,6 +342,58 @@ class CreateSessionRequest extends $pb.GeneratedMessage {
void clearWaitForUpdate() => clearField(2);
}
class PopSessionRequest extends $pb.GeneratedMessage {
factory PopSessionRequest({
Session? session,
}) {
final $result = create();
if (session != null) {
$result.session = session;
}
return $result;
}
PopSessionRequest._() : super();
factory PopSessionRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory PopSessionRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'PopSessionRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
..aOM<Session>(1, _omitFieldNames ? '' : 'session', subBuilder: Session.create)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
PopSessionRequest clone() => PopSessionRequest()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
PopSessionRequest copyWith(void Function(PopSessionRequest) updates) => super.copyWith((message) => updates(message as PopSessionRequest)) as PopSessionRequest;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static PopSessionRequest create() => PopSessionRequest._();
PopSessionRequest createEmptyInstance() => create();
static $pb.PbList<PopSessionRequest> createRepeated() => $pb.PbList<PopSessionRequest>();
@$core.pragma('dart2js:noInline')
static PopSessionRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<PopSessionRequest>(create);
static PopSessionRequest? _defaultInstance;
@$pb.TagNumber(1)
Session get session => $_getN(0);
@$pb.TagNumber(1)
set session(Session v) { setField(1, v); }
@$pb.TagNumber(1)
$core.bool hasSession() => $_has(0);
@$pb.TagNumber(1)
void clearSession() => clearField(1);
@$pb.TagNumber(1)
Session ensureSession() => $_ensure(0);
}
class UpdateSessionRequest extends $pb.GeneratedMessage {
factory UpdateSessionRequest({
Session? session,
@@ -487,27 +539,27 @@ class ListSessionsResponse extends $pb.GeneratedMessage {
$core.List<Session> get sessions => $_getList(0);
}
class CreateIceCandidateRequest extends $pb.GeneratedMessage {
factory CreateIceCandidateRequest({
class CreateIceMessageRequest extends $pb.GeneratedMessage {
factory CreateIceMessageRequest({
Session_Identifier? sessionIdentifier,
IceCandidate? candidate,
IceMessage? iceMessage,
}) {
final $result = create();
if (sessionIdentifier != null) {
$result.sessionIdentifier = sessionIdentifier;
}
if (candidate != null) {
$result.candidate = candidate;
if (iceMessage != null) {
$result.iceMessage = iceMessage;
}
return $result;
}
CreateIceCandidateRequest._() : super();
factory CreateIceCandidateRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory CreateIceCandidateRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
CreateIceMessageRequest._() : super();
factory CreateIceMessageRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory CreateIceMessageRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CreateIceCandidateRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CreateIceMessageRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
..aOM<Session_Identifier>(1, _omitFieldNames ? '' : 'sessionIdentifier', subBuilder: Session_Identifier.create)
..aOM<IceCandidate>(2, _omitFieldNames ? '' : 'candidate', subBuilder: IceCandidate.create)
..aOM<IceMessage>(2, _omitFieldNames ? '' : 'iceMessage', subBuilder: IceMessage.create)
..hasRequiredFields = false
;
@@ -515,22 +567,22 @@ class CreateIceCandidateRequest extends $pb.GeneratedMessage {
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
CreateIceCandidateRequest clone() => CreateIceCandidateRequest()..mergeFromMessage(this);
CreateIceMessageRequest clone() => CreateIceMessageRequest()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
CreateIceCandidateRequest copyWith(void Function(CreateIceCandidateRequest) updates) => super.copyWith((message) => updates(message as CreateIceCandidateRequest)) as CreateIceCandidateRequest;
CreateIceMessageRequest copyWith(void Function(CreateIceMessageRequest) updates) => super.copyWith((message) => updates(message as CreateIceMessageRequest)) as CreateIceMessageRequest;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static CreateIceCandidateRequest create() => CreateIceCandidateRequest._();
CreateIceCandidateRequest createEmptyInstance() => create();
static $pb.PbList<CreateIceCandidateRequest> createRepeated() => $pb.PbList<CreateIceCandidateRequest>();
static CreateIceMessageRequest create() => CreateIceMessageRequest._();
CreateIceMessageRequest createEmptyInstance() => create();
static $pb.PbList<CreateIceMessageRequest> createRepeated() => $pb.PbList<CreateIceMessageRequest>();
@$core.pragma('dart2js:noInline')
static CreateIceCandidateRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<CreateIceCandidateRequest>(create);
static CreateIceCandidateRequest? _defaultInstance;
static CreateIceMessageRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<CreateIceMessageRequest>(create);
static CreateIceMessageRequest? _defaultInstance;
@$pb.TagNumber(1)
Session_Identifier get sessionIdentifier => $_getN(0);
@@ -544,19 +596,19 @@ class CreateIceCandidateRequest extends $pb.GeneratedMessage {
Session_Identifier ensureSessionIdentifier() => $_ensure(0);
@$pb.TagNumber(2)
IceCandidate get candidate => $_getN(1);
IceMessage get iceMessage => $_getN(1);
@$pb.TagNumber(2)
set candidate(IceCandidate v) { setField(2, v); }
set iceMessage(IceMessage v) { setField(2, v); }
@$pb.TagNumber(2)
$core.bool hasCandidate() => $_has(1);
$core.bool hasIceMessage() => $_has(1);
@$pb.TagNumber(2)
void clearCandidate() => clearField(2);
void clearIceMessage() => clearField(2);
@$pb.TagNumber(2)
IceCandidate ensureCandidate() => $_ensure(1);
IceMessage ensureIceMessage() => $_ensure(1);
}
class PopIceCandidateRequest extends $pb.GeneratedMessage {
factory PopIceCandidateRequest({
class PopIceMessageRequest extends $pb.GeneratedMessage {
factory PopIceMessageRequest({
Session_Identifier? sessionIdentifier,
}) {
final $result = create();
@@ -565,11 +617,11 @@ class PopIceCandidateRequest extends $pb.GeneratedMessage {
}
return $result;
}
PopIceCandidateRequest._() : super();
factory PopIceCandidateRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory PopIceCandidateRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
PopIceMessageRequest._() : super();
factory PopIceMessageRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory PopIceMessageRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'PopIceCandidateRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'PopIceMessageRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
..aOM<Session_Identifier>(1, _omitFieldNames ? '' : 'sessionIdentifier', subBuilder: Session_Identifier.create)
..hasRequiredFields = false
;
@@ -578,142 +630,22 @@ class PopIceCandidateRequest extends $pb.GeneratedMessage {
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
PopIceCandidateRequest clone() => PopIceCandidateRequest()..mergeFromMessage(this);
PopIceMessageRequest clone() => PopIceMessageRequest()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
PopIceCandidateRequest copyWith(void Function(PopIceCandidateRequest) updates) => super.copyWith((message) => updates(message as PopIceCandidateRequest)) as PopIceCandidateRequest;
PopIceMessageRequest copyWith(void Function(PopIceMessageRequest) updates) => super.copyWith((message) => updates(message as PopIceMessageRequest)) as PopIceMessageRequest;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static PopIceCandidateRequest create() => PopIceCandidateRequest._();
PopIceCandidateRequest createEmptyInstance() => create();
static $pb.PbList<PopIceCandidateRequest> createRepeated() => $pb.PbList<PopIceCandidateRequest>();
static PopIceMessageRequest create() => PopIceMessageRequest._();
PopIceMessageRequest createEmptyInstance() => create();
static $pb.PbList<PopIceMessageRequest> createRepeated() => $pb.PbList<PopIceMessageRequest>();
@$core.pragma('dart2js:noInline')
static PopIceCandidateRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<PopIceCandidateRequest>(create);
static PopIceCandidateRequest? _defaultInstance;
@$pb.TagNumber(1)
Session_Identifier get sessionIdentifier => $_getN(0);
@$pb.TagNumber(1)
set sessionIdentifier(Session_Identifier v) { setField(1, v); }
@$pb.TagNumber(1)
$core.bool hasSessionIdentifier() => $_has(0);
@$pb.TagNumber(1)
void clearSessionIdentifier() => clearField(1);
@$pb.TagNumber(1)
Session_Identifier ensureSessionIdentifier() => $_ensure(0);
}
class CreateIceSessionDescriptionRequest extends $pb.GeneratedMessage {
factory CreateIceSessionDescriptionRequest({
Session_Identifier? sessionIdentifier,
IceSessionDescription? description,
}) {
final $result = create();
if (sessionIdentifier != null) {
$result.sessionIdentifier = sessionIdentifier;
}
if (description != null) {
$result.description = description;
}
return $result;
}
CreateIceSessionDescriptionRequest._() : super();
factory CreateIceSessionDescriptionRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory CreateIceSessionDescriptionRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CreateIceSessionDescriptionRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
..aOM<Session_Identifier>(1, _omitFieldNames ? '' : 'sessionIdentifier', subBuilder: Session_Identifier.create)
..aOM<IceSessionDescription>(2, _omitFieldNames ? '' : 'description', subBuilder: IceSessionDescription.create)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
CreateIceSessionDescriptionRequest clone() => CreateIceSessionDescriptionRequest()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
CreateIceSessionDescriptionRequest copyWith(void Function(CreateIceSessionDescriptionRequest) updates) => super.copyWith((message) => updates(message as CreateIceSessionDescriptionRequest)) as CreateIceSessionDescriptionRequest;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static CreateIceSessionDescriptionRequest create() => CreateIceSessionDescriptionRequest._();
CreateIceSessionDescriptionRequest createEmptyInstance() => create();
static $pb.PbList<CreateIceSessionDescriptionRequest> createRepeated() => $pb.PbList<CreateIceSessionDescriptionRequest>();
@$core.pragma('dart2js:noInline')
static CreateIceSessionDescriptionRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<CreateIceSessionDescriptionRequest>(create);
static CreateIceSessionDescriptionRequest? _defaultInstance;
@$pb.TagNumber(1)
Session_Identifier get sessionIdentifier => $_getN(0);
@$pb.TagNumber(1)
set sessionIdentifier(Session_Identifier v) { setField(1, v); }
@$pb.TagNumber(1)
$core.bool hasSessionIdentifier() => $_has(0);
@$pb.TagNumber(1)
void clearSessionIdentifier() => clearField(1);
@$pb.TagNumber(1)
Session_Identifier ensureSessionIdentifier() => $_ensure(0);
@$pb.TagNumber(2)
IceSessionDescription get description => $_getN(1);
@$pb.TagNumber(2)
set description(IceSessionDescription v) { setField(2, v); }
@$pb.TagNumber(2)
$core.bool hasDescription() => $_has(1);
@$pb.TagNumber(2)
void clearDescription() => clearField(2);
@$pb.TagNumber(2)
IceSessionDescription ensureDescription() => $_ensure(1);
}
class PopIceSessionDescriptionRequest extends $pb.GeneratedMessage {
factory PopIceSessionDescriptionRequest({
Session_Identifier? sessionIdentifier,
}) {
final $result = create();
if (sessionIdentifier != null) {
$result.sessionIdentifier = sessionIdentifier;
}
return $result;
}
PopIceSessionDescriptionRequest._() : super();
factory PopIceSessionDescriptionRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory PopIceSessionDescriptionRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'PopIceSessionDescriptionRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
..aOM<Session_Identifier>(1, _omitFieldNames ? '' : 'sessionIdentifier', subBuilder: Session_Identifier.create)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
PopIceSessionDescriptionRequest clone() => PopIceSessionDescriptionRequest()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
PopIceSessionDescriptionRequest copyWith(void Function(PopIceSessionDescriptionRequest) updates) => super.copyWith((message) => updates(message as PopIceSessionDescriptionRequest)) as PopIceSessionDescriptionRequest;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static PopIceSessionDescriptionRequest create() => PopIceSessionDescriptionRequest._();
PopIceSessionDescriptionRequest createEmptyInstance() => create();
static $pb.PbList<PopIceSessionDescriptionRequest> createRepeated() => $pb.PbList<PopIceSessionDescriptionRequest>();
@$core.pragma('dart2js:noInline')
static PopIceSessionDescriptionRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<PopIceSessionDescriptionRequest>(create);
static PopIceSessionDescriptionRequest? _defaultInstance;
static PopIceMessageRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<PopIceMessageRequest>(create);
static PopIceMessageRequest? _defaultInstance;
@$pb.TagNumber(1)
Session_Identifier get sessionIdentifier => $_getN(0);
@@ -829,6 +761,89 @@ class Camera extends $pb.GeneratedMessage {
Camera_Identifier ensureIdentifier() => $_ensure(0);
}
enum IceMessage_Type {
candidate,
session,
notSet
}
class IceMessage extends $pb.GeneratedMessage {
factory IceMessage({
IceCandidate? candidate,
IceSessionDescription? session,
}) {
final $result = create();
if (candidate != null) {
$result.candidate = candidate;
}
if (session != null) {
$result.session = session;
}
return $result;
}
IceMessage._() : super();
factory IceMessage.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory IceMessage.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static const $core.Map<$core.int, IceMessage_Type> _IceMessage_TypeByTag = {
1 : IceMessage_Type.candidate,
2 : IceMessage_Type.session,
0 : IceMessage_Type.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'IceMessage', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
..oo(0, [1, 2])
..aOM<IceCandidate>(1, _omitFieldNames ? '' : 'candidate', subBuilder: IceCandidate.create)
..aOM<IceSessionDescription>(2, _omitFieldNames ? '' : 'session', subBuilder: IceSessionDescription.create)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
IceMessage clone() => IceMessage()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
IceMessage copyWith(void Function(IceMessage) updates) => super.copyWith((message) => updates(message as IceMessage)) as IceMessage;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static IceMessage create() => IceMessage._();
IceMessage createEmptyInstance() => create();
static $pb.PbList<IceMessage> createRepeated() => $pb.PbList<IceMessage>();
@$core.pragma('dart2js:noInline')
static IceMessage getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<IceMessage>(create);
static IceMessage? _defaultInstance;
IceMessage_Type whichType() => _IceMessage_TypeByTag[$_whichOneof(0)]!;
void clearType() => clearField($_whichOneof(0));
@$pb.TagNumber(1)
IceCandidate get candidate => $_getN(0);
@$pb.TagNumber(1)
set candidate(IceCandidate v) { setField(1, v); }
@$pb.TagNumber(1)
$core.bool hasCandidate() => $_has(0);
@$pb.TagNumber(1)
void clearCandidate() => clearField(1);
@$pb.TagNumber(1)
IceCandidate ensureCandidate() => $_ensure(0);
@$pb.TagNumber(2)
IceSessionDescription get session => $_getN(1);
@$pb.TagNumber(2)
set session(IceSessionDescription v) { setField(2, v); }
@$pb.TagNumber(2)
$core.bool hasSession() => $_has(1);
@$pb.TagNumber(2)
void clearSession() => clearField(2);
@$pb.TagNumber(2)
IceSessionDescription ensureSession() => $_ensure(1);
}
class IceCandidate extends $pb.GeneratedMessage {
factory IceCandidate({
$core.String? candidate,
@@ -1041,10 +1056,6 @@ class Session extends $pb.GeneratedMessage {
factory Session({
Session_Identifier? id,
Camera_Identifier? camera,
$core.Iterable<IceCandidate>? clientIceCandidates,
$core.Iterable<IceCandidate>? cameraIceCandidates,
IceSessionDescription? cameraOffer,
IceSessionDescription? clientAnswer,
}) {
final $result = create();
if (id != null) {
@@ -1053,18 +1064,6 @@ class Session extends $pb.GeneratedMessage {
if (camera != null) {
$result.camera = camera;
}
if (clientIceCandidates != null) {
$result.clientIceCandidates.addAll(clientIceCandidates);
}
if (cameraIceCandidates != null) {
$result.cameraIceCandidates.addAll(cameraIceCandidates);
}
if (cameraOffer != null) {
$result.cameraOffer = cameraOffer;
}
if (clientAnswer != null) {
$result.clientAnswer = clientAnswer;
}
return $result;
}
Session._() : super();
@@ -1074,10 +1073,6 @@ class Session extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'Session', package: const $pb.PackageName(_omitMessageNames ? '' : 'signaler'), createEmptyInstance: create)
..aOM<Session_Identifier>(1, _omitFieldNames ? '' : 'id', subBuilder: Session_Identifier.create)
..aOM<Camera_Identifier>(2, _omitFieldNames ? '' : 'camera', subBuilder: Camera_Identifier.create)
..pc<IceCandidate>(3, _omitFieldNames ? '' : 'clientIceCandidates', $pb.PbFieldType.PM, subBuilder: IceCandidate.create)
..pc<IceCandidate>(4, _omitFieldNames ? '' : 'cameraIceCandidates', $pb.PbFieldType.PM, subBuilder: IceCandidate.create)
..aOM<IceSessionDescription>(5, _omitFieldNames ? '' : 'cameraOffer', subBuilder: IceSessionDescription.create)
..aOM<IceSessionDescription>(6, _omitFieldNames ? '' : 'clientAnswer', subBuilder: IceSessionDescription.create)
..hasRequiredFields = false
;
@@ -1123,34 +1118,6 @@ class Session extends $pb.GeneratedMessage {
void clearCamera() => clearField(2);
@$pb.TagNumber(2)
Camera_Identifier ensureCamera() => $_ensure(1);
@$pb.TagNumber(3)
$core.List<IceCandidate> get clientIceCandidates => $_getList(2);
@$pb.TagNumber(4)
$core.List<IceCandidate> get cameraIceCandidates => $_getList(3);
@$pb.TagNumber(5)
IceSessionDescription get cameraOffer => $_getN(4);
@$pb.TagNumber(5)
set cameraOffer(IceSessionDescription v) { setField(5, v); }
@$pb.TagNumber(5)
$core.bool hasCameraOffer() => $_has(4);
@$pb.TagNumber(5)
void clearCameraOffer() => clearField(5);
@$pb.TagNumber(5)
IceSessionDescription ensureCameraOffer() => $_ensure(4);
@$pb.TagNumber(6)
IceSessionDescription get clientAnswer => $_getN(5);
@$pb.TagNumber(6)
set clientAnswer(IceSessionDescription v) { setField(6, v); }
@$pb.TagNumber(6)
$core.bool hasClientAnswer() => $_has(5);
@$pb.TagNumber(6)
void clearClientAnswer() => clearField(6);
@$pb.TagNumber(6)
IceSessionDescription ensureClientAnswer() => $_ensure(5);
}
class AuthToken extends $pb.GeneratedMessage {
@@ -1216,23 +1183,14 @@ class SignalerServiceApi {
$async.Future<Session> createSession($pb.ClientContext? ctx, CreateSessionRequest request) =>
_client.invoke<Session>(ctx, 'SignalerService', 'CreateSession', request, Session())
;
$async.Future<Session> updateSession($pb.ClientContext? ctx, UpdateSessionRequest request) =>
_client.invoke<Session>(ctx, 'SignalerService', 'UpdateSession', request, Session())
$async.Future<Session> popSession($pb.ClientContext? ctx, PopSessionRequest request) =>
_client.invoke<Session>(ctx, 'SignalerService', 'PopSession', request, Session())
;
$async.Future<ListSessionsResponse> listSessions($pb.ClientContext? ctx, ListSessionsRequest request) =>
_client.invoke<ListSessionsResponse>(ctx, 'SignalerService', 'ListSessions', request, ListSessionsResponse())
$async.Future<IceMessage> createIceMessage($pb.ClientContext? ctx, CreateIceMessageRequest request) =>
_client.invoke<IceMessage>(ctx, 'SignalerService', 'CreateIceMessage', request, IceMessage())
;
$async.Future<IceCandidate> createIceCandidate($pb.ClientContext? ctx, CreateIceCandidateRequest request) =>
_client.invoke<IceCandidate>(ctx, 'SignalerService', 'CreateIceCandidate', request, IceCandidate())
;
$async.Future<IceCandidate> popIceCandidate($pb.ClientContext? ctx, PopIceCandidateRequest request) =>
_client.invoke<IceCandidate>(ctx, 'SignalerService', 'PopIceCandidate', request, IceCandidate())
;
$async.Future<IceSessionDescription> createIceSessionDescription($pb.ClientContext? ctx, CreateIceSessionDescriptionRequest request) =>
_client.invoke<IceSessionDescription>(ctx, 'SignalerService', 'CreateIceSessionDescription', request, IceSessionDescription())
;
$async.Future<IceSessionDescription> popIceSessionDescription($pb.ClientContext? ctx, PopIceSessionDescriptionRequest request) =>
_client.invoke<IceSessionDescription>(ctx, 'SignalerService', 'PopIceSessionDescription', request, IceSessionDescription())
$async.Future<IceMessage> popIceMessage($pb.ClientContext? ctx, PopIceMessageRequest request) =>
_client.invoke<IceMessage>(ctx, 'SignalerService', 'PopIceMessage', request, IceMessage())
;
}
+322 -378
View File
@@ -253,6 +253,53 @@ func (x *CreateSessionRequest) GetWaitForUpdate() bool {
return false
}
type PopSessionRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Session *Session `protobuf:"bytes,1,opt,name=session,proto3" json:"session,omitempty"`
}
func (x *PopSessionRequest) Reset() {
*x = PopSessionRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *PopSessionRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PopSessionRequest) ProtoMessage() {}
func (x *PopSessionRequest) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PopSessionRequest.ProtoReflect.Descriptor instead.
func (*PopSessionRequest) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{4}
}
func (x *PopSessionRequest) GetSession() *Session {
if x != nil {
return x.Session
}
return nil
}
type UpdateSessionRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -268,7 +315,7 @@ type UpdateSessionRequest struct {
func (x *UpdateSessionRequest) Reset() {
*x = UpdateSessionRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[4]
mi := &file_signaler_service_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -281,7 +328,7 @@ func (x *UpdateSessionRequest) String() string {
func (*UpdateSessionRequest) ProtoMessage() {}
func (x *UpdateSessionRequest) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[4]
mi := &file_signaler_service_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -294,7 +341,7 @@ func (x *UpdateSessionRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateSessionRequest.ProtoReflect.Descriptor instead.
func (*UpdateSessionRequest) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{4}
return file_signaler_service_proto_rawDescGZIP(), []int{5}
}
func (x *UpdateSessionRequest) GetSession() *Session {
@@ -320,7 +367,7 @@ type ListSessionsRequest struct {
func (x *ListSessionsRequest) Reset() {
*x = ListSessionsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[5]
mi := &file_signaler_service_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -333,7 +380,7 @@ func (x *ListSessionsRequest) String() string {
func (*ListSessionsRequest) ProtoMessage() {}
func (x *ListSessionsRequest) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[5]
mi := &file_signaler_service_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -346,7 +393,7 @@ func (x *ListSessionsRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListSessionsRequest.ProtoReflect.Descriptor instead.
func (*ListSessionsRequest) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{5}
return file_signaler_service_proto_rawDescGZIP(), []int{6}
}
type ListSessionsResponse struct {
@@ -360,7 +407,7 @@ type ListSessionsResponse struct {
func (x *ListSessionsResponse) Reset() {
*x = ListSessionsResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[6]
mi := &file_signaler_service_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -373,7 +420,7 @@ func (x *ListSessionsResponse) String() string {
func (*ListSessionsResponse) ProtoMessage() {}
func (x *ListSessionsResponse) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[6]
mi := &file_signaler_service_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -386,7 +433,7 @@ func (x *ListSessionsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListSessionsResponse.ProtoReflect.Descriptor instead.
func (*ListSessionsResponse) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{6}
return file_signaler_service_proto_rawDescGZIP(), []int{7}
}
func (x *ListSessionsResponse) GetSessions() []*Session {
@@ -396,71 +443,17 @@ func (x *ListSessionsResponse) GetSessions() []*Session {
return nil
}
type CreateIceCandidateRequest struct {
type CreateIceMessageRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SessionIdentifier *Session_Identifier `protobuf:"bytes,1,opt,name=session_identifier,json=sessionIdentifier,proto3" json:"session_identifier,omitempty"`
Candidate *IceCandidate `protobuf:"bytes,2,opt,name=candidate,proto3" json:"candidate,omitempty"`
IceMessage *IceMessage `protobuf:"bytes,2,opt,name=ice_message,json=iceMessage,proto3" json:"ice_message,omitempty"`
}
func (x *CreateIceCandidateRequest) Reset() {
*x = CreateIceCandidateRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CreateIceCandidateRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CreateIceCandidateRequest) ProtoMessage() {}
func (x *CreateIceCandidateRequest) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use CreateIceCandidateRequest.ProtoReflect.Descriptor instead.
func (*CreateIceCandidateRequest) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{7}
}
func (x *CreateIceCandidateRequest) GetSessionIdentifier() *Session_Identifier {
if x != nil {
return x.SessionIdentifier
}
return nil
}
func (x *CreateIceCandidateRequest) GetCandidate() *IceCandidate {
if x != nil {
return x.Candidate
}
return nil
}
type PopIceCandidateRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SessionIdentifier *Session_Identifier `protobuf:"bytes,1,opt,name=session_identifier,json=sessionIdentifier,proto3" json:"session_identifier,omitempty"`
}
func (x *PopIceCandidateRequest) Reset() {
*x = PopIceCandidateRequest{}
func (x *CreateIceMessageRequest) Reset() {
*x = CreateIceMessageRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -468,13 +461,13 @@ func (x *PopIceCandidateRequest) Reset() {
}
}
func (x *PopIceCandidateRequest) String() string {
func (x *CreateIceMessageRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PopIceCandidateRequest) ProtoMessage() {}
func (*CreateIceMessageRequest) ProtoMessage() {}
func (x *PopIceCandidateRequest) ProtoReflect() protoreflect.Message {
func (x *CreateIceMessageRequest) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -486,29 +479,35 @@ func (x *PopIceCandidateRequest) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
// Deprecated: Use PopIceCandidateRequest.ProtoReflect.Descriptor instead.
func (*PopIceCandidateRequest) Descriptor() ([]byte, []int) {
// Deprecated: Use CreateIceMessageRequest.ProtoReflect.Descriptor instead.
func (*CreateIceMessageRequest) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{8}
}
func (x *PopIceCandidateRequest) GetSessionIdentifier() *Session_Identifier {
func (x *CreateIceMessageRequest) GetSessionIdentifier() *Session_Identifier {
if x != nil {
return x.SessionIdentifier
}
return nil
}
type CreateIceSessionDescriptionRequest struct {
func (x *CreateIceMessageRequest) GetIceMessage() *IceMessage {
if x != nil {
return x.IceMessage
}
return nil
}
type PopIceMessageRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SessionIdentifier *Session_Identifier `protobuf:"bytes,1,opt,name=session_identifier,json=sessionIdentifier,proto3" json:"session_identifier,omitempty"`
Description *IceSessionDescription `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
}
func (x *CreateIceSessionDescriptionRequest) Reset() {
*x = CreateIceSessionDescriptionRequest{}
func (x *PopIceMessageRequest) Reset() {
*x = PopIceMessageRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -516,13 +515,13 @@ func (x *CreateIceSessionDescriptionRequest) Reset() {
}
}
func (x *CreateIceSessionDescriptionRequest) String() string {
func (x *PopIceMessageRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CreateIceSessionDescriptionRequest) ProtoMessage() {}
func (*PopIceMessageRequest) ProtoMessage() {}
func (x *CreateIceSessionDescriptionRequest) ProtoReflect() protoreflect.Message {
func (x *PopIceMessageRequest) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -534,66 +533,12 @@ func (x *CreateIceSessionDescriptionRequest) ProtoReflect() protoreflect.Message
return mi.MessageOf(x)
}
// Deprecated: Use CreateIceSessionDescriptionRequest.ProtoReflect.Descriptor instead.
func (*CreateIceSessionDescriptionRequest) Descriptor() ([]byte, []int) {
// Deprecated: Use PopIceMessageRequest.ProtoReflect.Descriptor instead.
func (*PopIceMessageRequest) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{9}
}
func (x *CreateIceSessionDescriptionRequest) GetSessionIdentifier() *Session_Identifier {
if x != nil {
return x.SessionIdentifier
}
return nil
}
func (x *CreateIceSessionDescriptionRequest) GetDescription() *IceSessionDescription {
if x != nil {
return x.Description
}
return nil
}
type PopIceSessionDescriptionRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
SessionIdentifier *Session_Identifier `protobuf:"bytes,1,opt,name=session_identifier,json=sessionIdentifier,proto3" json:"session_identifier,omitempty"`
}
func (x *PopIceSessionDescriptionRequest) Reset() {
*x = PopIceSessionDescriptionRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *PopIceSessionDescriptionRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PopIceSessionDescriptionRequest) ProtoMessage() {}
func (x *PopIceSessionDescriptionRequest) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PopIceSessionDescriptionRequest.ProtoReflect.Descriptor instead.
func (*PopIceSessionDescriptionRequest) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{10}
}
func (x *PopIceSessionDescriptionRequest) GetSessionIdentifier() *Session_Identifier {
func (x *PopIceMessageRequest) GetSessionIdentifier() *Session_Identifier {
if x != nil {
return x.SessionIdentifier
}
@@ -611,7 +556,7 @@ type Camera struct {
func (x *Camera) Reset() {
*x = Camera{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[11]
mi := &file_signaler_service_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -624,7 +569,7 @@ func (x *Camera) String() string {
func (*Camera) ProtoMessage() {}
func (x *Camera) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[11]
mi := &file_signaler_service_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -637,7 +582,7 @@ func (x *Camera) ProtoReflect() protoreflect.Message {
// Deprecated: Use Camera.ProtoReflect.Descriptor instead.
func (*Camera) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{11}
return file_signaler_service_proto_rawDescGZIP(), []int{10}
}
func (x *Camera) GetIdentifier() *Camera_Identifier {
@@ -647,6 +592,87 @@ func (x *Camera) GetIdentifier() *Camera_Identifier {
return nil
}
type IceMessage struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to Type:
//
// *IceMessage_Candidate
// *IceMessage_Session
Type isIceMessage_Type `protobuf_oneof:"type"`
}
func (x *IceMessage) Reset() {
*x = IceMessage{}
if protoimpl.UnsafeEnabled {
mi := &file_signaler_service_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IceMessage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IceMessage) ProtoMessage() {}
func (x *IceMessage) ProtoReflect() protoreflect.Message {
mi := &file_signaler_service_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IceMessage.ProtoReflect.Descriptor instead.
func (*IceMessage) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{11}
}
func (m *IceMessage) GetType() isIceMessage_Type {
if m != nil {
return m.Type
}
return nil
}
func (x *IceMessage) GetCandidate() *IceCandidate {
if x, ok := x.GetType().(*IceMessage_Candidate); ok {
return x.Candidate
}
return nil
}
func (x *IceMessage) GetSession() *IceSessionDescription {
if x, ok := x.GetType().(*IceMessage_Session); ok {
return x.Session
}
return nil
}
type isIceMessage_Type interface {
isIceMessage_Type()
}
type IceMessage_Candidate struct {
Candidate *IceCandidate `protobuf:"bytes,1,opt,name=candidate,proto3,oneof"`
}
type IceMessage_Session struct {
Session *IceSessionDescription `protobuf:"bytes,2,opt,name=session,proto3,oneof"`
}
func (*IceMessage_Candidate) isIceMessage_Type() {}
func (*IceMessage_Session) isIceMessage_Type() {}
type IceCandidate struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -782,10 +808,6 @@ type Session struct {
Id *Session_Identifier `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Camera *Camera_Identifier `protobuf:"bytes,2,opt,name=camera,proto3" json:"camera,omitempty"`
ClientIceCandidates []*IceCandidate `protobuf:"bytes,3,rep,name=client_ice_candidates,json=clientIceCandidates,proto3" json:"client_ice_candidates,omitempty"`
CameraIceCandidates []*IceCandidate `protobuf:"bytes,4,rep,name=camera_ice_candidates,json=cameraIceCandidates,proto3" json:"camera_ice_candidates,omitempty"`
CameraOffer *IceSessionDescription `protobuf:"bytes,5,opt,name=camera_offer,json=cameraOffer,proto3" json:"camera_offer,omitempty"`
ClientAnswer *IceSessionDescription `protobuf:"bytes,6,opt,name=client_answer,json=clientAnswer,proto3" json:"client_answer,omitempty"`
}
func (x *Session) Reset() {
@@ -834,34 +856,6 @@ func (x *Session) GetCamera() *Camera_Identifier {
return nil
}
func (x *Session) GetClientIceCandidates() []*IceCandidate {
if x != nil {
return x.ClientIceCandidates
}
return nil
}
func (x *Session) GetCameraIceCandidates() []*IceCandidate {
if x != nil {
return x.CameraIceCandidates
}
return nil
}
func (x *Session) GetCameraOffer() *IceSessionDescription {
if x != nil {
return x.CameraOffer
}
return nil
}
func (x *Session) GetClientAnswer() *IceSessionDescription {
if x != nil {
return x.ClientAnswer
}
return nil
}
type AuthToken struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1033,7 +1027,7 @@ func (x *Camera_Identifier) ProtoReflect() protoreflect.Message {
// Deprecated: Use Camera_Identifier.ProtoReflect.Descriptor instead.
func (*Camera_Identifier) Descriptor() ([]byte, []int) {
return file_signaler_service_proto_rawDescGZIP(), []int{11, 0}
return file_signaler_service_proto_rawDescGZIP(), []int{10, 0}
}
func (x *Camera_Identifier) GetId() string {
@@ -1121,166 +1115,122 @@ var file_signaler_service_proto_rawDesc = []byte{
0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x75, 0x70,
0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x77, 0x61, 0x69, 0x74,
0x46, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x6b, 0x0a, 0x14, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x2b, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26,
0x0a, 0x0f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x45, 0x0a,
0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c,
0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49,
0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x46, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x40, 0x0a, 0x11, 0x50, 0x6f, 0x70,
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b,
0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x11, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x6b, 0x0a, 0x14, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e,
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x12, 0x26, 0x0a, 0x0f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x46,
0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74,
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
0x45, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x73, 0x65, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x69, 0x67, 0x6e,
0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x49, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x11, 0x73, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12,
0x34, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01,
0x35, 0x0a, 0x0b, 0x69, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e,
0x49, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0a, 0x69, 0x63, 0x65, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x63, 0x0a, 0x14, 0x50, 0x6f, 0x70, 0x49, 0x63, 0x65,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b,
0x0a, 0x12, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64,
0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x11, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x63, 0x0a, 0x06, 0x43,
0x61, 0x6d, 0x65, 0x72, 0x61, 0x12, 0x3b, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x69, 0x67, 0x6e,
0x61, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x2e, 0x49, 0x64, 0x65, 0x6e,
0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
0x65, 0x72, 0x1a, 0x1c, 0x0a, 0x0a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x22, 0x89, 0x01, 0x0a, 0x0a, 0x49, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
0x36, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63,
0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x09, 0x63, 0x61, 0x6e, 0x64,
0x69, 0x64, 0x61, 0x74, 0x65, 0x22, 0x65, 0x0a, 0x16, 0x50, 0x6f, 0x70, 0x49, 0x63, 0x65, 0x43,
0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x4b, 0x0a, 0x12, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74,
0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x69,
0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x49,
0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x11, 0x73, 0x65, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0xb4, 0x01, 0x0a,
0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1c, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x11, 0x73,
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
0x12, 0x41, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72,
0x2e, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72,
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
0x69, 0x6f, 0x6e, 0x22, 0x6e, 0x0a, 0x1f, 0x50, 0x6f, 0x70, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
0x52, 0x11, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
0x69, 0x65, 0x72, 0x22, 0x63, 0x0a, 0x06, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x12, 0x3b, 0x0a,
0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x61, 0x6d,
0x65, 0x72, 0x61, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a,
0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x1a, 0x1c, 0x0a, 0x0a, 0x49, 0x64,
0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xdc, 0x01, 0x0a, 0x0c, 0x49, 0x63, 0x65,
0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, 0x6e,
0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61,
0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x73, 0x64, 0x70, 0x5f, 0x6d,
0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x64, 0x70, 0x4d,
0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0e, 0x73, 0x64, 0x70, 0x5f, 0x6c, 0x69, 0x6e,
0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52,
0x0c, 0x73, 0x64, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x88, 0x01, 0x01,
0x12, 0x30, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61,
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x10, 0x75,
0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x88,
0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x64, 0x70, 0x5f, 0x6d, 0x69, 0x64, 0x42, 0x11,
0x0a, 0x0f, 0x5f, 0x73, 0x64, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65,
0x78, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66,
0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x15, 0x49, 0x63, 0x65, 0x53, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x19, 0x0a, 0x08, 0x73, 0x64, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x03, 0x52, 0x07, 0x73, 0x64, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73,
0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x64, 0x70, 0x22, 0xac, 0x03,
0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72,
0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
0x69, 0x65, 0x72, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x63, 0x61, 0x6d, 0x65, 0x72,
0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c,
0x65, 0x72, 0x2e, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69,
0x66, 0x69, 0x65, 0x72, 0x52, 0x06, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x12, 0x4a, 0x0a, 0x15,
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x64, 0x69,
0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x69,
0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64,
0x61, 0x74, 0x65, 0x52, 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x63, 0x65, 0x43, 0x61,
0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x15, 0x63, 0x61, 0x6d, 0x65,
0x72, 0x61, 0x5f, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65,
0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c,
0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x52,
0x13, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64,
0x61, 0x74, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0c, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x6f,
0x66, 0x66, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x63, 0x61, 0x6d,
0x65, 0x72, 0x61, 0x4f, 0x66, 0x66, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65,
0x6e, 0x74, 0x5f, 0x61, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1f, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x53, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x73, 0x77, 0x65, 0x72, 0x1a, 0x1c,
0x0a, 0x0a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x21, 0x0a, 0x09,
0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b,
0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x32,
0xf4, 0x05, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74,
0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65,
0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65,
0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61,
0x6c, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x4a, 0x0a,
0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, 0x12, 0x1c, 0x2e, 0x73,
0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x09, 0x63, 0x61,
0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61,
0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65,
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xdc, 0x01, 0x0a,
0x0c, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a,
0x09, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x73,
0x64, 0x70, 0x5f, 0x6d, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06,
0x73, 0x64, 0x70, 0x4d, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0e, 0x73, 0x64, 0x70,
0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28,
0x05, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x64, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x64, 0x65,
0x78, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65,
0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48,
0x02, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x72, 0x61, 0x67, 0x6d,
0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x64, 0x70, 0x5f, 0x6d,
0x69, 0x64, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x73, 0x64, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x5f,
0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61,
0x6d, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x44, 0x0a, 0x15, 0x49,
0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x64, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x64, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12,
0x10, 0x0a, 0x03, 0x73, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x64,
0x70, 0x22, 0x8a, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a,
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x69, 0x67, 0x6e,
0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x65,
0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x63,
0x61, 0x6d, 0x65, 0x72, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x69,
0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x2e, 0x49, 0x64,
0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x06, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61,
0x1a, 0x1c, 0x0a, 0x0a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e,
0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x21,
0x0a, 0x09, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74,
0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65,
0x6e, 0x32, 0xbd, 0x03, 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x53, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61,
0x6c, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f,
0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
0x4a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, 0x12, 0x1c,
0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61,
0x6d, 0x65, 0x72, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73,
0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6d, 0x65,
0x72, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73,
0x72, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x43,
0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x73,
0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73,
0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12,
0x3c, 0x0a, 0x0a, 0x50, 0x6f, 0x70, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e,
0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x50, 0x6f, 0x70, 0x53, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a,
0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e,
0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11,
0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x12, 0x4d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x73, 0x12, 0x1d, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x73,
0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x1e, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74,
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x51, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e,
0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65,
0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69,
0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x73, 0x69,
0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64,
0x61, 0x74, 0x65, 0x12, 0x4b, 0x0a, 0x0f, 0x50, 0x6f, 0x70, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e,
0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65,
0x72, 0x2e, 0x50, 0x6f, 0x70, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74,
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61,
0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x43, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65,
0x12, 0x6c, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x2c, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72,
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e,
0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66,
0x0a, 0x18, 0x50, 0x6f, 0x70, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44,
0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x50, 0x6f, 0x70, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72,
0x2e, 0x49, 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72,
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x94, 0x01, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x2e, 0x73,
0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x42, 0x14, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65,
0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x61, 0x74,
0x68, 0x61, 0x77, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x68, 0x6f, 0x6d, 0x65,
0x2d, 0x73, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0xa2,
0x02, 0x03, 0x53, 0x58, 0x58, 0xaa, 0x02, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72,
0xca, 0x02, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0xe2, 0x02, 0x14, 0x53, 0x69,
0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
0x74, 0x61, 0xea, 0x02, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a,
0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x12, 0x21, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x49, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e,
0x49, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x50, 0x6f,
0x70, 0x49, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x2e, 0x73, 0x69,
0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x50, 0x6f, 0x70, 0x49, 0x63, 0x65, 0x4d, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x73, 0x69,
0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x49, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x42, 0x94, 0x01, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c,
0x65, 0x72, 0x42, 0x14, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68,
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x68, 0x61, 0x77, 0x61, 0x79,
0x2d, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2d, 0x73, 0x65, 0x6e, 0x73,
0x6f, 0x72, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x67, 0x65, 0x6e, 0xa2, 0x02, 0x03, 0x53, 0x58, 0x58,
0xaa, 0x02, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0xca, 0x02, 0x08, 0x53, 0x69,
0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0xe2, 0x02, 0x14, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65,
0x72, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x08,
0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1301,14 +1251,14 @@ var file_signaler_service_proto_goTypes = []interface{}{
(*ListCamerasRequest)(nil), // 1: signaler.ListCamerasRequest
(*ListCamerasResponse)(nil), // 2: signaler.ListCamerasResponse
(*CreateSessionRequest)(nil), // 3: signaler.CreateSessionRequest
(*UpdateSessionRequest)(nil), // 4: signaler.UpdateSessionRequest
(*ListSessionsRequest)(nil), // 5: signaler.ListSessionsRequest
(*ListSessionsResponse)(nil), // 6: signaler.ListSessionsResponse
(*CreateIceCandidateRequest)(nil), // 7: signaler.CreateIceCandidateRequest
(*PopIceCandidateRequest)(nil), // 8: signaler.PopIceCandidateRequest
(*CreateIceSessionDescriptionRequest)(nil), // 9: signaler.CreateIceSessionDescriptionRequest
(*PopIceSessionDescriptionRequest)(nil), // 10: signaler.PopIceSessionDescriptionRequest
(*Camera)(nil), // 11: signaler.Camera
(*PopSessionRequest)(nil), // 4: signaler.PopSessionRequest
(*UpdateSessionRequest)(nil), // 5: signaler.UpdateSessionRequest
(*ListSessionsRequest)(nil), // 6: signaler.ListSessionsRequest
(*ListSessionsResponse)(nil), // 7: signaler.ListSessionsResponse
(*CreateIceMessageRequest)(nil), // 8: signaler.CreateIceMessageRequest
(*PopIceMessageRequest)(nil), // 9: signaler.PopIceMessageRequest
(*Camera)(nil), // 10: signaler.Camera
(*IceMessage)(nil), // 11: signaler.IceMessage
(*IceCandidate)(nil), // 12: signaler.IceCandidate
(*IceSessionDescription)(nil), // 13: signaler.IceSessionDescription
(*Session)(nil), // 14: signaler.Session
@@ -1321,46 +1271,36 @@ var file_signaler_service_proto_goTypes = []interface{}{
var file_signaler_service_proto_depIdxs = []int32{
16, // 0: signaler.CreateAuthTokenRequest.camera:type_name -> signaler.CreateAuthTokenRequest.Camera
17, // 1: signaler.CreateAuthTokenRequest.client:type_name -> signaler.CreateAuthTokenRequest.Client
11, // 2: signaler.ListCamerasResponse.cameras:type_name -> signaler.Camera
10, // 2: signaler.ListCamerasResponse.cameras:type_name -> signaler.Camera
14, // 3: signaler.CreateSessionRequest.session:type_name -> signaler.Session
14, // 4: signaler.UpdateSessionRequest.session:type_name -> signaler.Session
14, // 5: signaler.ListSessionsResponse.sessions:type_name -> signaler.Session
19, // 6: signaler.CreateIceCandidateRequest.session_identifier:type_name -> signaler.Session.Identifier
12, // 7: signaler.CreateIceCandidateRequest.candidate:type_name -> signaler.IceCandidate
19, // 8: signaler.PopIceCandidateRequest.session_identifier:type_name -> signaler.Session.Identifier
19, // 9: signaler.CreateIceSessionDescriptionRequest.session_identifier:type_name -> signaler.Session.Identifier
13, // 10: signaler.CreateIceSessionDescriptionRequest.description:type_name -> signaler.IceSessionDescription
19, // 11: signaler.PopIceSessionDescriptionRequest.session_identifier:type_name -> signaler.Session.Identifier
18, // 12: signaler.Camera.identifier:type_name -> signaler.Camera.Identifier
14, // 4: signaler.PopSessionRequest.session:type_name -> signaler.Session
14, // 5: signaler.UpdateSessionRequest.session:type_name -> signaler.Session
14, // 6: signaler.ListSessionsResponse.sessions:type_name -> signaler.Session
19, // 7: signaler.CreateIceMessageRequest.session_identifier:type_name -> signaler.Session.Identifier
11, // 8: signaler.CreateIceMessageRequest.ice_message:type_name -> signaler.IceMessage
19, // 9: signaler.PopIceMessageRequest.session_identifier:type_name -> signaler.Session.Identifier
18, // 10: signaler.Camera.identifier:type_name -> signaler.Camera.Identifier
12, // 11: signaler.IceMessage.candidate:type_name -> signaler.IceCandidate
13, // 12: signaler.IceMessage.session:type_name -> signaler.IceSessionDescription
19, // 13: signaler.Session.id:type_name -> signaler.Session.Identifier
18, // 14: signaler.Session.camera:type_name -> signaler.Camera.Identifier
12, // 15: signaler.Session.client_ice_candidates:type_name -> signaler.IceCandidate
12, // 16: signaler.Session.camera_ice_candidates:type_name -> signaler.IceCandidate
13, // 17: signaler.Session.camera_offer:type_name -> signaler.IceSessionDescription
13, // 18: signaler.Session.client_answer:type_name -> signaler.IceSessionDescription
0, // 19: signaler.SignalerService.CreateAuthToken:input_type -> signaler.CreateAuthTokenRequest
1, // 20: signaler.SignalerService.ListCameras:input_type -> signaler.ListCamerasRequest
3, // 21: signaler.SignalerService.CreateSession:input_type -> signaler.CreateSessionRequest
4, // 22: signaler.SignalerService.UpdateSession:input_type -> signaler.UpdateSessionRequest
5, // 23: signaler.SignalerService.ListSessions:input_type -> signaler.ListSessionsRequest
7, // 24: signaler.SignalerService.CreateIceCandidate:input_type -> signaler.CreateIceCandidateRequest
8, // 25: signaler.SignalerService.PopIceCandidate:input_type -> signaler.PopIceCandidateRequest
9, // 26: signaler.SignalerService.CreateIceSessionDescription:input_type -> signaler.CreateIceSessionDescriptionRequest
10, // 27: signaler.SignalerService.PopIceSessionDescription:input_type -> signaler.PopIceSessionDescriptionRequest
15, // 28: signaler.SignalerService.CreateAuthToken:output_type -> signaler.AuthToken
2, // 29: signaler.SignalerService.ListCameras:output_type -> signaler.ListCamerasResponse
14, // 30: signaler.SignalerService.CreateSession:output_type -> signaler.Session
14, // 31: signaler.SignalerService.UpdateSession:output_type -> signaler.Session
6, // 32: signaler.SignalerService.ListSessions:output_type -> signaler.ListSessionsResponse
12, // 33: signaler.SignalerService.CreateIceCandidate:output_type -> signaler.IceCandidate
12, // 34: signaler.SignalerService.PopIceCandidate:output_type -> signaler.IceCandidate
13, // 35: signaler.SignalerService.CreateIceSessionDescription:output_type -> signaler.IceSessionDescription
13, // 36: signaler.SignalerService.PopIceSessionDescription:output_type -> signaler.IceSessionDescription
28, // [28:37] is the sub-list for method output_type
19, // [19:28] is the sub-list for method input_type
19, // [19:19] is the sub-list for extension type_name
19, // [19:19] is the sub-list for extension extendee
0, // [0:19] is the sub-list for field type_name
0, // 15: signaler.SignalerService.CreateAuthToken:input_type -> signaler.CreateAuthTokenRequest
1, // 16: signaler.SignalerService.ListCameras:input_type -> signaler.ListCamerasRequest
3, // 17: signaler.SignalerService.CreateSession:input_type -> signaler.CreateSessionRequest
4, // 18: signaler.SignalerService.PopSession:input_type -> signaler.PopSessionRequest
8, // 19: signaler.SignalerService.CreateIceMessage:input_type -> signaler.CreateIceMessageRequest
9, // 20: signaler.SignalerService.PopIceMessage:input_type -> signaler.PopIceMessageRequest
15, // 21: signaler.SignalerService.CreateAuthToken:output_type -> signaler.AuthToken
2, // 22: signaler.SignalerService.ListCameras:output_type -> signaler.ListCamerasResponse
14, // 23: signaler.SignalerService.CreateSession:output_type -> signaler.Session
14, // 24: signaler.SignalerService.PopSession:output_type -> signaler.Session
11, // 25: signaler.SignalerService.CreateIceMessage:output_type -> signaler.IceMessage
11, // 26: signaler.SignalerService.PopIceMessage:output_type -> signaler.IceMessage
21, // [21:27] is the sub-list for method output_type
15, // [15:21] is the sub-list for method input_type
15, // [15:15] is the sub-list for extension type_name
15, // [15:15] is the sub-list for extension extendee
0, // [0:15] is the sub-list for field type_name
}
func init() { file_signaler_service_proto_init() }
@@ -1418,7 +1358,7 @@ func file_signaler_service_proto_init() {
}
}
file_signaler_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateSessionRequest); i {
switch v := v.(*PopSessionRequest); i {
case 0:
return &v.state
case 1:
@@ -1430,7 +1370,7 @@ func file_signaler_service_proto_init() {
}
}
file_signaler_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListSessionsRequest); i {
switch v := v.(*UpdateSessionRequest); i {
case 0:
return &v.state
case 1:
@@ -1442,7 +1382,7 @@ func file_signaler_service_proto_init() {
}
}
file_signaler_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListSessionsResponse); i {
switch v := v.(*ListSessionsRequest); i {
case 0:
return &v.state
case 1:
@@ -1454,7 +1394,7 @@ func file_signaler_service_proto_init() {
}
}
file_signaler_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CreateIceCandidateRequest); i {
switch v := v.(*ListSessionsResponse); i {
case 0:
return &v.state
case 1:
@@ -1466,7 +1406,7 @@ func file_signaler_service_proto_init() {
}
}
file_signaler_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*PopIceCandidateRequest); i {
switch v := v.(*CreateIceMessageRequest); i {
case 0:
return &v.state
case 1:
@@ -1478,7 +1418,7 @@ func file_signaler_service_proto_init() {
}
}
file_signaler_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CreateIceSessionDescriptionRequest); i {
switch v := v.(*PopIceMessageRequest); i {
case 0:
return &v.state
case 1:
@@ -1490,7 +1430,7 @@ func file_signaler_service_proto_init() {
}
}
file_signaler_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*PopIceSessionDescriptionRequest); i {
switch v := v.(*Camera); i {
case 0:
return &v.state
case 1:
@@ -1502,7 +1442,7 @@ func file_signaler_service_proto_init() {
}
}
file_signaler_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Camera); i {
switch v := v.(*IceMessage); i {
case 0:
return &v.state
case 1:
@@ -1614,6 +1554,10 @@ func file_signaler_service_proto_init() {
(*CreateAuthTokenRequest_Camera_)(nil),
(*CreateAuthTokenRequest_Client_)(nil),
}
file_signaler_service_proto_msgTypes[11].OneofWrappers = []interface{}{
(*IceMessage_Candidate)(nil),
(*IceMessage_Session)(nil),
}
file_signaler_service_proto_msgTypes[12].OneofWrappers = []interface{}{}
type x struct{}
out := protoimpl.TypeBuilder{
+61 -79
View File
@@ -83,6 +83,19 @@ final $typed_data.Uint8List createSessionRequestDescriptor = $convert.base64Deco
'ChRDcmVhdGVTZXNzaW9uUmVxdWVzdBIrCgdzZXNzaW9uGAEgASgLMhEuc2lnbmFsZXIuU2Vzc2'
'lvblIHc2Vzc2lvbhImCg93YWl0X2Zvcl91cGRhdGUYAiABKAhSDXdhaXRGb3JVcGRhdGU=');
@$core.Deprecated('Use popSessionRequestDescriptor instead')
const PopSessionRequest$json = {
'1': 'PopSessionRequest',
'2': [
{'1': 'session', '3': 1, '4': 1, '5': 11, '6': '.signaler.Session', '10': 'session'},
],
};
/// Descriptor for `PopSessionRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List popSessionRequestDescriptor = $convert.base64Decode(
'ChFQb3BTZXNzaW9uUmVxdWVzdBIrCgdzZXNzaW9uGAEgASgLMhEuc2lnbmFsZXIuU2Vzc2lvbl'
'IHc2Vzc2lvbg==');
@$core.Deprecated('Use updateSessionRequestDescriptor instead')
const UpdateSessionRequest$json = {
'1': 'UpdateSessionRequest',
@@ -119,62 +132,33 @@ final $typed_data.Uint8List listSessionsResponseDescriptor = $convert.base64Deco
'ChRMaXN0U2Vzc2lvbnNSZXNwb25zZRItCghzZXNzaW9ucxgBIAMoCzIRLnNpZ25hbGVyLlNlc3'
'Npb25SCHNlc3Npb25z');
@$core.Deprecated('Use createIceCandidateRequestDescriptor instead')
const CreateIceCandidateRequest$json = {
'1': 'CreateIceCandidateRequest',
@$core.Deprecated('Use createIceMessageRequestDescriptor instead')
const CreateIceMessageRequest$json = {
'1': 'CreateIceMessageRequest',
'2': [
{'1': 'session_identifier', '3': 1, '4': 1, '5': 11, '6': '.signaler.Session.Identifier', '10': 'sessionIdentifier'},
{'1': 'candidate', '3': 2, '4': 1, '5': 11, '6': '.signaler.IceCandidate', '10': 'candidate'},
{'1': 'ice_message', '3': 2, '4': 1, '5': 11, '6': '.signaler.IceMessage', '10': 'iceMessage'},
],
};
/// Descriptor for `CreateIceCandidateRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List createIceCandidateRequestDescriptor = $convert.base64Decode(
'ChlDcmVhdGVJY2VDYW5kaWRhdGVSZXF1ZXN0EksKEnNlc3Npb25faWRlbnRpZmllchgBIAEoCz'
'IcLnNpZ25hbGVyLlNlc3Npb24uSWRlbnRpZmllclIRc2Vzc2lvbklkZW50aWZpZXISNAoJY2Fu'
'ZGlkYXRlGAIgASgLMhYuc2lnbmFsZXIuSWNlQ2FuZGlkYXRlUgljYW5kaWRhdGU=');
/// Descriptor for `CreateIceMessageRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List createIceMessageRequestDescriptor = $convert.base64Decode(
'ChdDcmVhdGVJY2VNZXNzYWdlUmVxdWVzdBJLChJzZXNzaW9uX2lkZW50aWZpZXIYASABKAsyHC'
'5zaWduYWxlci5TZXNzaW9uLklkZW50aWZpZXJSEXNlc3Npb25JZGVudGlmaWVyEjUKC2ljZV9t'
'ZXNzYWdlGAIgASgLMhQuc2lnbmFsZXIuSWNlTWVzc2FnZVIKaWNlTWVzc2FnZQ==');
@$core.Deprecated('Use popIceCandidateRequestDescriptor instead')
const PopIceCandidateRequest$json = {
'1': 'PopIceCandidateRequest',
@$core.Deprecated('Use popIceMessageRequestDescriptor instead')
const PopIceMessageRequest$json = {
'1': 'PopIceMessageRequest',
'2': [
{'1': 'session_identifier', '3': 1, '4': 1, '5': 11, '6': '.signaler.Session.Identifier', '10': 'sessionIdentifier'},
],
};
/// Descriptor for `PopIceCandidateRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List popIceCandidateRequestDescriptor = $convert.base64Decode(
'ChZQb3BJY2VDYW5kaWRhdGVSZXF1ZXN0EksKEnNlc3Npb25faWRlbnRpZmllchgBIAEoCzIcLn'
'NpZ25hbGVyLlNlc3Npb24uSWRlbnRpZmllclIRc2Vzc2lvbklkZW50aWZpZXI=');
@$core.Deprecated('Use createIceSessionDescriptionRequestDescriptor instead')
const CreateIceSessionDescriptionRequest$json = {
'1': 'CreateIceSessionDescriptionRequest',
'2': [
{'1': 'session_identifier', '3': 1, '4': 1, '5': 11, '6': '.signaler.Session.Identifier', '10': 'sessionIdentifier'},
{'1': 'description', '3': 2, '4': 1, '5': 11, '6': '.signaler.IceSessionDescription', '10': 'description'},
],
};
/// Descriptor for `CreateIceSessionDescriptionRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List createIceSessionDescriptionRequestDescriptor = $convert.base64Decode(
'CiJDcmVhdGVJY2VTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0EksKEnNlc3Npb25faWRlbnRpZm'
'llchgBIAEoCzIcLnNpZ25hbGVyLlNlc3Npb24uSWRlbnRpZmllclIRc2Vzc2lvbklkZW50aWZp'
'ZXISQQoLZGVzY3JpcHRpb24YAiABKAsyHy5zaWduYWxlci5JY2VTZXNzaW9uRGVzY3JpcHRpb2'
'5SC2Rlc2NyaXB0aW9u');
@$core.Deprecated('Use popIceSessionDescriptionRequestDescriptor instead')
const PopIceSessionDescriptionRequest$json = {
'1': 'PopIceSessionDescriptionRequest',
'2': [
{'1': 'session_identifier', '3': 1, '4': 1, '5': 11, '6': '.signaler.Session.Identifier', '10': 'sessionIdentifier'},
],
};
/// Descriptor for `PopIceSessionDescriptionRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List popIceSessionDescriptionRequestDescriptor = $convert.base64Decode(
'Ch9Qb3BJY2VTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0EksKEnNlc3Npb25faWRlbnRpZmllch'
'gBIAEoCzIcLnNpZ25hbGVyLlNlc3Npb24uSWRlbnRpZmllclIRc2Vzc2lvbklkZW50aWZpZXI=');
/// Descriptor for `PopIceMessageRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List popIceMessageRequestDescriptor = $convert.base64Decode(
'ChRQb3BJY2VNZXNzYWdlUmVxdWVzdBJLChJzZXNzaW9uX2lkZW50aWZpZXIYASABKAsyHC5zaW'
'duYWxlci5TZXNzaW9uLklkZW50aWZpZXJSEXNlc3Npb25JZGVudGlmaWVy');
@$core.Deprecated('Use cameraDescriptor instead')
const Camera$json = {
@@ -198,6 +182,24 @@ final $typed_data.Uint8List cameraDescriptor = $convert.base64Decode(
'CgZDYW1lcmESOwoKaWRlbnRpZmllchgBIAEoCzIbLnNpZ25hbGVyLkNhbWVyYS5JZGVudGlmaW'
'VyUgppZGVudGlmaWVyGhwKCklkZW50aWZpZXISDgoCaWQYASABKAlSAmlk');
@$core.Deprecated('Use iceMessageDescriptor instead')
const IceMessage$json = {
'1': 'IceMessage',
'2': [
{'1': 'candidate', '3': 1, '4': 1, '5': 11, '6': '.signaler.IceCandidate', '9': 0, '10': 'candidate'},
{'1': 'session', '3': 2, '4': 1, '5': 11, '6': '.signaler.IceSessionDescription', '9': 0, '10': 'session'},
],
'8': [
{'1': 'type'},
],
};
/// Descriptor for `IceMessage`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List iceMessageDescriptor = $convert.base64Decode(
'CgpJY2VNZXNzYWdlEjYKCWNhbmRpZGF0ZRgBIAEoCzIWLnNpZ25hbGVyLkljZUNhbmRpZGF0ZU'
'gAUgljYW5kaWRhdGUSOwoHc2Vzc2lvbhgCIAEoCzIfLnNpZ25hbGVyLkljZVNlc3Npb25EZXNj'
'cmlwdGlvbkgAUgdzZXNzaW9uQgYKBHR5cGU=');
@$core.Deprecated('Use iceCandidateDescriptor instead')
const IceCandidate$json = {
'1': 'IceCandidate',
@@ -241,10 +243,6 @@ const Session$json = {
'2': [
{'1': 'id', '3': 1, '4': 1, '5': 11, '6': '.signaler.Session.Identifier', '10': 'id'},
{'1': 'camera', '3': 2, '4': 1, '5': 11, '6': '.signaler.Camera.Identifier', '10': 'camera'},
{'1': 'client_ice_candidates', '3': 3, '4': 3, '5': 11, '6': '.signaler.IceCandidate', '10': 'clientIceCandidates'},
{'1': 'camera_ice_candidates', '3': 4, '4': 3, '5': 11, '6': '.signaler.IceCandidate', '10': 'cameraIceCandidates'},
{'1': 'camera_offer', '3': 5, '4': 1, '5': 11, '6': '.signaler.IceSessionDescription', '10': 'cameraOffer'},
{'1': 'client_answer', '3': 6, '4': 1, '5': 11, '6': '.signaler.IceSessionDescription', '10': 'clientAnswer'},
],
'3': [Session_Identifier$json],
};
@@ -260,13 +258,8 @@ const Session_Identifier$json = {
/// Descriptor for `Session`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List sessionDescriptor = $convert.base64Decode(
'CgdTZXNzaW9uEiwKAmlkGAEgASgLMhwuc2lnbmFsZXIuU2Vzc2lvbi5JZGVudGlmaWVyUgJpZB'
'IzCgZjYW1lcmEYAiABKAsyGy5zaWduYWxlci5DYW1lcmEuSWRlbnRpZmllclIGY2FtZXJhEkoK'
'FWNsaWVudF9pY2VfY2FuZGlkYXRlcxgDIAMoCzIWLnNpZ25hbGVyLkljZUNhbmRpZGF0ZVITY2'
'xpZW50SWNlQ2FuZGlkYXRlcxJKChVjYW1lcmFfaWNlX2NhbmRpZGF0ZXMYBCADKAsyFi5zaWdu'
'YWxlci5JY2VDYW5kaWRhdGVSE2NhbWVyYUljZUNhbmRpZGF0ZXMSQgoMY2FtZXJhX29mZmVyGA'
'UgASgLMh8uc2lnbmFsZXIuSWNlU2Vzc2lvbkRlc2NyaXB0aW9uUgtjYW1lcmFPZmZlchJECg1j'
'bGllbnRfYW5zd2VyGAYgASgLMh8uc2lnbmFsZXIuSWNlU2Vzc2lvbkRlc2NyaXB0aW9uUgxjbG'
'llbnRBbnN3ZXIaHAoKSWRlbnRpZmllchIOCgJpZBgBIAEoCVICaWQ=');
'IzCgZjYW1lcmEYAiABKAsyGy5zaWduYWxlci5DYW1lcmEuSWRlbnRpZmllclIGY2FtZXJhGhwK'
'CklkZW50aWZpZXISDgoCaWQYASABKAlSAmlk');
@$core.Deprecated('Use authTokenDescriptor instead')
const AuthToken$json = {
@@ -286,12 +279,9 @@ const $core.Map<$core.String, $core.dynamic> SignalerServiceBase$json = {
{'1': 'CreateAuthToken', '2': '.signaler.CreateAuthTokenRequest', '3': '.signaler.AuthToken'},
{'1': 'ListCameras', '2': '.signaler.ListCamerasRequest', '3': '.signaler.ListCamerasResponse'},
{'1': 'CreateSession', '2': '.signaler.CreateSessionRequest', '3': '.signaler.Session'},
{'1': 'UpdateSession', '2': '.signaler.UpdateSessionRequest', '3': '.signaler.Session'},
{'1': 'ListSessions', '2': '.signaler.ListSessionsRequest', '3': '.signaler.ListSessionsResponse'},
{'1': 'CreateIceCandidate', '2': '.signaler.CreateIceCandidateRequest', '3': '.signaler.IceCandidate'},
{'1': 'PopIceCandidate', '2': '.signaler.PopIceCandidateRequest', '3': '.signaler.IceCandidate'},
{'1': 'CreateIceSessionDescription', '2': '.signaler.CreateIceSessionDescriptionRequest', '3': '.signaler.IceSessionDescription'},
{'1': 'PopIceSessionDescription', '2': '.signaler.PopIceSessionDescriptionRequest', '3': '.signaler.IceSessionDescription'},
{'1': 'PopSession', '2': '.signaler.PopSessionRequest', '3': '.signaler.Session'},
{'1': 'CreateIceMessage', '2': '.signaler.CreateIceMessageRequest', '3': '.signaler.IceMessage'},
{'1': 'PopIceMessage', '2': '.signaler.PopIceMessageRequest', '3': '.signaler.IceMessage'},
],
};
@@ -308,15 +298,12 @@ const $core.Map<$core.String, $core.Map<$core.String, $core.dynamic>> SignalerSe
'.signaler.CreateSessionRequest': CreateSessionRequest$json,
'.signaler.Session': Session$json,
'.signaler.Session.Identifier': Session_Identifier$json,
'.signaler.PopSessionRequest': PopSessionRequest$json,
'.signaler.CreateIceMessageRequest': CreateIceMessageRequest$json,
'.signaler.IceMessage': IceMessage$json,
'.signaler.IceCandidate': IceCandidate$json,
'.signaler.IceSessionDescription': IceSessionDescription$json,
'.signaler.UpdateSessionRequest': UpdateSessionRequest$json,
'.signaler.ListSessionsRequest': ListSessionsRequest$json,
'.signaler.ListSessionsResponse': ListSessionsResponse$json,
'.signaler.CreateIceCandidateRequest': CreateIceCandidateRequest$json,
'.signaler.PopIceCandidateRequest': PopIceCandidateRequest$json,
'.signaler.CreateIceSessionDescriptionRequest': CreateIceSessionDescriptionRequest$json,
'.signaler.PopIceSessionDescriptionRequest': PopIceSessionDescriptionRequest$json,
'.signaler.PopIceMessageRequest': PopIceMessageRequest$json,
};
/// Descriptor for `SignalerService`. Decode as a `google.protobuf.ServiceDescriptorProto`.
@@ -325,14 +312,9 @@ final $typed_data.Uint8List signalerServiceDescriptor = $convert.base64Decode(
'V0aFRva2VuUmVxdWVzdBoTLnNpZ25hbGVyLkF1dGhUb2tlbhJKCgtMaXN0Q2FtZXJhcxIcLnNp'
'Z25hbGVyLkxpc3RDYW1lcmFzUmVxdWVzdBodLnNpZ25hbGVyLkxpc3RDYW1lcmFzUmVzcG9uc2'
'USQgoNQ3JlYXRlU2Vzc2lvbhIeLnNpZ25hbGVyLkNyZWF0ZVNlc3Npb25SZXF1ZXN0GhEuc2ln'
'bmFsZXIuU2Vzc2lvbhJCCg1VcGRhdGVTZXNzaW9uEh4uc2lnbmFsZXIuVXBkYXRlU2Vzc2lvbl'
'JlcXVlc3QaES5zaWduYWxlci5TZXNzaW9uEk0KDExpc3RTZXNzaW9ucxIdLnNpZ25hbGVyLkxp'
'c3RTZXNzaW9uc1JlcXVlc3QaHi5zaWduYWxlci5MaXN0U2Vzc2lvbnNSZXNwb25zZRJRChJDcm'
'VhdGVJY2VDYW5kaWRhdGUSIy5zaWduYWxlci5DcmVhdGVJY2VDYW5kaWRhdGVSZXF1ZXN0GhYu'
'c2lnbmFsZXIuSWNlQ2FuZGlkYXRlEksKD1BvcEljZUNhbmRpZGF0ZRIgLnNpZ25hbGVyLlBvcE'
'ljZUNhbmRpZGF0ZVJlcXVlc3QaFi5zaWduYWxlci5JY2VDYW5kaWRhdGUSbAobQ3JlYXRlSWNl'
'U2Vzc2lvbkRlc2NyaXB0aW9uEiwuc2lnbmFsZXIuQ3JlYXRlSWNlU2Vzc2lvbkRlc2NyaXB0aW'
'9uUmVxdWVzdBofLnNpZ25hbGVyLkljZVNlc3Npb25EZXNjcmlwdGlvbhJmChhQb3BJY2VTZXNz'
'aW9uRGVzY3JpcHRpb24SKS5zaWduYWxlci5Qb3BJY2VTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZX'
'N0Gh8uc2lnbmFsZXIuSWNlU2Vzc2lvbkRlc2NyaXB0aW9u');
'bmFsZXIuU2Vzc2lvbhI8CgpQb3BTZXNzaW9uEhsuc2lnbmFsZXIuUG9wU2Vzc2lvblJlcXVlc3'
'QaES5zaWduYWxlci5TZXNzaW9uEksKEENyZWF0ZUljZU1lc3NhZ2USIS5zaWduYWxlci5DcmVh'
'dGVJY2VNZXNzYWdlUmVxdWVzdBoULnNpZ25hbGVyLkljZU1lc3NhZ2USRQoNUG9wSWNlTWVzc2'
'FnZRIeLnNpZ25hbGVyLlBvcEljZU1lc3NhZ2VSZXF1ZXN0GhQuc2lnbmFsZXIuSWNlTWVzc2Fn'
'ZQ==');
+9 -18
View File
@@ -24,24 +24,18 @@ abstract class SignalerServiceBase extends $pb.GeneratedService {
$async.Future<$0.AuthToken> createAuthToken($pb.ServerContext ctx, $0.CreateAuthTokenRequest request);
$async.Future<$0.ListCamerasResponse> listCameras($pb.ServerContext ctx, $0.ListCamerasRequest request);
$async.Future<$0.Session> createSession($pb.ServerContext ctx, $0.CreateSessionRequest request);
$async.Future<$0.Session> updateSession($pb.ServerContext ctx, $0.UpdateSessionRequest request);
$async.Future<$0.ListSessionsResponse> listSessions($pb.ServerContext ctx, $0.ListSessionsRequest request);
$async.Future<$0.IceCandidate> createIceCandidate($pb.ServerContext ctx, $0.CreateIceCandidateRequest request);
$async.Future<$0.IceCandidate> popIceCandidate($pb.ServerContext ctx, $0.PopIceCandidateRequest request);
$async.Future<$0.IceSessionDescription> createIceSessionDescription($pb.ServerContext ctx, $0.CreateIceSessionDescriptionRequest request);
$async.Future<$0.IceSessionDescription> popIceSessionDescription($pb.ServerContext ctx, $0.PopIceSessionDescriptionRequest request);
$async.Future<$0.Session> popSession($pb.ServerContext ctx, $0.PopSessionRequest request);
$async.Future<$0.IceMessage> createIceMessage($pb.ServerContext ctx, $0.CreateIceMessageRequest request);
$async.Future<$0.IceMessage> popIceMessage($pb.ServerContext ctx, $0.PopIceMessageRequest request);
$pb.GeneratedMessage createRequest($core.String methodName) {
switch (methodName) {
case 'CreateAuthToken': return $0.CreateAuthTokenRequest();
case 'ListCameras': return $0.ListCamerasRequest();
case 'CreateSession': return $0.CreateSessionRequest();
case 'UpdateSession': return $0.UpdateSessionRequest();
case 'ListSessions': return $0.ListSessionsRequest();
case 'CreateIceCandidate': return $0.CreateIceCandidateRequest();
case 'PopIceCandidate': return $0.PopIceCandidateRequest();
case 'CreateIceSessionDescription': return $0.CreateIceSessionDescriptionRequest();
case 'PopIceSessionDescription': return $0.PopIceSessionDescriptionRequest();
case 'PopSession': return $0.PopSessionRequest();
case 'CreateIceMessage': return $0.CreateIceMessageRequest();
case 'PopIceMessage': return $0.PopIceMessageRequest();
default: throw $core.ArgumentError('Unknown method: $methodName');
}
}
@@ -51,12 +45,9 @@ abstract class SignalerServiceBase extends $pb.GeneratedService {
case 'CreateAuthToken': return this.createAuthToken(ctx, request as $0.CreateAuthTokenRequest);
case 'ListCameras': return this.listCameras(ctx, request as $0.ListCamerasRequest);
case 'CreateSession': return this.createSession(ctx, request as $0.CreateSessionRequest);
case 'UpdateSession': return this.updateSession(ctx, request as $0.UpdateSessionRequest);
case 'ListSessions': return this.listSessions(ctx, request as $0.ListSessionsRequest);
case 'CreateIceCandidate': return this.createIceCandidate(ctx, request as $0.CreateIceCandidateRequest);
case 'PopIceCandidate': return this.popIceCandidate(ctx, request as $0.PopIceCandidateRequest);
case 'CreateIceSessionDescription': return this.createIceSessionDescription(ctx, request as $0.CreateIceSessionDescriptionRequest);
case 'PopIceSessionDescription': return this.popIceSessionDescription(ctx, request as $0.PopIceSessionDescriptionRequest);
case 'PopSession': return this.popSession(ctx, request as $0.PopSessionRequest);
case 'CreateIceMessage': return this.createIceMessage(ctx, request as $0.CreateIceMessageRequest);
case 'PopIceMessage': return this.popIceMessage(ctx, request as $0.PopIceMessageRequest);
default: throw $core.ArgumentError('Unknown method: $methodName');
}
}
+145 -103
View File
@@ -5,7 +5,7 @@ import (
"context"
"encoding/base64"
"fmt"
"net/http"
"strings"
"sync"
"time"
@@ -22,29 +22,39 @@ type camera struct {
id string
}
type session struct {
id string
cameraID string
createTime time.Time
toCamera chan *pb.IceMessage
toClient chan *pb.IceMessage
}
type Server struct {
mu sync.Mutex
camerasByHome map[string]map[string]*camera
sessionsByCamera map[string]map[string]*pb.Session
sessionsById map[string]*pb.Session
waitersBySessionId map[string][]chan<- bool
sessionsByCamera map[string]chan *session
sessionsById map[string]*session
}
func New() *Server {
return &Server{
s := &Server{
camerasByHome: make(map[string]map[string]*camera),
sessionsByCamera: make(map[string]map[string]*pb.Session),
sessionsById: make(map[string]*pb.Session),
waitersBySessionId: make(map[string][]chan<- bool),
sessionsByCamera: make(map[string]chan *session),
sessionsById: make(map[string]*session),
}
go s.cleanup()
return s
}
func (s *Server) CreateAuthToken(ctx context.Context, request *connect.Request[pb.CreateAuthTokenRequest]) (*connect.Response[pb.AuthToken], error) {
req := request.Msg
var id string
switch req.Type.(type) {
case *pb.CreateAuthTokenRequest_Camera_:
id := req.GetCamera().GetId()
id = req.GetCamera().GetId()
s.mu.Lock()
thisCamera := &camera{
id: id,
@@ -54,14 +64,17 @@ func (s *Server) CreateAuthToken(ctx context.Context, request *connect.Request[p
s.camerasByHome[home] = make(map[string]*camera)
}
s.camerasByHome[home][id] = thisCamera
s.mu.Unlock()
if _, ok := s.sessionsByCamera[id]; !ok {
s.sessionsByCamera[id] = make(chan *session, 100)
}
s.mu.Unlock()
case *pb.CreateAuthTokenRequest_Client_:
myUUID, err := uuid.NewV4()
if err != nil {
return nil, fmt.Errorf("error creating UUID: %v", err)
}
id := myUUID.String()
id = myUUID.String()
}
token := &internalpb.AuthToken{
Uid: id,
@@ -100,129 +113,158 @@ func (s *Server) ListCameras(ctx context.Context, request *connect.Request[pb.Li
// 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.
func (s *Server) CreateSession(ctx context.Context, request *connect.Request[pb.CreateSessionRequest]) (*connect.Response[pb.Session], error) {
req := request.Msg
if req.GetSession() == nil {
thisSession := request.Msg.Session
if thisSession == nil {
return nil, status.Errorf(codes.InvalidArgument, "nil session")
}
myUUID, err := uuid.NewV4()
if err != nil {
return nil, fmt.Errorf("error creating UUID: %v", err)
}
id := myUUID.String()
req.GetSession().Id = &pb.Session_Identifier{Id: id}
s.upsertSession(req.GetSession(), req.GetWaitForUpdate())
thisSession.Id = &pb.Session_Identifier{Id: id}
cameraID := thisSession.GetCamera().GetId()
s.mu.Lock()
defer s.mu.Unlock()
// Spin off goroutine to eventually cleanup the session
go s.scheduleCleanup(id, time.Minute)
sess := &session{
id: id,
cameraID: cameraID,
createTime: time.Now(),
toCamera: make(chan *pb.IceMessage, 100),
toClient: make(chan *pb.IceMessage, 100),
}
s.sessionsByCamera[cameraID] <- sess
s.sessionsById[id] = sess
returnSession := s.sessionsById[id]
return connect.NewResponse(returnSession), nil
return connect.NewResponse(thisSession), nil
}
// UpdateSession updates the session
func (s *Server) UpdateSession(ctx context.Context, request *connect.Request[pb.UpdateSessionRequest]) (*connect.Response[pb.Session], error) {
func (s *Server) PopSession(ctx context.Context, request *connect.Request[pb.PopSessionRequest]) (*connect.Response[pb.Session], error) {
authToken, err := getAuthToken(request)
if err != nil {
return nil, err
}
s.mu.Lock()
if _, ok := s.camerasByHome[authToken.Home]; !ok {
return nil, status.Errorf(codes.NotFound, "home %q not found", authToken.Home)
}
if _, ok := s.camerasByHome[authToken.Home][authToken.Uid]; !ok {
return nil, status.Errorf(codes.Unauthenticated, "you are not a camera")
}
ch := s.sessionsByCamera[authToken.Uid]
s.mu.Unlock()
sess := <-ch
return connect.NewResponse(&pb.Session{
Id: &pb.Session_Identifier{
Id: sess.id,
},
}), nil
}
func (s *Server) CreateIceMessage(ctx context.Context, request *connect.Request[pb.CreateIceMessageRequest]) (*connect.Response[pb.IceMessage], error) {
authToken, err := getAuthToken(request)
if err != nil {
return nil, err
}
req := request.Msg
id := req.GetSession().GetId().GetId()
s.mu.Lock()
if _, ok := s.sessionsById[id]; !ok {
s.mu.Unlock()
return nil, status.Errorf(codes.NotFound, "no such session %q", id)
}
s.mu.Unlock()
s.upsertSession(req.GetSession(), req.WaitForUpdate)
s.mu.Lock()
defer s.mu.Unlock()
returnSession := s.sessionsById[id]
return connect.NewResponse(returnSession), nil
session, ok := s.sessionsById[req.GetSessionIdentifier().GetId()]
if !ok {
return nil, status.Errorf(codes.NotFound, "unknown 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).
func (s *Server) ListSessions(context.Context, *connect.Request[pb.ListSessionsRequest]) (*connect.Response[pb.ListSessionsResponse], error) {
var sessions []*pb.Session
if _, ok := s.camerasByHome[authToken.Home]; !ok {
return nil, status.Errorf(codes.NotFound, "home %q not found", authToken.Home)
}
_, isCamera := s.camerasByHome[authToken.Home][authToken.Uid]
session.createTime = time.Now()
msg := req.GetIceMessage()
if isCamera {
session.toClient <- msg
} else {
session.toCamera <- msg
}
return connect.NewResponse(msg), nil
}
func (s *Server) PopIceMessage(ctx context.Context, request *connect.Request[pb.PopIceMessageRequest]) (*connect.Response[pb.IceMessage], error) {
authToken, err := getAuthToken(request)
if err != nil {
return nil, err
}
req := request.Msg
s.mu.Lock()
if _, ok := s.camerasByHome[authToken.Home]; !ok {
return nil, status.Errorf(codes.NotFound, "home %q not found", authToken.Home)
}
_, isCamera := s.camerasByHome[authToken.Home][authToken.Uid]
session := s.sessionsById[req.GetSessionIdentifier().GetId()]
session.createTime = time.Now()
s.mu.Unlock()
var msg *pb.IceMessage
if isCamera {
msg = <-session.toCamera
} else {
msg = <-session.toClient
}
return connect.NewResponse(msg), nil
}
func (s *Server) cleanup() {
ticker := time.NewTicker(time.Minute * 5)
for t := range ticker.C {
func() {
s.mu.Lock()
defer s.mu.Unlock()
// Look for any stale sessions
staleSessionsByCamera := make(map[string]*session)
for _, session := range s.sessionsById {
sessions = append(sessions, session)
if t.Sub(session.createTime) > time.Minute {
if prev, ok := staleSessionsByCamera[session.cameraID]; ok {
// Only use this session if it was created after the previous one
if prev.createTime.Before(session.createTime) {
staleSessionsByCamera[session.cameraID] = session
}
} else {
staleSessionsByCamera[session.cameraID] = session
}
}
return connect.NewResponse(&pb.ListSessionsResponse{Sessions: sessions}), nil
}
func (s *Server) CreateIceCandidate(context.Context, *connect.Request[pb.CreateIceCandidateRequest]) (*connect.Response[pb.IceCandidate], error) {
return nil, fmt.Errorf("")
for camera, lastSession := range staleSessionsByCamera {
// Consume from the chanel until we remove all stale sessions
for sess := range s.sessionsByCamera[camera] {
if sess == lastSession {
// We consumed all stale channels; break
break
}
func (s *Server) PopIceCandidate(context.Context, *connect.Request[pb.PopIceCandidateRequest]) (*connect.Response[pb.IceCandidate], error) {
return nil, fmt.Errorf("")
}
func (s *Server) CreateIceSessionDescription(context.Context, *connect.Request[pb.CreateIceSessionDescriptionRequest]) (*connect.Response[pb.IceSessionDescription], error) {
return nil, fmt.Errorf("")
}
func (s *Server) PopIceSessionDescription(context.Context, *connect.Request[pb.PopIceSessionDescriptionRequest]) (*connect.Response[pb.IceSessionDescription], error) {
return nil, fmt.Errorf("")
}
// upsertSession updates or creates a session, optionally blocking until the session is updated
// again in the future.
//
// WARN: this function locks and unlocks s.mu; make sure no locks are held or it will block forever.
func (s *Server) upsertSession(session *pb.Session, waitForUpdate bool) {
s.mu.Lock()
defer s.mu.Unlock()
id := session.Id.Id
s.sessionsById[id] = session
cameraID := session.GetCamera().GetId()
if _, ok := s.sessionsByCamera[cameraID]; !ok {
s.sessionsByCamera[cameraID] = make(map[string]*pb.Session)
}
s.sessionsByCamera[cameraID][id] = session
// Alert anything that needs to go
for _, waiter := range s.waitersBySessionId[id] {
waiter <- true
close(waiter)
}
s.waitersBySessionId[id] = nil
if waitForUpdate {
waitChan := make(chan bool)
s.waitersBySessionId[id] = append(s.waitersBySessionId[id], waitChan)
defer func() {
<-waitChan
}()
}
}
func (s *Server) scheduleCleanup(sessionID string, waitPeriod time.Duration) {
time.Sleep(waitPeriod)
s.mu.Lock()
defer s.mu.Unlock()
session := s.sessionsById[sessionID]
for _, water := range s.waitersBySessionId[sessionID] {
water <- true
close(water)
}
delete(s.sessionsByCamera[session.GetCamera().GetId()], sessionID)
delete(s.sessionsById, sessionID)
delete(s.waitersBySessionId, sessionID)
}
func getAuthToken[T any](req *connect.Request[T]) (*internalpb.AuthToken, error) {
authHeader := req.Header().Get(http.CanonicalHeaderKey("Authorization"))
authHeader := req.Header().Get("Authorization")
if !strings.HasPrefix(authHeader, "Bearer ") {
return nil, fmt.Errorf("invalid authorization token")
}
authHeader = authHeader[len("Bearer "):]
bytes, err := base64.URLEncoding.DecodeString(authHeader)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "malformed authorization header (extract)")
+22 -31
View File
@@ -11,23 +11,17 @@ service SignalerService {
// 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.
// PopSession deletes a session from the list of sessions, and returns it.
//
// 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);
// If there are no sessions, this blocks until one becomes available.
rpc PopSession(PopSessionRequest) returns (Session);
// CreateIceCandidate adds the provided candidate to the list of candidates.
rpc CreateIceCandidate(CreateIceCandidateRequest) returns (IceCandidate);
// PopIceCandidate delete a candidate from the list of candidates and returns it.
// CreateIceMessage adds the provided message to the list of candidates.
rpc CreateIceMessage(CreateIceMessageRequest) returns (IceMessage);
// PopIceCandidate delete a message from the list of messages and returns it.
//
// If there are no candidates, this blocks until one becomes available.
rpc PopIceCandidate(PopIceCandidateRequest) returns (IceCandidate);
rpc CreateIceSessionDescription(CreateIceSessionDescriptionRequest) returns (IceSessionDescription);
rpc PopIceSessionDescription(PopIceSessionDescriptionRequest) returns (IceSessionDescription);
// If there are no messages, this blocks until one becomes available.
rpc PopIceMessage(PopIceMessageRequest) returns (IceMessage);
}
@@ -63,6 +57,10 @@ message CreateSessionRequest {
bool wait_for_update = 2;
}
message PopSessionRequest {
Session session = 1;
}
message UpdateSessionRequest {
Session session = 1;
@@ -78,21 +76,12 @@ message ListSessionsResponse {
repeated Session sessions = 1;
}
message CreateIceCandidateRequest {
message CreateIceMessageRequest {
Session.Identifier session_identifier = 1;
IceCandidate candidate = 2;
IceMessage ice_message = 2;
}
message PopIceCandidateRequest {
Session.Identifier session_identifier = 1;
}
message CreateIceSessionDescriptionRequest {
Session.Identifier session_identifier = 1;
IceSessionDescription description = 2;
}
message PopIceSessionDescriptionRequest {
message PopIceMessageRequest {
Session.Identifier session_identifier = 1;
}
@@ -103,6 +92,13 @@ message Camera {
Identifier identifier = 1;
}
message IceMessage {
oneof type {
IceCandidate candidate = 1;
IceSessionDescription session = 2;
}
}
message IceCandidate {
// Copied from https://pkg.go.dev/github.com/pion/webrtc/v4#ICECandidateInit
string candidate = 1;
@@ -123,11 +119,6 @@ message Session {
}
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;
}
message AuthToken {