// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.30.0 // protoc v4.23.4 // source: vpn/vpn.proto package vpn import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // StartProgress is sent from the manager to the client to indicate the // download/startup progress of the tunnel. This will be sent during the // processing of a StartRequest before the StartResponse is sent. // // Note: this is currently a broadcasted message to all clients due to the // // inability to easily send messages to a specific client in the Speaker // implementation. If clients are not expecting these messages, they // should ignore them. type StartProgressStage int32 const ( StartProgressStage_Initializing StartProgressStage = 0 StartProgressStage_Downloading StartProgressStage = 1 StartProgressStage_Finalizing StartProgressStage = 2 ) // Enum value maps for StartProgressStage. var ( StartProgressStage_name = map[int32]string{ 0: "Initializing", 1: "Downloading", 2: "Finalizing", } StartProgressStage_value = map[string]int32{ "Initializing": 0, "Downloading": 1, "Finalizing": 2, } ) func (x StartProgressStage) Enum() *StartProgressStage { p := new(StartProgressStage) *p = x return p } func (x StartProgressStage) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (StartProgressStage) Descriptor() protoreflect.EnumDescriptor { return file_vpn_vpn_proto_enumTypes[0].Descriptor() } func (StartProgressStage) Type() protoreflect.EnumType { return &file_vpn_vpn_proto_enumTypes[0] } func (x StartProgressStage) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use StartProgressStage.Descriptor instead. func (StartProgressStage) EnumDescriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{0} } type Log_Level int32 const ( // these are designed to match slog levels Log_DEBUG Log_Level = 0 Log_INFO Log_Level = 1 Log_WARN Log_Level = 2 Log_ERROR Log_Level = 3 Log_CRITICAL Log_Level = 4 Log_FATAL Log_Level = 5 ) // Enum value maps for Log_Level. var ( Log_Level_name = map[int32]string{ 0: "DEBUG", 1: "INFO", 2: "WARN", 3: "ERROR", 4: "CRITICAL", 5: "FATAL", } Log_Level_value = map[string]int32{ "DEBUG": 0, "INFO": 1, "WARN": 2, "ERROR": 3, "CRITICAL": 4, "FATAL": 5, } ) func (x Log_Level) Enum() *Log_Level { p := new(Log_Level) *p = x return p } func (x Log_Level) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Log_Level) Descriptor() protoreflect.EnumDescriptor { return file_vpn_vpn_proto_enumTypes[1].Descriptor() } func (Log_Level) Type() protoreflect.EnumType { return &file_vpn_vpn_proto_enumTypes[1] } func (x Log_Level) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Log_Level.Descriptor instead. func (Log_Level) EnumDescriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{5, 0} } type Workspace_Status int32 const ( Workspace_UNKNOWN Workspace_Status = 0 Workspace_PENDING Workspace_Status = 1 Workspace_STARTING Workspace_Status = 2 Workspace_RUNNING Workspace_Status = 3 Workspace_STOPPING Workspace_Status = 4 Workspace_STOPPED Workspace_Status = 5 Workspace_FAILED Workspace_Status = 6 Workspace_CANCELING Workspace_Status = 7 Workspace_CANCELED Workspace_Status = 8 Workspace_DELETING Workspace_Status = 9 Workspace_DELETED Workspace_Status = 10 ) // Enum value maps for Workspace_Status. var ( Workspace_Status_name = map[int32]string{ 0: "UNKNOWN", 1: "PENDING", 2: "STARTING", 3: "RUNNING", 4: "STOPPING", 5: "STOPPED", 6: "FAILED", 7: "CANCELING", 8: "CANCELED", 9: "DELETING", 10: "DELETED", } Workspace_Status_value = map[string]int32{ "UNKNOWN": 0, "PENDING": 1, "STARTING": 2, "RUNNING": 3, "STOPPING": 4, "STOPPED": 5, "FAILED": 6, "CANCELING": 7, "CANCELED": 8, "DELETING": 9, "DELETED": 10, } ) func (x Workspace_Status) Enum() *Workspace_Status { p := new(Workspace_Status) *p = x return p } func (x Workspace_Status) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Workspace_Status) Descriptor() protoreflect.EnumDescriptor { return file_vpn_vpn_proto_enumTypes[2].Descriptor() } func (Workspace_Status) Type() protoreflect.EnumType { return &file_vpn_vpn_proto_enumTypes[2] } func (x Workspace_Status) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Workspace_Status.Descriptor instead. func (Workspace_Status) EnumDescriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{8, 0} } type Status_Lifecycle int32 const ( Status_UNKNOWN Status_Lifecycle = 0 Status_STARTING Status_Lifecycle = 1 Status_STARTED Status_Lifecycle = 2 Status_STOPPING Status_Lifecycle = 3 Status_STOPPED Status_Lifecycle = 4 ) // Enum value maps for Status_Lifecycle. var ( Status_Lifecycle_name = map[int32]string{ 0: "UNKNOWN", 1: "STARTING", 2: "STARTED", 3: "STOPPING", 4: "STOPPED", } Status_Lifecycle_value = map[string]int32{ "UNKNOWN": 0, "STARTING": 1, "STARTED": 2, "STOPPING": 3, "STOPPED": 4, } ) func (x Status_Lifecycle) Enum() *Status_Lifecycle { p := new(Status_Lifecycle) *p = x return p } func (x Status_Lifecycle) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Status_Lifecycle) Descriptor() protoreflect.EnumDescriptor { return file_vpn_vpn_proto_enumTypes[3].Descriptor() } func (Status_Lifecycle) Type() protoreflect.EnumType { return &file_vpn_vpn_proto_enumTypes[3] } func (x Status_Lifecycle) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Status_Lifecycle.Descriptor instead. func (Status_Lifecycle) EnumDescriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{20, 0} } // RPC allows a very simple unary request/response RPC mechanism. The requester generates a unique // msg_id which it sets on the request, the responder sets response_to that msg_id on the response // message type RPC struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields MsgId uint64 `protobuf:"varint,1,opt,name=msg_id,json=msgId,proto3" json:"msg_id,omitempty"` ResponseTo uint64 `protobuf:"varint,2,opt,name=response_to,json=responseTo,proto3" json:"response_to,omitempty"` } func (x *RPC) Reset() { *x = RPC{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *RPC) String() string { return protoimpl.X.MessageStringOf(x) } func (*RPC) ProtoMessage() {} func (x *RPC) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[0] 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 RPC.ProtoReflect.Descriptor instead. func (*RPC) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{0} } func (x *RPC) GetMsgId() uint64 { if x != nil { return x.MsgId } return 0 } func (x *RPC) GetResponseTo() uint64 { if x != nil { return x.ResponseTo } return 0 } // ManagerMessage is a message from the manager (to the tunnel). type ManagerMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Rpc *RPC `protobuf:"bytes,1,opt,name=rpc,proto3" json:"rpc,omitempty"` // Types that are assignable to Msg: // // *ManagerMessage_GetPeerUpdate // *ManagerMessage_NetworkSettings // *ManagerMessage_Start // *ManagerMessage_Stop Msg isManagerMessage_Msg `protobuf_oneof:"msg"` } func (x *ManagerMessage) Reset() { *x = ManagerMessage{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ManagerMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*ManagerMessage) ProtoMessage() {} func (x *ManagerMessage) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[1] 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 ManagerMessage.ProtoReflect.Descriptor instead. func (*ManagerMessage) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{1} } func (x *ManagerMessage) GetRpc() *RPC { if x != nil { return x.Rpc } return nil } func (m *ManagerMessage) GetMsg() isManagerMessage_Msg { if m != nil { return m.Msg } return nil } func (x *ManagerMessage) GetGetPeerUpdate() *GetPeerUpdate { if x, ok := x.GetMsg().(*ManagerMessage_GetPeerUpdate); ok { return x.GetPeerUpdate } return nil } func (x *ManagerMessage) GetNetworkSettings() *NetworkSettingsResponse { if x, ok := x.GetMsg().(*ManagerMessage_NetworkSettings); ok { return x.NetworkSettings } return nil } func (x *ManagerMessage) GetStart() *StartRequest { if x, ok := x.GetMsg().(*ManagerMessage_Start); ok { return x.Start } return nil } func (x *ManagerMessage) GetStop() *StopRequest { if x, ok := x.GetMsg().(*ManagerMessage_Stop); ok { return x.Stop } return nil } type isManagerMessage_Msg interface { isManagerMessage_Msg() } type ManagerMessage_GetPeerUpdate struct { GetPeerUpdate *GetPeerUpdate `protobuf:"bytes,2,opt,name=get_peer_update,json=getPeerUpdate,proto3,oneof"` } type ManagerMessage_NetworkSettings struct { NetworkSettings *NetworkSettingsResponse `protobuf:"bytes,3,opt,name=network_settings,json=networkSettings,proto3,oneof"` } type ManagerMessage_Start struct { Start *StartRequest `protobuf:"bytes,4,opt,name=start,proto3,oneof"` } type ManagerMessage_Stop struct { Stop *StopRequest `protobuf:"bytes,5,opt,name=stop,proto3,oneof"` } func (*ManagerMessage_GetPeerUpdate) isManagerMessage_Msg() {} func (*ManagerMessage_NetworkSettings) isManagerMessage_Msg() {} func (*ManagerMessage_Start) isManagerMessage_Msg() {} func (*ManagerMessage_Stop) isManagerMessage_Msg() {} // TunnelMessage is a message from the tunnel (to the manager). type TunnelMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Rpc *RPC `protobuf:"bytes,1,opt,name=rpc,proto3" json:"rpc,omitempty"` // Types that are assignable to Msg: // // *TunnelMessage_Log // *TunnelMessage_PeerUpdate // *TunnelMessage_NetworkSettings // *TunnelMessage_Start // *TunnelMessage_Stop Msg isTunnelMessage_Msg `protobuf_oneof:"msg"` } func (x *TunnelMessage) Reset() { *x = TunnelMessage{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TunnelMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*TunnelMessage) ProtoMessage() {} func (x *TunnelMessage) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[2] 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 TunnelMessage.ProtoReflect.Descriptor instead. func (*TunnelMessage) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{2} } func (x *TunnelMessage) GetRpc() *RPC { if x != nil { return x.Rpc } return nil } func (m *TunnelMessage) GetMsg() isTunnelMessage_Msg { if m != nil { return m.Msg } return nil } func (x *TunnelMessage) GetLog() *Log { if x, ok := x.GetMsg().(*TunnelMessage_Log); ok { return x.Log } return nil } func (x *TunnelMessage) GetPeerUpdate() *PeerUpdate { if x, ok := x.GetMsg().(*TunnelMessage_PeerUpdate); ok { return x.PeerUpdate } return nil } func (x *TunnelMessage) GetNetworkSettings() *NetworkSettingsRequest { if x, ok := x.GetMsg().(*TunnelMessage_NetworkSettings); ok { return x.NetworkSettings } return nil } func (x *TunnelMessage) GetStart() *StartResponse { if x, ok := x.GetMsg().(*TunnelMessage_Start); ok { return x.Start } return nil } func (x *TunnelMessage) GetStop() *StopResponse { if x, ok := x.GetMsg().(*TunnelMessage_Stop); ok { return x.Stop } return nil } type isTunnelMessage_Msg interface { isTunnelMessage_Msg() } type TunnelMessage_Log struct { Log *Log `protobuf:"bytes,2,opt,name=log,proto3,oneof"` } type TunnelMessage_PeerUpdate struct { PeerUpdate *PeerUpdate `protobuf:"bytes,3,opt,name=peer_update,json=peerUpdate,proto3,oneof"` } type TunnelMessage_NetworkSettings struct { NetworkSettings *NetworkSettingsRequest `protobuf:"bytes,4,opt,name=network_settings,json=networkSettings,proto3,oneof"` } type TunnelMessage_Start struct { Start *StartResponse `protobuf:"bytes,5,opt,name=start,proto3,oneof"` } type TunnelMessage_Stop struct { Stop *StopResponse `protobuf:"bytes,6,opt,name=stop,proto3,oneof"` } func (*TunnelMessage_Log) isTunnelMessage_Msg() {} func (*TunnelMessage_PeerUpdate) isTunnelMessage_Msg() {} func (*TunnelMessage_NetworkSettings) isTunnelMessage_Msg() {} func (*TunnelMessage_Start) isTunnelMessage_Msg() {} func (*TunnelMessage_Stop) isTunnelMessage_Msg() {} // ClientMessage is a message from the client (to the service). Windows only. type ClientMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Rpc *RPC `protobuf:"bytes,1,opt,name=rpc,proto3" json:"rpc,omitempty"` // Types that are assignable to Msg: // // *ClientMessage_Start // *ClientMessage_Stop // *ClientMessage_Status Msg isClientMessage_Msg `protobuf_oneof:"msg"` } func (x *ClientMessage) Reset() { *x = ClientMessage{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ClientMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*ClientMessage) ProtoMessage() {} func (x *ClientMessage) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[3] 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 ClientMessage.ProtoReflect.Descriptor instead. func (*ClientMessage) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{3} } func (x *ClientMessage) GetRpc() *RPC { if x != nil { return x.Rpc } return nil } func (m *ClientMessage) GetMsg() isClientMessage_Msg { if m != nil { return m.Msg } return nil } func (x *ClientMessage) GetStart() *StartRequest { if x, ok := x.GetMsg().(*ClientMessage_Start); ok { return x.Start } return nil } func (x *ClientMessage) GetStop() *StopRequest { if x, ok := x.GetMsg().(*ClientMessage_Stop); ok { return x.Stop } return nil } func (x *ClientMessage) GetStatus() *StatusRequest { if x, ok := x.GetMsg().(*ClientMessage_Status); ok { return x.Status } return nil } type isClientMessage_Msg interface { isClientMessage_Msg() } type ClientMessage_Start struct { Start *StartRequest `protobuf:"bytes,2,opt,name=start,proto3,oneof"` } type ClientMessage_Stop struct { Stop *StopRequest `protobuf:"bytes,3,opt,name=stop,proto3,oneof"` } type ClientMessage_Status struct { Status *StatusRequest `protobuf:"bytes,4,opt,name=status,proto3,oneof"` } func (*ClientMessage_Start) isClientMessage_Msg() {} func (*ClientMessage_Stop) isClientMessage_Msg() {} func (*ClientMessage_Status) isClientMessage_Msg() {} // ServiceMessage is a message from the service (to the client). Windows only. type ServiceMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Rpc *RPC `protobuf:"bytes,1,opt,name=rpc,proto3" json:"rpc,omitempty"` // Types that are assignable to Msg: // // *ServiceMessage_Start // *ServiceMessage_Stop // *ServiceMessage_Status // *ServiceMessage_StartProgress Msg isServiceMessage_Msg `protobuf_oneof:"msg"` } func (x *ServiceMessage) Reset() { *x = ServiceMessage{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ServiceMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*ServiceMessage) ProtoMessage() {} func (x *ServiceMessage) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_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 ServiceMessage.ProtoReflect.Descriptor instead. func (*ServiceMessage) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{4} } func (x *ServiceMessage) GetRpc() *RPC { if x != nil { return x.Rpc } return nil } func (m *ServiceMessage) GetMsg() isServiceMessage_Msg { if m != nil { return m.Msg } return nil } func (x *ServiceMessage) GetStart() *StartResponse { if x, ok := x.GetMsg().(*ServiceMessage_Start); ok { return x.Start } return nil } func (x *ServiceMessage) GetStop() *StopResponse { if x, ok := x.GetMsg().(*ServiceMessage_Stop); ok { return x.Stop } return nil } func (x *ServiceMessage) GetStatus() *Status { if x, ok := x.GetMsg().(*ServiceMessage_Status); ok { return x.Status } return nil } func (x *ServiceMessage) GetStartProgress() *StartProgress { if x, ok := x.GetMsg().(*ServiceMessage_StartProgress); ok { return x.StartProgress } return nil } type isServiceMessage_Msg interface { isServiceMessage_Msg() } type ServiceMessage_Start struct { Start *StartResponse `protobuf:"bytes,2,opt,name=start,proto3,oneof"` } type ServiceMessage_Stop struct { Stop *StopResponse `protobuf:"bytes,3,opt,name=stop,proto3,oneof"` } type ServiceMessage_Status struct { Status *Status `protobuf:"bytes,4,opt,name=status,proto3,oneof"` // either in reply to a StatusRequest or broadcasted } type ServiceMessage_StartProgress struct { StartProgress *StartProgress `protobuf:"bytes,5,opt,name=start_progress,json=startProgress,proto3,oneof"` // broadcasted during startup (used exclusively by Windows) } func (*ServiceMessage_Start) isServiceMessage_Msg() {} func (*ServiceMessage_Stop) isServiceMessage_Msg() {} func (*ServiceMessage_Status) isServiceMessage_Msg() {} func (*ServiceMessage_StartProgress) isServiceMessage_Msg() {} // Log is a log message generated by the tunnel. The manager should log it to the system log. It is // one-way tunnel -> manager with no response. type Log struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Level Log_Level `protobuf:"varint,1,opt,name=level,proto3,enum=vpn.Log_Level" json:"level,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` LoggerNames []string `protobuf:"bytes,3,rep,name=logger_names,json=loggerNames,proto3" json:"logger_names,omitempty"` Fields []*Log_Field `protobuf:"bytes,4,rep,name=fields,proto3" json:"fields,omitempty"` } func (x *Log) Reset() { *x = Log{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Log) String() string { return protoimpl.X.MessageStringOf(x) } func (*Log) ProtoMessage() {} func (x *Log) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[5] 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 Log.ProtoReflect.Descriptor instead. func (*Log) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{5} } func (x *Log) GetLevel() Log_Level { if x != nil { return x.Level } return Log_DEBUG } func (x *Log) GetMessage() string { if x != nil { return x.Message } return "" } func (x *Log) GetLoggerNames() []string { if x != nil { return x.LoggerNames } return nil } func (x *Log) GetFields() []*Log_Field { if x != nil { return x.Fields } return nil } // GetPeerUpdate asks for a PeerUpdate with a full set of data. type GetPeerUpdate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *GetPeerUpdate) Reset() { *x = GetPeerUpdate{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GetPeerUpdate) String() string { return protoimpl.X.MessageStringOf(x) } func (*GetPeerUpdate) ProtoMessage() {} func (x *GetPeerUpdate) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[6] 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 GetPeerUpdate.ProtoReflect.Descriptor instead. func (*GetPeerUpdate) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{6} } // PeerUpdate is an update about workspaces and agents connected via the tunnel. It is generated in // response to GetPeerUpdate (which dumps the full set). It is also generated on any changes (not in // response to any request). type PeerUpdate struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields UpsertedWorkspaces []*Workspace `protobuf:"bytes,1,rep,name=upserted_workspaces,json=upsertedWorkspaces,proto3" json:"upserted_workspaces,omitempty"` UpsertedAgents []*Agent `protobuf:"bytes,2,rep,name=upserted_agents,json=upsertedAgents,proto3" json:"upserted_agents,omitempty"` DeletedWorkspaces []*Workspace `protobuf:"bytes,3,rep,name=deleted_workspaces,json=deletedWorkspaces,proto3" json:"deleted_workspaces,omitempty"` DeletedAgents []*Agent `protobuf:"bytes,4,rep,name=deleted_agents,json=deletedAgents,proto3" json:"deleted_agents,omitempty"` } func (x *PeerUpdate) Reset() { *x = PeerUpdate{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PeerUpdate) String() string { return protoimpl.X.MessageStringOf(x) } func (*PeerUpdate) ProtoMessage() {} func (x *PeerUpdate) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_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 PeerUpdate.ProtoReflect.Descriptor instead. func (*PeerUpdate) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{7} } func (x *PeerUpdate) GetUpsertedWorkspaces() []*Workspace { if x != nil { return x.UpsertedWorkspaces } return nil } func (x *PeerUpdate) GetUpsertedAgents() []*Agent { if x != nil { return x.UpsertedAgents } return nil } func (x *PeerUpdate) GetDeletedWorkspaces() []*Workspace { if x != nil { return x.DeletedWorkspaces } return nil } func (x *PeerUpdate) GetDeletedAgents() []*Agent { if x != nil { return x.DeletedAgents } return nil } type Workspace struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Status Workspace_Status `protobuf:"varint,3,opt,name=status,proto3,enum=vpn.Workspace_Status" json:"status,omitempty"` } func (x *Workspace) Reset() { *x = Workspace{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Workspace) String() string { return protoimpl.X.MessageStringOf(x) } func (*Workspace) ProtoMessage() {} func (x *Workspace) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[8] 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 Workspace.ProtoReflect.Descriptor instead. func (*Workspace) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{8} } func (x *Workspace) GetId() []byte { if x != nil { return x.Id } return nil } func (x *Workspace) GetName() string { if x != nil { return x.Name } return "" } func (x *Workspace) GetStatus() Workspace_Status { if x != nil { return x.Status } return Workspace_UNKNOWN } type Agent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // UUID Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` WorkspaceId []byte `protobuf:"bytes,3,opt,name=workspace_id,json=workspaceId,proto3" json:"workspace_id,omitempty"` // UUID Fqdn []string `protobuf:"bytes,4,rep,name=fqdn,proto3" json:"fqdn,omitempty"` IpAddrs []string `protobuf:"bytes,5,rep,name=ip_addrs,json=ipAddrs,proto3" json:"ip_addrs,omitempty"` // last_handshake is the primary indicator of whether we are connected to a peer. Zero value or // anything longer than 5 minutes ago means there is a problem. LastHandshake *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_handshake,json=lastHandshake,proto3" json:"last_handshake,omitempty"` // If unset, a successful ping has not yet been made. LastPing *LastPing `protobuf:"bytes,7,opt,name=last_ping,json=lastPing,proto3,oneof" json:"last_ping,omitempty"` } func (x *Agent) Reset() { *x = Agent{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Agent) String() string { return protoimpl.X.MessageStringOf(x) } func (*Agent) ProtoMessage() {} func (x *Agent) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[9] 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 Agent.ProtoReflect.Descriptor instead. func (*Agent) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{9} } func (x *Agent) GetId() []byte { if x != nil { return x.Id } return nil } func (x *Agent) GetName() string { if x != nil { return x.Name } return "" } func (x *Agent) GetWorkspaceId() []byte { if x != nil { return x.WorkspaceId } return nil } func (x *Agent) GetFqdn() []string { if x != nil { return x.Fqdn } return nil } func (x *Agent) GetIpAddrs() []string { if x != nil { return x.IpAddrs } return nil } func (x *Agent) GetLastHandshake() *timestamppb.Timestamp { if x != nil { return x.LastHandshake } return nil } func (x *Agent) GetLastPing() *LastPing { if x != nil { return x.LastPing } return nil } type LastPing struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // latency is the RTT of the ping to the agent. Latency *durationpb.Duration `protobuf:"bytes,1,opt,name=latency,proto3" json:"latency,omitempty"` // did_p2p indicates whether the ping was sent P2P, or over DERP. DidP2P bool `protobuf:"varint,2,opt,name=did_p2p,json=didP2p,proto3" json:"did_p2p,omitempty"` // preferred_derp is the human readable name of the preferred DERP region, // or the region used for the last ping, if it was sent over DERP. PreferredDerp string `protobuf:"bytes,3,opt,name=preferred_derp,json=preferredDerp,proto3" json:"preferred_derp,omitempty"` // preferred_derp_latency is the last known latency to the preferred DERP // region. Unset if the region does not appear in the DERP map. PreferredDerpLatency *durationpb.Duration `protobuf:"bytes,4,opt,name=preferred_derp_latency,json=preferredDerpLatency,proto3,oneof" json:"preferred_derp_latency,omitempty"` } func (x *LastPing) Reset() { *x = LastPing{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *LastPing) String() string { return protoimpl.X.MessageStringOf(x) } func (*LastPing) ProtoMessage() {} func (x *LastPing) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_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 LastPing.ProtoReflect.Descriptor instead. func (*LastPing) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{10} } func (x *LastPing) GetLatency() *durationpb.Duration { if x != nil { return x.Latency } return nil } func (x *LastPing) GetDidP2P() bool { if x != nil { return x.DidP2P } return false } func (x *LastPing) GetPreferredDerp() string { if x != nil { return x.PreferredDerp } return "" } func (x *LastPing) GetPreferredDerpLatency() *durationpb.Duration { if x != nil { return x.PreferredDerpLatency } return nil } // NetworkSettingsRequest is based on // https://developer.apple.com/documentation/networkextension/nepackettunnelnetworksettings for // macOS. It is a request/response message with response NetworkSettingsResponse type NetworkSettingsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields TunnelOverheadBytes uint32 `protobuf:"varint,1,opt,name=tunnel_overhead_bytes,json=tunnelOverheadBytes,proto3" json:"tunnel_overhead_bytes,omitempty"` Mtu uint32 `protobuf:"varint,2,opt,name=mtu,proto3" json:"mtu,omitempty"` DnsSettings *NetworkSettingsRequest_DNSSettings `protobuf:"bytes,3,opt,name=dns_settings,json=dnsSettings,proto3" json:"dns_settings,omitempty"` TunnelRemoteAddress string `protobuf:"bytes,4,opt,name=tunnel_remote_address,json=tunnelRemoteAddress,proto3" json:"tunnel_remote_address,omitempty"` Ipv4Settings *NetworkSettingsRequest_IPv4Settings `protobuf:"bytes,5,opt,name=ipv4_settings,json=ipv4Settings,proto3" json:"ipv4_settings,omitempty"` Ipv6Settings *NetworkSettingsRequest_IPv6Settings `protobuf:"bytes,6,opt,name=ipv6_settings,json=ipv6Settings,proto3" json:"ipv6_settings,omitempty"` } func (x *NetworkSettingsRequest) Reset() { *x = NetworkSettingsRequest{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NetworkSettingsRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*NetworkSettingsRequest) ProtoMessage() {} func (x *NetworkSettingsRequest) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_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 NetworkSettingsRequest.ProtoReflect.Descriptor instead. func (*NetworkSettingsRequest) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{11} } func (x *NetworkSettingsRequest) GetTunnelOverheadBytes() uint32 { if x != nil { return x.TunnelOverheadBytes } return 0 } func (x *NetworkSettingsRequest) GetMtu() uint32 { if x != nil { return x.Mtu } return 0 } func (x *NetworkSettingsRequest) GetDnsSettings() *NetworkSettingsRequest_DNSSettings { if x != nil { return x.DnsSettings } return nil } func (x *NetworkSettingsRequest) GetTunnelRemoteAddress() string { if x != nil { return x.TunnelRemoteAddress } return "" } func (x *NetworkSettingsRequest) GetIpv4Settings() *NetworkSettingsRequest_IPv4Settings { if x != nil { return x.Ipv4Settings } return nil } func (x *NetworkSettingsRequest) GetIpv6Settings() *NetworkSettingsRequest_IPv6Settings { if x != nil { return x.Ipv6Settings } return nil } // NetworkSettingsResponse is the response from the manager to the tunnel for a // NetworkSettingsRequest type NetworkSettingsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` } func (x *NetworkSettingsResponse) Reset() { *x = NetworkSettingsResponse{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NetworkSettingsResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*NetworkSettingsResponse) ProtoMessage() {} func (x *NetworkSettingsResponse) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[12] 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 NetworkSettingsResponse.ProtoReflect.Descriptor instead. func (*NetworkSettingsResponse) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{12} } func (x *NetworkSettingsResponse) GetSuccess() bool { if x != nil { return x.Success } return false } func (x *NetworkSettingsResponse) GetErrorMessage() string { if x != nil { return x.ErrorMessage } return "" } // StartRequest is a request from the manager to start the tunnel. The tunnel replies with a // StartResponse. type StartRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields TunnelFileDescriptor int32 `protobuf:"varint,1,opt,name=tunnel_file_descriptor,json=tunnelFileDescriptor,proto3" json:"tunnel_file_descriptor,omitempty"` CoderUrl string `protobuf:"bytes,2,opt,name=coder_url,json=coderUrl,proto3" json:"coder_url,omitempty"` ApiToken string `protobuf:"bytes,3,opt,name=api_token,json=apiToken,proto3" json:"api_token,omitempty"` Headers []*StartRequest_Header `protobuf:"bytes,4,rep,name=headers,proto3" json:"headers,omitempty"` // Device ID from Coder Desktop DeviceId string `protobuf:"bytes,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // Device OS from Coder Desktop DeviceOs string `protobuf:"bytes,6,opt,name=device_os,json=deviceOs,proto3" json:"device_os,omitempty"` // Coder Desktop version CoderDesktopVersion string `protobuf:"bytes,7,opt,name=coder_desktop_version,json=coderDesktopVersion,proto3" json:"coder_desktop_version,omitempty"` } func (x *StartRequest) Reset() { *x = StartRequest{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartRequest) ProtoMessage() {} func (x *StartRequest) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[13] 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 StartRequest.ProtoReflect.Descriptor instead. func (*StartRequest) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{13} } func (x *StartRequest) GetTunnelFileDescriptor() int32 { if x != nil { return x.TunnelFileDescriptor } return 0 } func (x *StartRequest) GetCoderUrl() string { if x != nil { return x.CoderUrl } return "" } func (x *StartRequest) GetApiToken() string { if x != nil { return x.ApiToken } return "" } func (x *StartRequest) GetHeaders() []*StartRequest_Header { if x != nil { return x.Headers } return nil } func (x *StartRequest) GetDeviceId() string { if x != nil { return x.DeviceId } return "" } func (x *StartRequest) GetDeviceOs() string { if x != nil { return x.DeviceOs } return "" } func (x *StartRequest) GetCoderDesktopVersion() string { if x != nil { return x.CoderDesktopVersion } return "" } type StartResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` } func (x *StartResponse) Reset() { *x = StartResponse{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartResponse) ProtoMessage() {} func (x *StartResponse) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[14] 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 StartResponse.ProtoReflect.Descriptor instead. func (*StartResponse) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{14} } func (x *StartResponse) GetSuccess() bool { if x != nil { return x.Success } return false } func (x *StartResponse) GetErrorMessage() string { if x != nil { return x.ErrorMessage } return "" } type StartProgressDownloadProgress struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields BytesWritten uint64 `protobuf:"varint,1,opt,name=bytes_written,json=bytesWritten,proto3" json:"bytes_written,omitempty"` BytesTotal *uint64 `protobuf:"varint,2,opt,name=bytes_total,json=bytesTotal,proto3,oneof" json:"bytes_total,omitempty"` // unknown in some situations } func (x *StartProgressDownloadProgress) Reset() { *x = StartProgressDownloadProgress{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartProgressDownloadProgress) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartProgressDownloadProgress) ProtoMessage() {} func (x *StartProgressDownloadProgress) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[15] 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 StartProgressDownloadProgress.ProtoReflect.Descriptor instead. func (*StartProgressDownloadProgress) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{15} } func (x *StartProgressDownloadProgress) GetBytesWritten() uint64 { if x != nil { return x.BytesWritten } return 0 } func (x *StartProgressDownloadProgress) GetBytesTotal() uint64 { if x != nil && x.BytesTotal != nil { return *x.BytesTotal } return 0 } type StartProgress struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Stage StartProgressStage `protobuf:"varint,1,opt,name=stage,proto3,enum=vpn.StartProgressStage" json:"stage,omitempty"` DownloadProgress *StartProgressDownloadProgress `protobuf:"bytes,2,opt,name=download_progress,json=downloadProgress,proto3,oneof" json:"download_progress,omitempty"` // only set when stage == Downloading } func (x *StartProgress) Reset() { *x = StartProgress{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartProgress) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartProgress) ProtoMessage() {} func (x *StartProgress) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[16] 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 StartProgress.ProtoReflect.Descriptor instead. func (*StartProgress) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{16} } func (x *StartProgress) GetStage() StartProgressStage { if x != nil { return x.Stage } return StartProgressStage_Initializing } func (x *StartProgress) GetDownloadProgress() *StartProgressDownloadProgress { if x != nil { return x.DownloadProgress } return nil } // StopRequest is a request from the manager to stop the tunnel. The tunnel replies with a // StopResponse. type StopRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *StopRequest) Reset() { *x = StopRequest{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StopRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*StopRequest) ProtoMessage() {} func (x *StopRequest) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[17] 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 StopRequest.ProtoReflect.Descriptor instead. func (*StopRequest) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{17} } // StopResponse is a response to stopping the tunnel. After sending this response, the tunnel closes // its side of the bidirectional stream for writing. type StopResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` } func (x *StopResponse) Reset() { *x = StopResponse{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StopResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*StopResponse) ProtoMessage() {} func (x *StopResponse) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[18] 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 StopResponse.ProtoReflect.Descriptor instead. func (*StopResponse) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{18} } func (x *StopResponse) GetSuccess() bool { if x != nil { return x.Success } return false } func (x *StopResponse) GetErrorMessage() string { if x != nil { return x.ErrorMessage } return "" } // StatusRequest is a request to get the status of the tunnel. The manager // replies with a Status. type StatusRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *StatusRequest) Reset() { *x = StatusRequest{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StatusRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[19] 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 StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{19} } // Status is sent in response to a StatusRequest or broadcasted to all clients // when the status changes. type Status struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Lifecycle Status_Lifecycle `protobuf:"varint,1,opt,name=lifecycle,proto3,enum=vpn.Status_Lifecycle" json:"lifecycle,omitempty"` ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` // This will be a FULL update with all workspaces and agents, so clients // should replace their current peer state. Only the Upserted fields will // be populated. PeerUpdate *PeerUpdate `protobuf:"bytes,3,opt,name=peer_update,json=peerUpdate,proto3" json:"peer_update,omitempty"` } func (x *Status) Reset() { *x = Status{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Status) String() string { return protoimpl.X.MessageStringOf(x) } func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[20] 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 Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{20} } func (x *Status) GetLifecycle() Status_Lifecycle { if x != nil { return x.Lifecycle } return Status_UNKNOWN } func (x *Status) GetErrorMessage() string { if x != nil { return x.ErrorMessage } return "" } func (x *Status) GetPeerUpdate() *PeerUpdate { if x != nil { return x.PeerUpdate } return nil } type Log_Field struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (x *Log_Field) Reset() { *x = Log_Field{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Log_Field) String() string { return protoimpl.X.MessageStringOf(x) } func (*Log_Field) ProtoMessage() {} func (x *Log_Field) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[21] 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 Log_Field.ProtoReflect.Descriptor instead. func (*Log_Field) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{5, 0} } func (x *Log_Field) GetName() string { if x != nil { return x.Name } return "" } func (x *Log_Field) GetValue() string { if x != nil { return x.Value } return "" } type NetworkSettingsRequest_DNSSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Servers []string `protobuf:"bytes,1,rep,name=servers,proto3" json:"servers,omitempty"` SearchDomains []string `protobuf:"bytes,2,rep,name=search_domains,json=searchDomains,proto3" json:"search_domains,omitempty"` // domain_name is the primary domain name of the tunnel DomainName string `protobuf:"bytes,3,opt,name=domain_name,json=domainName,proto3" json:"domain_name,omitempty"` MatchDomains []string `protobuf:"bytes,4,rep,name=match_domains,json=matchDomains,proto3" json:"match_domains,omitempty"` // match_domains_no_search specifies if the domains in the matchDomains list should not be // appended to the resolver’s list of search domains. MatchDomainsNoSearch bool `protobuf:"varint,5,opt,name=match_domains_no_search,json=matchDomainsNoSearch,proto3" json:"match_domains_no_search,omitempty"` } func (x *NetworkSettingsRequest_DNSSettings) Reset() { *x = NetworkSettingsRequest_DNSSettings{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NetworkSettingsRequest_DNSSettings) String() string { return protoimpl.X.MessageStringOf(x) } func (*NetworkSettingsRequest_DNSSettings) ProtoMessage() {} func (x *NetworkSettingsRequest_DNSSettings) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[22] 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 NetworkSettingsRequest_DNSSettings.ProtoReflect.Descriptor instead. func (*NetworkSettingsRequest_DNSSettings) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{11, 0} } func (x *NetworkSettingsRequest_DNSSettings) GetServers() []string { if x != nil { return x.Servers } return nil } func (x *NetworkSettingsRequest_DNSSettings) GetSearchDomains() []string { if x != nil { return x.SearchDomains } return nil } func (x *NetworkSettingsRequest_DNSSettings) GetDomainName() string { if x != nil { return x.DomainName } return "" } func (x *NetworkSettingsRequest_DNSSettings) GetMatchDomains() []string { if x != nil { return x.MatchDomains } return nil } func (x *NetworkSettingsRequest_DNSSettings) GetMatchDomainsNoSearch() bool { if x != nil { return x.MatchDomainsNoSearch } return false } type NetworkSettingsRequest_IPv4Settings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Addrs []string `protobuf:"bytes,1,rep,name=addrs,proto3" json:"addrs,omitempty"` SubnetMasks []string `protobuf:"bytes,2,rep,name=subnet_masks,json=subnetMasks,proto3" json:"subnet_masks,omitempty"` // router is the next-hop router in dotted-decimal format Router string `protobuf:"bytes,3,opt,name=router,proto3" json:"router,omitempty"` IncludedRoutes []*NetworkSettingsRequest_IPv4Settings_IPv4Route `protobuf:"bytes,4,rep,name=included_routes,json=includedRoutes,proto3" json:"included_routes,omitempty"` ExcludedRoutes []*NetworkSettingsRequest_IPv4Settings_IPv4Route `protobuf:"bytes,5,rep,name=excluded_routes,json=excludedRoutes,proto3" json:"excluded_routes,omitempty"` } func (x *NetworkSettingsRequest_IPv4Settings) Reset() { *x = NetworkSettingsRequest_IPv4Settings{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NetworkSettingsRequest_IPv4Settings) String() string { return protoimpl.X.MessageStringOf(x) } func (*NetworkSettingsRequest_IPv4Settings) ProtoMessage() {} func (x *NetworkSettingsRequest_IPv4Settings) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[23] 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 NetworkSettingsRequest_IPv4Settings.ProtoReflect.Descriptor instead. func (*NetworkSettingsRequest_IPv4Settings) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{11, 1} } func (x *NetworkSettingsRequest_IPv4Settings) GetAddrs() []string { if x != nil { return x.Addrs } return nil } func (x *NetworkSettingsRequest_IPv4Settings) GetSubnetMasks() []string { if x != nil { return x.SubnetMasks } return nil } func (x *NetworkSettingsRequest_IPv4Settings) GetRouter() string { if x != nil { return x.Router } return "" } func (x *NetworkSettingsRequest_IPv4Settings) GetIncludedRoutes() []*NetworkSettingsRequest_IPv4Settings_IPv4Route { if x != nil { return x.IncludedRoutes } return nil } func (x *NetworkSettingsRequest_IPv4Settings) GetExcludedRoutes() []*NetworkSettingsRequest_IPv4Settings_IPv4Route { if x != nil { return x.ExcludedRoutes } return nil } type NetworkSettingsRequest_IPv6Settings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Addrs []string `protobuf:"bytes,1,rep,name=addrs,proto3" json:"addrs,omitempty"` PrefixLengths []uint32 `protobuf:"varint,2,rep,packed,name=prefix_lengths,json=prefixLengths,proto3" json:"prefix_lengths,omitempty"` IncludedRoutes []*NetworkSettingsRequest_IPv6Settings_IPv6Route `protobuf:"bytes,3,rep,name=included_routes,json=includedRoutes,proto3" json:"included_routes,omitempty"` ExcludedRoutes []*NetworkSettingsRequest_IPv6Settings_IPv6Route `protobuf:"bytes,4,rep,name=excluded_routes,json=excludedRoutes,proto3" json:"excluded_routes,omitempty"` } func (x *NetworkSettingsRequest_IPv6Settings) Reset() { *x = NetworkSettingsRequest_IPv6Settings{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NetworkSettingsRequest_IPv6Settings) String() string { return protoimpl.X.MessageStringOf(x) } func (*NetworkSettingsRequest_IPv6Settings) ProtoMessage() {} func (x *NetworkSettingsRequest_IPv6Settings) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[24] 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 NetworkSettingsRequest_IPv6Settings.ProtoReflect.Descriptor instead. func (*NetworkSettingsRequest_IPv6Settings) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{11, 2} } func (x *NetworkSettingsRequest_IPv6Settings) GetAddrs() []string { if x != nil { return x.Addrs } return nil } func (x *NetworkSettingsRequest_IPv6Settings) GetPrefixLengths() []uint32 { if x != nil { return x.PrefixLengths } return nil } func (x *NetworkSettingsRequest_IPv6Settings) GetIncludedRoutes() []*NetworkSettingsRequest_IPv6Settings_IPv6Route { if x != nil { return x.IncludedRoutes } return nil } func (x *NetworkSettingsRequest_IPv6Settings) GetExcludedRoutes() []*NetworkSettingsRequest_IPv6Settings_IPv6Route { if x != nil { return x.ExcludedRoutes } return nil } type NetworkSettingsRequest_IPv4Settings_IPv4Route struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Destination string `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` Mask string `protobuf:"bytes,2,opt,name=mask,proto3" json:"mask,omitempty"` // router is the next-hop router in dotted-decimal format Router string `protobuf:"bytes,3,opt,name=router,proto3" json:"router,omitempty"` } func (x *NetworkSettingsRequest_IPv4Settings_IPv4Route) Reset() { *x = NetworkSettingsRequest_IPv4Settings_IPv4Route{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NetworkSettingsRequest_IPv4Settings_IPv4Route) String() string { return protoimpl.X.MessageStringOf(x) } func (*NetworkSettingsRequest_IPv4Settings_IPv4Route) ProtoMessage() {} func (x *NetworkSettingsRequest_IPv4Settings_IPv4Route) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[25] 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 NetworkSettingsRequest_IPv4Settings_IPv4Route.ProtoReflect.Descriptor instead. func (*NetworkSettingsRequest_IPv4Settings_IPv4Route) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{11, 1, 0} } func (x *NetworkSettingsRequest_IPv4Settings_IPv4Route) GetDestination() string { if x != nil { return x.Destination } return "" } func (x *NetworkSettingsRequest_IPv4Settings_IPv4Route) GetMask() string { if x != nil { return x.Mask } return "" } func (x *NetworkSettingsRequest_IPv4Settings_IPv4Route) GetRouter() string { if x != nil { return x.Router } return "" } type NetworkSettingsRequest_IPv6Settings_IPv6Route struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Destination string `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` PrefixLength uint32 `protobuf:"varint,2,opt,name=prefix_length,json=prefixLength,proto3" json:"prefix_length,omitempty"` // router is the address of the next-hop Router string `protobuf:"bytes,3,opt,name=router,proto3" json:"router,omitempty"` } func (x *NetworkSettingsRequest_IPv6Settings_IPv6Route) Reset() { *x = NetworkSettingsRequest_IPv6Settings_IPv6Route{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NetworkSettingsRequest_IPv6Settings_IPv6Route) String() string { return protoimpl.X.MessageStringOf(x) } func (*NetworkSettingsRequest_IPv6Settings_IPv6Route) ProtoMessage() {} func (x *NetworkSettingsRequest_IPv6Settings_IPv6Route) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[26] 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 NetworkSettingsRequest_IPv6Settings_IPv6Route.ProtoReflect.Descriptor instead. func (*NetworkSettingsRequest_IPv6Settings_IPv6Route) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{11, 2, 0} } func (x *NetworkSettingsRequest_IPv6Settings_IPv6Route) GetDestination() string { if x != nil { return x.Destination } return "" } func (x *NetworkSettingsRequest_IPv6Settings_IPv6Route) GetPrefixLength() uint32 { if x != nil { return x.PrefixLength } return 0 } func (x *NetworkSettingsRequest_IPv6Settings_IPv6Route) GetRouter() string { if x != nil { return x.Router } return "" } // Additional HTTP headers added to all requests type StartRequest_Header struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (x *StartRequest_Header) Reset() { *x = StartRequest_Header{} if protoimpl.UnsafeEnabled { mi := &file_vpn_vpn_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartRequest_Header) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartRequest_Header) ProtoMessage() {} func (x *StartRequest_Header) ProtoReflect() protoreflect.Message { mi := &file_vpn_vpn_proto_msgTypes[27] 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 StartRequest_Header.ProtoReflect.Descriptor instead. func (*StartRequest_Header) Descriptor() ([]byte, []int) { return file_vpn_vpn_proto_rawDescGZIP(), []int{13, 0} } func (x *StartRequest_Header) GetName() string { if x != nil { return x.Name } return "" } func (x *StartRequest_Header) GetValue() string { if x != nil { return x.Value } return "" } var File_vpn_vpn_proto protoreflect.FileDescriptor var file_vpn_vpn_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x76, 0x70, 0x6e, 0x2f, 0x76, 0x70, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x76, 0x70, 0x6e, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3d, 0x0a, 0x03, 0x52, 0x50, 0x43, 0x12, 0x15, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x6f, 0x22, 0x8f, 0x02, 0x0a, 0x0e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x52, 0x50, 0x43, 0x52, 0x03, 0x72, 0x70, 0x63, 0x12, 0x3c, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x42, 0x05, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xa3, 0x02, 0x0a, 0x0d, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x52, 0x50, 0x43, 0x52, 0x03, 0x72, 0x70, 0x63, 0x12, 0x1c, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x32, 0x0a, 0x0b, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x42, 0x05, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xb3, 0x01, 0x0a, 0x0d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x52, 0x50, 0x43, 0x52, 0x03, 0x72, 0x70, 0x63, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xec, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x03, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x52, 0x50, 0x43, 0x52, 0x03, 0x72, 0x70, 0x63, 0x12, 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x04, 0x73, 0x74, 0x6f, 0x70, 0x12, 0x25, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x22, 0x8f, 0x02, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x24, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x31, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4a, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x49, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, 0x05, 0x22, 0x0f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x0a, 0x50, 0x65, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x13, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x12, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x0f, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x12, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x9c, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x22, 0xff, 0x01, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xf0, 0x01, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x07, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x69, 0x64, 0x5f, 0x70, 0x32, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x69, 0x64, 0x50, 0x32, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x72, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x44, 0x65, 0x72, 0x70, 0x12, 0x54, 0x0a, 0x16, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x72, 0x70, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x14, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x44, 0x65, 0x72, 0x70, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x88, 0x01, 0x01, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x72, 0x70, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x22, 0xb5, 0x0a, 0x0a, 0x16, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x4f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, 0x64, 0x6e, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x50, 0x76, 0x34, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x69, 0x70, 0x76, 0x34, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x69, 0x70, 0x76, 0x36, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x50, 0x76, 0x36, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x69, 0x70, 0x76, 0x36, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0xcb, 0x01, 0x0a, 0x0b, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x5f, 0x6e, 0x6f, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x4e, 0x6f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x1a, 0xf4, 0x02, 0x0a, 0x0c, 0x49, 0x50, 0x76, 0x34, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x4d, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x5b, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x50, 0x76, 0x34, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x49, 0x50, 0x76, 0x34, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x50, 0x76, 0x34, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x49, 0x50, 0x76, 0x34, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x1a, 0x59, 0x0a, 0x09, 0x49, 0x50, 0x76, 0x34, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x1a, 0xf1, 0x02, 0x0a, 0x0c, 0x49, 0x50, 0x76, 0x36, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x73, 0x12, 0x5b, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x50, 0x76, 0x36, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x49, 0x50, 0x76, 0x36, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x50, 0x76, 0x36, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x49, 0x50, 0x76, 0x36, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x1a, 0x6a, 0x0a, 0x09, 0x49, 0x50, 0x76, 0x36, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x22, 0x58, 0x0a, 0x17, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xd4, 0x02, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x32, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x32, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4e, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x7a, 0x0a, 0x1d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x12, 0x24, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x54, 0x0a, 0x11, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x0d, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4d, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xe4, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x33, 0x0a, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x52, 0x09, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x0b, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x70, 0x6e, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x4e, 0x0a, 0x09, 0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x47, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x42, 0x39, 0x5a, 0x1d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x70, 0x6e, 0xaa, 0x02, 0x17, 0x43, 0x6f, 0x64, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x2e, 0x56, 0x70, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_vpn_vpn_proto_rawDescOnce sync.Once file_vpn_vpn_proto_rawDescData = file_vpn_vpn_proto_rawDesc ) func file_vpn_vpn_proto_rawDescGZIP() []byte { file_vpn_vpn_proto_rawDescOnce.Do(func() { file_vpn_vpn_proto_rawDescData = protoimpl.X.CompressGZIP(file_vpn_vpn_proto_rawDescData) }) return file_vpn_vpn_proto_rawDescData } var file_vpn_vpn_proto_enumTypes = make([]protoimpl.EnumInfo, 4) var file_vpn_vpn_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_vpn_vpn_proto_goTypes = []interface{}{ (StartProgressStage)(0), // 0: vpn.StartProgressStage (Log_Level)(0), // 1: vpn.Log.Level (Workspace_Status)(0), // 2: vpn.Workspace.Status (Status_Lifecycle)(0), // 3: vpn.Status.Lifecycle (*RPC)(nil), // 4: vpn.RPC (*ManagerMessage)(nil), // 5: vpn.ManagerMessage (*TunnelMessage)(nil), // 6: vpn.TunnelMessage (*ClientMessage)(nil), // 7: vpn.ClientMessage (*ServiceMessage)(nil), // 8: vpn.ServiceMessage (*Log)(nil), // 9: vpn.Log (*GetPeerUpdate)(nil), // 10: vpn.GetPeerUpdate (*PeerUpdate)(nil), // 11: vpn.PeerUpdate (*Workspace)(nil), // 12: vpn.Workspace (*Agent)(nil), // 13: vpn.Agent (*LastPing)(nil), // 14: vpn.LastPing (*NetworkSettingsRequest)(nil), // 15: vpn.NetworkSettingsRequest (*NetworkSettingsResponse)(nil), // 16: vpn.NetworkSettingsResponse (*StartRequest)(nil), // 17: vpn.StartRequest (*StartResponse)(nil), // 18: vpn.StartResponse (*StartProgressDownloadProgress)(nil), // 19: vpn.StartProgressDownloadProgress (*StartProgress)(nil), // 20: vpn.StartProgress (*StopRequest)(nil), // 21: vpn.StopRequest (*StopResponse)(nil), // 22: vpn.StopResponse (*StatusRequest)(nil), // 23: vpn.StatusRequest (*Status)(nil), // 24: vpn.Status (*Log_Field)(nil), // 25: vpn.Log.Field (*NetworkSettingsRequest_DNSSettings)(nil), // 26: vpn.NetworkSettingsRequest.DNSSettings (*NetworkSettingsRequest_IPv4Settings)(nil), // 27: vpn.NetworkSettingsRequest.IPv4Settings (*NetworkSettingsRequest_IPv6Settings)(nil), // 28: vpn.NetworkSettingsRequest.IPv6Settings (*NetworkSettingsRequest_IPv4Settings_IPv4Route)(nil), // 29: vpn.NetworkSettingsRequest.IPv4Settings.IPv4Route (*NetworkSettingsRequest_IPv6Settings_IPv6Route)(nil), // 30: vpn.NetworkSettingsRequest.IPv6Settings.IPv6Route (*StartRequest_Header)(nil), // 31: vpn.StartRequest.Header (*timestamppb.Timestamp)(nil), // 32: google.protobuf.Timestamp (*durationpb.Duration)(nil), // 33: google.protobuf.Duration } var file_vpn_vpn_proto_depIdxs = []int32{ 4, // 0: vpn.ManagerMessage.rpc:type_name -> vpn.RPC 10, // 1: vpn.ManagerMessage.get_peer_update:type_name -> vpn.GetPeerUpdate 16, // 2: vpn.ManagerMessage.network_settings:type_name -> vpn.NetworkSettingsResponse 17, // 3: vpn.ManagerMessage.start:type_name -> vpn.StartRequest 21, // 4: vpn.ManagerMessage.stop:type_name -> vpn.StopRequest 4, // 5: vpn.TunnelMessage.rpc:type_name -> vpn.RPC 9, // 6: vpn.TunnelMessage.log:type_name -> vpn.Log 11, // 7: vpn.TunnelMessage.peer_update:type_name -> vpn.PeerUpdate 15, // 8: vpn.TunnelMessage.network_settings:type_name -> vpn.NetworkSettingsRequest 18, // 9: vpn.TunnelMessage.start:type_name -> vpn.StartResponse 22, // 10: vpn.TunnelMessage.stop:type_name -> vpn.StopResponse 4, // 11: vpn.ClientMessage.rpc:type_name -> vpn.RPC 17, // 12: vpn.ClientMessage.start:type_name -> vpn.StartRequest 21, // 13: vpn.ClientMessage.stop:type_name -> vpn.StopRequest 23, // 14: vpn.ClientMessage.status:type_name -> vpn.StatusRequest 4, // 15: vpn.ServiceMessage.rpc:type_name -> vpn.RPC 18, // 16: vpn.ServiceMessage.start:type_name -> vpn.StartResponse 22, // 17: vpn.ServiceMessage.stop:type_name -> vpn.StopResponse 24, // 18: vpn.ServiceMessage.status:type_name -> vpn.Status 20, // 19: vpn.ServiceMessage.start_progress:type_name -> vpn.StartProgress 1, // 20: vpn.Log.level:type_name -> vpn.Log.Level 25, // 21: vpn.Log.fields:type_name -> vpn.Log.Field 12, // 22: vpn.PeerUpdate.upserted_workspaces:type_name -> vpn.Workspace 13, // 23: vpn.PeerUpdate.upserted_agents:type_name -> vpn.Agent 12, // 24: vpn.PeerUpdate.deleted_workspaces:type_name -> vpn.Workspace 13, // 25: vpn.PeerUpdate.deleted_agents:type_name -> vpn.Agent 2, // 26: vpn.Workspace.status:type_name -> vpn.Workspace.Status 32, // 27: vpn.Agent.last_handshake:type_name -> google.protobuf.Timestamp 14, // 28: vpn.Agent.last_ping:type_name -> vpn.LastPing 33, // 29: vpn.LastPing.latency:type_name -> google.protobuf.Duration 33, // 30: vpn.LastPing.preferred_derp_latency:type_name -> google.protobuf.Duration 26, // 31: vpn.NetworkSettingsRequest.dns_settings:type_name -> vpn.NetworkSettingsRequest.DNSSettings 27, // 32: vpn.NetworkSettingsRequest.ipv4_settings:type_name -> vpn.NetworkSettingsRequest.IPv4Settings 28, // 33: vpn.NetworkSettingsRequest.ipv6_settings:type_name -> vpn.NetworkSettingsRequest.IPv6Settings 31, // 34: vpn.StartRequest.headers:type_name -> vpn.StartRequest.Header 0, // 35: vpn.StartProgress.stage:type_name -> vpn.StartProgressStage 19, // 36: vpn.StartProgress.download_progress:type_name -> vpn.StartProgressDownloadProgress 3, // 37: vpn.Status.lifecycle:type_name -> vpn.Status.Lifecycle 11, // 38: vpn.Status.peer_update:type_name -> vpn.PeerUpdate 29, // 39: vpn.NetworkSettingsRequest.IPv4Settings.included_routes:type_name -> vpn.NetworkSettingsRequest.IPv4Settings.IPv4Route 29, // 40: vpn.NetworkSettingsRequest.IPv4Settings.excluded_routes:type_name -> vpn.NetworkSettingsRequest.IPv4Settings.IPv4Route 30, // 41: vpn.NetworkSettingsRequest.IPv6Settings.included_routes:type_name -> vpn.NetworkSettingsRequest.IPv6Settings.IPv6Route 30, // 42: vpn.NetworkSettingsRequest.IPv6Settings.excluded_routes:type_name -> vpn.NetworkSettingsRequest.IPv6Settings.IPv6Route 43, // [43:43] is the sub-list for method output_type 43, // [43:43] is the sub-list for method input_type 43, // [43:43] is the sub-list for extension type_name 43, // [43:43] is the sub-list for extension extendee 0, // [0:43] is the sub-list for field type_name } func init() { file_vpn_vpn_proto_init() } func file_vpn_vpn_proto_init() { if File_vpn_vpn_proto != nil { return } if !protoimpl.UnsafeEnabled { file_vpn_vpn_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RPC); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ManagerMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TunnelMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClientMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ServiceMessage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Log); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetPeerUpdate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PeerUpdate); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Workspace); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Agent); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LastPing); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkSettingsRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkSettingsResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartProgressDownloadProgress); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartProgress); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StopRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StopResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Status); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Log_Field); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkSettingsRequest_DNSSettings); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkSettingsRequest_IPv4Settings); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkSettingsRequest_IPv6Settings); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkSettingsRequest_IPv4Settings_IPv4Route); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkSettingsRequest_IPv6Settings_IPv6Route); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_vpn_vpn_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartRequest_Header); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_vpn_vpn_proto_msgTypes[1].OneofWrappers = []interface{}{ (*ManagerMessage_GetPeerUpdate)(nil), (*ManagerMessage_NetworkSettings)(nil), (*ManagerMessage_Start)(nil), (*ManagerMessage_Stop)(nil), } file_vpn_vpn_proto_msgTypes[2].OneofWrappers = []interface{}{ (*TunnelMessage_Log)(nil), (*TunnelMessage_PeerUpdate)(nil), (*TunnelMessage_NetworkSettings)(nil), (*TunnelMessage_Start)(nil), (*TunnelMessage_Stop)(nil), } file_vpn_vpn_proto_msgTypes[3].OneofWrappers = []interface{}{ (*ClientMessage_Start)(nil), (*ClientMessage_Stop)(nil), (*ClientMessage_Status)(nil), } file_vpn_vpn_proto_msgTypes[4].OneofWrappers = []interface{}{ (*ServiceMessage_Start)(nil), (*ServiceMessage_Stop)(nil), (*ServiceMessage_Status)(nil), (*ServiceMessage_StartProgress)(nil), } file_vpn_vpn_proto_msgTypes[9].OneofWrappers = []interface{}{} file_vpn_vpn_proto_msgTypes[10].OneofWrappers = []interface{}{} file_vpn_vpn_proto_msgTypes[15].OneofWrappers = []interface{}{} file_vpn_vpn_proto_msgTypes[16].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_vpn_vpn_proto_rawDesc, NumEnums: 4, NumMessages: 28, NumExtensions: 0, NumServices: 0, }, GoTypes: file_vpn_vpn_proto_goTypes, DependencyIndexes: file_vpn_vpn_proto_depIdxs, EnumInfos: file_vpn_vpn_proto_enumTypes, MessageInfos: file_vpn_vpn_proto_msgTypes, }.Build() File_vpn_vpn_proto = out.File file_vpn_vpn_proto_rawDesc = nil file_vpn_vpn_proto_goTypes = nil file_vpn_vpn_proto_depIdxs = nil }