mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-01-31 07:55:23 +00:00
Implement adding gws to multicast-group + Class-C scheduling config.
This makes it possible to add gateways to a multicast-group, which in case configured will always be used for transmitting the multicast downlinks. This also moves the multicast class-c scheduling to the multicast-group configuration. Options are delay between multiple gateways, or GPS time synchronized transmission.
This commit is contained in:
parent
8d34bb0d0c
commit
f657c3e971
7
api/go/api/application.pb.go
vendored
7
api/go/api/application.pb.go
vendored
@ -5568,13 +5568,14 @@ var file_api_application_proto_rawDesc = []byte{
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x73, 0x2f, 0x6d, 0x71, 0x74, 0x74, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
|
||||
0x63, 0x61, 0x74, 0x65, 0x42, 0x57, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70,
|
||||
0x63, 0x61, 0x74, 0x65, 0x42, 0x68, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70,
|
||||
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69,
|
||||
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67,
|
||||
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73,
|
||||
0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f,
|
||||
0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e,
|
||||
0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
7
api/go/api/device.pb.go
vendored
7
api/go/api/device.pb.go
vendored
@ -2714,13 +2714,14 @@ var file_api_device_proto_rawDesc = []byte{
|
||||
0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||
0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
|
||||
0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f,
|
||||
0x71, 0x75, 0x65, 0x75, 0x65, 0x42, 0x52, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72,
|
||||
0x71, 0x75, 0x65, 0x75, 0x65, 0x42, 0x63, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72,
|
||||
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x44, 0x65, 0x76, 0x69,
|
||||
0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75,
|
||||
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
|
||||
0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f,
|
||||
0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x33,
|
||||
0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72,
|
||||
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
7
api/go/api/device_profile.pb.go
vendored
7
api/go/api/device_profile.pb.go
vendored
@ -1443,13 +1443,14 @@ var file_api_device_profile_proto_rawDesc = []byte{
|
||||
0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69,
|
||||
0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73,
|
||||
0x2f, 0x61, 0x64, 0x72, 0x2d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x42,
|
||||
0x59, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
|
||||
0x6a, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
|
||||
0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
|
||||
0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68,
|
||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
|
||||
0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69,
|
||||
0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x33,
|
||||
0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69,
|
||||
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
5
api/go/api/device_profile_template.pb.go
vendored
5
api/go/api/device_profile_template.pb.go
vendored
@ -1088,13 +1088,14 @@ var file_api_device_profile_template_proto_rawDesc = []byte{
|
||||
0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82,
|
||||
0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69,
|
||||
0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c,
|
||||
0x61, 0x74, 0x65, 0x73, 0x42, 0x61, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70,
|
||||
0x61, 0x74, 0x65, 0x73, 0x42, 0x72, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70,
|
||||
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x1a, 0x44, 0x65, 0x76, 0x69, 0x63,
|
||||
0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
|
||||
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63,
|
||||
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f,
|
||||
0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73,
|
||||
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
5
api/go/api/frame_log.pb.go
vendored
5
api/go/api/frame_log.pb.go
vendored
@ -305,13 +305,14 @@ var file_api_frame_log_proto_rawDesc = []byte{
|
||||
0x76, 0x45, 0x75, 0x69, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78,
|
||||
0x74, 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x09,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d,
|
||||
0x61, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x42, 0x54, 0x0a, 0x11, 0x69, 0x6f,
|
||||
0x61, 0x63, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x42, 0x65, 0x0a, 0x11, 0x69, 0x6f,
|
||||
0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42,
|
||||
0x0d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x4c, 0x6f, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
|
||||
0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69,
|
||||
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
|
||||
0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69,
|
||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70,
|
||||
0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
259
api/go/api/gateway.pb.go
vendored
259
api/go/api/gateway.pb.go
vendored
@ -601,6 +601,8 @@ type ListGatewaysRequest struct {
|
||||
// Tenant ID (UUID) to filter gateways on.
|
||||
// To list all gateways as a global admin user, this field can be left blank.
|
||||
TenantId string `protobuf:"bytes,4,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"`
|
||||
// Multicast-group ID (UUID) to filter gateways on.
|
||||
MulticastGroupId string `protobuf:"bytes,5,opt,name=multicast_group_id,json=multicastGroupId,proto3" json:"multicast_group_id,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ListGatewaysRequest) Reset() {
|
||||
@ -663,6 +665,13 @@ func (x *ListGatewaysRequest) GetTenantId() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ListGatewaysRequest) GetMulticastGroupId() string {
|
||||
if x != nil {
|
||||
return x.MulticastGroupId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type ListGatewaysResponse struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@ -1121,135 +1130,139 @@ var file_api_gateway_proto_rawDesc = []byte{
|
||||
0x77, 0x61, 0x79, 0x22, 0x35, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x61, 0x74,
|
||||
0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67,
|
||||
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x13, 0x4c, 0x69,
|
||||
0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
|
||||
0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65,
|
||||
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12,
|
||||
0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e,
|
||||
0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61,
|
||||
0x6e, 0x74, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65,
|
||||
0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
|
||||
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a,
|
||||
0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e,
|
||||
0x61, 0x70, 0x69, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x49,
|
||||
0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x48, 0x0a, 0x27, 0x47,
|
||||
0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6c,
|
||||
0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52,
|
||||
0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0xa6, 0x01, 0x0a, 0x13, 0x4c,
|
||||
0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73,
|
||||
0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74,
|
||||
0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61,
|
||||
0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e,
|
||||
0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61,
|
||||
0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75,
|
||||
0x70, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77,
|
||||
0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74,
|
||||
0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
|
||||
0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x06,
|
||||
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74,
|
||||
0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x48, 0x0a, 0x27, 0x47, 0x65,
|
||||
0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6c, 0x69,
|
||||
0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
|
||||
0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77,
|
||||
0x61, 0x79, 0x49, 0x64, 0x22, 0xb2, 0x01, 0x0a, 0x28, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
|
||||
0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65,
|
||||
0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6c, 0x73, 0x43, 0x65, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x07,
|
||||
0x74, 0x6c, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74,
|
||||
0x6c, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x12, 0x39,
|
||||
0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 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, 0x09,
|
||||
0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x22, 0xd0, 0x01, 0x0a, 0x18, 0x47, 0x65,
|
||||
0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
|
||||
0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65,
|
||||
0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0xb2, 0x01, 0x0a, 0x28, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
|
||||
0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43,
|
||||
0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6c, 0x73, 0x43, 0x65, 0x72, 0x74, 0x12, 0x17, 0x0a,
|
||||
0x07, 0x74, 0x6c, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
|
||||
0x74, 0x6c, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72,
|
||||
0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x12,
|
||||
0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 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,
|
||||
0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x22, 0xd0, 0x01, 0x0a, 0x18, 0x47,
|
||||
0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77,
|
||||
0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74,
|
||||
0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18,
|
||||
0x02, 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, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18,
|
||||
0x03, 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, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67,
|
||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x52, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb0, 0x03,
|
||||
0x0a, 0x19, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x72,
|
||||
0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x0a, 0x72,
|
||||
0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52,
|
||||
0x09, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x0a, 0x74, 0x78,
|
||||
0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e,
|
||||
0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02,
|
||||
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, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03,
|
||||
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, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
|
||||
0x0b, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb0, 0x03, 0x0a,
|
||||
0x19, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69,
|
||||
0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x0a, 0x72, 0x78,
|
||||
0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e,
|
||||
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x09,
|
||||
0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x13, 0x74, 0x78, 0x5f,
|
||||
0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72, 0x65, 0x71,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x10, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74,
|
||||
0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x13, 0x72, 0x78, 0x5f, 0x70,
|
||||
0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x0a, 0x74, 0x78, 0x5f,
|
||||
0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x09, 0x74,
|
||||
0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x13, 0x74, 0x78, 0x5f, 0x70,
|
||||
0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x18,
|
||||
0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
|
||||
0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x10, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
|
||||
0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x11, 0x74, 0x78, 0x5f, 0x70, 0x61,
|
||||
0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72,
|
||||
0x69, 0x63, 0x52, 0x0e, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72,
|
||||
0x44, 0x72, 0x12, 0x39, 0x0a, 0x11, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
|
||||
0x5f, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x0e, 0x72,
|
||||
0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x44, 0x72, 0x12, 0x41, 0x0a,
|
||||
0x15, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f,
|
||||
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x12, 0x74, 0x78,
|
||||
0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x2a, 0x37, 0x0a, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||
0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x45, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x45, 0x4e, 0x10, 0x00,
|
||||
0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07,
|
||||
0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x32, 0x91, 0x06, 0x0a, 0x0e, 0x47, 0x61,
|
||||
0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x06,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65,
|
||||
0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
||||
0x12, 0x22, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73,
|
||||
0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69,
|
||||
0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65,
|
||||
0x77, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4,
|
||||
0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
|
||||
0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12,
|
||||
0x6a, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
||||
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3,
|
||||
0xe4, 0x93, 0x02, 0x27, 0x1a, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77,
|
||||
0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x67, 0x61, 0x74,
|
||||
0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x06, 0x44,
|
||||
0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65,
|
||||
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
|
||||
0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x10, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
|
||||
0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x13, 0x72, 0x78, 0x5f, 0x70, 0x61,
|
||||
0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x18, 0x04,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x52, 0x10, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50,
|
||||
0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x11, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63,
|
||||
0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69,
|
||||
0x63, 0x52, 0x0e, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x44,
|
||||
0x72, 0x12, 0x39, 0x0a, 0x11, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f,
|
||||
0x70, 0x65, 0x72, 0x5f, 0x64, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x0e, 0x72, 0x78,
|
||||
0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x44, 0x72, 0x12, 0x41, 0x0a, 0x15,
|
||||
0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73,
|
||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x12, 0x74, 0x78, 0x50,
|
||||
0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a,
|
||||
0x37, 0x0a, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
|
||||
0x0e, 0x0a, 0x0a, 0x4e, 0x45, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x45, 0x4e, 0x10, 0x00, 0x12,
|
||||
0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4f,
|
||||
0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x32, 0x91, 0x06, 0x0a, 0x0e, 0x47, 0x61, 0x74,
|
||||
0x65, 0x77, 0x61, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x06, 0x43,
|
||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61,
|
||||
0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
||||
0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c,
|
||||
0x2a, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f,
|
||||
0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x52, 0x0a, 0x04,
|
||||
0x4c, 0x69, 0x73, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47,
|
||||
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19,
|
||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
|
||||
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
||||
0x0f, 0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73,
|
||||
0x12, 0xb1, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69,
|
||||
0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2c,
|
||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74,
|
||||
0x65, 0x77, 0x61, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
|
||||
0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77,
|
||||
0x61, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
|
||||
0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4,
|
||||
0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
|
||||
0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
|
||||
0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
|
||||
0x63, 0x61, 0x74, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69,
|
||||
0x63, 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65,
|
||||
0x77, 0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77,
|
||||
0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f,
|
||||
0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
|
||||
0x79, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x53, 0x0a,
|
||||
0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63,
|
||||
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73,
|
||||
0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61,
|
||||
0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12,
|
||||
0x22, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x3a,
|
||||
0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
||||
0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77,
|
||||
0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93,
|
||||
0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
|
||||
0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x6a,
|
||||
0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55,
|
||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2d, 0x82, 0xd3, 0xe4,
|
||||
0x93, 0x02, 0x27, 0x1a, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
|
||||
0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x67, 0x61, 0x74, 0x65,
|
||||
0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x5f, 0x0a, 0x06, 0x44, 0x65,
|
||||
0x6c, 0x65, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
|
||||
0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||
0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a,
|
||||
0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b,
|
||||
0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x52, 0x0a, 0x04, 0x4c,
|
||||
0x69, 0x73, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61,
|
||||
0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e,
|
||||
0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f,
|
||||
0x12, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12,
|
||||
0xb1, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65,
|
||||
0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x2e,
|
||||
0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65,
|
||||
0x77, 0x61, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
|
||||
0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x61, 0x70,
|
||||
0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
|
||||
0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
|
||||
0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93,
|
||||
0x02, 0x31, 0x22, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
|
||||
0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67,
|
||||
0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
|
||||
0x61, 0x74, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||
0x73, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77,
|
||||
0x61, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
|
||||
0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67,
|
||||
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x2f, 0x7b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
|
||||
0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x64, 0x0a, 0x11,
|
||||
0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70,
|
||||
0x69, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
|
||||
0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68,
|
||||
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
|
||||
0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70,
|
||||
0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41,
|
||||
0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
|
5
api/go/api/internal.pb.go
vendored
5
api/go/api/internal.pb.go
vendored
@ -2241,13 +2241,14 @@ var file_api_internal_proto_rawDesc = []byte{
|
||||
0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
||||
0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x54, 0x0a, 0x11, 0x69, 0x6f,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x65, 0x0a, 0x11, 0x69, 0x6f,
|
||||
0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42,
|
||||
0x0d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
|
||||
0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69,
|
||||
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
|
||||
0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69,
|
||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70,
|
||||
0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
822
api/go/api/multicast_group.pb.go
vendored
822
api/go/api/multicast_group.pb.go
vendored
File diff suppressed because it is too large
Load Diff
80
api/go/api/multicast_group_grpc.pb.go
vendored
80
api/go/api/multicast_group_grpc.pb.go
vendored
@ -37,7 +37,11 @@ type MulticastGroupServiceClient interface {
|
||||
AddDevice(ctx context.Context, in *AddDeviceToMulticastGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
// Remove a device from the multicast group.
|
||||
RemoveDevice(ctx context.Context, in *RemoveDeviceFromMulticastGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
// Add the given item to the multcast group queue.
|
||||
// Add a gateway to the multicast group.
|
||||
AddGateway(ctx context.Context, in *AddGatewayToMulticastGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
// Remove a gateway from the multicast group.
|
||||
RemoveGateway(ctx context.Context, in *RemoveGatewayFromMulticastGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
// Add the given item to the multicast group queue.
|
||||
Enqueue(ctx context.Context, in *EnqueueMulticastGroupQueueItemRequest, opts ...grpc.CallOption) (*EnqueueMulticastGroupQueueItemResponse, error)
|
||||
// Flush the queue for the given multicast group.
|
||||
FlushQueue(ctx context.Context, in *FlushMulticastGroupQueueRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
@ -116,6 +120,24 @@ func (c *multicastGroupServiceClient) RemoveDevice(ctx context.Context, in *Remo
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *multicastGroupServiceClient) AddGateway(ctx context.Context, in *AddGatewayToMulticastGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
|
||||
out := new(emptypb.Empty)
|
||||
err := c.cc.Invoke(ctx, "/api.MulticastGroupService/AddGateway", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *multicastGroupServiceClient) RemoveGateway(ctx context.Context, in *RemoveGatewayFromMulticastGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
|
||||
out := new(emptypb.Empty)
|
||||
err := c.cc.Invoke(ctx, "/api.MulticastGroupService/RemoveGateway", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *multicastGroupServiceClient) Enqueue(ctx context.Context, in *EnqueueMulticastGroupQueueItemRequest, opts ...grpc.CallOption) (*EnqueueMulticastGroupQueueItemResponse, error) {
|
||||
out := new(EnqueueMulticastGroupQueueItemResponse)
|
||||
err := c.cc.Invoke(ctx, "/api.MulticastGroupService/Enqueue", in, out, opts...)
|
||||
@ -161,7 +183,11 @@ type MulticastGroupServiceServer interface {
|
||||
AddDevice(context.Context, *AddDeviceToMulticastGroupRequest) (*emptypb.Empty, error)
|
||||
// Remove a device from the multicast group.
|
||||
RemoveDevice(context.Context, *RemoveDeviceFromMulticastGroupRequest) (*emptypb.Empty, error)
|
||||
// Add the given item to the multcast group queue.
|
||||
// Add a gateway to the multicast group.
|
||||
AddGateway(context.Context, *AddGatewayToMulticastGroupRequest) (*emptypb.Empty, error)
|
||||
// Remove a gateway from the multicast group.
|
||||
RemoveGateway(context.Context, *RemoveGatewayFromMulticastGroupRequest) (*emptypb.Empty, error)
|
||||
// Add the given item to the multicast group queue.
|
||||
Enqueue(context.Context, *EnqueueMulticastGroupQueueItemRequest) (*EnqueueMulticastGroupQueueItemResponse, error)
|
||||
// Flush the queue for the given multicast group.
|
||||
FlushQueue(context.Context, *FlushMulticastGroupQueueRequest) (*emptypb.Empty, error)
|
||||
@ -195,6 +221,12 @@ func (UnimplementedMulticastGroupServiceServer) AddDevice(context.Context, *AddD
|
||||
func (UnimplementedMulticastGroupServiceServer) RemoveDevice(context.Context, *RemoveDeviceFromMulticastGroupRequest) (*emptypb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method RemoveDevice not implemented")
|
||||
}
|
||||
func (UnimplementedMulticastGroupServiceServer) AddGateway(context.Context, *AddGatewayToMulticastGroupRequest) (*emptypb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method AddGateway not implemented")
|
||||
}
|
||||
func (UnimplementedMulticastGroupServiceServer) RemoveGateway(context.Context, *RemoveGatewayFromMulticastGroupRequest) (*emptypb.Empty, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method RemoveGateway not implemented")
|
||||
}
|
||||
func (UnimplementedMulticastGroupServiceServer) Enqueue(context.Context, *EnqueueMulticastGroupQueueItemRequest) (*EnqueueMulticastGroupQueueItemResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method Enqueue not implemented")
|
||||
}
|
||||
@ -343,6 +375,42 @@ func _MulticastGroupService_RemoveDevice_Handler(srv interface{}, ctx context.Co
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _MulticastGroupService_AddGateway_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(AddGatewayToMulticastGroupRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(MulticastGroupServiceServer).AddGateway(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/api.MulticastGroupService/AddGateway",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(MulticastGroupServiceServer).AddGateway(ctx, req.(*AddGatewayToMulticastGroupRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _MulticastGroupService_RemoveGateway_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(RemoveGatewayFromMulticastGroupRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(MulticastGroupServiceServer).RemoveGateway(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/api.MulticastGroupService/RemoveGateway",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(MulticastGroupServiceServer).RemoveGateway(ctx, req.(*RemoveGatewayFromMulticastGroupRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _MulticastGroupService_Enqueue_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(EnqueueMulticastGroupQueueItemRequest)
|
||||
if err := dec(in); err != nil {
|
||||
@ -432,6 +500,14 @@ var MulticastGroupService_ServiceDesc = grpc.ServiceDesc{
|
||||
MethodName: "RemoveDevice",
|
||||
Handler: _MulticastGroupService_RemoveDevice_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "AddGateway",
|
||||
Handler: _MulticastGroupService_AddGateway_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "RemoveGateway",
|
||||
Handler: _MulticastGroupService_RemoveGateway_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "Enqueue",
|
||||
Handler: _MulticastGroupService_Enqueue_Handler,
|
||||
|
5
api/go/api/request_log.pb.go
vendored
5
api/go/api/request_log.pb.go
vendored
@ -109,13 +109,14 @@ var file_api_request_log_proto_rawDesc = []byte{
|
||||
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
|
||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
|
||||
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x56, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x67, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63,
|
||||
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0f, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x6f, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
|
||||
0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69,
|
||||
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
|
||||
0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69,
|
||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70,
|
||||
0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
5
api/go/api/tenant.pb.go
vendored
5
api/go/api/tenant.pb.go
vendored
@ -1518,13 +1518,14 @@ var file_api_tenant_proto_rawDesc = []byte{
|
||||
0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e,
|
||||
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65,
|
||||
0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x42, 0x52,
|
||||
0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x42, 0x63,
|
||||
0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e,
|
||||
0x61, 0x70, 0x69, 0x42, 0x0b, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63,
|
||||
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73,
|
||||
0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61,
|
||||
0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e,
|
||||
0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
7
api/go/api/user.pb.go
vendored
7
api/go/api/user.pb.go
vendored
@ -891,13 +891,14 @@ var file_api_user_proto_rawDesc = []byte{
|
||||
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
|
||||
0x70, 0x74, 0x79, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70,
|
||||
0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64,
|
||||
0x7d, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3a, 0x01, 0x2a, 0x42, 0x50, 0x0a,
|
||||
0x7d, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3a, 0x01, 0x2a, 0x42, 0x61, 0x0a,
|
||||
0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x42, 0x09, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
|
||||
0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72,
|
||||
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
|
||||
0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x62,
|
||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa,
|
||||
0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69,
|
||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
5
api/go/common/common.pb.go
vendored
5
api/go/common/common.pb.go
vendored
@ -894,13 +894,14 @@ var file_common_common_proto_rawDesc = []byte{
|
||||
0x0a, 0x05, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x10, 0x02, 0x2a, 0x32, 0x0a, 0x0a, 0x4d, 0x65, 0x74,
|
||||
0x72, 0x69, 0x63, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54,
|
||||
0x45, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45,
|
||||
0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, 0x45, 0x10, 0x02, 0x42, 0x55, 0x0a,
|
||||
0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, 0x45, 0x10, 0x02, 0x42, 0x69, 0x0a,
|
||||
0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
|
||||
0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68,
|
||||
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
|
||||
0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
|
||||
0x6b, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
7
api/go/gw/gw.pb.go
vendored
7
api/go/gw/gw.pb.go
vendored
@ -3918,13 +3918,14 @@ var file_gw_gw_proto_rawDesc = []byte{
|
||||
0x47, 0x50, 0x53, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x08, 0x12, 0x0e,
|
||||
0x0a, 0x0a, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x09, 0x12, 0x12,
|
||||
0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52,
|
||||
0x10, 0x0a, 0x42, 0x55, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
|
||||
0x10, 0x0a, 0x42, 0x6a, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
|
||||
0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65,
|
||||
0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68,
|
||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
|
||||
0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69,
|
||||
0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x67, 0x77, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x33,
|
||||
0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x67, 0x77, 0xaa, 0x02, 0x12, 0x43, 0x68, 0x69, 0x72,
|
||||
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x62, 0x06,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
18
api/go/integration/integration.pb.go
vendored
18
api/go/integration/integration.pb.go
vendored
@ -1392,14 +1392,16 @@ var file_integration_integration_proto_rawDesc = []byte{
|
||||
0x0a, 0x1b, 0x55, 0x50, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x46, 0x5f, 0x43, 0x4e, 0x54, 0x5f, 0x52,
|
||||
0x45, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x07, 0x12,
|
||||
0x14, 0x0a, 0x10, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x47, 0x41, 0x54, 0x45,
|
||||
0x57, 0x41, 0x59, 0x10, 0x08, 0x42, 0x68, 0x0a, 0x1d, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72,
|
||||
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67,
|
||||
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68,
|
||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x72, 0x6f, 0x63, 0x61, 0x61, 0x72, 0x2f, 0x63,
|
||||
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f,
|
||||
0x2f, 0x76, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62,
|
||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x57, 0x41, 0x59, 0x10, 0x08, 0x42, 0x81, 0x01, 0x0a, 0x1d, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69,
|
||||
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x6e, 0x74, 0x65,
|
||||
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x33, 0x67, 0x69, 0x74,
|
||||
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x72, 0x6f, 0x63, 0x61, 0x61, 0x72, 0x2f,
|
||||
0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67,
|
||||
0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0xaa, 0x02, 0x16, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x49, 0x6e,
|
||||
0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
5
api/go/meta/meta.pb.go
vendored
5
api/go/meta/meta.pb.go
vendored
@ -287,13 +287,14 @@ var file_meta_meta_proto_rawDesc = []byte{
|
||||
0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x54, 0x79, 0x70,
|
||||
0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d,
|
||||
0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x42, 0x56, 0x0a,
|
||||
0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x42, 0x68, 0x0a,
|
||||
0x16, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x42, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x50, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72,
|
||||
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34,
|
||||
0x2f, 0x6d, 0x65, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x2f, 0x6d, 0x65, 0x74, 0x61, 0xaa, 0x02, 0x0f, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
|
||||
0x63, 0x6b, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
4
api/grpc-web/api/gateway_pb.d.ts
vendored
4
api/grpc-web/api/gateway_pb.d.ts
vendored
@ -243,6 +243,9 @@ export class ListGatewaysRequest extends jspb.Message {
|
||||
getTenantId(): string;
|
||||
setTenantId(value: string): ListGatewaysRequest;
|
||||
|
||||
getMulticastGroupId(): string;
|
||||
setMulticastGroupId(value: string): ListGatewaysRequest;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): ListGatewaysRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: ListGatewaysRequest): ListGatewaysRequest.AsObject;
|
||||
@ -257,6 +260,7 @@ export namespace ListGatewaysRequest {
|
||||
offset: number,
|
||||
search: string,
|
||||
tenantId: string,
|
||||
multicastGroupId: string,
|
||||
}
|
||||
}
|
||||
|
||||
|
32
api/grpc-web/api/gateway_pb.js
vendored
32
api/grpc-web/api/gateway_pb.js
vendored
@ -2062,7 +2062,8 @@ proto.api.ListGatewaysRequest.toObject = function(includeInstance, msg) {
|
||||
limit: jspb.Message.getFieldWithDefault(msg, 1, 0),
|
||||
offset: jspb.Message.getFieldWithDefault(msg, 2, 0),
|
||||
search: jspb.Message.getFieldWithDefault(msg, 3, ""),
|
||||
tenantId: jspb.Message.getFieldWithDefault(msg, 4, "")
|
||||
tenantId: jspb.Message.getFieldWithDefault(msg, 4, ""),
|
||||
multicastGroupId: jspb.Message.getFieldWithDefault(msg, 5, "")
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
@ -2115,6 +2116,10 @@ proto.api.ListGatewaysRequest.deserializeBinaryFromReader = function(msg, reader
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setTenantId(value);
|
||||
break;
|
||||
case 5:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setMulticastGroupId(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
@ -2172,6 +2177,13 @@ proto.api.ListGatewaysRequest.serializeBinaryToWriter = function(message, writer
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getMulticastGroupId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
5,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -2247,6 +2259,24 @@ proto.api.ListGatewaysRequest.prototype.setTenantId = function(value) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string multicast_group_id = 5;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.ListGatewaysRequest.prototype.getMulticastGroupId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.ListGatewaysRequest} returns this
|
||||
*/
|
||||
proto.api.ListGatewaysRequest.prototype.setMulticastGroupId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 5, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* List of repeated fields within this message type.
|
||||
|
@ -58,6 +58,20 @@ export class MulticastGroupServiceClient {
|
||||
response: google_protobuf_empty_pb.Empty) => void
|
||||
): grpcWeb.ClientReadableStream<google_protobuf_empty_pb.Empty>;
|
||||
|
||||
addGateway(
|
||||
request: api_multicast_group_pb.AddGatewayToMulticastGroupRequest,
|
||||
metadata: grpcWeb.Metadata | undefined,
|
||||
callback: (err: grpcWeb.RpcError,
|
||||
response: google_protobuf_empty_pb.Empty) => void
|
||||
): grpcWeb.ClientReadableStream<google_protobuf_empty_pb.Empty>;
|
||||
|
||||
removeGateway(
|
||||
request: api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest,
|
||||
metadata: grpcWeb.Metadata | undefined,
|
||||
callback: (err: grpcWeb.RpcError,
|
||||
response: google_protobuf_empty_pb.Empty) => void
|
||||
): grpcWeb.ClientReadableStream<google_protobuf_empty_pb.Empty>;
|
||||
|
||||
enqueue(
|
||||
request: api_multicast_group_pb.EnqueueMulticastGroupQueueItemRequest,
|
||||
metadata: grpcWeb.Metadata | undefined,
|
||||
@ -121,6 +135,16 @@ export class MulticastGroupServicePromiseClient {
|
||||
metadata?: grpcWeb.Metadata
|
||||
): Promise<google_protobuf_empty_pb.Empty>;
|
||||
|
||||
addGateway(
|
||||
request: api_multicast_group_pb.AddGatewayToMulticastGroupRequest,
|
||||
metadata?: grpcWeb.Metadata
|
||||
): Promise<google_protobuf_empty_pb.Empty>;
|
||||
|
||||
removeGateway(
|
||||
request: api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest,
|
||||
metadata?: grpcWeb.Metadata
|
||||
): Promise<google_protobuf_empty_pb.Empty>;
|
||||
|
||||
enqueue(
|
||||
request: api_multicast_group_pb.EnqueueMulticastGroupQueueItemRequest,
|
||||
metadata?: grpcWeb.Metadata
|
||||
|
122
api/grpc-web/api/multicast_group_grpc_web_pb.js
vendored
122
api/grpc-web/api/multicast_group_grpc_web_pb.js
vendored
@ -509,6 +509,128 @@ proto.api.MulticastGroupServicePromiseClient.prototype.removeDevice =
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {!grpc.web.MethodDescriptor<
|
||||
* !proto.api.AddGatewayToMulticastGroupRequest,
|
||||
* !proto.google.protobuf.Empty>}
|
||||
*/
|
||||
const methodDescriptor_MulticastGroupService_AddGateway = new grpc.web.MethodDescriptor(
|
||||
'/api.MulticastGroupService/AddGateway',
|
||||
grpc.web.MethodType.UNARY,
|
||||
proto.api.AddGatewayToMulticastGroupRequest,
|
||||
google_protobuf_empty_pb.Empty,
|
||||
/**
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} request
|
||||
* @return {!Uint8Array}
|
||||
*/
|
||||
function(request) {
|
||||
return request.serializeBinary();
|
||||
},
|
||||
google_protobuf_empty_pb.Empty.deserializeBinary
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} request The
|
||||
* request proto
|
||||
* @param {?Object<string, string>} metadata User defined
|
||||
* call metadata
|
||||
* @param {function(?grpc.web.RpcError, ?proto.google.protobuf.Empty)}
|
||||
* callback The callback function(error, response)
|
||||
* @return {!grpc.web.ClientReadableStream<!proto.google.protobuf.Empty>|undefined}
|
||||
* The XHR Node Readable Stream
|
||||
*/
|
||||
proto.api.MulticastGroupServiceClient.prototype.addGateway =
|
||||
function(request, metadata, callback) {
|
||||
return this.client_.rpcCall(this.hostname_ +
|
||||
'/api.MulticastGroupService/AddGateway',
|
||||
request,
|
||||
metadata || {},
|
||||
methodDescriptor_MulticastGroupService_AddGateway,
|
||||
callback);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} request The
|
||||
* request proto
|
||||
* @param {?Object<string, string>=} metadata User defined
|
||||
* call metadata
|
||||
* @return {!Promise<!proto.google.protobuf.Empty>}
|
||||
* Promise that resolves to the response
|
||||
*/
|
||||
proto.api.MulticastGroupServicePromiseClient.prototype.addGateway =
|
||||
function(request, metadata) {
|
||||
return this.client_.unaryCall(this.hostname_ +
|
||||
'/api.MulticastGroupService/AddGateway',
|
||||
request,
|
||||
metadata || {},
|
||||
methodDescriptor_MulticastGroupService_AddGateway);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {!grpc.web.MethodDescriptor<
|
||||
* !proto.api.RemoveGatewayFromMulticastGroupRequest,
|
||||
* !proto.google.protobuf.Empty>}
|
||||
*/
|
||||
const methodDescriptor_MulticastGroupService_RemoveGateway = new grpc.web.MethodDescriptor(
|
||||
'/api.MulticastGroupService/RemoveGateway',
|
||||
grpc.web.MethodType.UNARY,
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest,
|
||||
google_protobuf_empty_pb.Empty,
|
||||
/**
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} request
|
||||
* @return {!Uint8Array}
|
||||
*/
|
||||
function(request) {
|
||||
return request.serializeBinary();
|
||||
},
|
||||
google_protobuf_empty_pb.Empty.deserializeBinary
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} request The
|
||||
* request proto
|
||||
* @param {?Object<string, string>} metadata User defined
|
||||
* call metadata
|
||||
* @param {function(?grpc.web.RpcError, ?proto.google.protobuf.Empty)}
|
||||
* callback The callback function(error, response)
|
||||
* @return {!grpc.web.ClientReadableStream<!proto.google.protobuf.Empty>|undefined}
|
||||
* The XHR Node Readable Stream
|
||||
*/
|
||||
proto.api.MulticastGroupServiceClient.prototype.removeGateway =
|
||||
function(request, metadata, callback) {
|
||||
return this.client_.rpcCall(this.hostname_ +
|
||||
'/api.MulticastGroupService/RemoveGateway',
|
||||
request,
|
||||
metadata || {},
|
||||
methodDescriptor_MulticastGroupService_RemoveGateway,
|
||||
callback);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} request The
|
||||
* request proto
|
||||
* @param {?Object<string, string>=} metadata User defined
|
||||
* call metadata
|
||||
* @return {!Promise<!proto.google.protobuf.Empty>}
|
||||
* Promise that resolves to the response
|
||||
*/
|
||||
proto.api.MulticastGroupServicePromiseClient.prototype.removeGateway =
|
||||
function(request, metadata) {
|
||||
return this.client_.unaryCall(this.hostname_ +
|
||||
'/api.MulticastGroupService/RemoveGateway',
|
||||
request,
|
||||
metadata || {},
|
||||
methodDescriptor_MulticastGroupService_RemoveGateway);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {!grpc.web.MethodDescriptor<
|
||||
|
52
api/grpc-web/api/multicast_group_pb.d.ts
vendored
52
api/grpc-web/api/multicast_group_pb.d.ts
vendored
@ -43,6 +43,9 @@ export class MulticastGroup extends jspb.Message {
|
||||
getClassBPingSlotPeriod(): number;
|
||||
setClassBPingSlotPeriod(value: number): MulticastGroup;
|
||||
|
||||
getClassCSchedulingType(): MulticastGroupSchedulingType;
|
||||
setClassCSchedulingType(value: MulticastGroupSchedulingType): MulticastGroup;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): MulticastGroup.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: MulticastGroup): MulticastGroup.AsObject;
|
||||
@ -65,6 +68,7 @@ export namespace MulticastGroup {
|
||||
dr: number,
|
||||
frequency: number,
|
||||
classBPingSlotPeriod: number,
|
||||
classCSchedulingType: MulticastGroupSchedulingType,
|
||||
}
|
||||
}
|
||||
|
||||
@ -334,6 +338,50 @@ export namespace RemoveDeviceFromMulticastGroupRequest {
|
||||
}
|
||||
}
|
||||
|
||||
export class AddGatewayToMulticastGroupRequest extends jspb.Message {
|
||||
getMulticastGroupId(): string;
|
||||
setMulticastGroupId(value: string): AddGatewayToMulticastGroupRequest;
|
||||
|
||||
getGatewayId(): string;
|
||||
setGatewayId(value: string): AddGatewayToMulticastGroupRequest;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): AddGatewayToMulticastGroupRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: AddGatewayToMulticastGroupRequest): AddGatewayToMulticastGroupRequest.AsObject;
|
||||
static serializeBinaryToWriter(message: AddGatewayToMulticastGroupRequest, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): AddGatewayToMulticastGroupRequest;
|
||||
static deserializeBinaryFromReader(message: AddGatewayToMulticastGroupRequest, reader: jspb.BinaryReader): AddGatewayToMulticastGroupRequest;
|
||||
}
|
||||
|
||||
export namespace AddGatewayToMulticastGroupRequest {
|
||||
export type AsObject = {
|
||||
multicastGroupId: string,
|
||||
gatewayId: string,
|
||||
}
|
||||
}
|
||||
|
||||
export class RemoveGatewayFromMulticastGroupRequest extends jspb.Message {
|
||||
getMulticastGroupId(): string;
|
||||
setMulticastGroupId(value: string): RemoveGatewayFromMulticastGroupRequest;
|
||||
|
||||
getGatewayId(): string;
|
||||
setGatewayId(value: string): RemoveGatewayFromMulticastGroupRequest;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): RemoveGatewayFromMulticastGroupRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: RemoveGatewayFromMulticastGroupRequest): RemoveGatewayFromMulticastGroupRequest.AsObject;
|
||||
static serializeBinaryToWriter(message: RemoveGatewayFromMulticastGroupRequest, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): RemoveGatewayFromMulticastGroupRequest;
|
||||
static deserializeBinaryFromReader(message: RemoveGatewayFromMulticastGroupRequest, reader: jspb.BinaryReader): RemoveGatewayFromMulticastGroupRequest;
|
||||
}
|
||||
|
||||
export namespace RemoveGatewayFromMulticastGroupRequest {
|
||||
export type AsObject = {
|
||||
multicastGroupId: string,
|
||||
gatewayId: string,
|
||||
}
|
||||
}
|
||||
|
||||
export class MulticastGroupQueueItem extends jspb.Message {
|
||||
getMulticastGroupId(): string;
|
||||
setMulticastGroupId(value: string): MulticastGroupQueueItem;
|
||||
@ -464,3 +512,7 @@ export enum MulticastGroupType {
|
||||
CLASS_C = 0,
|
||||
CLASS_B = 1,
|
||||
}
|
||||
export enum MulticastGroupSchedulingType {
|
||||
DELAY = 0,
|
||||
GPS_TIME = 1,
|
||||
}
|
||||
|
405
api/grpc-web/api/multicast_group_pb.js
vendored
405
api/grpc-web/api/multicast_group_pb.js
vendored
@ -21,6 +21,7 @@ goog.object.extend(proto, google_protobuf_empty_pb);
|
||||
var common_common_pb = require('../common/common_pb.js');
|
||||
goog.object.extend(proto, common_common_pb);
|
||||
goog.exportSymbol('proto.api.AddDeviceToMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.AddGatewayToMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.CreateMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.CreateMulticastGroupResponse', null, global);
|
||||
goog.exportSymbol('proto.api.DeleteMulticastGroupRequest', null, global);
|
||||
@ -36,8 +37,10 @@ goog.exportSymbol('proto.api.ListMulticastGroupsResponse', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroup', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroupListItem', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroupQueueItem', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroupSchedulingType', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroupType', null, global);
|
||||
goog.exportSymbol('proto.api.RemoveDeviceFromMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.RemoveGatewayFromMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.UpdateMulticastGroupRequest', null, global);
|
||||
/**
|
||||
* Generated by JsPbCodeGenerator.
|
||||
@ -291,6 +294,48 @@ if (goog.DEBUG && !COMPILED) {
|
||||
*/
|
||||
proto.api.RemoveDeviceFromMulticastGroupRequest.displayName = 'proto.api.RemoveDeviceFromMulticastGroupRequest';
|
||||
}
|
||||
/**
|
||||
* Generated by JsPbCodeGenerator.
|
||||
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||
* server response, or constructed directly in Javascript. The array is used
|
||||
* in place and becomes part of the constructed object. It is not cloned.
|
||||
* If no data is provided, the constructed object will be empty, but still
|
||||
* valid.
|
||||
* @extends {jspb.Message}
|
||||
* @constructor
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest = function(opt_data) {
|
||||
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||
};
|
||||
goog.inherits(proto.api.AddGatewayToMulticastGroupRequest, jspb.Message);
|
||||
if (goog.DEBUG && !COMPILED) {
|
||||
/**
|
||||
* @public
|
||||
* @override
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.displayName = 'proto.api.AddGatewayToMulticastGroupRequest';
|
||||
}
|
||||
/**
|
||||
* Generated by JsPbCodeGenerator.
|
||||
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||
* server response, or constructed directly in Javascript. The array is used
|
||||
* in place and becomes part of the constructed object. It is not cloned.
|
||||
* If no data is provided, the constructed object will be empty, but still
|
||||
* valid.
|
||||
* @extends {jspb.Message}
|
||||
* @constructor
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest = function(opt_data) {
|
||||
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||
};
|
||||
goog.inherits(proto.api.RemoveGatewayFromMulticastGroupRequest, jspb.Message);
|
||||
if (goog.DEBUG && !COMPILED) {
|
||||
/**
|
||||
* @public
|
||||
* @override
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.displayName = 'proto.api.RemoveGatewayFromMulticastGroupRequest';
|
||||
}
|
||||
/**
|
||||
* Generated by JsPbCodeGenerator.
|
||||
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||
@ -460,7 +505,8 @@ proto.api.MulticastGroup.toObject = function(includeInstance, msg) {
|
||||
groupType: jspb.Message.getFieldWithDefault(msg, 9, 0),
|
||||
dr: jspb.Message.getFieldWithDefault(msg, 10, 0),
|
||||
frequency: jspb.Message.getFieldWithDefault(msg, 11, 0),
|
||||
classBPingSlotPeriod: jspb.Message.getFieldWithDefault(msg, 12, 0)
|
||||
classBPingSlotPeriod: jspb.Message.getFieldWithDefault(msg, 12, 0),
|
||||
classCSchedulingType: jspb.Message.getFieldWithDefault(msg, 13, 0)
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
@ -545,6 +591,10 @@ proto.api.MulticastGroup.deserializeBinaryFromReader = function(msg, reader) {
|
||||
var value = /** @type {number} */ (reader.readUint32());
|
||||
msg.setClassBPingSlotPeriod(value);
|
||||
break;
|
||||
case 13:
|
||||
var value = /** @type {!proto.api.MulticastGroupSchedulingType} */ (reader.readEnum());
|
||||
msg.setClassCSchedulingType(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
@ -658,6 +708,13 @@ proto.api.MulticastGroup.serializeBinaryToWriter = function(message, writer) {
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getClassCSchedulingType();
|
||||
if (f !== 0.0) {
|
||||
writer.writeEnum(
|
||||
13,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -877,6 +934,24 @@ proto.api.MulticastGroup.prototype.setClassBPingSlotPeriod = function(value) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional MulticastGroupSchedulingType class_c_scheduling_type = 13;
|
||||
* @return {!proto.api.MulticastGroupSchedulingType}
|
||||
*/
|
||||
proto.api.MulticastGroup.prototype.getClassCSchedulingType = function() {
|
||||
return /** @type {!proto.api.MulticastGroupSchedulingType} */ (jspb.Message.getFieldWithDefault(this, 13, 0));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {!proto.api.MulticastGroupSchedulingType} value
|
||||
* @return {!proto.api.MulticastGroup} returns this
|
||||
*/
|
||||
proto.api.MulticastGroup.prototype.setClassCSchedulingType = function(value) {
|
||||
return jspb.Message.setProto3EnumField(this, 13, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2877,6 +2952,326 @@ proto.api.RemoveDeviceFromMulticastGroupRequest.prototype.setDevEui = function(v
|
||||
|
||||
|
||||
|
||||
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||
/**
|
||||
* Creates an object representation of this proto.
|
||||
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||
* Optional fields that are not set will be set to undefined.
|
||||
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||
* For the list of reserved names please see:
|
||||
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
|
||||
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
|
||||
* JSPB instance for transitional soy proto support:
|
||||
* http://goto/soy-param-migration
|
||||
* @return {!Object}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.toObject = function(opt_includeInstance) {
|
||||
return proto.api.AddGatewayToMulticastGroupRequest.toObject(opt_includeInstance, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Static version of the {@see toObject} method.
|
||||
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
|
||||
* the JSPB instance for transitional soy proto support:
|
||||
* http://goto/soy-param-migration
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} msg The msg instance to transform.
|
||||
* @return {!Object}
|
||||
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.toObject = function(includeInstance, msg) {
|
||||
var f, obj = {
|
||||
multicastGroupId: jspb.Message.getFieldWithDefault(msg, 1, ""),
|
||||
gatewayId: jspb.Message.getFieldWithDefault(msg, 2, "")
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
obj.$jspbMessageInstance = msg;
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deserializes binary data (in protobuf wire format).
|
||||
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||
* @return {!proto.api.AddGatewayToMulticastGroupRequest}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.deserializeBinary = function(bytes) {
|
||||
var reader = new jspb.BinaryReader(bytes);
|
||||
var msg = new proto.api.AddGatewayToMulticastGroupRequest;
|
||||
return proto.api.AddGatewayToMulticastGroupRequest.deserializeBinaryFromReader(msg, reader);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Deserializes binary data (in protobuf wire format) from the
|
||||
* given reader into the given message object.
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} msg The message object to deserialize into.
|
||||
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||
* @return {!proto.api.AddGatewayToMulticastGroupRequest}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.deserializeBinaryFromReader = function(msg, reader) {
|
||||
while (reader.nextField()) {
|
||||
if (reader.isEndGroup()) {
|
||||
break;
|
||||
}
|
||||
var field = reader.getFieldNumber();
|
||||
switch (field) {
|
||||
case 1:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setMulticastGroupId(value);
|
||||
break;
|
||||
case 2:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setGatewayId(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Serializes the message to binary data (in protobuf wire format).
|
||||
* @return {!Uint8Array}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.serializeBinary = function() {
|
||||
var writer = new jspb.BinaryWriter();
|
||||
proto.api.AddGatewayToMulticastGroupRequest.serializeBinaryToWriter(this, writer);
|
||||
return writer.getResultBuffer();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Serializes the given message to binary data (in protobuf wire
|
||||
* format), writing to the given BinaryWriter.
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} message
|
||||
* @param {!jspb.BinaryWriter} writer
|
||||
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.serializeBinaryToWriter = function(message, writer) {
|
||||
var f = undefined;
|
||||
f = message.getMulticastGroupId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
1,
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getGatewayId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
2,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string multicast_group_id = 1;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.getMulticastGroupId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.AddGatewayToMulticastGroupRequest} returns this
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.setMulticastGroupId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 1, value);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string gateway_id = 2;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.getGatewayId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.AddGatewayToMulticastGroupRequest} returns this
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.setGatewayId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 2, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||
/**
|
||||
* Creates an object representation of this proto.
|
||||
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||
* Optional fields that are not set will be set to undefined.
|
||||
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||
* For the list of reserved names please see:
|
||||
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
|
||||
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
|
||||
* JSPB instance for transitional soy proto support:
|
||||
* http://goto/soy-param-migration
|
||||
* @return {!Object}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.toObject = function(opt_includeInstance) {
|
||||
return proto.api.RemoveGatewayFromMulticastGroupRequest.toObject(opt_includeInstance, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Static version of the {@see toObject} method.
|
||||
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
|
||||
* the JSPB instance for transitional soy proto support:
|
||||
* http://goto/soy-param-migration
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} msg The msg instance to transform.
|
||||
* @return {!Object}
|
||||
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.toObject = function(includeInstance, msg) {
|
||||
var f, obj = {
|
||||
multicastGroupId: jspb.Message.getFieldWithDefault(msg, 1, ""),
|
||||
gatewayId: jspb.Message.getFieldWithDefault(msg, 2, "")
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
obj.$jspbMessageInstance = msg;
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deserializes binary data (in protobuf wire format).
|
||||
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||
* @return {!proto.api.RemoveGatewayFromMulticastGroupRequest}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.deserializeBinary = function(bytes) {
|
||||
var reader = new jspb.BinaryReader(bytes);
|
||||
var msg = new proto.api.RemoveGatewayFromMulticastGroupRequest;
|
||||
return proto.api.RemoveGatewayFromMulticastGroupRequest.deserializeBinaryFromReader(msg, reader);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Deserializes binary data (in protobuf wire format) from the
|
||||
* given reader into the given message object.
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} msg The message object to deserialize into.
|
||||
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||
* @return {!proto.api.RemoveGatewayFromMulticastGroupRequest}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.deserializeBinaryFromReader = function(msg, reader) {
|
||||
while (reader.nextField()) {
|
||||
if (reader.isEndGroup()) {
|
||||
break;
|
||||
}
|
||||
var field = reader.getFieldNumber();
|
||||
switch (field) {
|
||||
case 1:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setMulticastGroupId(value);
|
||||
break;
|
||||
case 2:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setGatewayId(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Serializes the message to binary data (in protobuf wire format).
|
||||
* @return {!Uint8Array}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.serializeBinary = function() {
|
||||
var writer = new jspb.BinaryWriter();
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.serializeBinaryToWriter(this, writer);
|
||||
return writer.getResultBuffer();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Serializes the given message to binary data (in protobuf wire
|
||||
* format), writing to the given BinaryWriter.
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} message
|
||||
* @param {!jspb.BinaryWriter} writer
|
||||
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.serializeBinaryToWriter = function(message, writer) {
|
||||
var f = undefined;
|
||||
f = message.getMulticastGroupId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
1,
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getGatewayId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
2,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string multicast_group_id = 1;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.getMulticastGroupId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.RemoveGatewayFromMulticastGroupRequest} returns this
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.setMulticastGroupId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 1, value);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string gateway_id = 2;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.getGatewayId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.RemoveGatewayFromMulticastGroupRequest} returns this
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.setGatewayId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 2, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||
/**
|
||||
* Creates an object representation of this proto.
|
||||
@ -3827,4 +4222,12 @@ proto.api.MulticastGroupType = {
|
||||
CLASS_B: 1
|
||||
};
|
||||
|
||||
/**
|
||||
* @enum {number}
|
||||
*/
|
||||
proto.api.MulticastGroupSchedulingType = {
|
||||
DELAY: 0,
|
||||
GPS_TIME: 1
|
||||
};
|
||||
|
||||
goog.object.extend(exports, proto.api);
|
||||
|
4
api/js/api/gateway_pb.d.ts
vendored
4
api/js/api/gateway_pb.d.ts
vendored
@ -255,6 +255,9 @@ export class ListGatewaysRequest extends jspb.Message {
|
||||
getTenantId(): string;
|
||||
setTenantId(value: string): void;
|
||||
|
||||
getMulticastGroupId(): string;
|
||||
setMulticastGroupId(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): ListGatewaysRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: ListGatewaysRequest): ListGatewaysRequest.AsObject;
|
||||
@ -271,6 +274,7 @@ export namespace ListGatewaysRequest {
|
||||
offset: number,
|
||||
search: string,
|
||||
tenantId: string,
|
||||
multicastGroupId: string,
|
||||
}
|
||||
}
|
||||
|
||||
|
32
api/js/api/gateway_pb.js
vendored
32
api/js/api/gateway_pb.js
vendored
@ -2062,7 +2062,8 @@ proto.api.ListGatewaysRequest.toObject = function(includeInstance, msg) {
|
||||
limit: jspb.Message.getFieldWithDefault(msg, 1, 0),
|
||||
offset: jspb.Message.getFieldWithDefault(msg, 2, 0),
|
||||
search: jspb.Message.getFieldWithDefault(msg, 3, ""),
|
||||
tenantId: jspb.Message.getFieldWithDefault(msg, 4, "")
|
||||
tenantId: jspb.Message.getFieldWithDefault(msg, 4, ""),
|
||||
multicastGroupId: jspb.Message.getFieldWithDefault(msg, 5, "")
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
@ -2115,6 +2116,10 @@ proto.api.ListGatewaysRequest.deserializeBinaryFromReader = function(msg, reader
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setTenantId(value);
|
||||
break;
|
||||
case 5:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setMulticastGroupId(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
@ -2172,6 +2177,13 @@ proto.api.ListGatewaysRequest.serializeBinaryToWriter = function(message, writer
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getMulticastGroupId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
5,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -2247,6 +2259,24 @@ proto.api.ListGatewaysRequest.prototype.setTenantId = function(value) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string multicast_group_id = 5;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.ListGatewaysRequest.prototype.getMulticastGroupId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.ListGatewaysRequest} returns this
|
||||
*/
|
||||
proto.api.ListGatewaysRequest.prototype.setMulticastGroupId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 5, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* List of repeated fields within this message type.
|
||||
|
10
api/js/api/multicast_group_grpc_pb.d.ts
vendored
10
api/js/api/multicast_group_grpc_pb.d.ts
vendored
@ -15,6 +15,8 @@ interface IMulticastGroupServiceService extends grpc.ServiceDefinition<grpc.Unty
|
||||
list: grpc.MethodDefinition<api_multicast_group_pb.ListMulticastGroupsRequest, api_multicast_group_pb.ListMulticastGroupsResponse>;
|
||||
addDevice: grpc.MethodDefinition<api_multicast_group_pb.AddDeviceToMulticastGroupRequest, google_protobuf_empty_pb.Empty>;
|
||||
removeDevice: grpc.MethodDefinition<api_multicast_group_pb.RemoveDeviceFromMulticastGroupRequest, google_protobuf_empty_pb.Empty>;
|
||||
addGateway: grpc.MethodDefinition<api_multicast_group_pb.AddGatewayToMulticastGroupRequest, google_protobuf_empty_pb.Empty>;
|
||||
removeGateway: grpc.MethodDefinition<api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest, google_protobuf_empty_pb.Empty>;
|
||||
enqueue: grpc.MethodDefinition<api_multicast_group_pb.EnqueueMulticastGroupQueueItemRequest, api_multicast_group_pb.EnqueueMulticastGroupQueueItemResponse>;
|
||||
flushQueue: grpc.MethodDefinition<api_multicast_group_pb.FlushMulticastGroupQueueRequest, google_protobuf_empty_pb.Empty>;
|
||||
listQueue: grpc.MethodDefinition<api_multicast_group_pb.ListMulticastGroupQueueRequest, api_multicast_group_pb.ListMulticastGroupQueueResponse>;
|
||||
@ -30,6 +32,8 @@ export interface IMulticastGroupServiceServer extends grpc.UntypedServiceImpleme
|
||||
list: grpc.handleUnaryCall<api_multicast_group_pb.ListMulticastGroupsRequest, api_multicast_group_pb.ListMulticastGroupsResponse>;
|
||||
addDevice: grpc.handleUnaryCall<api_multicast_group_pb.AddDeviceToMulticastGroupRequest, google_protobuf_empty_pb.Empty>;
|
||||
removeDevice: grpc.handleUnaryCall<api_multicast_group_pb.RemoveDeviceFromMulticastGroupRequest, google_protobuf_empty_pb.Empty>;
|
||||
addGateway: grpc.handleUnaryCall<api_multicast_group_pb.AddGatewayToMulticastGroupRequest, google_protobuf_empty_pb.Empty>;
|
||||
removeGateway: grpc.handleUnaryCall<api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest, google_protobuf_empty_pb.Empty>;
|
||||
enqueue: grpc.handleUnaryCall<api_multicast_group_pb.EnqueueMulticastGroupQueueItemRequest, api_multicast_group_pb.EnqueueMulticastGroupQueueItemResponse>;
|
||||
flushQueue: grpc.handleUnaryCall<api_multicast_group_pb.FlushMulticastGroupQueueRequest, google_protobuf_empty_pb.Empty>;
|
||||
listQueue: grpc.handleUnaryCall<api_multicast_group_pb.ListMulticastGroupQueueRequest, api_multicast_group_pb.ListMulticastGroupQueueResponse>;
|
||||
@ -58,6 +62,12 @@ export class MulticastGroupServiceClient extends grpc.Client {
|
||||
removeDevice(argument: api_multicast_group_pb.RemoveDeviceFromMulticastGroupRequest, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
removeDevice(argument: api_multicast_group_pb.RemoveDeviceFromMulticastGroupRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
removeDevice(argument: api_multicast_group_pb.RemoveDeviceFromMulticastGroupRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
addGateway(argument: api_multicast_group_pb.AddGatewayToMulticastGroupRequest, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
addGateway(argument: api_multicast_group_pb.AddGatewayToMulticastGroupRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
addGateway(argument: api_multicast_group_pb.AddGatewayToMulticastGroupRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
removeGateway(argument: api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
removeGateway(argument: api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
removeGateway(argument: api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
|
||||
enqueue(argument: api_multicast_group_pb.EnqueueMulticastGroupQueueItemRequest, callback: grpc.requestCallback<api_multicast_group_pb.EnqueueMulticastGroupQueueItemResponse>): grpc.ClientUnaryCall;
|
||||
enqueue(argument: api_multicast_group_pb.EnqueueMulticastGroupQueueItemRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<api_multicast_group_pb.EnqueueMulticastGroupQueueItemResponse>): grpc.ClientUnaryCall;
|
||||
enqueue(argument: api_multicast_group_pb.EnqueueMulticastGroupQueueItemRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<api_multicast_group_pb.EnqueueMulticastGroupQueueItemResponse>): grpc.ClientUnaryCall;
|
||||
|
48
api/js/api/multicast_group_grpc_pb.js
vendored
48
api/js/api/multicast_group_grpc_pb.js
vendored
@ -19,6 +19,17 @@ function deserialize_api_AddDeviceToMulticastGroupRequest(buffer_arg) {
|
||||
return api_multicast_group_pb.AddDeviceToMulticastGroupRequest.deserializeBinary(new Uint8Array(buffer_arg));
|
||||
}
|
||||
|
||||
function serialize_api_AddGatewayToMulticastGroupRequest(arg) {
|
||||
if (!(arg instanceof api_multicast_group_pb.AddGatewayToMulticastGroupRequest)) {
|
||||
throw new Error('Expected argument of type api.AddGatewayToMulticastGroupRequest');
|
||||
}
|
||||
return Buffer.from(arg.serializeBinary());
|
||||
}
|
||||
|
||||
function deserialize_api_AddGatewayToMulticastGroupRequest(buffer_arg) {
|
||||
return api_multicast_group_pb.AddGatewayToMulticastGroupRequest.deserializeBinary(new Uint8Array(buffer_arg));
|
||||
}
|
||||
|
||||
function serialize_api_CreateMulticastGroupRequest(arg) {
|
||||
if (!(arg instanceof api_multicast_group_pb.CreateMulticastGroupRequest)) {
|
||||
throw new Error('Expected argument of type api.CreateMulticastGroupRequest');
|
||||
@ -162,6 +173,17 @@ function deserialize_api_RemoveDeviceFromMulticastGroupRequest(buffer_arg) {
|
||||
return api_multicast_group_pb.RemoveDeviceFromMulticastGroupRequest.deserializeBinary(new Uint8Array(buffer_arg));
|
||||
}
|
||||
|
||||
function serialize_api_RemoveGatewayFromMulticastGroupRequest(arg) {
|
||||
if (!(arg instanceof api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest)) {
|
||||
throw new Error('Expected argument of type api.RemoveGatewayFromMulticastGroupRequest');
|
||||
}
|
||||
return Buffer.from(arg.serializeBinary());
|
||||
}
|
||||
|
||||
function deserialize_api_RemoveGatewayFromMulticastGroupRequest(buffer_arg) {
|
||||
return api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest.deserializeBinary(new Uint8Array(buffer_arg));
|
||||
}
|
||||
|
||||
function serialize_api_UpdateMulticastGroupRequest(arg) {
|
||||
if (!(arg instanceof api_multicast_group_pb.UpdateMulticastGroupRequest)) {
|
||||
throw new Error('Expected argument of type api.UpdateMulticastGroupRequest');
|
||||
@ -271,7 +293,31 @@ removeDevice: {
|
||||
responseSerialize: serialize_google_protobuf_Empty,
|
||||
responseDeserialize: deserialize_google_protobuf_Empty,
|
||||
},
|
||||
// Add the given item to the multcast group queue.
|
||||
// Add a gateway to the multicast group.
|
||||
addGateway: {
|
||||
path: '/api.MulticastGroupService/AddGateway',
|
||||
requestStream: false,
|
||||
responseStream: false,
|
||||
requestType: api_multicast_group_pb.AddGatewayToMulticastGroupRequest,
|
||||
responseType: google_protobuf_empty_pb.Empty,
|
||||
requestSerialize: serialize_api_AddGatewayToMulticastGroupRequest,
|
||||
requestDeserialize: deserialize_api_AddGatewayToMulticastGroupRequest,
|
||||
responseSerialize: serialize_google_protobuf_Empty,
|
||||
responseDeserialize: deserialize_google_protobuf_Empty,
|
||||
},
|
||||
// Remove a gateway from the multicast group.
|
||||
removeGateway: {
|
||||
path: '/api.MulticastGroupService/RemoveGateway',
|
||||
requestStream: false,
|
||||
responseStream: false,
|
||||
requestType: api_multicast_group_pb.RemoveGatewayFromMulticastGroupRequest,
|
||||
responseType: google_protobuf_empty_pb.Empty,
|
||||
requestSerialize: serialize_api_RemoveGatewayFromMulticastGroupRequest,
|
||||
requestDeserialize: deserialize_api_RemoveGatewayFromMulticastGroupRequest,
|
||||
responseSerialize: serialize_google_protobuf_Empty,
|
||||
responseDeserialize: deserialize_google_protobuf_Empty,
|
||||
},
|
||||
// Add the given item to the multicast group queue.
|
||||
enqueue: {
|
||||
path: '/api.MulticastGroupService/Enqueue',
|
||||
requestStream: false,
|
||||
|
59
api/js/api/multicast_group_pb.d.ts
vendored
59
api/js/api/multicast_group_pb.d.ts
vendored
@ -44,6 +44,9 @@ export class MulticastGroup extends jspb.Message {
|
||||
getClassBPingSlotPeriod(): number;
|
||||
setClassBPingSlotPeriod(value: number): void;
|
||||
|
||||
getClassCSchedulingType(): MulticastGroupSchedulingTypeMap[keyof MulticastGroupSchedulingTypeMap];
|
||||
setClassCSchedulingType(value: MulticastGroupSchedulingTypeMap[keyof MulticastGroupSchedulingTypeMap]): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): MulticastGroup.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: MulticastGroup): MulticastGroup.AsObject;
|
||||
@ -68,6 +71,7 @@ export namespace MulticastGroup {
|
||||
dr: number,
|
||||
frequency: number,
|
||||
classBPingSlotPeriod: number,
|
||||
classCSchedulingType: MulticastGroupSchedulingTypeMap[keyof MulticastGroupSchedulingTypeMap],
|
||||
}
|
||||
}
|
||||
|
||||
@ -359,6 +363,54 @@ export namespace RemoveDeviceFromMulticastGroupRequest {
|
||||
}
|
||||
}
|
||||
|
||||
export class AddGatewayToMulticastGroupRequest extends jspb.Message {
|
||||
getMulticastGroupId(): string;
|
||||
setMulticastGroupId(value: string): void;
|
||||
|
||||
getGatewayId(): string;
|
||||
setGatewayId(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): AddGatewayToMulticastGroupRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: AddGatewayToMulticastGroupRequest): AddGatewayToMulticastGroupRequest.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: AddGatewayToMulticastGroupRequest, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): AddGatewayToMulticastGroupRequest;
|
||||
static deserializeBinaryFromReader(message: AddGatewayToMulticastGroupRequest, reader: jspb.BinaryReader): AddGatewayToMulticastGroupRequest;
|
||||
}
|
||||
|
||||
export namespace AddGatewayToMulticastGroupRequest {
|
||||
export type AsObject = {
|
||||
multicastGroupId: string,
|
||||
gatewayId: string,
|
||||
}
|
||||
}
|
||||
|
||||
export class RemoveGatewayFromMulticastGroupRequest extends jspb.Message {
|
||||
getMulticastGroupId(): string;
|
||||
setMulticastGroupId(value: string): void;
|
||||
|
||||
getGatewayId(): string;
|
||||
setGatewayId(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): RemoveGatewayFromMulticastGroupRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: RemoveGatewayFromMulticastGroupRequest): RemoveGatewayFromMulticastGroupRequest.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: RemoveGatewayFromMulticastGroupRequest, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): RemoveGatewayFromMulticastGroupRequest;
|
||||
static deserializeBinaryFromReader(message: RemoveGatewayFromMulticastGroupRequest, reader: jspb.BinaryReader): RemoveGatewayFromMulticastGroupRequest;
|
||||
}
|
||||
|
||||
export namespace RemoveGatewayFromMulticastGroupRequest {
|
||||
export type AsObject = {
|
||||
multicastGroupId: string,
|
||||
gatewayId: string,
|
||||
}
|
||||
}
|
||||
|
||||
export class MulticastGroupQueueItem extends jspb.Message {
|
||||
getMulticastGroupId(): string;
|
||||
setMulticastGroupId(value: string): void;
|
||||
@ -504,3 +556,10 @@ export interface MulticastGroupTypeMap {
|
||||
|
||||
export const MulticastGroupType: MulticastGroupTypeMap;
|
||||
|
||||
export interface MulticastGroupSchedulingTypeMap {
|
||||
DELAY: 0;
|
||||
GPS_TIME: 1;
|
||||
}
|
||||
|
||||
export const MulticastGroupSchedulingType: MulticastGroupSchedulingTypeMap;
|
||||
|
||||
|
405
api/js/api/multicast_group_pb.js
vendored
405
api/js/api/multicast_group_pb.js
vendored
@ -21,6 +21,7 @@ goog.object.extend(proto, google_protobuf_empty_pb);
|
||||
var common_common_pb = require('../common/common_pb.js');
|
||||
goog.object.extend(proto, common_common_pb);
|
||||
goog.exportSymbol('proto.api.AddDeviceToMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.AddGatewayToMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.CreateMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.CreateMulticastGroupResponse', null, global);
|
||||
goog.exportSymbol('proto.api.DeleteMulticastGroupRequest', null, global);
|
||||
@ -36,8 +37,10 @@ goog.exportSymbol('proto.api.ListMulticastGroupsResponse', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroup', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroupListItem', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroupQueueItem', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroupSchedulingType', null, global);
|
||||
goog.exportSymbol('proto.api.MulticastGroupType', null, global);
|
||||
goog.exportSymbol('proto.api.RemoveDeviceFromMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.RemoveGatewayFromMulticastGroupRequest', null, global);
|
||||
goog.exportSymbol('proto.api.UpdateMulticastGroupRequest', null, global);
|
||||
/**
|
||||
* Generated by JsPbCodeGenerator.
|
||||
@ -291,6 +294,48 @@ if (goog.DEBUG && !COMPILED) {
|
||||
*/
|
||||
proto.api.RemoveDeviceFromMulticastGroupRequest.displayName = 'proto.api.RemoveDeviceFromMulticastGroupRequest';
|
||||
}
|
||||
/**
|
||||
* Generated by JsPbCodeGenerator.
|
||||
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||
* server response, or constructed directly in Javascript. The array is used
|
||||
* in place and becomes part of the constructed object. It is not cloned.
|
||||
* If no data is provided, the constructed object will be empty, but still
|
||||
* valid.
|
||||
* @extends {jspb.Message}
|
||||
* @constructor
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest = function(opt_data) {
|
||||
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||
};
|
||||
goog.inherits(proto.api.AddGatewayToMulticastGroupRequest, jspb.Message);
|
||||
if (goog.DEBUG && !COMPILED) {
|
||||
/**
|
||||
* @public
|
||||
* @override
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.displayName = 'proto.api.AddGatewayToMulticastGroupRequest';
|
||||
}
|
||||
/**
|
||||
* Generated by JsPbCodeGenerator.
|
||||
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||
* server response, or constructed directly in Javascript. The array is used
|
||||
* in place and becomes part of the constructed object. It is not cloned.
|
||||
* If no data is provided, the constructed object will be empty, but still
|
||||
* valid.
|
||||
* @extends {jspb.Message}
|
||||
* @constructor
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest = function(opt_data) {
|
||||
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||
};
|
||||
goog.inherits(proto.api.RemoveGatewayFromMulticastGroupRequest, jspb.Message);
|
||||
if (goog.DEBUG && !COMPILED) {
|
||||
/**
|
||||
* @public
|
||||
* @override
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.displayName = 'proto.api.RemoveGatewayFromMulticastGroupRequest';
|
||||
}
|
||||
/**
|
||||
* Generated by JsPbCodeGenerator.
|
||||
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||
@ -460,7 +505,8 @@ proto.api.MulticastGroup.toObject = function(includeInstance, msg) {
|
||||
groupType: jspb.Message.getFieldWithDefault(msg, 9, 0),
|
||||
dr: jspb.Message.getFieldWithDefault(msg, 10, 0),
|
||||
frequency: jspb.Message.getFieldWithDefault(msg, 11, 0),
|
||||
classBPingSlotPeriod: jspb.Message.getFieldWithDefault(msg, 12, 0)
|
||||
classBPingSlotPeriod: jspb.Message.getFieldWithDefault(msg, 12, 0),
|
||||
classCSchedulingType: jspb.Message.getFieldWithDefault(msg, 13, 0)
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
@ -545,6 +591,10 @@ proto.api.MulticastGroup.deserializeBinaryFromReader = function(msg, reader) {
|
||||
var value = /** @type {number} */ (reader.readUint32());
|
||||
msg.setClassBPingSlotPeriod(value);
|
||||
break;
|
||||
case 13:
|
||||
var value = /** @type {!proto.api.MulticastGroupSchedulingType} */ (reader.readEnum());
|
||||
msg.setClassCSchedulingType(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
@ -658,6 +708,13 @@ proto.api.MulticastGroup.serializeBinaryToWriter = function(message, writer) {
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getClassCSchedulingType();
|
||||
if (f !== 0.0) {
|
||||
writer.writeEnum(
|
||||
13,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -877,6 +934,24 @@ proto.api.MulticastGroup.prototype.setClassBPingSlotPeriod = function(value) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional MulticastGroupSchedulingType class_c_scheduling_type = 13;
|
||||
* @return {!proto.api.MulticastGroupSchedulingType}
|
||||
*/
|
||||
proto.api.MulticastGroup.prototype.getClassCSchedulingType = function() {
|
||||
return /** @type {!proto.api.MulticastGroupSchedulingType} */ (jspb.Message.getFieldWithDefault(this, 13, 0));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {!proto.api.MulticastGroupSchedulingType} value
|
||||
* @return {!proto.api.MulticastGroup} returns this
|
||||
*/
|
||||
proto.api.MulticastGroup.prototype.setClassCSchedulingType = function(value) {
|
||||
return jspb.Message.setProto3EnumField(this, 13, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -2877,6 +2952,326 @@ proto.api.RemoveDeviceFromMulticastGroupRequest.prototype.setDevEui = function(v
|
||||
|
||||
|
||||
|
||||
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||
/**
|
||||
* Creates an object representation of this proto.
|
||||
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||
* Optional fields that are not set will be set to undefined.
|
||||
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||
* For the list of reserved names please see:
|
||||
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
|
||||
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
|
||||
* JSPB instance for transitional soy proto support:
|
||||
* http://goto/soy-param-migration
|
||||
* @return {!Object}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.toObject = function(opt_includeInstance) {
|
||||
return proto.api.AddGatewayToMulticastGroupRequest.toObject(opt_includeInstance, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Static version of the {@see toObject} method.
|
||||
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
|
||||
* the JSPB instance for transitional soy proto support:
|
||||
* http://goto/soy-param-migration
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} msg The msg instance to transform.
|
||||
* @return {!Object}
|
||||
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.toObject = function(includeInstance, msg) {
|
||||
var f, obj = {
|
||||
multicastGroupId: jspb.Message.getFieldWithDefault(msg, 1, ""),
|
||||
gatewayId: jspb.Message.getFieldWithDefault(msg, 2, "")
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
obj.$jspbMessageInstance = msg;
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deserializes binary data (in protobuf wire format).
|
||||
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||
* @return {!proto.api.AddGatewayToMulticastGroupRequest}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.deserializeBinary = function(bytes) {
|
||||
var reader = new jspb.BinaryReader(bytes);
|
||||
var msg = new proto.api.AddGatewayToMulticastGroupRequest;
|
||||
return proto.api.AddGatewayToMulticastGroupRequest.deserializeBinaryFromReader(msg, reader);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Deserializes binary data (in protobuf wire format) from the
|
||||
* given reader into the given message object.
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} msg The message object to deserialize into.
|
||||
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||
* @return {!proto.api.AddGatewayToMulticastGroupRequest}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.deserializeBinaryFromReader = function(msg, reader) {
|
||||
while (reader.nextField()) {
|
||||
if (reader.isEndGroup()) {
|
||||
break;
|
||||
}
|
||||
var field = reader.getFieldNumber();
|
||||
switch (field) {
|
||||
case 1:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setMulticastGroupId(value);
|
||||
break;
|
||||
case 2:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setGatewayId(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Serializes the message to binary data (in protobuf wire format).
|
||||
* @return {!Uint8Array}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.serializeBinary = function() {
|
||||
var writer = new jspb.BinaryWriter();
|
||||
proto.api.AddGatewayToMulticastGroupRequest.serializeBinaryToWriter(this, writer);
|
||||
return writer.getResultBuffer();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Serializes the given message to binary data (in protobuf wire
|
||||
* format), writing to the given BinaryWriter.
|
||||
* @param {!proto.api.AddGatewayToMulticastGroupRequest} message
|
||||
* @param {!jspb.BinaryWriter} writer
|
||||
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.serializeBinaryToWriter = function(message, writer) {
|
||||
var f = undefined;
|
||||
f = message.getMulticastGroupId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
1,
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getGatewayId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
2,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string multicast_group_id = 1;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.getMulticastGroupId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.AddGatewayToMulticastGroupRequest} returns this
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.setMulticastGroupId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 1, value);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string gateway_id = 2;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.getGatewayId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.AddGatewayToMulticastGroupRequest} returns this
|
||||
*/
|
||||
proto.api.AddGatewayToMulticastGroupRequest.prototype.setGatewayId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 2, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||
/**
|
||||
* Creates an object representation of this proto.
|
||||
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||
* Optional fields that are not set will be set to undefined.
|
||||
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||
* For the list of reserved names please see:
|
||||
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
|
||||
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
|
||||
* JSPB instance for transitional soy proto support:
|
||||
* http://goto/soy-param-migration
|
||||
* @return {!Object}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.toObject = function(opt_includeInstance) {
|
||||
return proto.api.RemoveGatewayFromMulticastGroupRequest.toObject(opt_includeInstance, this);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Static version of the {@see toObject} method.
|
||||
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
|
||||
* the JSPB instance for transitional soy proto support:
|
||||
* http://goto/soy-param-migration
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} msg The msg instance to transform.
|
||||
* @return {!Object}
|
||||
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.toObject = function(includeInstance, msg) {
|
||||
var f, obj = {
|
||||
multicastGroupId: jspb.Message.getFieldWithDefault(msg, 1, ""),
|
||||
gatewayId: jspb.Message.getFieldWithDefault(msg, 2, "")
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
obj.$jspbMessageInstance = msg;
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Deserializes binary data (in protobuf wire format).
|
||||
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||
* @return {!proto.api.RemoveGatewayFromMulticastGroupRequest}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.deserializeBinary = function(bytes) {
|
||||
var reader = new jspb.BinaryReader(bytes);
|
||||
var msg = new proto.api.RemoveGatewayFromMulticastGroupRequest;
|
||||
return proto.api.RemoveGatewayFromMulticastGroupRequest.deserializeBinaryFromReader(msg, reader);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Deserializes binary data (in protobuf wire format) from the
|
||||
* given reader into the given message object.
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} msg The message object to deserialize into.
|
||||
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||
* @return {!proto.api.RemoveGatewayFromMulticastGroupRequest}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.deserializeBinaryFromReader = function(msg, reader) {
|
||||
while (reader.nextField()) {
|
||||
if (reader.isEndGroup()) {
|
||||
break;
|
||||
}
|
||||
var field = reader.getFieldNumber();
|
||||
switch (field) {
|
||||
case 1:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setMulticastGroupId(value);
|
||||
break;
|
||||
case 2:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setGatewayId(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Serializes the message to binary data (in protobuf wire format).
|
||||
* @return {!Uint8Array}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.serializeBinary = function() {
|
||||
var writer = new jspb.BinaryWriter();
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.serializeBinaryToWriter(this, writer);
|
||||
return writer.getResultBuffer();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Serializes the given message to binary data (in protobuf wire
|
||||
* format), writing to the given BinaryWriter.
|
||||
* @param {!proto.api.RemoveGatewayFromMulticastGroupRequest} message
|
||||
* @param {!jspb.BinaryWriter} writer
|
||||
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.serializeBinaryToWriter = function(message, writer) {
|
||||
var f = undefined;
|
||||
f = message.getMulticastGroupId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
1,
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getGatewayId();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
2,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string multicast_group_id = 1;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.getMulticastGroupId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.RemoveGatewayFromMulticastGroupRequest} returns this
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.setMulticastGroupId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 1, value);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string gateway_id = 2;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.getGatewayId = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.RemoveGatewayFromMulticastGroupRequest} returns this
|
||||
*/
|
||||
proto.api.RemoveGatewayFromMulticastGroupRequest.prototype.setGatewayId = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 2, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||
/**
|
||||
* Creates an object representation of this proto.
|
||||
@ -3827,4 +4222,12 @@ proto.api.MulticastGroupType = {
|
||||
CLASS_B: 1
|
||||
};
|
||||
|
||||
/**
|
||||
* @enum {number}
|
||||
*/
|
||||
proto.api.MulticastGroupSchedulingType = {
|
||||
DELAY: 0,
|
||||
GPS_TIME: 1
|
||||
};
|
||||
|
||||
goog.object.extend(exports, proto.api);
|
||||
|
53
api/md/api/api.md
vendored
53
api/md/api/api.md
vendored
@ -182,6 +182,7 @@
|
||||
|
||||
- [api/multicast_group.proto](#api_multicast_group-proto)
|
||||
- [AddDeviceToMulticastGroupRequest](#api-AddDeviceToMulticastGroupRequest)
|
||||
- [AddGatewayToMulticastGroupRequest](#api-AddGatewayToMulticastGroupRequest)
|
||||
- [CreateMulticastGroupRequest](#api-CreateMulticastGroupRequest)
|
||||
- [CreateMulticastGroupResponse](#api-CreateMulticastGroupResponse)
|
||||
- [DeleteMulticastGroupRequest](#api-DeleteMulticastGroupRequest)
|
||||
@ -198,8 +199,10 @@
|
||||
- [MulticastGroupListItem](#api-MulticastGroupListItem)
|
||||
- [MulticastGroupQueueItem](#api-MulticastGroupQueueItem)
|
||||
- [RemoveDeviceFromMulticastGroupRequest](#api-RemoveDeviceFromMulticastGroupRequest)
|
||||
- [RemoveGatewayFromMulticastGroupRequest](#api-RemoveGatewayFromMulticastGroupRequest)
|
||||
- [UpdateMulticastGroupRequest](#api-UpdateMulticastGroupRequest)
|
||||
|
||||
- [MulticastGroupSchedulingType](#api-MulticastGroupSchedulingType)
|
||||
- [MulticastGroupType](#api-MulticastGroupType)
|
||||
|
||||
- [MulticastGroupService](#api-MulticastGroupService)
|
||||
@ -2939,6 +2942,7 @@ DeviceProfileService is the service providing API methods for managing device-pr
|
||||
| offset | [uint32](#uint32) | | Offset in the result-set (for pagination). |
|
||||
| search | [string](#string) | | If set, the given string will be used to search on name (optional). |
|
||||
| tenant_id | [string](#string) | | Tenant ID (UUID) to filter gateways on. To list all gateways as a global admin user, this field can be left blank. |
|
||||
| multicast_group_id | [string](#string) | | Multicast-group ID (UUID) to filter gateways on. |
|
||||
|
||||
|
||||
|
||||
@ -3037,6 +3041,22 @@ GatewayService is the service providing API methods for managing gateways.
|
||||
|
||||
|
||||
|
||||
<a name="api-AddGatewayToMulticastGroupRequest"></a>
|
||||
|
||||
### AddGatewayToMulticastGroupRequest
|
||||
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| multicast_group_id | [string](#string) | | Multicast group ID. |
|
||||
| gateway_id | [string](#string) | | Gateway ID (HEX encoded). |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="api-CreateMulticastGroupRequest"></a>
|
||||
|
||||
### CreateMulticastGroupRequest
|
||||
@ -3243,6 +3263,7 @@ GatewayService is the service providing API methods for managing gateways.
|
||||
| dr | [uint32](#uint32) | | Data-rate. |
|
||||
| frequency | [uint32](#uint32) | | Frequency (Hz). |
|
||||
| class_b_ping_slot_period | [uint32](#uint32) | | Ping-slot period (only for Class-B). |
|
||||
| class_c_scheduling_type | [MulticastGroupSchedulingType](#api-MulticastGroupSchedulingType) | | Scheduling type (only for Class-C). |
|
||||
|
||||
|
||||
|
||||
@ -3303,6 +3324,22 @@ GatewayService is the service providing API methods for managing gateways.
|
||||
|
||||
|
||||
|
||||
<a name="api-RemoveGatewayFromMulticastGroupRequest"></a>
|
||||
|
||||
### RemoveGatewayFromMulticastGroupRequest
|
||||
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| multicast_group_id | [string](#string) | | Multicast group ID. |
|
||||
| gateway_id | [string](#string) | | Gateway ID (HEX encoded). |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="api-UpdateMulticastGroupRequest"></a>
|
||||
|
||||
### UpdateMulticastGroupRequest
|
||||
@ -3320,6 +3357,18 @@ GatewayService is the service providing API methods for managing gateways.
|
||||
|
||||
|
||||
|
||||
<a name="api-MulticastGroupSchedulingType"></a>
|
||||
|
||||
### MulticastGroupSchedulingType
|
||||
|
||||
|
||||
| Name | Number | Description |
|
||||
| ---- | ------ | ----------- |
|
||||
| DELAY | 0 | Delay. If multicast downlinks must be sent through multiple gateways, then these will be sent one by one with a delay between each gateway. |
|
||||
| GPS_TIME | 1 | Time. If multicast downlinks must be sent through multiple gateways, then these will be sent simultaneously using GPS time synchronization. Note that this does require GPS time-synchronized LoRa gateways. |
|
||||
|
||||
|
||||
|
||||
<a name="api-MulticastGroupType"></a>
|
||||
|
||||
### MulticastGroupType
|
||||
@ -3350,7 +3399,9 @@ MulticastGroupService is the service managing multicast-groups.
|
||||
| List | [ListMulticastGroupsRequest](#api-ListMulticastGroupsRequest) | [ListMulticastGroupsResponse](#api-ListMulticastGroupsResponse) | List the available multicast groups. |
|
||||
| AddDevice | [AddDeviceToMulticastGroupRequest](#api-AddDeviceToMulticastGroupRequest) | [.google.protobuf.Empty](#google-protobuf-Empty) | Add a device to the multicast group. |
|
||||
| RemoveDevice | [RemoveDeviceFromMulticastGroupRequest](#api-RemoveDeviceFromMulticastGroupRequest) | [.google.protobuf.Empty](#google-protobuf-Empty) | Remove a device from the multicast group. |
|
||||
| Enqueue | [EnqueueMulticastGroupQueueItemRequest](#api-EnqueueMulticastGroupQueueItemRequest) | [EnqueueMulticastGroupQueueItemResponse](#api-EnqueueMulticastGroupQueueItemResponse) | Add the given item to the multcast group queue. |
|
||||
| AddGateway | [AddGatewayToMulticastGroupRequest](#api-AddGatewayToMulticastGroupRequest) | [.google.protobuf.Empty](#google-protobuf-Empty) | Add a gateway to the multicast group. |
|
||||
| RemoveGateway | [RemoveGatewayFromMulticastGroupRequest](#api-RemoveGatewayFromMulticastGroupRequest) | [.google.protobuf.Empty](#google-protobuf-Empty) | Remove a gateway from the multicast group. |
|
||||
| Enqueue | [EnqueueMulticastGroupQueueItemRequest](#api-EnqueueMulticastGroupQueueItemRequest) | [EnqueueMulticastGroupQueueItemResponse](#api-EnqueueMulticastGroupQueueItemResponse) | Add the given item to the multicast group queue. |
|
||||
| FlushQueue | [FlushMulticastGroupQueueRequest](#api-FlushMulticastGroupQueueRequest) | [.google.protobuf.Empty](#google-protobuf-Empty) | Flush the queue for the given multicast group. |
|
||||
| ListQueue | [ListMulticastGroupQueueRequest](#api-ListMulticastGroupQueueRequest) | [ListMulticastGroupQueueResponse](#api-ListMulticastGroupQueueResponse) | List the items in the multicast group queue. |
|
||||
|
||||
|
3
api/proto/api/gateway.proto
vendored
3
api/proto/api/gateway.proto
vendored
@ -187,6 +187,9 @@ message ListGatewaysRequest {
|
||||
// Tenant ID (UUID) to filter gateways on.
|
||||
// To list all gateways as a global admin user, this field can be left blank.
|
||||
string tenant_id = 4;
|
||||
|
||||
// Multicast-group ID (UUID) to filter gateways on.
|
||||
string multicast_group_id = 5;
|
||||
}
|
||||
|
||||
message ListGatewaysResponse {
|
||||
|
47
api/proto/api/multicast_group.proto
vendored
47
api/proto/api/multicast_group.proto
vendored
@ -68,6 +68,21 @@ service MulticastGroupService {
|
||||
};
|
||||
}
|
||||
|
||||
// Add a gateway to the multicast group.
|
||||
rpc AddGateway(AddGatewayToMulticastGroupRequest) returns (google.protobuf.Empty) {
|
||||
option(google.api.http) = {
|
||||
post: "/api/multicast-groups/{multicast_group_id}/gateways"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
|
||||
// Remove a gateway from the multicast group.
|
||||
rpc RemoveGateway(RemoveGatewayFromMulticastGroupRequest) returns (google.protobuf.Empty) {
|
||||
option(google.api.http) = {
|
||||
delete: "/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}"
|
||||
};
|
||||
}
|
||||
|
||||
// Add the given item to the multicast group queue.
|
||||
rpc Enqueue(EnqueueMulticastGroupQueueItemRequest) returns (EnqueueMulticastGroupQueueItemResponse) {
|
||||
option(google.api.http) = {
|
||||
@ -99,6 +114,19 @@ enum MulticastGroupType {
|
||||
CLASS_B = 1;
|
||||
}
|
||||
|
||||
enum MulticastGroupSchedulingType {
|
||||
// Delay.
|
||||
// If multicast downlinks must be sent through multiple gateways, then
|
||||
// these will be sent one by one with a delay between each gateway.
|
||||
DELAY = 0;
|
||||
|
||||
// Time.
|
||||
// If multicast downlinks must be sent through multiple gateways, then
|
||||
// these will be sent simultaneously using GPS time synchronization.
|
||||
// Note that this does require GPS time-synchronized LoRa gateways.
|
||||
GPS_TIME = 1;
|
||||
}
|
||||
|
||||
message MulticastGroup {
|
||||
// ID (UUID).
|
||||
// This will be generated automatically on create.
|
||||
@ -137,6 +165,9 @@ message MulticastGroup {
|
||||
|
||||
// Ping-slot period (only for Class-B).
|
||||
uint32 class_b_ping_slot_period = 12;
|
||||
|
||||
// Scheduling type (only for Class-C).
|
||||
MulticastGroupSchedulingType class_c_scheduling_type = 13;
|
||||
}
|
||||
|
||||
message MulticastGroupListItem {
|
||||
@ -233,6 +264,22 @@ message RemoveDeviceFromMulticastGroupRequest {
|
||||
string dev_eui = 2;
|
||||
}
|
||||
|
||||
message AddGatewayToMulticastGroupRequest {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
||||
// Gateway ID (HEX encoded).
|
||||
string gateway_id = 2;
|
||||
}
|
||||
|
||||
message RemoveGatewayFromMulticastGroupRequest {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
||||
// Gateway ID (HEX encoded).
|
||||
string gateway_id = 2;
|
||||
}
|
||||
|
||||
message MulticastGroupQueueItem {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "ApplicationProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "DeviceProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "chirpstack-api/common/common.proto";
|
||||
import "google/api/annotations.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "DeviceProfileProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "DeviceProfileTemplateProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "FrameLogProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "chirpstack-api/common/common.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "GatewayProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
@ -186,6 +187,9 @@ message ListGatewaysRequest {
|
||||
// Tenant ID (UUID) to filter gateways on.
|
||||
// To list all gateways as a global admin user, this field can be left blank.
|
||||
string tenant_id = 4;
|
||||
|
||||
// Multicast-group ID (UUID) to filter gateways on.
|
||||
string multicast_group_id = 5;
|
||||
}
|
||||
|
||||
message ListGatewaysResponse {
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "InternalProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "google/protobuf/empty.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "MulticastGroupProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
@ -67,10 +68,25 @@ service MulticastGroupService {
|
||||
};
|
||||
}
|
||||
|
||||
// Add the given item to the multcast group queue.
|
||||
// Add a gateway to the multicast group.
|
||||
rpc AddGateway(AddGatewayToMulticastGroupRequest) returns (google.protobuf.Empty) {
|
||||
option(google.api.http) = {
|
||||
post: "/api/multicast-groups/{multicast_group_id}/gateways"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
|
||||
// Remove a gateway from the multicast group.
|
||||
rpc RemoveGateway(RemoveGatewayFromMulticastGroupRequest) returns (google.protobuf.Empty) {
|
||||
option(google.api.http) = {
|
||||
delete: "/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}"
|
||||
};
|
||||
}
|
||||
|
||||
// Add the given item to the multicast group queue.
|
||||
rpc Enqueue(EnqueueMulticastGroupQueueItemRequest) returns (EnqueueMulticastGroupQueueItemResponse) {
|
||||
option(google.api.http) = {
|
||||
post: "/api/multcast-groups/{queue_item.multicast_group_id}/queue"
|
||||
post: "/api/multicast-groups/{queue_item.multicast_group_id}/queue"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
@ -98,6 +114,19 @@ enum MulticastGroupType {
|
||||
CLASS_B = 1;
|
||||
}
|
||||
|
||||
enum MulticastGroupSchedulingType {
|
||||
// Delay.
|
||||
// If multicast downlinks must be sent through multiple gateways, then
|
||||
// these will be sent one by one with a delay between each gateway.
|
||||
DELAY = 0;
|
||||
|
||||
// Time.
|
||||
// If multicast downlinks must be sent through multiple gateways, then
|
||||
// these will be sent simultaneously using GPS time synchronization.
|
||||
// Note that this does require GPS time-synchronized LoRa gateways.
|
||||
GPS_TIME = 1;
|
||||
}
|
||||
|
||||
message MulticastGroup {
|
||||
// ID (UUID).
|
||||
// This will be generated automatically on create.
|
||||
@ -136,6 +165,9 @@ message MulticastGroup {
|
||||
|
||||
// Ping-slot period (only for Class-B).
|
||||
uint32 class_b_ping_slot_period = 12;
|
||||
|
||||
// Scheduling type (only for Class-C).
|
||||
MulticastGroupSchedulingType class_c_scheduling_type = 13;
|
||||
}
|
||||
|
||||
message MulticastGroupListItem {
|
||||
@ -232,6 +264,22 @@ message RemoveDeviceFromMulticastGroupRequest {
|
||||
string dev_eui = 2;
|
||||
}
|
||||
|
||||
message AddGatewayToMulticastGroupRequest {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
||||
// Gateway ID (HEX encoded).
|
||||
string gateway_id = 2;
|
||||
}
|
||||
|
||||
message RemoveGatewayFromMulticastGroupRequest {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
||||
// Gateway ID (HEX encoded).
|
||||
string gateway_id = 2;
|
||||
}
|
||||
|
||||
message MulticastGroupQueueItem {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "RequestLogProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "chirpstack-api/common/common.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "TenantProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "UserProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/common";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "CommonProto";
|
||||
option csharp_namespace = "Chirpstack.Common";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
||||
|
1
api/python/proto/chirpstack-api/gw/gw.proto
vendored
1
api/python/proto/chirpstack-api/gw/gw.proto
vendored
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/gw";
|
||||
option java_package = "io.chirpstack.api.gw";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "GatewayProto";
|
||||
option csharp_namespace = "Chirpstack.Gateway";
|
||||
|
||||
import "chirpstack-api/common/common.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/brocaar/chirpstack/api/go/v4/integration";
|
||||
option java_package = "io.chirpstack.api.integration";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "IntegrationProto";
|
||||
option csharp_namespace = "Chirpstack.Integration";
|
||||
|
||||
import "chirpstack-api/common/common.proto";
|
||||
import "chirpstack-api/gw/gw.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/meta";
|
||||
option java_package = "io.chirpstack.api.meta";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "MetaProto";
|
||||
option csharp_namespace = "Chirpstack.Meta";
|
||||
|
||||
import "chirpstack-api/common/common.proto";
|
||||
import "chirpstack-api/gw/gw.proto";
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -18,14 +18,14 @@ from chirpstack_api.common import common_pb2 as chirpstack__api_dot_common_dot_c
|
||||
from chirpstack_api.api import device_profile_pb2 as chirpstack__api_dot_api_dot_device__profile__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0chirpstack-api/api/device_profile_template.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\"chirpstack-api/common/common.proto\x1a\'chirpstack-api/api/device_profile.proto\"\xf6\x07\n\x15\x44\x65viceProfileTemplate\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06vendor\x18\x04 \x01(\t\x12\x10\n\x08\x66irmware\x18\x05 \x01(\t\x12\x1e\n\x06region\x18\x06 \x01(\x0e\x32\x0e.common.Region\x12\'\n\x0bmac_version\x18\x07 \x01(\x0e\x32\x12.common.MacVersion\x12\x36\n\x13reg_params_revision\x18\x08 \x01(\x0e\x32\x19.common.RegParamsRevision\x12\x18\n\x10\x61\x64r_algorithm_id\x18\t \x01(\t\x12\x30\n\x15payload_codec_runtime\x18\n \x01(\x0e\x32\x11.api.CodecRuntime\x12\x1c\n\x14payload_codec_script\x18\x0b \x01(\t\x12\x1f\n\x17\x66lush_queue_on_activate\x18\x0c \x01(\x08\x12\x17\n\x0fuplink_interval\x18\r \x01(\r\x12\"\n\x1a\x64\x65vice_status_req_interval\x18\x0e \x01(\r\x12\x15\n\rsupports_otaa\x18\x0f \x01(\x08\x12\x18\n\x10supports_class_b\x18\x10 \x01(\x08\x12\x18\n\x10supports_class_c\x18\x11 \x01(\x08\x12\x17\n\x0f\x63lass_b_timeout\x18\x12 \x01(\r\x12\x1e\n\x16\x63lass_b_ping_slot_nb_k\x18\x13 \x01(\r\x12\x1c\n\x14\x63lass_b_ping_slot_dr\x18\x14 \x01(\r\x12\x1e\n\x16\x63lass_b_ping_slot_freq\x18\x15 \x01(\r\x12\x17\n\x0f\x63lass_c_timeout\x18\x16 \x01(\r\x12\x15\n\rabp_rx1_delay\x18\x17 \x01(\r\x12\x19\n\x11\x61\x62p_rx1_dr_offset\x18\x18 \x01(\r\x12\x12\n\nabp_rx2_dr\x18\x19 \x01(\r\x12\x14\n\x0c\x61\x62p_rx2_freq\x18\x1a \x01(\r\x12\x32\n\x04tags\x18\x1b \x03(\x0b\x32$.api.DeviceProfileTemplate.TagsEntry\x12\x42\n\x0cmeasurements\x18\x1c \x03(\x0b\x32,.api.DeviceProfileTemplate.MeasurementsEntry\x12 \n\x18\x61uto_detect_measurements\x18\x1d \x01(\x08\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x45\n\x11MeasurementsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.api.Measurement:\x02\x38\x01\"\x87\x03\n\x1d\x44\x65viceProfileTemplateListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x0e\n\x06vendor\x18\x05 \x01(\t\x12\x10\n\x08\x66irmware\x18\x06 \x01(\t\x12\x1e\n\x06region\x18\x07 \x01(\x0e\x32\x0e.common.Region\x12\'\n\x0bmac_version\x18\x08 \x01(\x0e\x32\x12.common.MacVersion\x12\x36\n\x13reg_params_revision\x18\t \x01(\x0e\x32\x19.common.RegParamsRevision\x12\x15\n\rsupports_otaa\x18\n \x01(\x08\x12\x18\n\x10supports_class_b\x18\x0b \x01(\x08\x12\x18\n\x10supports_class_c\x18\x0c \x01(\x08\"a\n\"CreateDeviceProfileTemplateRequest\x12;\n\x17\x64\x65vice_profile_template\x18\x01 \x01(\x0b\x32\x1a.api.DeviceProfileTemplate\"-\n\x1fGetDeviceProfileTemplateRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\xbf\x01\n GetDeviceProfileTemplateResponse\x12;\n\x17\x64\x65vice_profile_template\x18\x01 \x01(\x0b\x32\x1a.api.DeviceProfileTemplate\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"a\n\"UpdateDeviceProfileTemplateRequest\x12;\n\x17\x64\x65vice_profile_template\x18\x01 \x01(\x0b\x32\x1a.api.DeviceProfileTemplate\"0\n\"DeleteDeviceProfileTemplateRequest\x12\n\n\x02id\x18\x01 \x01(\t\"B\n!ListDeviceProfileTemplatesRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\"m\n\"ListDeviceProfileTemplatesResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12\x32\n\x06result\x18\x02 \x03(\x0b\x32\".api.DeviceProfileTemplateListItem2\x9d\x05\n\x1c\x44\x65viceProfileTemplateService\x12s\n\x06\x43reate\x12\'.api.CreateDeviceProfileTemplateRequest\x1a\x16.google.protobuf.Empty\"(\x82\xd3\xe4\x93\x02\"\"\x1d/api/device-profile-templates:\x01*\x12~\n\x03Get\x12$.api.GetDeviceProfileTemplateRequest\x1a%.api.GetDeviceProfileTemplateResponse\"*\x82\xd3\xe4\x93\x02$\x12\"/api/device-profile-templates/{id}\x12\x90\x01\n\x06Update\x12\'.api.UpdateDeviceProfileTemplateRequest\x1a\x16.google.protobuf.Empty\"E\x82\xd3\xe4\x93\x02?\x1a:/api/device-profile-templates/{device_profile_template.id}:\x01*\x12u\n\x06\x44\x65lete\x12\'.api.DeleteDeviceProfileTemplateRequest\x1a\x16.google.protobuf.Empty\"*\x82\xd3\xe4\x93\x02$*\"/api/device-profile-templates/{id}\x12~\n\x04List\x12&.api.ListDeviceProfileTemplatesRequest\x1a\'.api.ListDeviceProfileTemplatesResponse\"%\x82\xd3\xe4\x93\x02\x1f\x12\x1d/api/device-profile-templatesBa\n\x11io.chirpstack.apiB\x1a\x44\x65viceProfileTemplateProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/apib\x06proto3')
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0chirpstack-api/api/device_profile_template.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\"chirpstack-api/common/common.proto\x1a\'chirpstack-api/api/device_profile.proto\"\xf6\x07\n\x15\x44\x65viceProfileTemplate\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06vendor\x18\x04 \x01(\t\x12\x10\n\x08\x66irmware\x18\x05 \x01(\t\x12\x1e\n\x06region\x18\x06 \x01(\x0e\x32\x0e.common.Region\x12\'\n\x0bmac_version\x18\x07 \x01(\x0e\x32\x12.common.MacVersion\x12\x36\n\x13reg_params_revision\x18\x08 \x01(\x0e\x32\x19.common.RegParamsRevision\x12\x18\n\x10\x61\x64r_algorithm_id\x18\t \x01(\t\x12\x30\n\x15payload_codec_runtime\x18\n \x01(\x0e\x32\x11.api.CodecRuntime\x12\x1c\n\x14payload_codec_script\x18\x0b \x01(\t\x12\x1f\n\x17\x66lush_queue_on_activate\x18\x0c \x01(\x08\x12\x17\n\x0fuplink_interval\x18\r \x01(\r\x12\"\n\x1a\x64\x65vice_status_req_interval\x18\x0e \x01(\r\x12\x15\n\rsupports_otaa\x18\x0f \x01(\x08\x12\x18\n\x10supports_class_b\x18\x10 \x01(\x08\x12\x18\n\x10supports_class_c\x18\x11 \x01(\x08\x12\x17\n\x0f\x63lass_b_timeout\x18\x12 \x01(\r\x12\x1e\n\x16\x63lass_b_ping_slot_nb_k\x18\x13 \x01(\r\x12\x1c\n\x14\x63lass_b_ping_slot_dr\x18\x14 \x01(\r\x12\x1e\n\x16\x63lass_b_ping_slot_freq\x18\x15 \x01(\r\x12\x17\n\x0f\x63lass_c_timeout\x18\x16 \x01(\r\x12\x15\n\rabp_rx1_delay\x18\x17 \x01(\r\x12\x19\n\x11\x61\x62p_rx1_dr_offset\x18\x18 \x01(\r\x12\x12\n\nabp_rx2_dr\x18\x19 \x01(\r\x12\x14\n\x0c\x61\x62p_rx2_freq\x18\x1a \x01(\r\x12\x32\n\x04tags\x18\x1b \x03(\x0b\x32$.api.DeviceProfileTemplate.TagsEntry\x12\x42\n\x0cmeasurements\x18\x1c \x03(\x0b\x32,.api.DeviceProfileTemplate.MeasurementsEntry\x12 \n\x18\x61uto_detect_measurements\x18\x1d \x01(\x08\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x45\n\x11MeasurementsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1f\n\x05value\x18\x02 \x01(\x0b\x32\x10.api.Measurement:\x02\x38\x01\"\x87\x03\n\x1d\x44\x65viceProfileTemplateListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x0e\n\x06vendor\x18\x05 \x01(\t\x12\x10\n\x08\x66irmware\x18\x06 \x01(\t\x12\x1e\n\x06region\x18\x07 \x01(\x0e\x32\x0e.common.Region\x12\'\n\x0bmac_version\x18\x08 \x01(\x0e\x32\x12.common.MacVersion\x12\x36\n\x13reg_params_revision\x18\t \x01(\x0e\x32\x19.common.RegParamsRevision\x12\x15\n\rsupports_otaa\x18\n \x01(\x08\x12\x18\n\x10supports_class_b\x18\x0b \x01(\x08\x12\x18\n\x10supports_class_c\x18\x0c \x01(\x08\"a\n\"CreateDeviceProfileTemplateRequest\x12;\n\x17\x64\x65vice_profile_template\x18\x01 \x01(\x0b\x32\x1a.api.DeviceProfileTemplate\"-\n\x1fGetDeviceProfileTemplateRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\xbf\x01\n GetDeviceProfileTemplateResponse\x12;\n\x17\x64\x65vice_profile_template\x18\x01 \x01(\x0b\x32\x1a.api.DeviceProfileTemplate\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"a\n\"UpdateDeviceProfileTemplateRequest\x12;\n\x17\x64\x65vice_profile_template\x18\x01 \x01(\x0b\x32\x1a.api.DeviceProfileTemplate\"0\n\"DeleteDeviceProfileTemplateRequest\x12\n\n\x02id\x18\x01 \x01(\t\"B\n!ListDeviceProfileTemplatesRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\"m\n\"ListDeviceProfileTemplatesResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12\x32\n\x06result\x18\x02 \x03(\x0b\x32\".api.DeviceProfileTemplateListItem2\x9d\x05\n\x1c\x44\x65viceProfileTemplateService\x12s\n\x06\x43reate\x12\'.api.CreateDeviceProfileTemplateRequest\x1a\x16.google.protobuf.Empty\"(\x82\xd3\xe4\x93\x02\"\"\x1d/api/device-profile-templates:\x01*\x12~\n\x03Get\x12$.api.GetDeviceProfileTemplateRequest\x1a%.api.GetDeviceProfileTemplateResponse\"*\x82\xd3\xe4\x93\x02$\x12\"/api/device-profile-templates/{id}\x12\x90\x01\n\x06Update\x12\'.api.UpdateDeviceProfileTemplateRequest\x1a\x16.google.protobuf.Empty\"E\x82\xd3\xe4\x93\x02?\x1a:/api/device-profile-templates/{device_profile_template.id}:\x01*\x12u\n\x06\x44\x65lete\x12\'.api.DeleteDeviceProfileTemplateRequest\x1a\x16.google.protobuf.Empty\"*\x82\xd3\xe4\x93\x02$*\"/api/device-profile-templates/{id}\x12~\n\x04List\x12&.api.ListDeviceProfileTemplatesRequest\x1a\'.api.ListDeviceProfileTemplatesResponse\"%\x82\xd3\xe4\x93\x02\x1f\x12\x1d/api/device-profile-templatesBr\n\x11io.chirpstack.apiB\x1a\x44\x65viceProfileTemplateProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/api\xaa\x02\x0e\x43hirpstack.Apib\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.device_profile_template_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\032DeviceProfileTemplateProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api'
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\032DeviceProfileTemplateProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
|
||||
_DEVICEPROFILETEMPLATE_TAGSENTRY._options = None
|
||||
_DEVICEPROFILETEMPLATE_TAGSENTRY._serialized_options = b'8\001'
|
||||
_DEVICEPROFILETEMPLATE_MEASUREMENTSENTRY._options = None
|
||||
|
@ -16,14 +16,14 @@ from chirpstack_api.common import common_pb2 as chirpstack__api_dot_common_dot_c
|
||||
from chirpstack_api.gw import gw_pb2 as chirpstack__api_dot_gw_dot_gw__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"chirpstack-api/api/frame_log.proto\x12\x03\x61pi\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\"chirpstack-api/common/common.proto\x1a\x1a\x63hirpstack-api/gw/gw.proto\"\xf7\x01\n\x0eUplinkFrameLog\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12!\n\x07tx_info\x18\x02 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x03 \x03(\x0b\x32\x10.gw.UplinkRxInfo\x12\x1d\n\x06m_type\x18\x04 \x01(\x0e\x32\r.common.MType\x12\x10\n\x08\x64\x65v_addr\x18\x05 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x06 \x01(\t\x12(\n\x04time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1e\n\x16plaintext_mac_commands\x18\x08 \x01(\x08\"\x81\x02\n\x10\x44ownlinkFrameLog\x12(\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0bphy_payload\x18\x02 \x01(\x0c\x12#\n\x07tx_info\x18\x03 \x01(\x0b\x32\x12.gw.DownlinkTxInfo\x12\x13\n\x0b\x64ownlink_id\x18\x04 \x01(\r\x12\x12\n\ngateway_id\x18\x05 \x01(\t\x12\x1d\n\x06m_type\x18\x06 \x01(\x0e\x32\r.common.MType\x12\x10\n\x08\x64\x65v_addr\x18\x07 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x08 \x01(\t\x12\x1e\n\x16plaintext_mac_commands\x18\t \x01(\x08\x42T\n\x11io.chirpstack.apiB\rFrameLogProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/apib\x06proto3')
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"chirpstack-api/api/frame_log.proto\x12\x03\x61pi\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\"chirpstack-api/common/common.proto\x1a\x1a\x63hirpstack-api/gw/gw.proto\"\xf7\x01\n\x0eUplinkFrameLog\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12!\n\x07tx_info\x18\x02 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x03 \x03(\x0b\x32\x10.gw.UplinkRxInfo\x12\x1d\n\x06m_type\x18\x04 \x01(\x0e\x32\r.common.MType\x12\x10\n\x08\x64\x65v_addr\x18\x05 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x06 \x01(\t\x12(\n\x04time\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1e\n\x16plaintext_mac_commands\x18\x08 \x01(\x08\"\x81\x02\n\x10\x44ownlinkFrameLog\x12(\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0bphy_payload\x18\x02 \x01(\x0c\x12#\n\x07tx_info\x18\x03 \x01(\x0b\x32\x12.gw.DownlinkTxInfo\x12\x13\n\x0b\x64ownlink_id\x18\x04 \x01(\r\x12\x12\n\ngateway_id\x18\x05 \x01(\t\x12\x1d\n\x06m_type\x18\x06 \x01(\x0e\x32\r.common.MType\x12\x10\n\x08\x64\x65v_addr\x18\x07 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x08 \x01(\t\x12\x1e\n\x16plaintext_mac_commands\x18\t \x01(\x08\x42\x65\n\x11io.chirpstack.apiB\rFrameLogProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/api\xaa\x02\x0e\x43hirpstack.Apib\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.frame_log_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\rFrameLogProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api'
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\rFrameLogProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
|
||||
_UPLINKFRAMELOG._serialized_start=141
|
||||
_UPLINKFRAMELOG._serialized_end=388
|
||||
_DOWNLINKFRAMELOG._serialized_start=391
|
||||
|
34
api/python/src/chirpstack_api/api/gateway_pb2.py
vendored
34
api/python/src/chirpstack_api/api/gateway_pb2.py
vendored
File diff suppressed because one or more lines are too long
@ -157,16 +157,18 @@ class GetGatewayResponse(_message.Message):
|
||||
def __init__(self, gateway: _Optional[_Union[Gateway, _Mapping]] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., updated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., last_seen_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ...
|
||||
|
||||
class ListGatewaysRequest(_message.Message):
|
||||
__slots__ = ["limit", "offset", "search", "tenant_id"]
|
||||
__slots__ = ["limit", "multicast_group_id", "offset", "search", "tenant_id"]
|
||||
LIMIT_FIELD_NUMBER: _ClassVar[int]
|
||||
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
OFFSET_FIELD_NUMBER: _ClassVar[int]
|
||||
SEARCH_FIELD_NUMBER: _ClassVar[int]
|
||||
TENANT_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
limit: int
|
||||
multicast_group_id: str
|
||||
offset: int
|
||||
search: str
|
||||
tenant_id: str
|
||||
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., search: _Optional[str] = ..., tenant_id: _Optional[str] = ...) -> None: ...
|
||||
def __init__(self, limit: _Optional[int] = ..., offset: _Optional[int] = ..., search: _Optional[str] = ..., tenant_id: _Optional[str] = ..., multicast_group_id: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class ListGatewaysResponse(_message.Message):
|
||||
__slots__ = ["result", "total_count"]
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -10,7 +10,9 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
|
||||
|
||||
CLASS_B: MulticastGroupType
|
||||
CLASS_C: MulticastGroupType
|
||||
DELAY: MulticastGroupSchedulingType
|
||||
DESCRIPTOR: _descriptor.FileDescriptor
|
||||
GPS_TIME: MulticastGroupSchedulingType
|
||||
|
||||
class AddDeviceToMulticastGroupRequest(_message.Message):
|
||||
__slots__ = ["dev_eui", "multicast_group_id"]
|
||||
@ -20,6 +22,14 @@ class AddDeviceToMulticastGroupRequest(_message.Message):
|
||||
multicast_group_id: str
|
||||
def __init__(self, multicast_group_id: _Optional[str] = ..., dev_eui: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class AddGatewayToMulticastGroupRequest(_message.Message):
|
||||
__slots__ = ["gateway_id", "multicast_group_id"]
|
||||
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
gateway_id: str
|
||||
multicast_group_id: str
|
||||
def __init__(self, multicast_group_id: _Optional[str] = ..., gateway_id: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class CreateMulticastGroupRequest(_message.Message):
|
||||
__slots__ = ["multicast_group"]
|
||||
MULTICAST_GROUP_FIELD_NUMBER: _ClassVar[int]
|
||||
@ -105,9 +115,10 @@ class ListMulticastGroupsResponse(_message.Message):
|
||||
def __init__(self, total_count: _Optional[int] = ..., result: _Optional[_Iterable[_Union[MulticastGroupListItem, _Mapping]]] = ...) -> None: ...
|
||||
|
||||
class MulticastGroup(_message.Message):
|
||||
__slots__ = ["application_id", "class_b_ping_slot_period", "dr", "f_cnt", "frequency", "group_type", "id", "mc_addr", "mc_app_s_key", "mc_nwk_s_key", "name", "region"]
|
||||
__slots__ = ["application_id", "class_b_ping_slot_period", "class_c_scheduling_type", "dr", "f_cnt", "frequency", "group_type", "id", "mc_addr", "mc_app_s_key", "mc_nwk_s_key", "name", "region"]
|
||||
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
CLASS_B_PING_SLOT_PERIOD_FIELD_NUMBER: _ClassVar[int]
|
||||
CLASS_C_SCHEDULING_TYPE_FIELD_NUMBER: _ClassVar[int]
|
||||
DR_FIELD_NUMBER: _ClassVar[int]
|
||||
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
|
||||
F_CNT_FIELD_NUMBER: _ClassVar[int]
|
||||
@ -120,6 +131,7 @@ class MulticastGroup(_message.Message):
|
||||
REGION_FIELD_NUMBER: _ClassVar[int]
|
||||
application_id: str
|
||||
class_b_ping_slot_period: int
|
||||
class_c_scheduling_type: MulticastGroupSchedulingType
|
||||
dr: int
|
||||
f_cnt: int
|
||||
frequency: int
|
||||
@ -130,7 +142,7 @@ class MulticastGroup(_message.Message):
|
||||
mc_nwk_s_key: str
|
||||
name: str
|
||||
region: _common_pb2.Region
|
||||
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., application_id: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mc_addr: _Optional[str] = ..., mc_nwk_s_key: _Optional[str] = ..., mc_app_s_key: _Optional[str] = ..., f_cnt: _Optional[int] = ..., group_type: _Optional[_Union[MulticastGroupType, str]] = ..., dr: _Optional[int] = ..., frequency: _Optional[int] = ..., class_b_ping_slot_period: _Optional[int] = ...) -> None: ...
|
||||
def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., application_id: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mc_addr: _Optional[str] = ..., mc_nwk_s_key: _Optional[str] = ..., mc_app_s_key: _Optional[str] = ..., f_cnt: _Optional[int] = ..., group_type: _Optional[_Union[MulticastGroupType, str]] = ..., dr: _Optional[int] = ..., frequency: _Optional[int] = ..., class_b_ping_slot_period: _Optional[int] = ..., class_c_scheduling_type: _Optional[_Union[MulticastGroupSchedulingType, str]] = ...) -> None: ...
|
||||
|
||||
class MulticastGroupListItem(_message.Message):
|
||||
__slots__ = ["created_at", "group_type", "id", "name", "region", "updated_at"]
|
||||
@ -168,6 +180,14 @@ class RemoveDeviceFromMulticastGroupRequest(_message.Message):
|
||||
multicast_group_id: str
|
||||
def __init__(self, multicast_group_id: _Optional[str] = ..., dev_eui: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class RemoveGatewayFromMulticastGroupRequest(_message.Message):
|
||||
__slots__ = ["gateway_id", "multicast_group_id"]
|
||||
GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
MULTICAST_GROUP_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
gateway_id: str
|
||||
multicast_group_id: str
|
||||
def __init__(self, multicast_group_id: _Optional[str] = ..., gateway_id: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class UpdateMulticastGroupRequest(_message.Message):
|
||||
__slots__ = ["multicast_group"]
|
||||
MULTICAST_GROUP_FIELD_NUMBER: _ClassVar[int]
|
||||
@ -176,3 +196,6 @@ class UpdateMulticastGroupRequest(_message.Message):
|
||||
|
||||
class MulticastGroupType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
||||
class MulticastGroupSchedulingType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
||||
__slots__ = []
|
||||
|
@ -51,6 +51,16 @@ class MulticastGroupServiceStub(object):
|
||||
request_serializer=chirpstack__api_dot_api_dot_multicast__group__pb2.RemoveDeviceFromMulticastGroupRequest.SerializeToString,
|
||||
response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
|
||||
)
|
||||
self.AddGateway = channel.unary_unary(
|
||||
'/api.MulticastGroupService/AddGateway',
|
||||
request_serializer=chirpstack__api_dot_api_dot_multicast__group__pb2.AddGatewayToMulticastGroupRequest.SerializeToString,
|
||||
response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
|
||||
)
|
||||
self.RemoveGateway = channel.unary_unary(
|
||||
'/api.MulticastGroupService/RemoveGateway',
|
||||
request_serializer=chirpstack__api_dot_api_dot_multicast__group__pb2.RemoveGatewayFromMulticastGroupRequest.SerializeToString,
|
||||
response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
|
||||
)
|
||||
self.Enqueue = channel.unary_unary(
|
||||
'/api.MulticastGroupService/Enqueue',
|
||||
request_serializer=chirpstack__api_dot_api_dot_multicast__group__pb2.EnqueueMulticastGroupQueueItemRequest.SerializeToString,
|
||||
@ -121,8 +131,22 @@ class MulticastGroupServiceServicer(object):
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def AddGateway(self, request, context):
|
||||
"""Add a gateway to the multicast group.
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def RemoveGateway(self, request, context):
|
||||
"""Remove a gateway from the multicast group.
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def Enqueue(self, request, context):
|
||||
"""Add the given item to the multcast group queue.
|
||||
"""Add the given item to the multicast group queue.
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
@ -180,6 +204,16 @@ def add_MulticastGroupServiceServicer_to_server(servicer, server):
|
||||
request_deserializer=chirpstack__api_dot_api_dot_multicast__group__pb2.RemoveDeviceFromMulticastGroupRequest.FromString,
|
||||
response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
|
||||
),
|
||||
'AddGateway': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.AddGateway,
|
||||
request_deserializer=chirpstack__api_dot_api_dot_multicast__group__pb2.AddGatewayToMulticastGroupRequest.FromString,
|
||||
response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
|
||||
),
|
||||
'RemoveGateway': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.RemoveGateway,
|
||||
request_deserializer=chirpstack__api_dot_api_dot_multicast__group__pb2.RemoveGatewayFromMulticastGroupRequest.FromString,
|
||||
response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
|
||||
),
|
||||
'Enqueue': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.Enqueue,
|
||||
request_deserializer=chirpstack__api_dot_api_dot_multicast__group__pb2.EnqueueMulticastGroupQueueItemRequest.FromString,
|
||||
@ -325,6 +359,40 @@ class MulticastGroupService(object):
|
||||
options, channel_credentials,
|
||||
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
||||
|
||||
@staticmethod
|
||||
def AddGateway(request,
|
||||
target,
|
||||
options=(),
|
||||
channel_credentials=None,
|
||||
call_credentials=None,
|
||||
insecure=False,
|
||||
compression=None,
|
||||
wait_for_ready=None,
|
||||
timeout=None,
|
||||
metadata=None):
|
||||
return grpc.experimental.unary_unary(request, target, '/api.MulticastGroupService/AddGateway',
|
||||
chirpstack__api_dot_api_dot_multicast__group__pb2.AddGatewayToMulticastGroupRequest.SerializeToString,
|
||||
google_dot_protobuf_dot_empty__pb2.Empty.FromString,
|
||||
options, channel_credentials,
|
||||
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
||||
|
||||
@staticmethod
|
||||
def RemoveGateway(request,
|
||||
target,
|
||||
options=(),
|
||||
channel_credentials=None,
|
||||
call_credentials=None,
|
||||
insecure=False,
|
||||
compression=None,
|
||||
wait_for_ready=None,
|
||||
timeout=None,
|
||||
metadata=None):
|
||||
return grpc.experimental.unary_unary(request, target, '/api.MulticastGroupService/RemoveGateway',
|
||||
chirpstack__api_dot_api_dot_multicast__group__pb2.RemoveGatewayFromMulticastGroupRequest.SerializeToString,
|
||||
google_dot_protobuf_dot_empty__pb2.Empty.FromString,
|
||||
options, channel_credentials,
|
||||
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
||||
|
||||
@staticmethod
|
||||
def Enqueue(request,
|
||||
target,
|
||||
|
@ -16,14 +16,14 @@ from chirpstack_api.common import common_pb2 as chirpstack__api_dot_common_dot_c
|
||||
from chirpstack_api.gw import gw_pb2 as chirpstack__api_dot_gw_dot_gw__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$chirpstack-api/api/request_log.proto\x12\x03\x61pi\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\"chirpstack-api/common/common.proto\x1a\x1a\x63hirpstack-api/gw/gw.proto\"\x8f\x01\n\nRequestLog\x12\x0f\n\x07service\x18\x01 \x01(\t\x12\x0e\n\x06method\x18\x02 \x01(\t\x12/\n\x08metadata\x18\x03 \x03(\x0b\x32\x1d.api.RequestLog.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42V\n\x11io.chirpstack.apiB\x0fRequestLogProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/apib\x06proto3')
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$chirpstack-api/api/request_log.proto\x12\x03\x61pi\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\"chirpstack-api/common/common.proto\x1a\x1a\x63hirpstack-api/gw/gw.proto\"\x8f\x01\n\nRequestLog\x12\x0f\n\x07service\x18\x01 \x01(\t\x12\x0e\n\x06method\x18\x02 \x01(\t\x12/\n\x08metadata\x18\x03 \x03(\x0b\x32\x1d.api.RequestLog.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42g\n\x11io.chirpstack.apiB\x0fRequestLogProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/api\xaa\x02\x0e\x43hirpstack.Apib\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.request_log_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\017RequestLogProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api'
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\017RequestLogProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
|
||||
_REQUESTLOG_METADATAENTRY._options = None
|
||||
_REQUESTLOG_METADATAENTRY._serialized_options = b'8\001'
|
||||
_REQUESTLOG._serialized_start=143
|
||||
|
File diff suppressed because one or more lines are too long
@ -16,14 +16,14 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__
|
||||
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x63hirpstack-api/api/user.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\"T\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08is_admin\x18\x04 \x01(\x08\x12\x11\n\tis_active\x18\x05 \x01(\x08\x12\r\n\x05\x65mail\x18\x06 \x01(\t\x12\x0c\n\x04note\x18\x07 \x01(\t\"\xae\x01\n\x0cUserListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\r\n\x05\x65mail\x18\x04 \x01(\t\x12\x10\n\x08is_admin\x18\x05 \x01(\x08\x12\x11\n\tis_active\x18\x06 \x01(\x08\"d\n\nUserTenant\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x10\n\x08is_admin\x18\x02 \x01(\x08\x12\x17\n\x0fis_device_admin\x18\x03 \x01(\x08\x12\x18\n\x10is_gateway_admin\x18\x04 \x01(\x08\"`\n\x11\x43reateUserRequest\x12\x17\n\x04user\x18\x01 \x01(\x0b\x32\t.api.User\x12\x10\n\x08password\x18\x02 \x01(\t\x12 \n\x07tenants\x18\x03 \x03(\x0b\x32\x0f.api.UserTenant\" \n\x12\x43reateUserResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x1c\n\x0eGetUserRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x8a\x01\n\x0fGetUserResponse\x12\x17\n\x04user\x18\x01 \x01(\x0b\x32\t.api.User\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\",\n\x11UpdateUserRequest\x12\x17\n\x04user\x18\x01 \x01(\x0b\x32\t.api.User\"\x1f\n\x11\x44\x65leteUserRequest\x12\n\n\x02id\x18\x01 \x01(\t\"1\n\x10ListUsersRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\"K\n\x11ListUsersResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12!\n\x06result\x18\x02 \x03(\x0b\x32\x11.api.UserListItem\">\n\x19UpdateUserPasswordRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t2\x97\x04\n\x0bUserService\x12P\n\x06\x43reate\x12\x16.api.CreateUserRequest\x1a\x17.api.CreateUserResponse\"\x15\x82\xd3\xe4\x93\x02\x0f\"\n/api/users:\x01*\x12I\n\x03Get\x12\x13.api.GetUserRequest\x1a\x14.api.GetUserResponse\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/users/{id}\x12Y\n\x06Update\x12\x16.api.UpdateUserRequest\x1a\x16.google.protobuf.Empty\"\x1f\x82\xd3\xe4\x93\x02\x19\x1a\x14/api/users/{user.id}:\x01*\x12Q\n\x06\x44\x65lete\x12\x16.api.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\x17\x82\xd3\xe4\x93\x02\x11*\x0f/api/users/{id}\x12I\n\x04List\x12\x15.api.ListUsersRequest\x1a\x16.api.ListUsersResponse\"\x12\x82\xd3\xe4\x93\x02\x0c\x12\n/api/users\x12r\n\x0eUpdatePassword\x12\x1e.api.UpdateUserPasswordRequest\x1a\x16.google.protobuf.Empty\"(\x82\xd3\xe4\x93\x02\"\"\x1d/api/users/{user_id}/password:\x01*BP\n\x11io.chirpstack.apiB\tUserProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/apib\x06proto3')
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x63hirpstack-api/api/user.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\"T\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08is_admin\x18\x04 \x01(\x08\x12\x11\n\tis_active\x18\x05 \x01(\x08\x12\r\n\x05\x65mail\x18\x06 \x01(\t\x12\x0c\n\x04note\x18\x07 \x01(\t\"\xae\x01\n\x0cUserListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\r\n\x05\x65mail\x18\x04 \x01(\t\x12\x10\n\x08is_admin\x18\x05 \x01(\x08\x12\x11\n\tis_active\x18\x06 \x01(\x08\"d\n\nUserTenant\x12\x11\n\ttenant_id\x18\x01 \x01(\t\x12\x10\n\x08is_admin\x18\x02 \x01(\x08\x12\x17\n\x0fis_device_admin\x18\x03 \x01(\x08\x12\x18\n\x10is_gateway_admin\x18\x04 \x01(\x08\"`\n\x11\x43reateUserRequest\x12\x17\n\x04user\x18\x01 \x01(\x0b\x32\t.api.User\x12\x10\n\x08password\x18\x02 \x01(\t\x12 \n\x07tenants\x18\x03 \x03(\x0b\x32\x0f.api.UserTenant\" \n\x12\x43reateUserResponse\x12\n\n\x02id\x18\x01 \x01(\t\"\x1c\n\x0eGetUserRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x8a\x01\n\x0fGetUserResponse\x12\x17\n\x04user\x18\x01 \x01(\x0b\x32\t.api.User\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\",\n\x11UpdateUserRequest\x12\x17\n\x04user\x18\x01 \x01(\x0b\x32\t.api.User\"\x1f\n\x11\x44\x65leteUserRequest\x12\n\n\x02id\x18\x01 \x01(\t\"1\n\x10ListUsersRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\"K\n\x11ListUsersResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12!\n\x06result\x18\x02 \x03(\x0b\x32\x11.api.UserListItem\">\n\x19UpdateUserPasswordRequest\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t2\x97\x04\n\x0bUserService\x12P\n\x06\x43reate\x12\x16.api.CreateUserRequest\x1a\x17.api.CreateUserResponse\"\x15\x82\xd3\xe4\x93\x02\x0f\"\n/api/users:\x01*\x12I\n\x03Get\x12\x13.api.GetUserRequest\x1a\x14.api.GetUserResponse\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/users/{id}\x12Y\n\x06Update\x12\x16.api.UpdateUserRequest\x1a\x16.google.protobuf.Empty\"\x1f\x82\xd3\xe4\x93\x02\x19\x1a\x14/api/users/{user.id}:\x01*\x12Q\n\x06\x44\x65lete\x12\x16.api.DeleteUserRequest\x1a\x16.google.protobuf.Empty\"\x17\x82\xd3\xe4\x93\x02\x11*\x0f/api/users/{id}\x12I\n\x04List\x12\x15.api.ListUsersRequest\x1a\x16.api.ListUsersResponse\"\x12\x82\xd3\xe4\x93\x02\x0c\x12\n/api/users\x12r\n\x0eUpdatePassword\x12\x1e.api.UpdateUserPasswordRequest\x1a\x16.google.protobuf.Empty\"(\x82\xd3\xe4\x93\x02\"\"\x1d/api/users/{user_id}/password:\x01*Ba\n\x11io.chirpstack.apiB\tUserProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/api\xaa\x02\x0e\x43hirpstack.Apib\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.api.user_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\tUserProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api'
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\tUserProtoP\001Z.github.com/chirpstack/chirpstack/api/go/v4/api\252\002\016Chirpstack.Api'
|
||||
_USERSERVICE.methods_by_name['Create']._options = None
|
||||
_USERSERVICE.methods_by_name['Create']._serialized_options = b'\202\323\344\223\002\017\"\n/api/users:\001*'
|
||||
_USERSERVICE.methods_by_name['Get']._options = None
|
||||
|
@ -14,14 +14,14 @@ _sym_db = _symbol_database.Default()
|
||||
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"chirpstack-api/common/common.proto\x12\x06\x63ommon\x1a\x1fgoogle/protobuf/timestamp.proto\"{\n\x08Location\x12\x10\n\x08latitude\x18\x01 \x01(\x01\x12\x11\n\tlongitude\x18\x02 \x01(\x01\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x01\x12&\n\x06source\x18\x04 \x01(\x0e\x32\x16.common.LocationSource\x12\x10\n\x08\x61\x63\x63uracy\x18\x05 \x01(\x02\"1\n\x0bKeyEnvelope\x12\x11\n\tkek_label\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x65s_key\x18\x02 \x01(\x0c\"\x91\x01\n\x06Metric\x12\x0c\n\x04name\x18\x01 \x01(\t\x12.\n\ntimestamps\x18\x02 \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x08\x64\x61tasets\x18\x03 \x03(\x0b\x32\x15.common.MetricDataset\x12 \n\x04kind\x18\x04 \x01(\x0e\x32\x12.common.MetricKind\",\n\rMetricDataset\x12\r\n\x05label\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x03(\x02*,\n\nModulation\x12\x08\n\x04LORA\x10\x00\x12\x07\n\x03\x46SK\x10\x01\x12\x0b\n\x07LR_FHSS\x10\x02*\xaa\x01\n\x06Region\x12\t\n\x05\x45U868\x10\x00\x12\t\n\x05US915\x10\x02\x12\t\n\x05\x43N779\x10\x03\x12\t\n\x05\x45U433\x10\x04\x12\t\n\x05\x41U915\x10\x05\x12\t\n\x05\x43N470\x10\x06\x12\t\n\x05\x41S923\x10\x07\x12\x0b\n\x07\x41S923_2\x10\x0c\x12\x0b\n\x07\x41S923_3\x10\r\x12\x0b\n\x07\x41S923_4\x10\x0e\x12\t\n\x05KR920\x10\x08\x12\t\n\x05IN865\x10\t\x12\t\n\x05RU864\x10\n\x12\x0b\n\x07ISM2400\x10\x0b*\xb3\x01\n\x05MType\x12\x10\n\x0cJOIN_REQUEST\x10\x00\x12\x0f\n\x0bJOIN_ACCEPT\x10\x01\x12\x17\n\x13UNCONFIRMED_DATA_UP\x10\x02\x12\x19\n\x15UNCONFIRMED_DATA_DOWN\x10\x03\x12\x15\n\x11\x43ONFIRMED_DATA_UP\x10\x04\x12\x17\n\x13\x43ONFIRMED_DATA_DOWN\x10\x05\x12\x12\n\x0eREJOIN_REQUEST\x10\x06\x12\x0f\n\x0bPROPRIETARY\x10\x07*~\n\nMacVersion\x12\x11\n\rLORAWAN_1_0_0\x10\x00\x12\x11\n\rLORAWAN_1_0_1\x10\x01\x12\x11\n\rLORAWAN_1_0_2\x10\x02\x12\x11\n\rLORAWAN_1_0_3\x10\x03\x12\x11\n\rLORAWAN_1_0_4\x10\x04\x12\x11\n\rLORAWAN_1_1_0\x10\x05*e\n\x11RegParamsRevision\x12\x05\n\x01\x41\x10\x00\x12\x05\n\x01\x42\x10\x01\x12\x0f\n\x0bRP002_1_0_0\x10\x02\x12\x0f\n\x0bRP002_1_0_1\x10\x03\x12\x0f\n\x0bRP002_1_0_2\x10\x04\x12\x0f\n\x0bRP002_1_0_3\x10\x05*\x8e\x01\n\x0eLocationSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03GPS\x10\x01\x12\n\n\x06\x43ONFIG\x10\x02\x12\x15\n\x11GEO_RESOLVER_TDOA\x10\x03\x12\x15\n\x11GEO_RESOLVER_RSSI\x10\x04\x12\x15\n\x11GEO_RESOLVER_GNSS\x10\x05\x12\x15\n\x11GEO_RESOLVER_WIFI\x10\x06*+\n\x0b\x41ggregation\x12\x08\n\x04HOUR\x10\x00\x12\x07\n\x03\x44\x41Y\x10\x01\x12\t\n\x05MONTH\x10\x02*2\n\nMetricKind\x12\x0b\n\x07\x43OUNTER\x10\x00\x12\x0c\n\x08\x41\x42SOLUTE\x10\x01\x12\t\n\x05GAUGE\x10\x02\x42U\n\x11io.chirpstack.apiB\x0b\x43ommonProtoP\x01Z1github.com/chirpstack/chirpstack/api/go/v4/commonb\x06proto3')
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"chirpstack-api/common/common.proto\x12\x06\x63ommon\x1a\x1fgoogle/protobuf/timestamp.proto\"{\n\x08Location\x12\x10\n\x08latitude\x18\x01 \x01(\x01\x12\x11\n\tlongitude\x18\x02 \x01(\x01\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x01\x12&\n\x06source\x18\x04 \x01(\x0e\x32\x16.common.LocationSource\x12\x10\n\x08\x61\x63\x63uracy\x18\x05 \x01(\x02\"1\n\x0bKeyEnvelope\x12\x11\n\tkek_label\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x65s_key\x18\x02 \x01(\x0c\"\x91\x01\n\x06Metric\x12\x0c\n\x04name\x18\x01 \x01(\t\x12.\n\ntimestamps\x18\x02 \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x08\x64\x61tasets\x18\x03 \x03(\x0b\x32\x15.common.MetricDataset\x12 \n\x04kind\x18\x04 \x01(\x0e\x32\x12.common.MetricKind\",\n\rMetricDataset\x12\r\n\x05label\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x03(\x02*,\n\nModulation\x12\x08\n\x04LORA\x10\x00\x12\x07\n\x03\x46SK\x10\x01\x12\x0b\n\x07LR_FHSS\x10\x02*\xaa\x01\n\x06Region\x12\t\n\x05\x45U868\x10\x00\x12\t\n\x05US915\x10\x02\x12\t\n\x05\x43N779\x10\x03\x12\t\n\x05\x45U433\x10\x04\x12\t\n\x05\x41U915\x10\x05\x12\t\n\x05\x43N470\x10\x06\x12\t\n\x05\x41S923\x10\x07\x12\x0b\n\x07\x41S923_2\x10\x0c\x12\x0b\n\x07\x41S923_3\x10\r\x12\x0b\n\x07\x41S923_4\x10\x0e\x12\t\n\x05KR920\x10\x08\x12\t\n\x05IN865\x10\t\x12\t\n\x05RU864\x10\n\x12\x0b\n\x07ISM2400\x10\x0b*\xb3\x01\n\x05MType\x12\x10\n\x0cJOIN_REQUEST\x10\x00\x12\x0f\n\x0bJOIN_ACCEPT\x10\x01\x12\x17\n\x13UNCONFIRMED_DATA_UP\x10\x02\x12\x19\n\x15UNCONFIRMED_DATA_DOWN\x10\x03\x12\x15\n\x11\x43ONFIRMED_DATA_UP\x10\x04\x12\x17\n\x13\x43ONFIRMED_DATA_DOWN\x10\x05\x12\x12\n\x0eREJOIN_REQUEST\x10\x06\x12\x0f\n\x0bPROPRIETARY\x10\x07*~\n\nMacVersion\x12\x11\n\rLORAWAN_1_0_0\x10\x00\x12\x11\n\rLORAWAN_1_0_1\x10\x01\x12\x11\n\rLORAWAN_1_0_2\x10\x02\x12\x11\n\rLORAWAN_1_0_3\x10\x03\x12\x11\n\rLORAWAN_1_0_4\x10\x04\x12\x11\n\rLORAWAN_1_1_0\x10\x05*e\n\x11RegParamsRevision\x12\x05\n\x01\x41\x10\x00\x12\x05\n\x01\x42\x10\x01\x12\x0f\n\x0bRP002_1_0_0\x10\x02\x12\x0f\n\x0bRP002_1_0_1\x10\x03\x12\x0f\n\x0bRP002_1_0_2\x10\x04\x12\x0f\n\x0bRP002_1_0_3\x10\x05*\x8e\x01\n\x0eLocationSource\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03GPS\x10\x01\x12\n\n\x06\x43ONFIG\x10\x02\x12\x15\n\x11GEO_RESOLVER_TDOA\x10\x03\x12\x15\n\x11GEO_RESOLVER_RSSI\x10\x04\x12\x15\n\x11GEO_RESOLVER_GNSS\x10\x05\x12\x15\n\x11GEO_RESOLVER_WIFI\x10\x06*+\n\x0b\x41ggregation\x12\x08\n\x04HOUR\x10\x00\x12\x07\n\x03\x44\x41Y\x10\x01\x12\t\n\x05MONTH\x10\x02*2\n\nMetricKind\x12\x0b\n\x07\x43OUNTER\x10\x00\x12\x0c\n\x08\x41\x42SOLUTE\x10\x01\x12\t\n\x05GAUGE\x10\x02\x42i\n\x11io.chirpstack.apiB\x0b\x43ommonProtoP\x01Z1github.com/chirpstack/chirpstack/api/go/v4/common\xaa\x02\x11\x43hirpstack.Commonb\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.common.common_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\013CommonProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/common'
|
||||
DESCRIPTOR._serialized_options = b'\n\021io.chirpstack.apiB\013CommonProtoP\001Z1github.com/chirpstack/chirpstack/api/go/v4/common\252\002\021Chirpstack.Common'
|
||||
_MODULATION._serialized_start=449
|
||||
_MODULATION._serialized_end=493
|
||||
_REGION._serialized_start=496
|
||||
|
4
api/python/src/chirpstack_api/gw/gw_pb2.py
vendored
4
api/python/src/chirpstack_api/gw/gw_pb2.py
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -15,14 +15,14 @@ from chirpstack_api.common import common_pb2 as chirpstack__api_dot_common_dot_c
|
||||
from chirpstack_api.gw import gw_pb2 as chirpstack__api_dot_gw_dot_gw__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x63hirpstack-api/meta/meta.proto\x12\x04meta\x1a\"chirpstack-api/common/common.proto\x1a\x1a\x63hirpstack-api/gw/gw.proto\"\xf0\x01\n\nUplinkMeta\x12\x0f\n\x07\x64\x65v_eui\x18\x01 \x01(\t\x12!\n\x07tx_info\x18\x02 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x03 \x03(\x0b\x32\x10.gw.UplinkRxInfo\x12\x1e\n\x16phy_payload_byte_count\x18\x04 \x01(\r\x12\x1e\n\x16mac_command_byte_count\x18\x05 \x01(\r\x12&\n\x1e\x61pplication_payload_byte_count\x18\x06 \x01(\r\x12#\n\x0cmessage_type\x18\x07 \x01(\x0e\x32\r.common.MType\"\x81\x02\n\x0c\x44ownlinkMeta\x12\x0f\n\x07\x64\x65v_eui\x18\x01 \x01(\t\x12\x1a\n\x12multicast_group_id\x18\x02 \x01(\t\x12#\n\x07tx_info\x18\x03 \x01(\x0b\x32\x12.gw.DownlinkTxInfo\x12\x1e\n\x16phy_payload_byte_count\x18\x04 \x01(\r\x12\x1e\n\x16mac_command_byte_count\x18\x05 \x01(\r\x12&\n\x1e\x61pplication_payload_byte_count\x18\x06 \x01(\r\x12#\n\x0cmessage_type\x18\x07 \x01(\x0e\x32\r.common.MType\x12\x12\n\ngateway_id\x18\x08 \x01(\tBV\n\x16io.chirpstack.api.metaB\tMetaProtoP\x01Z/github.com/chirpstack/chirpstack/api/go/v4/metab\x06proto3')
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x63hirpstack-api/meta/meta.proto\x12\x04meta\x1a\"chirpstack-api/common/common.proto\x1a\x1a\x63hirpstack-api/gw/gw.proto\"\xf0\x01\n\nUplinkMeta\x12\x0f\n\x07\x64\x65v_eui\x18\x01 \x01(\t\x12!\n\x07tx_info\x18\x02 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x03 \x03(\x0b\x32\x10.gw.UplinkRxInfo\x12\x1e\n\x16phy_payload_byte_count\x18\x04 \x01(\r\x12\x1e\n\x16mac_command_byte_count\x18\x05 \x01(\r\x12&\n\x1e\x61pplication_payload_byte_count\x18\x06 \x01(\r\x12#\n\x0cmessage_type\x18\x07 \x01(\x0e\x32\r.common.MType\"\x81\x02\n\x0c\x44ownlinkMeta\x12\x0f\n\x07\x64\x65v_eui\x18\x01 \x01(\t\x12\x1a\n\x12multicast_group_id\x18\x02 \x01(\t\x12#\n\x07tx_info\x18\x03 \x01(\x0b\x32\x12.gw.DownlinkTxInfo\x12\x1e\n\x16phy_payload_byte_count\x18\x04 \x01(\r\x12\x1e\n\x16mac_command_byte_count\x18\x05 \x01(\r\x12&\n\x1e\x61pplication_payload_byte_count\x18\x06 \x01(\r\x12#\n\x0cmessage_type\x18\x07 \x01(\x0e\x32\r.common.MType\x12\x12\n\ngateway_id\x18\x08 \x01(\tBh\n\x16io.chirpstack.api.metaB\tMetaProtoP\x01Z/github.com/chirpstack/chirpstack/api/go/v4/meta\xaa\x02\x0f\x43hirpstack.Metab\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chirpstack_api.meta.meta_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\026io.chirpstack.api.metaB\tMetaProtoP\001Z/github.com/chirpstack/chirpstack/api/go/v4/meta'
|
||||
DESCRIPTOR._serialized_options = b'\n\026io.chirpstack.api.metaB\tMetaProtoP\001Z/github.com/chirpstack/chirpstack/api/go/v4/meta\252\002\017Chirpstack.Meta'
|
||||
_UPLINKMETA._serialized_start=105
|
||||
_UPLINKMETA._serialized_end=345
|
||||
_DOWNLINKMETA._serialized_start=348
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "ApplicationProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
1
api/rust/proto/chirpstack/api/device.proto
vendored
1
api/rust/proto/chirpstack/api/device.proto
vendored
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "DeviceProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "common/common.proto";
|
||||
import "google/api/annotations.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "DeviceProfileProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "DeviceProfileTemplateProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "FrameLogProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "common/common.proto";
|
||||
|
4
api/rust/proto/chirpstack/api/gateway.proto
vendored
4
api/rust/proto/chirpstack/api/gateway.proto
vendored
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "GatewayProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
@ -186,6 +187,9 @@ message ListGatewaysRequest {
|
||||
// Tenant ID (UUID) to filter gateways on.
|
||||
// To list all gateways as a global admin user, this field can be left blank.
|
||||
string tenant_id = 4;
|
||||
|
||||
// Multicast-group ID (UUID) to filter gateways on.
|
||||
string multicast_group_id = 5;
|
||||
}
|
||||
|
||||
message ListGatewaysResponse {
|
||||
|
1
api/rust/proto/chirpstack/api/internal.proto
vendored
1
api/rust/proto/chirpstack/api/internal.proto
vendored
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "InternalProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "google/protobuf/empty.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "MulticastGroupProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
@ -67,10 +68,25 @@ service MulticastGroupService {
|
||||
};
|
||||
}
|
||||
|
||||
// Add the given item to the multcast group queue.
|
||||
// Add a gateway to the multicast group.
|
||||
rpc AddGateway(AddGatewayToMulticastGroupRequest) returns (google.protobuf.Empty) {
|
||||
option(google.api.http) = {
|
||||
post: "/api/multicast-groups/{multicast_group_id}/gateways"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
|
||||
// Remove a gateway from the multicast group.
|
||||
rpc RemoveGateway(RemoveGatewayFromMulticastGroupRequest) returns (google.protobuf.Empty) {
|
||||
option(google.api.http) = {
|
||||
delete: "/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}"
|
||||
};
|
||||
}
|
||||
|
||||
// Add the given item to the multicast group queue.
|
||||
rpc Enqueue(EnqueueMulticastGroupQueueItemRequest) returns (EnqueueMulticastGroupQueueItemResponse) {
|
||||
option(google.api.http) = {
|
||||
post: "/api/multcast-groups/{queue_item.multicast_group_id}/queue"
|
||||
post: "/api/multicast-groups/{queue_item.multicast_group_id}/queue"
|
||||
body: "*"
|
||||
};
|
||||
}
|
||||
@ -98,6 +114,19 @@ enum MulticastGroupType {
|
||||
CLASS_B = 1;
|
||||
}
|
||||
|
||||
enum MulticastGroupSchedulingType {
|
||||
// Delay.
|
||||
// If multicast downlinks must be sent through multiple gateways, then
|
||||
// these will be sent one by one with a delay between each gateway.
|
||||
DELAY = 0;
|
||||
|
||||
// Time.
|
||||
// If multicast downlinks must be sent through multiple gateways, then
|
||||
// these will be sent simultaneously using GPS time synchronization.
|
||||
// Note that this does require GPS time-synchronized LoRa gateways.
|
||||
GPS_TIME = 1;
|
||||
}
|
||||
|
||||
message MulticastGroup {
|
||||
// ID (UUID).
|
||||
// This will be generated automatically on create.
|
||||
@ -136,6 +165,9 @@ message MulticastGroup {
|
||||
|
||||
// Ping-slot period (only for Class-B).
|
||||
uint32 class_b_ping_slot_period = 12;
|
||||
|
||||
// Scheduling type (only for Class-C).
|
||||
MulticastGroupSchedulingType class_c_scheduling_type = 13;
|
||||
}
|
||||
|
||||
message MulticastGroupListItem {
|
||||
@ -232,6 +264,22 @@ message RemoveDeviceFromMulticastGroupRequest {
|
||||
string dev_eui = 2;
|
||||
}
|
||||
|
||||
message AddGatewayToMulticastGroupRequest {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
||||
// Gateway ID (HEX encoded).
|
||||
string gateway_id = 2;
|
||||
}
|
||||
|
||||
message RemoveGatewayFromMulticastGroupRequest {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
||||
// Gateway ID (HEX encoded).
|
||||
string gateway_id = 2;
|
||||
}
|
||||
|
||||
message MulticastGroupQueueItem {
|
||||
// Multicast group ID.
|
||||
string multicast_group_id = 1;
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "RequestLogProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "common/common.proto";
|
||||
|
1
api/rust/proto/chirpstack/api/tenant.proto
vendored
1
api/rust/proto/chirpstack/api/tenant.proto
vendored
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "TenantProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
1
api/rust/proto/chirpstack/api/user.proto
vendored
1
api/rust/proto/chirpstack/api/user.proto
vendored
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/api";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "UserProto";
|
||||
option csharp_namespace = "Chirpstack.Api";
|
||||
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/common";
|
||||
option java_package = "io.chirpstack.api";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "CommonProto";
|
||||
option csharp_namespace = "Chirpstack.Common";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
||||
|
1
api/rust/proto/chirpstack/gw/gw.proto
vendored
1
api/rust/proto/chirpstack/gw/gw.proto
vendored
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/gw";
|
||||
option java_package = "io.chirpstack.api.gw";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "GatewayProto";
|
||||
option csharp_namespace = "Chirpstack.Gateway";
|
||||
|
||||
import "common/common.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
@ -6,6 +6,7 @@ option go_package = "github.com/brocaar/chirpstack/api/go/v4/integration";
|
||||
option java_package = "io.chirpstack.api.integration";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "IntegrationProto";
|
||||
option csharp_namespace = "Chirpstack.Integration";
|
||||
|
||||
import "common/common.proto";
|
||||
import "gw/gw.proto";
|
||||
|
1
api/rust/proto/chirpstack/meta/meta.proto
vendored
1
api/rust/proto/chirpstack/meta/meta.proto
vendored
@ -6,6 +6,7 @@ option go_package = "github.com/chirpstack/chirpstack/api/go/v4/meta";
|
||||
option java_package = "io.chirpstack.api.meta";
|
||||
option java_multiple_files = true;
|
||||
option java_outer_classname = "MetaProto";
|
||||
option csharp_namespace = "Chirpstack.Meta";
|
||||
|
||||
import "common/common.proto";
|
||||
import "gw/gw.proto";
|
||||
|
@ -0,0 +1,4 @@
|
||||
alter table multicast_group
|
||||
drop column class_c_scheduling_type;
|
||||
|
||||
drop table multicast_group_gateway;
|
@ -0,0 +1,12 @@
|
||||
create table multicast_group_gateway (
|
||||
multicast_group_id uuid not null references multicast_group on delete cascade,
|
||||
gateway_id bytea not null references gateway on delete cascade,
|
||||
created_at timestamp with time zone not null,
|
||||
primary key (multicast_group_id, gateway_id)
|
||||
);
|
||||
|
||||
alter table multicast_group
|
||||
add column class_c_scheduling_type varchar(20) not null default 'DELAY';
|
||||
|
||||
alter table multicast_group
|
||||
alter column class_c_scheduling_type drop default;
|
@ -198,6 +198,11 @@ impl GatewayService for Gateway {
|
||||
} else {
|
||||
Some(Uuid::from_str(&req.tenant_id).map_err(|e| e.status())?)
|
||||
};
|
||||
let mg_id: Option<Uuid> = if req.multicast_group_id.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(Uuid::from_str(&req.multicast_group_id).map_err(|e| e.status())?)
|
||||
};
|
||||
|
||||
self.validator
|
||||
.validate(
|
||||
@ -209,8 +214,18 @@ impl GatewayService for Gateway {
|
||||
)
|
||||
.await?;
|
||||
|
||||
if let Some(mg_id) = mg_id {
|
||||
self.validator
|
||||
.validate(
|
||||
request.extensions(),
|
||||
validator::ValidateMulticastGroupAccess::new(validator::Flag::Read, mg_id),
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
|
||||
let filters = gateway::Filters {
|
||||
tenant_id,
|
||||
multicast_group_id: mg_id,
|
||||
search: if req.search.is_empty() {
|
||||
None
|
||||
} else {
|
||||
@ -725,6 +740,7 @@ pub mod test {
|
||||
tenant_id: t.id.to_string(),
|
||||
limit: 10,
|
||||
offset: 0,
|
||||
..Default::default()
|
||||
};
|
||||
let mut list_req = Request::new(list_req);
|
||||
list_req.extensions_mut().insert(AuthID::User(u.id.clone()));
|
||||
|
@ -1,7 +1,7 @@
|
||||
use chrono::{DateTime, Utc};
|
||||
|
||||
use crate::codec::Codec;
|
||||
use crate::storage::fields::MeasurementKind;
|
||||
use crate::storage::fields::{MeasurementKind, MulticastGroupSchedulingType};
|
||||
use crate::storage::metrics::Aggregation;
|
||||
use chirpstack_api::{api, common};
|
||||
use lrwn::region::{CommonName, MacVersion, Revision};
|
||||
@ -201,6 +201,24 @@ impl ToProto<common::MType> for lrwn::MType {
|
||||
}
|
||||
}
|
||||
|
||||
impl ToProto<api::MulticastGroupSchedulingType> for MulticastGroupSchedulingType {
|
||||
fn to_proto(self) -> api::MulticastGroupSchedulingType {
|
||||
match self {
|
||||
MulticastGroupSchedulingType::DELAY => api::MulticastGroupSchedulingType::Delay,
|
||||
MulticastGroupSchedulingType::GPS_TIME => api::MulticastGroupSchedulingType::GpsTime,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl FromProto<MulticastGroupSchedulingType> for api::MulticastGroupSchedulingType {
|
||||
fn from_proto(self) -> MulticastGroupSchedulingType {
|
||||
match self {
|
||||
api::MulticastGroupSchedulingType::Delay => MulticastGroupSchedulingType::DELAY,
|
||||
api::MulticastGroupSchedulingType::GpsTime => MulticastGroupSchedulingType::GPS_TIME,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn datetime_to_prost_timestamp(dt: &DateTime<Utc>) -> prost_types::Timestamp {
|
||||
let ts = dt.timestamp_nanos();
|
||||
|
||||
|
@ -62,6 +62,7 @@ impl MulticastGroupService for MulticastGroup {
|
||||
dr: req_mg.dr as i16,
|
||||
frequency: req_mg.frequency as i64,
|
||||
class_b_ping_slot_period: req_mg.class_b_ping_slot_period as i32,
|
||||
class_c_scheduling_type: req_mg.class_c_scheduling_type().from_proto(),
|
||||
..Default::default()
|
||||
};
|
||||
let mg = multicast::create(mg).await.map_err(|e| e.status())?;
|
||||
@ -114,6 +115,7 @@ impl MulticastGroupService for MulticastGroup {
|
||||
dr: mg.dr as u32,
|
||||
frequency: mg.frequency as u32,
|
||||
class_b_ping_slot_period: mg.class_b_ping_slot_period as u32,
|
||||
class_c_scheduling_type: mg.class_c_scheduling_type.to_proto().into(),
|
||||
}),
|
||||
created_at: Some(helpers::datetime_to_prost_timestamp(&mg.created_at)),
|
||||
updated_at: Some(helpers::datetime_to_prost_timestamp(&mg.updated_at)),
|
||||
@ -159,6 +161,7 @@ impl MulticastGroupService for MulticastGroup {
|
||||
dr: req_mg.dr as i16,
|
||||
frequency: req_mg.frequency as i64,
|
||||
class_b_ping_slot_period: req_mg.class_b_ping_slot_period as i32,
|
||||
class_c_scheduling_type: req_mg.class_c_scheduling_type().from_proto(),
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
@ -309,6 +312,66 @@ impl MulticastGroupService for MulticastGroup {
|
||||
Ok(resp)
|
||||
}
|
||||
|
||||
async fn add_gateway(
|
||||
&self,
|
||||
request: Request<api::AddGatewayToMulticastGroupRequest>,
|
||||
) -> Result<Response<()>, Status> {
|
||||
let req = request.get_ref();
|
||||
let mg_id = Uuid::from_str(&req.multicast_group_id).map_err(|e| e.status())?;
|
||||
let gateway_id = EUI64::from_str(&req.gateway_id).map_err(|e| e.status())?;
|
||||
|
||||
self.validator
|
||||
.validate(
|
||||
request.extensions(),
|
||||
validator::ValidateMulticastGroupAccess::new(validator::Flag::Update, mg_id),
|
||||
)
|
||||
.await?;
|
||||
|
||||
multicast::add_gateway(&mg_id, &gateway_id)
|
||||
.await
|
||||
.map_err(|e| e.status())?;
|
||||
|
||||
let mut resp = Response::new(());
|
||||
resp.metadata_mut().insert(
|
||||
"x-log-multicast_group_id",
|
||||
req.multicast_group_id.parse().unwrap(),
|
||||
);
|
||||
resp.metadata_mut()
|
||||
.insert("x-log-gateway_id", req.gateway_id.parse().unwrap());
|
||||
|
||||
Ok(resp)
|
||||
}
|
||||
|
||||
async fn remove_gateway(
|
||||
&self,
|
||||
request: Request<api::RemoveGatewayFromMulticastGroupRequest>,
|
||||
) -> Result<Response<()>, Status> {
|
||||
let req = request.get_ref();
|
||||
let mg_id = Uuid::from_str(&req.multicast_group_id).map_err(|e| e.status())?;
|
||||
let gateway_id = EUI64::from_str(&req.gateway_id).map_err(|e| e.status())?;
|
||||
|
||||
self.validator
|
||||
.validate(
|
||||
request.extensions(),
|
||||
validator::ValidateMulticastGroupAccess::new(validator::Flag::Update, mg_id),
|
||||
)
|
||||
.await?;
|
||||
|
||||
multicast::remove_gateway(&mg_id, &gateway_id)
|
||||
.await
|
||||
.map_err(|e| e.status())?;
|
||||
|
||||
let mut resp = Response::new(());
|
||||
resp.metadata_mut().insert(
|
||||
"x-log-multicast_group_id",
|
||||
req.multicast_group_id.parse().unwrap(),
|
||||
);
|
||||
resp.metadata_mut()
|
||||
.insert("x-log-gateway_id", req.gateway_id.parse().unwrap());
|
||||
|
||||
Ok(resp)
|
||||
}
|
||||
|
||||
async fn enqueue(
|
||||
&self,
|
||||
request: Request<api::EnqueueMulticastGroupQueueItemRequest>,
|
||||
@ -422,7 +485,7 @@ pub mod test {
|
||||
use crate::api::auth::validator::RequestValidator;
|
||||
use crate::api::auth::AuthID;
|
||||
use crate::storage::{
|
||||
application, device, device_gateway, device_profile, gateway, tenant, user,
|
||||
application, device, device_gateway, device_profile, gateway, multicast, tenant, user,
|
||||
};
|
||||
use crate::test;
|
||||
use chirpstack_api::{common, internal};
|
||||
@ -451,15 +514,23 @@ pub mod test {
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// create gw
|
||||
let gw = gateway::create(gateway::Gateway {
|
||||
name: "test-gw".into(),
|
||||
// create gws
|
||||
let gw1 = gateway::create(gateway::Gateway {
|
||||
name: "test-gw-1".into(),
|
||||
tenant_id: t.id,
|
||||
gateway_id: EUI64::from_be_bytes([8, 7, 6, 54, 4, 3, 2, 1]),
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
let gw2 = gateway::create(gateway::Gateway {
|
||||
name: "test-gw-2".into(),
|
||||
tenant_id: t.id,
|
||||
gateway_id: EUI64::from_be_bytes([8, 7, 6, 54, 4, 3, 2, 2]),
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// create application
|
||||
let app = application::create(application::Application {
|
||||
@ -509,6 +580,7 @@ pub mod test {
|
||||
dr: 3,
|
||||
frequency: 868300000,
|
||||
class_b_ping_slot_period: 1,
|
||||
class_c_scheduling_type: api::MulticastGroupSchedulingType::GpsTime.into(),
|
||||
..Default::default()
|
||||
}),
|
||||
},
|
||||
@ -538,6 +610,7 @@ pub mod test {
|
||||
dr: 3,
|
||||
frequency: 868300000,
|
||||
class_b_ping_slot_period: 1,
|
||||
class_c_scheduling_type: api::MulticastGroupSchedulingType::GpsTime.into(),
|
||||
}),
|
||||
get_resp.get_ref().multicast_group
|
||||
);
|
||||
@ -559,6 +632,7 @@ pub mod test {
|
||||
dr: 2,
|
||||
frequency: 868200000,
|
||||
class_b_ping_slot_period: 2,
|
||||
class_c_scheduling_type: api::MulticastGroupSchedulingType::Delay.into(),
|
||||
}),
|
||||
},
|
||||
);
|
||||
@ -586,6 +660,7 @@ pub mod test {
|
||||
dr: 2,
|
||||
frequency: 868200000,
|
||||
class_b_ping_slot_period: 2,
|
||||
class_c_scheduling_type: api::MulticastGroupSchedulingType::Delay.into(),
|
||||
}),
|
||||
get_resp.get_ref().multicast_group
|
||||
);
|
||||
@ -645,7 +720,7 @@ pub mod test {
|
||||
device_gateway::save_rx_info(&internal::DeviceGatewayRxInfo {
|
||||
dev_eui: d.dev_eui.to_vec(),
|
||||
items: vec![internal::DeviceGatewayRxInfoItem {
|
||||
gateway_id: gw.gateway_id.to_vec(),
|
||||
gateway_id: gw1.gateway_id.to_vec(),
|
||||
..Default::default()
|
||||
}],
|
||||
..Default::default()
|
||||
@ -689,6 +764,55 @@ pub mod test {
|
||||
list_queue_resp.items[0]
|
||||
);
|
||||
|
||||
// flush queue
|
||||
let flush_queue_req = get_request(
|
||||
&u.id,
|
||||
api::FlushMulticastGroupQueueRequest {
|
||||
multicast_group_id: create_resp.id.clone(),
|
||||
},
|
||||
);
|
||||
service.flush_queue(flush_queue_req).await.unwrap();
|
||||
|
||||
// add gateways
|
||||
let add_gw_req = get_request(
|
||||
&u.id,
|
||||
api::AddGatewayToMulticastGroupRequest {
|
||||
multicast_group_id: create_resp.id.clone(),
|
||||
gateway_id: gw1.gateway_id.to_string(),
|
||||
},
|
||||
);
|
||||
let _ = service.add_gateway(add_gw_req).await.unwrap();
|
||||
let add_gw_req = get_request(
|
||||
&u.id,
|
||||
api::AddGatewayToMulticastGroupRequest {
|
||||
multicast_group_id: create_resp.id.clone(),
|
||||
gateway_id: gw2.gateway_id.to_string(),
|
||||
},
|
||||
);
|
||||
let _ = service.add_gateway(add_gw_req).await.unwrap();
|
||||
|
||||
// enqueue (the two multicast-group gateways will be used)
|
||||
let enqueue_req = get_request(
|
||||
&u.id,
|
||||
api::EnqueueMulticastGroupQueueItemRequest {
|
||||
queue_item: Some(api::MulticastGroupQueueItem {
|
||||
multicast_group_id: create_resp.id.clone(),
|
||||
f_port: 10,
|
||||
data: vec![1, 2, 3],
|
||||
..Default::default()
|
||||
}),
|
||||
},
|
||||
);
|
||||
let enqueue_resp = service.enqueue(enqueue_req).await.unwrap();
|
||||
let enqueue_resp = enqueue_resp.get_ref();
|
||||
assert_eq!(32, enqueue_resp.f_cnt);
|
||||
|
||||
// we expect two queue items (for each gateway one)
|
||||
let queue_items = multicast::get_queue(&Uuid::from_str(&create_resp.id).unwrap())
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(2, queue_items.len());
|
||||
|
||||
// remove device
|
||||
let remove_dev_req = get_request(
|
||||
&u.id,
|
||||
@ -699,6 +823,16 @@ pub mod test {
|
||||
);
|
||||
let _ = service.remove_device(remove_dev_req).await.unwrap();
|
||||
|
||||
// remove gateway
|
||||
let remove_gw_req = get_request(
|
||||
&u.id,
|
||||
api::RemoveGatewayFromMulticastGroupRequest {
|
||||
multicast_group_id: create_resp.id.clone(),
|
||||
gateway_id: gw1.gateway_id.to_string(),
|
||||
},
|
||||
);
|
||||
let _ = service.remove_gateway(remove_gw_req).await.unwrap();
|
||||
|
||||
// delete
|
||||
let del_req = get_request(
|
||||
&u.id,
|
||||
|
@ -205,15 +205,6 @@ pub fn run() {
|
||||
# downlink capacity load on the gateway.
|
||||
class_c_lock_duration="{{ network.scheduler.class_c_lock_duration }}"
|
||||
|
||||
# Multicast Class-C use GPS time.
|
||||
#
|
||||
# Use GPS time for scheduling multicast class-c downlinks. If this is enabled
|
||||
# and the downlink must be send by multiple gateways to cover all devices
|
||||
# within the multicast-group, these downlinks will be sent at exactly the same
|
||||
# time by these gateways. If disabled, ChirpStack will use the configured
|
||||
# margin. Only enable this features when all gateways have GNSS support.
|
||||
multicast_class_c_use_gps_time={{ network.scheduler.multicast_class_c_use_gps_time }}
|
||||
|
||||
# Multicast Class-C margin.
|
||||
#
|
||||
# This defines the minimum margin between scheduling multiple multicast downlinks
|
||||
|
@ -189,7 +189,6 @@ pub struct Scheduler {
|
||||
pub class_a_lock_duration: Duration,
|
||||
#[serde(with = "humantime_serde")]
|
||||
pub class_c_lock_duration: Duration,
|
||||
pub multicast_class_c_use_gps_time: bool,
|
||||
#[serde(with = "humantime_serde")]
|
||||
pub multicast_class_c_margin: Duration,
|
||||
#[serde(with = "humantime_serde")]
|
||||
@ -203,7 +202,6 @@ impl Default for Scheduler {
|
||||
batch_size: 100,
|
||||
class_a_lock_duration: Duration::from_secs(5),
|
||||
class_c_lock_duration: Duration::from_secs(5),
|
||||
multicast_class_c_use_gps_time: false,
|
||||
multicast_class_c_margin: Duration::from_secs(5),
|
||||
multicast_class_b_margin: Duration::from_secs(5),
|
||||
}
|
||||
|
@ -233,17 +233,23 @@ impl Multicast {
|
||||
}
|
||||
|
||||
pub async fn enqueue(qi: multicast::MulticastGroupQueueItem) -> Result<u32> {
|
||||
// get deveuis for multicast-group
|
||||
let dev_euis = multicast::get_dev_euis(&qi.multicast_group_id).await?;
|
||||
// Try first to get configured gateways for multicast-group.
|
||||
let mut gateway_ids = multicast::get_gateway_ids(&qi.multicast_group_id).await?;
|
||||
|
||||
// get DeviceGatewayRxInfo for all devices.
|
||||
let dev_gw_set = device_gateway::get_rx_info_for_dev_euis(&dev_euis).await?;
|
||||
// Fallback to automatic gateway-set detection.
|
||||
if gateway_ids.is_empty() {
|
||||
// get deveuis for multicast-group
|
||||
let dev_euis = multicast::get_dev_euis(&qi.multicast_group_id).await?;
|
||||
|
||||
// get minimum gateway set to cover all devices
|
||||
let min_gateway_set = get_minimum_gateway_set(&dev_gw_set)?;
|
||||
// get DeviceGatewayRxInfo for all devices.
|
||||
let dev_gw_set = device_gateway::get_rx_info_for_dev_euis(&dev_euis).await?;
|
||||
|
||||
// get minimum gateway set to cover all devices
|
||||
gateway_ids = get_minimum_gateway_set(&dev_gw_set)?;
|
||||
}
|
||||
|
||||
// Enqueue multicast downlink for the given gw set.
|
||||
let (_, f_cnt) = multicast::enqueue(qi, &min_gateway_set).await?;
|
||||
let (_, f_cnt) = multicast::enqueue(qi, &gateway_ids).await?;
|
||||
Ok(f_cnt)
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
use std::collections::HashMap;
|
||||
use std::fmt;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
use std::str::FromStr;
|
||||
|
||||
use diesel::backend;
|
||||
use diesel::backend::{self, Backend};
|
||||
use diesel::pg::Pg;
|
||||
use diesel::sql_types::Jsonb;
|
||||
use diesel::sql_types::{Jsonb, Text};
|
||||
use diesel::{deserialize, serialize};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@ -116,3 +118,60 @@ pub enum MeasurementKind {
|
||||
// E.g. a firmware version, true / false value.
|
||||
STRING,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, AsExpression, FromSqlRow)]
|
||||
#[allow(clippy::upper_case_acronyms)]
|
||||
#[allow(non_camel_case_types)]
|
||||
#[diesel(sql_type = diesel::sql_types::Text)]
|
||||
pub enum MulticastGroupSchedulingType {
|
||||
// Delay.
|
||||
DELAY,
|
||||
// GPS time.
|
||||
GPS_TIME,
|
||||
}
|
||||
|
||||
impl fmt::Display for MulticastGroupSchedulingType {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{:?}", self)
|
||||
}
|
||||
}
|
||||
|
||||
impl<DB> deserialize::FromSql<Text, DB> for MulticastGroupSchedulingType
|
||||
where
|
||||
DB: Backend,
|
||||
*const str: deserialize::FromSql<Text, DB>,
|
||||
{
|
||||
fn from_sql(value: backend::RawValue<DB>) -> deserialize::Result<Self> {
|
||||
let string = String::from_sql(value)?;
|
||||
Ok(MulticastGroupSchedulingType::from_str(&string)?)
|
||||
}
|
||||
}
|
||||
|
||||
impl serialize::ToSql<Text, diesel::pg::Pg> for MulticastGroupSchedulingType
|
||||
where
|
||||
str: serialize::ToSql<Text, diesel::pg::Pg>,
|
||||
{
|
||||
fn to_sql<'b>(
|
||||
&'b self,
|
||||
out: &mut serialize::Output<'b, '_, diesel::pg::Pg>,
|
||||
) -> serialize::Result {
|
||||
<str as serialize::ToSql<Text, diesel::pg::Pg>>::to_sql(
|
||||
&self.to_string(),
|
||||
&mut out.reborrow(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for MulticastGroupSchedulingType {
|
||||
type Err = anyhow::Error;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
Ok(match s {
|
||||
"DELAY" => MulticastGroupSchedulingType::DELAY,
|
||||
"GPS_TIME" => MulticastGroupSchedulingType::GPS_TIME,
|
||||
_ => {
|
||||
return Err(anyhow!("Unexpected MulticastGroupSchedulingType: {}", s));
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ use uuid::Uuid;
|
||||
|
||||
use lrwn::EUI64;
|
||||
|
||||
use super::schema::{gateway, tenant};
|
||||
use super::schema::{gateway, multicast_group_gateway, tenant};
|
||||
use super::{error::Error, fields, get_db_conn};
|
||||
|
||||
#[derive(Queryable, Insertable, PartialEq, Debug)]
|
||||
@ -70,6 +70,7 @@ pub struct GatewayMeta {
|
||||
#[derive(Default, Clone)]
|
||||
pub struct Filters {
|
||||
pub tenant_id: Option<Uuid>,
|
||||
pub multicast_group_id: Option<Uuid>,
|
||||
pub search: Option<String>,
|
||||
}
|
||||
|
||||
@ -303,12 +304,22 @@ pub async fn get_count(filters: &Filters) -> Result<i64, Error> {
|
||||
let filters = filters.clone();
|
||||
move || -> Result<i64, Error> {
|
||||
let mut c = get_db_conn()?;
|
||||
let mut q = gateway::dsl::gateway.select(dsl::count_star()).into_boxed();
|
||||
let mut q = gateway::dsl::gateway
|
||||
.select(dsl::count_star())
|
||||
.distinct()
|
||||
.left_join(multicast_group_gateway::table)
|
||||
.into_boxed();
|
||||
|
||||
if let Some(tenant_id) = &filters.tenant_id {
|
||||
q = q.filter(gateway::dsl::tenant_id.eq(tenant_id));
|
||||
}
|
||||
|
||||
if let Some(multicast_group_id) = &filters.multicast_group_id {
|
||||
q = q.filter(
|
||||
multicast_group_gateway::dsl::multicast_group_id.eq(multicast_group_id),
|
||||
);
|
||||
}
|
||||
|
||||
if let Some(search) = &filters.search {
|
||||
q = q.filter(gateway::dsl::name.ilike(format!("%{}%", search)));
|
||||
}
|
||||
@ -329,6 +340,7 @@ pub async fn list(
|
||||
move || -> Result<Vec<GatewayListItem>, Error> {
|
||||
let mut c = get_db_conn()?;
|
||||
let mut q = gateway::dsl::gateway
|
||||
.left_join(multicast_group_gateway::table)
|
||||
.select((
|
||||
gateway::tenant_id,
|
||||
gateway::gateway_id,
|
||||
@ -343,6 +355,7 @@ pub async fn list(
|
||||
gateway::properties,
|
||||
gateway::stats_interval_secs,
|
||||
))
|
||||
.distinct()
|
||||
.into_boxed();
|
||||
|
||||
if let Some(tenant_id) = &filters.tenant_id {
|
||||
@ -353,6 +366,12 @@ pub async fn list(
|
||||
q = q.filter(gateway::dsl::name.ilike(format!("%{}%", search)));
|
||||
}
|
||||
|
||||
if let Some(multicast_group_id) = &filters.multicast_group_id {
|
||||
q = q.filter(
|
||||
multicast_group_gateway::dsl::multicast_group_id.eq(multicast_group_id),
|
||||
);
|
||||
}
|
||||
|
||||
let items = q
|
||||
.order_by(gateway::dsl::name)
|
||||
.limit(limit)
|
||||
@ -413,6 +432,8 @@ pub async fn get_counts_by_state(tenant_id: &Option<Uuid>) -> Result<GatewayCoun
|
||||
pub mod test {
|
||||
use super::*;
|
||||
use crate::{storage, test};
|
||||
use lrwn::region::CommonName;
|
||||
use lrwn::{AES128Key, DevAddr};
|
||||
|
||||
struct FilterTest<'a> {
|
||||
filters: Filters,
|
||||
@ -443,6 +464,34 @@ pub mod test {
|
||||
let _guard = test::prepare().await;
|
||||
let mut gw = create_gateway(EUI64::from_be_bytes([1, 2, 3, 4, 5, 6, 7, 8])).await;
|
||||
|
||||
let app = storage::application::create(storage::application::Application {
|
||||
tenant_id: gw.tenant_id,
|
||||
name: "test-app".into(),
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let mg = storage::multicast::create(storage::multicast::MulticastGroup {
|
||||
application_id: app.id,
|
||||
name: "test-mg".into(),
|
||||
region: CommonName::EU868,
|
||||
mc_addr: DevAddr::from_be_bytes([1, 2, 3, 4]),
|
||||
mc_nwk_s_key: AES128Key::from_bytes([1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8]),
|
||||
f_cnt: 10,
|
||||
group_type: "C".into(),
|
||||
dr: 1,
|
||||
frequency: 868100000,
|
||||
class_b_ping_slot_period: 1,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
storage::multicast::add_gateway(&mg.id, &gw.gateway_id)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// get
|
||||
let gw_get = get(&gw.gateway_id).await.unwrap();
|
||||
assert_eq!(gw, gw_get);
|
||||
@ -458,6 +507,7 @@ pub mod test {
|
||||
FilterTest {
|
||||
filters: Filters {
|
||||
tenant_id: None,
|
||||
multicast_group_id: None,
|
||||
search: None,
|
||||
},
|
||||
gws: vec![&gw],
|
||||
@ -468,6 +518,7 @@ pub mod test {
|
||||
FilterTest {
|
||||
filters: Filters {
|
||||
tenant_id: None,
|
||||
multicast_group_id: None,
|
||||
search: Some("uup".into()),
|
||||
},
|
||||
gws: vec![],
|
||||
@ -478,6 +529,7 @@ pub mod test {
|
||||
FilterTest {
|
||||
filters: Filters {
|
||||
tenant_id: None,
|
||||
multicast_group_id: None,
|
||||
search: Some("upd".into()),
|
||||
},
|
||||
gws: vec![&gw],
|
||||
@ -488,6 +540,7 @@ pub mod test {
|
||||
FilterTest {
|
||||
filters: Filters {
|
||||
tenant_id: Some(gw.tenant_id),
|
||||
multicast_group_id: None,
|
||||
search: None,
|
||||
},
|
||||
gws: vec![&gw],
|
||||
@ -498,6 +551,29 @@ pub mod test {
|
||||
FilterTest {
|
||||
filters: Filters {
|
||||
tenant_id: Some(Uuid::new_v4()),
|
||||
multicast_group_id: None,
|
||||
search: None,
|
||||
},
|
||||
gws: vec![],
|
||||
count: 0,
|
||||
limit: 10,
|
||||
offset: 0,
|
||||
},
|
||||
FilterTest {
|
||||
filters: Filters {
|
||||
tenant_id: None,
|
||||
multicast_group_id: Some(mg.id),
|
||||
search: None,
|
||||
},
|
||||
gws: vec![&gw],
|
||||
count: 1,
|
||||
limit: 10,
|
||||
offset: 0,
|
||||
},
|
||||
FilterTest {
|
||||
filters: Filters {
|
||||
tenant_id: None,
|
||||
multicast_group_id: Some(Uuid::new_v4()),
|
||||
search: None,
|
||||
},
|
||||
gws: vec![],
|
||||
|
@ -10,8 +10,11 @@ use lrwn::region::CommonName;
|
||||
use lrwn::{AES128Key, DevAddr, EUI64};
|
||||
|
||||
use super::error::Error;
|
||||
use super::get_db_conn;
|
||||
use super::schema::{device, multicast_group, multicast_group_device, multicast_group_queue_item};
|
||||
use super::schema::{
|
||||
application, device, gateway, multicast_group, multicast_group_device, multicast_group_gateway,
|
||||
multicast_group_queue_item,
|
||||
};
|
||||
use super::{fields, get_db_conn};
|
||||
use crate::downlink::classb;
|
||||
use crate::{config, gpstime::ToDateTime, gpstime::ToGpsTime};
|
||||
|
||||
@ -32,6 +35,7 @@ pub struct MulticastGroup {
|
||||
pub dr: i16,
|
||||
pub frequency: i64,
|
||||
pub class_b_ping_slot_period: i32,
|
||||
pub class_c_scheduling_type: fields::MulticastGroupSchedulingType,
|
||||
}
|
||||
|
||||
impl MulticastGroup {
|
||||
@ -62,6 +66,7 @@ impl Default for MulticastGroup {
|
||||
dr: 0,
|
||||
frequency: 0,
|
||||
class_b_ping_slot_period: 0,
|
||||
class_c_scheduling_type: fields::MulticastGroupSchedulingType::DELAY,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -163,6 +168,7 @@ pub async fn update(mg: MulticastGroup) -> Result<MulticastGroup, Error> {
|
||||
multicast_group::dr.eq(&mg.dr),
|
||||
multicast_group::frequency.eq(&mg.frequency),
|
||||
multicast_group::class_b_ping_slot_period.eq(&mg.class_b_ping_slot_period),
|
||||
multicast_group::class_c_scheduling_type.eq(&mg.class_c_scheduling_type),
|
||||
))
|
||||
.get_result(&mut c)
|
||||
.map_err(|e| Error::from_diesel(e, mg.id.to_string()))
|
||||
@ -320,6 +326,79 @@ pub async fn remove_device(group_id: &Uuid, dev_eui: &EUI64) -> Result<(), Error
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn add_gateway(group_id: &Uuid, gateway_id: &EUI64) -> Result<(), Error> {
|
||||
task::spawn_blocking({
|
||||
let group_id = *group_id;
|
||||
let gateway_id = *gateway_id;
|
||||
move || -> Result<(), Error> {
|
||||
let mut c = get_db_conn()?;
|
||||
c.transaction::<(), Error, _>(|c| {
|
||||
let gw: super::gateway::Gateway = gateway::dsl::gateway
|
||||
.find(&gateway_id)
|
||||
.for_update()
|
||||
.get_result(c)
|
||||
.map_err(|e| Error::from_diesel(e, gateway_id.to_string()))?;
|
||||
|
||||
let mg: MulticastGroup = multicast_group::dsl::multicast_group
|
||||
.find(&group_id)
|
||||
.for_update()
|
||||
.get_result(c)
|
||||
.map_err(|e| Error::from_diesel(e, group_id.to_string()))?;
|
||||
|
||||
let a: super::application::Application = application::dsl::application
|
||||
.find(&mg.application_id)
|
||||
.for_update()
|
||||
.get_result(c)
|
||||
.map_err(|e| Error::from_diesel(e, mg.application_id.to_string()))?;
|
||||
|
||||
if a.tenant_id != gw.tenant_id {
|
||||
// Gateway and multicast-group are not under same tenant.
|
||||
return Err(Error::NotFound(gateway_id.to_string()));
|
||||
}
|
||||
|
||||
let _ = diesel::insert_into(multicast_group_gateway::table)
|
||||
.values((
|
||||
multicast_group_gateway::multicast_group_id.eq(&group_id),
|
||||
multicast_group_gateway::gateway_id.eq(&gateway_id),
|
||||
multicast_group_gateway::created_at.eq(Utc::now()),
|
||||
))
|
||||
.execute(c)
|
||||
.map_err(|e| Error::from_diesel(e, "".into()))?;
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
})
|
||||
.await??;
|
||||
info!(multicast_group_id = %group_id, gateway_id = %gateway_id, "Gateway added to multicast-group");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn remove_gateway(group_id: &Uuid, gateway_id: &EUI64) -> Result<(), Error> {
|
||||
task::spawn_blocking({
|
||||
let group_id = *group_id;
|
||||
let gateway_id = *gateway_id;
|
||||
move || -> Result<(), Error> {
|
||||
let mut c = get_db_conn()?;
|
||||
let ra = diesel::delete(
|
||||
multicast_group_gateway::dsl::multicast_group_gateway
|
||||
.filter(multicast_group_gateway::multicast_group_id.eq(&group_id))
|
||||
.filter(multicast_group_gateway::gateway_id.eq(&gateway_id)),
|
||||
)
|
||||
.execute(&mut c)?;
|
||||
if ra == 0 {
|
||||
return Err(Error::NotFound(format!(
|
||||
"multicast-group: {}, gateway: {}",
|
||||
group_id, gateway_id
|
||||
)));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
})
|
||||
.await??;
|
||||
info!(multicast_group_id = %group_id, gateway_id = %gateway_id, "Gateway removed from multicast-group");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn get_dev_euis(group_id: &Uuid) -> Result<Vec<EUI64>, Error> {
|
||||
task::spawn_blocking({
|
||||
let group_id = *group_id;
|
||||
@ -335,6 +414,21 @@ pub async fn get_dev_euis(group_id: &Uuid) -> Result<Vec<EUI64>, Error> {
|
||||
.await?
|
||||
}
|
||||
|
||||
pub async fn get_gateway_ids(group_id: &Uuid) -> Result<Vec<EUI64>, Error> {
|
||||
task::spawn_blocking({
|
||||
let group_id = *group_id;
|
||||
move || -> Result<Vec<EUI64>, Error> {
|
||||
let mut c = get_db_conn()?;
|
||||
multicast_group_gateway::dsl::multicast_group_gateway
|
||||
.select(multicast_group_gateway::gateway_id)
|
||||
.filter(multicast_group_gateway::dsl::multicast_group_id.eq(&group_id))
|
||||
.load(&mut c)
|
||||
.map_err(|e| Error::from_diesel(e, group_id.to_string()))
|
||||
}
|
||||
})
|
||||
.await?
|
||||
}
|
||||
|
||||
// This enqueues a multicast-group queue item for the given gateways and returns the frame-counter
|
||||
// of the multicast downlink.
|
||||
// This function locks the multicast-group to avoid race-conditions with scheduling time and
|
||||
@ -442,19 +536,18 @@ pub async fn enqueue(
|
||||
None => Utc::now(),
|
||||
};
|
||||
|
||||
let emit_at_time_since_gps_epoch =
|
||||
match conf.network.scheduler.multicast_class_c_use_gps_time {
|
||||
false => None,
|
||||
true => {
|
||||
// Increment with margin as requesting the gateway to send the
|
||||
// downlink 'now' will result in a too late error from the gateway.
|
||||
scheduler_run_after_ts += Duration::from_std(
|
||||
conf.network.scheduler.multicast_class_c_margin,
|
||||
)
|
||||
let emit_at_time_since_gps_epoch = if mg.class_c_scheduling_type
|
||||
== fields::MulticastGroupSchedulingType::GPS_TIME
|
||||
{
|
||||
// Increment with margin as requesting the gateway to send the
|
||||
// downlink 'now' will result in a too late error from the gateway.
|
||||
scheduler_run_after_ts +=
|
||||
Duration::from_std(conf.network.scheduler.multicast_class_c_margin)
|
||||
.unwrap();
|
||||
Some(scheduler_run_after_ts.to_gps_time().num_milliseconds())
|
||||
}
|
||||
};
|
||||
Some(scheduler_run_after_ts.to_gps_time().num_milliseconds())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
for gateway_id in &gateway_ids {
|
||||
let qi = MulticastGroupQueueItem {
|
||||
@ -475,7 +568,9 @@ pub async fn enqueue(
|
||||
.map_err(|e| Error::from_diesel(e, mg.id.to_string()))?;
|
||||
ids.push(qi.id);
|
||||
|
||||
if !conf.network.scheduler.multicast_class_c_use_gps_time {
|
||||
if mg.class_c_scheduling_type
|
||||
== fields::MulticastGroupSchedulingType::DELAY
|
||||
{
|
||||
// Increment timing for each gateway to avoid colissions.
|
||||
scheduler_run_after_ts += Duration::from_std(
|
||||
conf.network.scheduler.multicast_class_c_margin,
|
||||
@ -818,6 +913,64 @@ pub mod test {
|
||||
assert!(dev_euis.is_empty());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_gateway() {
|
||||
let _guard = test::prepare().await;
|
||||
|
||||
let t = tenant::create(tenant::Tenant {
|
||||
name: "test-tenant".into(),
|
||||
can_have_gateways: true,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let app = application::create(application::Application {
|
||||
name: "test-app".into(),
|
||||
tenant_id: t.id,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let gw = gateway::create(gateway::Gateway {
|
||||
gateway_id: EUI64::from_be_bytes([1, 2, 3, 4, 5, 6, 7, 8]),
|
||||
tenant_id: t.id,
|
||||
name: "test-gw".into(),
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let mg = create(MulticastGroup {
|
||||
application_id: app.id,
|
||||
name: "test-mg".into(),
|
||||
region: CommonName::EU868,
|
||||
mc_addr: DevAddr::from_be_bytes([1, 2, 3, 4]),
|
||||
mc_nwk_s_key: AES128Key::from_bytes([1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8]),
|
||||
f_cnt: 10,
|
||||
group_type: "C".into(),
|
||||
dr: 1,
|
||||
frequency: 868100000,
|
||||
class_b_ping_slot_period: 1,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// add gateway
|
||||
add_gateway(&mg.id, &gw.gateway_id).await.unwrap();
|
||||
|
||||
// get gateway ids
|
||||
let gw_ids = get_gateway_ids(&mg.id).await.unwrap();
|
||||
assert_eq!(vec![gw.gateway_id], gw_ids);
|
||||
|
||||
// remove gateway
|
||||
remove_gateway(&mg.id, &gw.gateway_id).await.unwrap();
|
||||
let gw_ids = get_gateway_ids(&mg.id).await.unwrap();
|
||||
assert!(gw_ids.is_empty());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_queue() {
|
||||
let _guard = test::prepare().await;
|
||||
@ -858,12 +1011,13 @@ pub mod test {
|
||||
dr: 1,
|
||||
frequency: 868100000,
|
||||
class_b_ping_slot_period: 1,
|
||||
class_c_scheduling_type: fields::MulticastGroupSchedulingType::DELAY,
|
||||
..Default::default()
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// Enqueue (Class-C)
|
||||
// Enqueue (Class-C) (delay)
|
||||
let (ids, f_cnt) = enqueue(
|
||||
MulticastGroupQueueItem {
|
||||
multicast_group_id: mg.id,
|
||||
@ -891,6 +1045,33 @@ pub mod test {
|
||||
delete_queue_item(&ids[0]).await.unwrap();
|
||||
assert!(delete_queue_item(&ids[0]).await.is_err());
|
||||
|
||||
// Enqueue (Class-C) (GPS time)
|
||||
mg.class_c_scheduling_type = fields::MulticastGroupSchedulingType::GPS_TIME;
|
||||
let mut mg = update(mg).await.unwrap();
|
||||
let (ids, f_cnt) = enqueue(
|
||||
MulticastGroupQueueItem {
|
||||
multicast_group_id: mg.id,
|
||||
gateway_id: gw.gateway_id,
|
||||
f_cnt: 1,
|
||||
f_port: 2,
|
||||
data: vec![3, 2, 1],
|
||||
..Default::default()
|
||||
},
|
||||
&[gw.gateway_id],
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(1, ids.len());
|
||||
assert_eq!(10, f_cnt);
|
||||
|
||||
// get
|
||||
let qi_get = get_queue_item(&ids[0]).await.unwrap();
|
||||
assert!(qi_get.emit_at_time_since_gps_epoch.is_some());
|
||||
|
||||
// delete
|
||||
delete_queue_item(&ids[0]).await.unwrap();
|
||||
assert!(delete_queue_item(&ids[0]).await.is_err());
|
||||
|
||||
// Enqueue (Class-B)
|
||||
mg.group_type = "B".into();
|
||||
let mg = update(mg).await.unwrap();
|
||||
|
@ -192,6 +192,7 @@ diesel::table! {
|
||||
dr -> Int2,
|
||||
frequency -> Int8,
|
||||
class_b_ping_slot_period -> Int4,
|
||||
class_c_scheduling_type -> Varchar,
|
||||
}
|
||||
}
|
||||
|
||||
@ -203,6 +204,14 @@ diesel::table! {
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
multicast_group_gateway (multicast_group_id, gateway_id) {
|
||||
multicast_group_id -> Uuid,
|
||||
gateway_id -> Bytea,
|
||||
created_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
multicast_group_queue_item (id) {
|
||||
id -> Uuid,
|
||||
@ -270,6 +279,8 @@ diesel::joinable!(gateway -> tenant (tenant_id));
|
||||
diesel::joinable!(multicast_group -> application (application_id));
|
||||
diesel::joinable!(multicast_group_device -> device (dev_eui));
|
||||
diesel::joinable!(multicast_group_device -> multicast_group (multicast_group_id));
|
||||
diesel::joinable!(multicast_group_gateway -> gateway (gateway_id));
|
||||
diesel::joinable!(multicast_group_gateway -> multicast_group (multicast_group_id));
|
||||
diesel::joinable!(multicast_group_queue_item -> gateway (gateway_id));
|
||||
diesel::joinable!(multicast_group_queue_item -> multicast_group (multicast_group_id));
|
||||
diesel::joinable!(tenant_user -> tenant (tenant_id));
|
||||
@ -287,6 +298,7 @@ diesel::allow_tables_to_appear_in_same_query!(
|
||||
gateway,
|
||||
multicast_group,
|
||||
multicast_group_device,
|
||||
multicast_group_gateway,
|
||||
multicast_group_queue_item,
|
||||
tenant,
|
||||
tenant_user,
|
||||
|
@ -13,6 +13,8 @@ import {
|
||||
ListMulticastGroupsResponse,
|
||||
AddDeviceToMulticastGroupRequest,
|
||||
RemoveDeviceFromMulticastGroupRequest,
|
||||
AddGatewayToMulticastGroupRequest,
|
||||
RemoveGatewayFromMulticastGroupRequest,
|
||||
ListMulticastGroupQueueRequest,
|
||||
ListMulticastGroupQueueResponse,
|
||||
} from "@chirpstack/chirpstack-api-grpc-web/api/multicast_group_pb";
|
||||
@ -125,6 +127,33 @@ class MulticastGroupStore extends EventEmitter {
|
||||
});
|
||||
};
|
||||
|
||||
addGateway = (req: AddGatewayToMulticastGroupRequest, callbackFunc: () => void) => {
|
||||
this.client.addGateway(req, SessionStore.getMetadata(), err => {
|
||||
if (err !== null) {
|
||||
HandleError(err);
|
||||
return;
|
||||
}
|
||||
|
||||
notification.success({
|
||||
message: "Gateway has been added to multicast-group",
|
||||
duration: 3,
|
||||
});
|
||||
|
||||
callbackFunc();
|
||||
});
|
||||
};
|
||||
|
||||
removeGateway = (req: RemoveGatewayFromMulticastGroupRequest, callbackFunc: () => void) => {
|
||||
this.client.removeGateway(req, SessionStore.getMetadata(), err => {
|
||||
if (err !== null) {
|
||||
HandleError(err);
|
||||
return;
|
||||
}
|
||||
|
||||
callbackFunc();
|
||||
});
|
||||
};
|
||||
|
||||
listQueue = (req: ListMulticastGroupQueueRequest, callbackFunc: (resp: ListMulticastGroupQueueResponse) => void) => {
|
||||
this.client.listQueue(req, SessionStore.getMetadata(), (err, resp) => {
|
||||
if (err !== null) {
|
||||
|
@ -2,7 +2,7 @@ import React, { Component } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
|
||||
import moment from "moment";
|
||||
import { Space, Breadcrumb, Button, PageHeader, Badge } from "antd";
|
||||
import { Space, Breadcrumb, Button, PageHeader, Badge, Menu, Modal, TreeSelect, Dropdown } from "antd";
|
||||
import { ColumnsType } from "antd/es/table";
|
||||
|
||||
import {
|
||||
@ -11,17 +11,76 @@ import {
|
||||
GatewayListItem,
|
||||
GatewayState,
|
||||
} from "@chirpstack/chirpstack-api-grpc-web/api/gateway_pb";
|
||||
import {
|
||||
ListApplicationsRequest,
|
||||
ListApplicationsResponse,
|
||||
} from "@chirpstack/chirpstack-api-grpc-web/api/application_pb";
|
||||
import {
|
||||
ListMulticastGroupsRequest,
|
||||
ListMulticastGroupsResponse,
|
||||
AddGatewayToMulticastGroupRequest,
|
||||
} from "@chirpstack/chirpstack-api-grpc-web/api/multicast_group_pb";
|
||||
import { Tenant } from "@chirpstack/chirpstack-api-grpc-web/api/tenant_pb";
|
||||
|
||||
import DataTable, { GetPageCallbackFunc } from "../../components/DataTable";
|
||||
import GatewayStore from "../../stores/GatewayStore";
|
||||
import ApplicationStore from "../../stores/ApplicationStore";
|
||||
import MulticastGroupStore from "../../stores/MulticastGroupStore";
|
||||
import Admin from "../../components/Admin";
|
||||
|
||||
interface IProps {
|
||||
tenant: Tenant;
|
||||
}
|
||||
|
||||
class ListGateways extends Component<IProps> {
|
||||
interface IState {
|
||||
selectedRowIds: string[];
|
||||
multicastGroups: any[];
|
||||
mgModalVisible: boolean;
|
||||
mgSelected: string;
|
||||
}
|
||||
|
||||
class ListGateways extends Component<IProps, IState> {
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
this.state = {
|
||||
selectedRowIds: [],
|
||||
multicastGroups: [],
|
||||
mgModalVisible: false,
|
||||
mgSelected: "",
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
let req = new ListApplicationsRequest();
|
||||
req.setLimit(999);
|
||||
req.setTenantId(this.props.tenant.getId());
|
||||
|
||||
ApplicationStore.list(req, (resp: ListApplicationsResponse) => {
|
||||
for (const app of resp.getResultList()) {
|
||||
let req = new ListMulticastGroupsRequest();
|
||||
req.setLimit(999);
|
||||
req.setApplicationId(app.getId());
|
||||
|
||||
MulticastGroupStore.list(req, (resp: ListMulticastGroupsResponse) => {
|
||||
let multicastGroups = this.state.multicastGroups;
|
||||
multicastGroups.push({
|
||||
title: app.getName(),
|
||||
value: "",
|
||||
disabled: true,
|
||||
children: resp.getResultList().map((mg, i) => ({
|
||||
title: mg.getName(),
|
||||
value: mg.getId(),
|
||||
})),
|
||||
});
|
||||
|
||||
this.setState({
|
||||
multicastGroups: multicastGroups,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
columns = (): ColumnsType<GatewayListItem.AsObject> => {
|
||||
return [
|
||||
{
|
||||
@ -111,9 +170,71 @@ class ListGateways extends Component<IProps> {
|
||||
});
|
||||
};
|
||||
|
||||
onRowsSelectChange = (ids: string[]) => {
|
||||
this.setState({
|
||||
selectedRowIds: ids,
|
||||
});
|
||||
};
|
||||
|
||||
showMgModal = () => {
|
||||
this.setState({
|
||||
mgModalVisible: true,
|
||||
});
|
||||
};
|
||||
|
||||
hideMgModal = () => {
|
||||
this.setState({
|
||||
mgModalVisible: false,
|
||||
});
|
||||
};
|
||||
|
||||
onMgSelected = (value: string) => {
|
||||
this.setState({
|
||||
mgSelected: value,
|
||||
});
|
||||
};
|
||||
|
||||
handleMgModalOk = () => {
|
||||
for (let gatewayId of this.state.selectedRowIds) {
|
||||
let req = new AddGatewayToMulticastGroupRequest();
|
||||
req.setMulticastGroupId(this.state.mgSelected);
|
||||
req.setGatewayId(gatewayId);
|
||||
|
||||
MulticastGroupStore.addGateway(req, () => {});
|
||||
}
|
||||
|
||||
this.setState({
|
||||
mgModalVisible: false,
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const menu = (
|
||||
<Menu>
|
||||
<Menu.Item onClick={this.showMgModal}>Add to multicast-group</Menu.Item>
|
||||
</Menu>
|
||||
);
|
||||
|
||||
return (
|
||||
<Space direction="vertical" style={{ width: "100%" }} size="large">
|
||||
<Modal
|
||||
title="Add selected gateways to multicast-group"
|
||||
visible={this.state.mgModalVisible}
|
||||
onOk={this.handleMgModalOk}
|
||||
onCancel={this.hideMgModal}
|
||||
okButtonProps={{ disabled: this.state.mgSelected === "" }}
|
||||
bodyStyle={{ height: 300 }}
|
||||
>
|
||||
<Space direction="vertical" size="large" style={{ width: "100%" }}>
|
||||
<TreeSelect
|
||||
style={{ width: "100%" }}
|
||||
placeholder="Select multicast-group"
|
||||
treeData={this.state.multicastGroups}
|
||||
onChange={this.onMgSelected}
|
||||
treeDefaultExpandAll
|
||||
/>
|
||||
</Space>
|
||||
</Modal>
|
||||
<PageHeader
|
||||
title="Gateways"
|
||||
breadcrumbRender={() => (
|
||||
@ -133,13 +254,28 @@ class ListGateways extends Component<IProps> {
|
||||
)}
|
||||
extra={[
|
||||
<Admin tenantId={this.props.tenant.getId()} isGatewayAdmin>
|
||||
<Button type="primary">
|
||||
<Link to={`/tenants/${this.props.tenant.getId()}/gateways/create`}>Add gateway</Link>
|
||||
</Button>
|
||||
<Space direction="horizontal" style={{ float: "right" }}>
|
||||
<Button type="primary">
|
||||
<Link to={`/tenants/${this.props.tenant.getId()}/gateways/create`}>Add gateway</Link>
|
||||
</Button>
|
||||
<Dropdown
|
||||
placement="bottomRight"
|
||||
overlay={menu}
|
||||
trigger={["click"]}
|
||||
disabled={this.state.selectedRowIds.length === 0}
|
||||
>
|
||||
<Button>Selected gateways</Button>
|
||||
</Dropdown>
|
||||
</Space>
|
||||
</Admin>,
|
||||
]}
|
||||
/>
|
||||
<DataTable columns={this.columns()} getPage={this.getPage} rowKey="gatewayId" />
|
||||
<DataTable
|
||||
columns={this.columns()}
|
||||
getPage={this.getPage}
|
||||
onRowsSelectChange={this.onRowsSelectChange}
|
||||
rowKey="gatewayId"
|
||||
/>
|
||||
</Space>
|
||||
);
|
||||
}
|
||||
|
127
ui/src/views/multicast-groups/ListMulticastGroupGateways.tsx
Normal file
127
ui/src/views/multicast-groups/ListMulticastGroupGateways.tsx
Normal file
@ -0,0 +1,127 @@
|
||||
import React, { Component } from "react";
|
||||
|
||||
import { Space, Button } from "antd";
|
||||
import { ColumnsType } from "antd/es/table";
|
||||
|
||||
import {
|
||||
ListGatewaysRequest,
|
||||
ListGatewaysResponse,
|
||||
GatewayListItem,
|
||||
} from "@chirpstack/chirpstack-api-grpc-web/api/gateway_pb";
|
||||
|
||||
import { Application } from "@chirpstack/chirpstack-api-grpc-web/api/application_pb";
|
||||
|
||||
import {
|
||||
MulticastGroup,
|
||||
RemoveGatewayFromMulticastGroupRequest,
|
||||
} from "@chirpstack/chirpstack-api-grpc-web/api/multicast_group_pb";
|
||||
|
||||
import DataTable, { GetPageCallbackFunc } from "../../components/DataTable";
|
||||
import GatewayStore from "../../stores/GatewayStore";
|
||||
import MulticastGroupStore from "../../stores/MulticastGroupStore";
|
||||
|
||||
interface IProps {
|
||||
application: Application;
|
||||
multicastGroup: MulticastGroup;
|
||||
}
|
||||
|
||||
interface IState {
|
||||
selectedRowIds: string[];
|
||||
refreshKey: number;
|
||||
}
|
||||
|
||||
class ListMulticastGroupGateways extends Component<IProps, IState> {
|
||||
columns = (): ColumnsType<GatewayListItem.AsObject> => {
|
||||
return [
|
||||
{
|
||||
title: "Name",
|
||||
dataIndex: "name",
|
||||
key: "name",
|
||||
},
|
||||
{
|
||||
title: "Gateway ID",
|
||||
dataIndex: "gatewayId",
|
||||
key: "gatewayId",
|
||||
width: 250,
|
||||
},
|
||||
];
|
||||
};
|
||||
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
selectedRowIds: [],
|
||||
refreshKey: 1,
|
||||
};
|
||||
}
|
||||
|
||||
onRowsSelectChange = (ids: string[]) => {
|
||||
this.setState({
|
||||
selectedRowIds: ids,
|
||||
});
|
||||
};
|
||||
|
||||
getPage = (limit: number, offset: number, callbackFunc: GetPageCallbackFunc) => {
|
||||
let req = new ListGatewaysRequest();
|
||||
req.setTenantId(this.props.application.getTenantId());
|
||||
req.setMulticastGroupId(this.props.multicastGroup.getId());
|
||||
req.setLimit(limit);
|
||||
req.setOffset(offset);
|
||||
|
||||
GatewayStore.list(req, (resp: ListGatewaysResponse) => {
|
||||
const obj = resp.toObject();
|
||||
callbackFunc(obj.totalCount, obj.resultList);
|
||||
});
|
||||
};
|
||||
|
||||
removeGatewaysFromMulticastGroup = () => {
|
||||
if (!window.confirm("Are you sure you want to remove the selected gateways from the multicast-group?")) {
|
||||
return;
|
||||
}
|
||||
|
||||
let count = 0;
|
||||
let self = this;
|
||||
|
||||
for (let gatewayId of this.state.selectedRowIds) {
|
||||
count++;
|
||||
|
||||
let req = new RemoveGatewayFromMulticastGroupRequest();
|
||||
req.setMulticastGroupId(this.props.multicastGroup.getId());
|
||||
req.setGatewayId(gatewayId);
|
||||
|
||||
let cbFunc = (cnt: number) => {
|
||||
return () => {
|
||||
if (cnt === self.state.selectedRowIds.length) {
|
||||
self.setState({
|
||||
refreshKey: self.state.refreshKey + 1,
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
MulticastGroupStore.removeGateway(req, cbFunc(count));
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
<Space direction="vertical" size="large" style={{ width: "100%" }}>
|
||||
<Space direction="horizontal" style={{ float: "right" }}>
|
||||
<Button onClick={this.removeGatewaysFromMulticastGroup} disabled={this.state.selectedRowIds.length === 0}>
|
||||
Remove from multicast-group
|
||||
</Button>
|
||||
</Space>
|
||||
<DataTable
|
||||
columns={this.columns()}
|
||||
getPage={this.getPage}
|
||||
onRowsSelectChange={this.onRowsSelectChange}
|
||||
rowKey="gatewayId"
|
||||
refreshKey={this.state.refreshKey}
|
||||
/>
|
||||
</Space>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default ListMulticastGroupGateways;
|
@ -2,8 +2,16 @@ import React, { Component } from "react";
|
||||
|
||||
import { Form, Input, InputNumber, Select, Row, Col, Button } from "antd";
|
||||
|
||||
import { MulticastGroup, MulticastGroupType } from "@chirpstack/chirpstack-api-grpc-web/api/multicast_group_pb";
|
||||
import { Region } from "@chirpstack/chirpstack-api-grpc-web/common/common_pb";
|
||||
import {
|
||||
MulticastGroup,
|
||||
MulticastGroupType,
|
||||
MulticastGroupSchedulingType,
|
||||
} from "@chirpstack/chirpstack-api-grpc-web/api/multicast_group_pb";
|
||||
import { ListRegionsResponse, RegionListItem } from "@chirpstack/chirpstack-api-grpc-web/api/internal_pb";
|
||||
|
||||
import { getEnumName } from "../helpers";
|
||||
import InternalStore from "../../stores/InternalStore";
|
||||
import AesKeyInput from "../../components/AesKeyInput";
|
||||
import DevAddrInput from "../../components/DevAddrInput";
|
||||
|
||||
@ -15,6 +23,7 @@ interface IProps {
|
||||
|
||||
interface IState {
|
||||
selectPingSlotPeriod: boolean;
|
||||
regionConfigurations: RegionListItem[];
|
||||
}
|
||||
|
||||
class MulticastGroupForm extends Component<IProps, IState> {
|
||||
@ -24,9 +33,18 @@ class MulticastGroupForm extends Component<IProps, IState> {
|
||||
super(props);
|
||||
this.state = {
|
||||
selectPingSlotPeriod: false,
|
||||
regionConfigurations: [],
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
InternalStore.listRegions((resp: ListRegionsResponse) => {
|
||||
this.setState({
|
||||
regionConfigurations: resp.getRegionsList(),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
onFinish = (values: MulticastGroup.AsObject) => {
|
||||
const v = Object.assign(this.props.initialValues.toObject(), values);
|
||||
let mg = new MulticastGroup();
|
||||
@ -40,8 +58,10 @@ class MulticastGroupForm extends Component<IProps, IState> {
|
||||
mg.setDr(v.dr);
|
||||
mg.setFCnt(v.fCnt);
|
||||
mg.setFrequency(v.frequency);
|
||||
mg.setRegion(v.region);
|
||||
mg.setGroupType(v.groupType);
|
||||
mg.setClassBPingSlotPeriod(v.classBPingSlotPeriod);
|
||||
mg.setClassCSchedulingType(v.classCSchedulingType);
|
||||
|
||||
this.props.onFinish(mg);
|
||||
};
|
||||
@ -53,6 +73,11 @@ class MulticastGroupForm extends Component<IProps, IState> {
|
||||
};
|
||||
|
||||
render() {
|
||||
const regionConfigurations = this.state.regionConfigurations
|
||||
.map(v => v.getRegion())
|
||||
.filter((v, i, a) => a.indexOf(v) === i)
|
||||
.map(v => <Select.Option value={v}>{getEnumName(Region, v).replace("_", "-")}</Select.Option>);
|
||||
|
||||
return (
|
||||
<Form
|
||||
layout="vertical"
|
||||
@ -94,22 +119,27 @@ class MulticastGroupForm extends Component<IProps, IState> {
|
||||
/>
|
||||
<Row gutter={24}>
|
||||
<Col span={8}>
|
||||
<Form.Item label="Region" name="region" rules={[{ required: true, message: "Please select a region!" }]}>
|
||||
<Select disabled={this.props.disabled}>{regionConfigurations}</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Form.Item
|
||||
label="Data-rate"
|
||||
name="dr"
|
||||
rules={[{ required: true, message: "Please enter a data-rate!" }]}
|
||||
tooltip="The data-rate to use when transmitting the multicast frames. Please refer to the LoRaWAN Regional Parameters specification for valid values."
|
||||
>
|
||||
<InputNumber min={0} max={15} disabled={this.props.disabled} />
|
||||
<InputNumber min={0} max={15} disabled={this.props.disabled} style={{ width: "100%" }} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Col span={4}>
|
||||
<Form.Item
|
||||
label="Frame-counter"
|
||||
name="fCnt"
|
||||
rules={[{ required: true, message: "Please enter a frame-counter!" }]}
|
||||
>
|
||||
<InputNumber min={0} disabled={this.props.disabled} />
|
||||
<InputNumber min={0} disabled={this.props.disabled} style={{ width: "100%" }} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
@ -119,12 +149,12 @@ class MulticastGroupForm extends Component<IProps, IState> {
|
||||
tooltip="The frequency to use when transmitting the multicast frames. Please refer to the LoRaWAN Regional Parameters specification for valid values."
|
||||
rules={[{ required: true, message: "Please enter a frequency!" }]}
|
||||
>
|
||||
<InputNumber min={0} disabled={this.props.disabled} style={{ width: "200px" }} />
|
||||
<InputNumber min={0} disabled={this.props.disabled} style={{ width: "100%" }} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row gutter={24}>
|
||||
<Col span={12}>
|
||||
<Col span={8}>
|
||||
<Form.Item
|
||||
label="Group type"
|
||||
name="groupType"
|
||||
@ -137,7 +167,7 @@ class MulticastGroupForm extends Component<IProps, IState> {
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Col span={8}>
|
||||
<Form.Item label="Class-B ping-slot periodicity" name="classBPingSlotPeriod">
|
||||
<Select disabled={!this.state.selectPingSlotPeriod || this.props.disabled}>
|
||||
<Select.Option value={32 * 1}>Every second</Select.Option>
|
||||
@ -151,6 +181,18 @@ class MulticastGroupForm extends Component<IProps, IState> {
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Form.Item
|
||||
label="Class-C scheduling type"
|
||||
name="classCSchedulingType"
|
||||
tooltip="In order to reach all devices, it might be needed to transmit a downlink through multiple gateways. In case of Delay each gateway will transmit one by one, in case of GPS Time all required gateways will transmit at the same GPS time."
|
||||
>
|
||||
<Select disabled={this.state.selectPingSlotPeriod || this.props.disabled}>
|
||||
<Select.Option value={MulticastGroupSchedulingType.DELAY}>Delay</Select.Option>
|
||||
<Select.Option value={MulticastGroupSchedulingType.GPS_TIME}>GPS Time</Select.Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Form.Item>
|
||||
<Button type="primary" htmlType="submit" disabled={this.props.disabled}>
|
||||
|
@ -15,6 +15,7 @@ import {
|
||||
import MulticastGroupStore from "../../stores/MulticastGroupStore";
|
||||
import DeleteConfirm from "../../components/DeleteConfirm";
|
||||
import ListMulticastGroupDevices from "./ListMulticastGroupDevices";
|
||||
import ListMulticastGroupGateways from "./ListMulticastGroupGateways";
|
||||
import EditMulticastGroup from "./EditMulticastGroup";
|
||||
import Admin from "../../components/Admin";
|
||||
|
||||
@ -71,6 +72,9 @@ class MulticastGroupLayout extends Component<IProps, IState> {
|
||||
let tab = "devices";
|
||||
|
||||
const path = this.props.history.location.pathname;
|
||||
if (path.endsWith("gateways")) {
|
||||
tab = "gateways";
|
||||
}
|
||||
if (path.endsWith("edit")) {
|
||||
tab = "edit";
|
||||
}
|
||||
@ -127,6 +131,13 @@ class MulticastGroupLayout extends Component<IProps, IState> {
|
||||
Devices
|
||||
</Link>
|
||||
</Menu.Item>
|
||||
<Menu.Item key="gateways">
|
||||
<Link
|
||||
to={`/tenants/${tenant.getId()}/applications/${app.getId()}/multicast-groups/${mg.getId()}/gateways`}
|
||||
>
|
||||
Gateways
|
||||
</Link>
|
||||
</Menu.Item>
|
||||
<Menu.Item key="edit">
|
||||
<Link to={`/tenants/${tenant.getId()}/applications/${app.getId()}/multicast-groups/${mg.getId()}/edit`}>
|
||||
Configuration
|
||||
@ -139,6 +150,11 @@ class MulticastGroupLayout extends Component<IProps, IState> {
|
||||
path={this.props.match.path}
|
||||
render={props => <ListMulticastGroupDevices multicastGroup={mg} {...props} />}
|
||||
/>
|
||||
<Route
|
||||
exact
|
||||
path={`${this.props.match.path}/gateways`}
|
||||
render={props => <ListMulticastGroupGateways application={app} multicastGroup={mg} {...props} />}
|
||||
/>
|
||||
<Route
|
||||
exact
|
||||
path={`${this.props.match.path}/edit`}
|
||||
|
Loading…
x
Reference in New Issue
Block a user