webclient: Added Quasar based WiFi settings (+needed gRPC and backend service modifications)

This commit is contained in:
MaMe82 2018-09-03 18:20:00 +02:00
parent 847a960db9
commit 838bbc2268
12 changed files with 535 additions and 256 deletions

View File

@ -28,6 +28,9 @@ impact reasonable)
WIFI
- implement connection to OPEN-AUTH network as STA
- implement nexmon firmware support (not for first release)
- implement failover from STA to AP (if connection fails)
- add Option to reconfigure Wifi Ethernet Interface settings to DHCP client mode, when WiFi mode is station
- fall back to old settings, if deployment of WiFi settings fails
BLUETOOTH:
- configuration cpabilities for BNEP/NAP on server, keep in mind BLE use cases (idea of stand-alone proxy)

View File

@ -2941,6 +2941,7 @@ type P4WNP1Client interface {
GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*EthernetInterfaceSettings, error)
// WiFi
DeployWifiSettings(ctx context.Context, in *WiFiSettings, opts ...grpcweb.CallOption) (*Empty, error)
GetDeployedWifiSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*WiFiSettings, error)
// HIDScript / job management
HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptResult, error)
HIDRunScriptJob(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptJob, error)
@ -3070,6 +3071,15 @@ func (c *p4WNP1Client) DeployWifiSettings(ctx context.Context, in *WiFiSettings,
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) GetDeployedWifiSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*WiFiSettings, error) {
resp, err := c.client.RPCCall(ctx, "GetDeployedWifiSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(WiFiSettings).Unmarshal(resp)
}
func (c *p4WNP1Client) HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptResult, error) {
resp, err := c.client.RPCCall(ctx, "HIDRunScript", in.Marshal(), opts...)
if err != nil {

View File

@ -1252,6 +1252,7 @@ type P4WNP1Client interface {
GetDeployedEthernetInterfaceSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*EthernetInterfaceSettings, error)
// WiFi
DeployWifiSettings(ctx context.Context, in *WiFiSettings, opts ...grpc.CallOption) (*Empty, error)
GetDeployedWifiSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*WiFiSettings, error)
// HIDScript / job management
HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptResult, error)
HIDRunScriptJob(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptJob, error)
@ -1378,6 +1379,15 @@ func (c *p4WNP1Client) DeployWifiSettings(ctx context.Context, in *WiFiSettings,
return out, nil
}
func (c *p4WNP1Client) GetDeployedWifiSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*WiFiSettings, error) {
out := new(WiFiSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetDeployedWifiSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptResult, error) {
out := new(HIDScriptResult)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/HIDRunScript", in, out, c.cc, opts...)
@ -1535,6 +1545,7 @@ type P4WNP1Server interface {
GetDeployedEthernetInterfaceSettings(context.Context, *StringMessage) (*EthernetInterfaceSettings, error)
// WiFi
DeployWifiSettings(context.Context, *WiFiSettings) (*Empty, error)
GetDeployedWifiSettings(context.Context, *Empty) (*WiFiSettings, error)
// HIDScript / job management
HIDRunScript(context.Context, *HIDScriptRequest) (*HIDScriptResult, error)
HIDRunScriptJob(context.Context, *HIDScriptRequest) (*HIDScriptJob, error)
@ -1756,6 +1767,24 @@ func _P4WNP1_DeployWifiSettings_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetDeployedWifiSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetDeployedWifiSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetDeployedWifiSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetDeployedWifiSettings(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_HIDRunScript_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(HIDScriptRequest)
if err := dec(in); err != nil {
@ -2041,6 +2070,10 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
MethodName: "DeployWifiSettings",
Handler: _P4WNP1_DeployWifiSettings_Handler,
},
{
MethodName: "GetDeployedWifiSettings",
Handler: _P4WNP1_GetDeployedWifiSettings_Handler,
},
{
MethodName: "HIDRunScript",
Handler: _P4WNP1_HIDRunScript_Handler,
@ -2103,138 +2136,139 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("grpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 2116 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdb, 0x72, 0xe3, 0xb8,
0xd1, 0x96, 0x2d, 0x5b, 0x96, 0x5a, 0x07, 0x6b, 0x31, 0x27, 0x8e, 0x77, 0x8e, 0xf8, 0x67, 0xf6,
0x77, 0x65, 0xb7, 0xbc, 0xbb, 0x8e, 0x2b, 0xbb, 0x35, 0x55, 0xa9, 0x2c, 0x2d, 0x51, 0x96, 0x66,
0x2c, 0x59, 0x05, 0xda, 0xe3, 0x4a, 0x72, 0xa1, 0xa5, 0x49, 0x58, 0x46, 0x86, 0x22, 0x19, 0x02,
0xf4, 0x8e, 0x73, 0xb1, 0x17, 0xc9, 0x53, 0xe6, 0x01, 0xf2, 0x1c, 0x49, 0x01, 0x3c, 0x88, 0xd4,
0x48, 0xf6, 0x54, 0x72, 0x07, 0x7c, 0x68, 0x7c, 0xdd, 0xe8, 0x6e, 0x34, 0x0e, 0x00, 0xd3, 0x30,
0xb0, 0xf7, 0x82, 0xd0, 0x17, 0x3e, 0xaa, 0x8f, 0x0f, 0x7e, 0xf1, 0xc6, 0xdf, 0x4f, 0x24, 0x84,
0x5f, 0x42, 0xd3, 0x14, 0x21, 0xf3, 0xa6, 0x43, 0xca, 0xb9, 0x35, 0xa5, 0xa8, 0x0d, 0xe5, 0x19,
0x9f, 0x6a, 0x6b, 0x2f, 0xd6, 0x76, 0x6b, 0x44, 0x36, 0xf1, 0x1e, 0x34, 0x8c, 0x6b, 0xea, 0x09,
0x42, 0xff, 0x1a, 0x51, 0x2e, 0xd0, 0x33, 0x00, 0x97, 0x71, 0x41, 0xbd, 0xd3, 0x9b, 0x80, 0x2a,
0xc1, 0x32, 0xc9, 0x21, 0xd8, 0x02, 0x50, 0xf2, 0xef, 0x2d, 0x37, 0xa2, 0x68, 0x07, 0xb6, 0x04,
0x57, 0x1a, 0x62, 0xce, 0x7e, 0x89, 0xa4, 0x00, 0x7a, 0x08, 0x9b, 0xe2, 0xc2, 0xf7, 0x5d, 0x6d,
0xfd, 0xc5, 0xda, 0x6e, 0xb5, 0x5f, 0x22, 0x71, 0x17, 0x69, 0x50, 0x11, 0xcc, 0x13, 0xbf, 0x3b,
0xd0, 0xca, 0x92, 0xbd, 0x5f, 0x22, 0x49, 0xff, 0x70, 0x13, 0xca, 0xd7, 0x96, 0x8b, 0x8f, 0x61,
0x53, 0xa9, 0x40, 0x08, 0x36, 0xc4, 0xdc, 0x0a, 0xd5, 0x46, 0xdf, 0x42, 0xe5, 0x5a, 0xaa, 0xe6,
0xda, 0xfa, 0x8b, 0xf2, 0x6e, 0x7d, 0xff, 0xd1, 0x5e, 0x6e, 0xc1, 0x7b, 0x73, 0xd3, 0x48, 0x22,
0x86, 0x7f, 0x86, 0xfb, 0xa7, 0x74, 0x16, 0x74, 0x59, 0x78, 0x12, 0xf6, 0x98, 0x4b, 0xd3, 0x85,
0xb6, 0xa1, 0xec, 0xb0, 0x30, 0x75, 0x85, 0xc3, 0x42, 0xf4, 0x10, 0x2a, 0x41, 0x48, 0x2f, 0xd9,
0x47, 0x65, 0x71, 0x8d, 0x24, 0x3d, 0xe9, 0x12, 0xdf, 0x73, 0x6f, 0x7a, 0xbe, 0xeb, 0xd0, 0x50,
0x19, 0x5d, 0x25, 0x39, 0x04, 0xff, 0x00, 0x0f, 0x16, 0x34, 0xf0, 0xc0, 0xf7, 0x38, 0x95, 0x13,
0x43, 0xca, 0x23, 0x57, 0x8c, 0x2d, 0x71, 0x95, 0x68, 0xca, 0x21, 0xf8, 0x04, 0xb6, 0x09, 0xb5,
0x9c, 0xbc, 0x55, 0x08, 0x36, 0x82, 0xb9, 0xb0, 0x6a, 0xa3, 0xfb, 0xb0, 0xc9, 0x85, 0x15, 0x0a,
0x65, 0x56, 0x99, 0xc4, 0x1d, 0x29, 0xe9, 0x58, 0xc2, 0x52, 0xf6, 0x34, 0x88, 0x6a, 0xe3, 0xef,
0xa0, 0x3d, 0x27, 0x4c, 0x8c, 0x78, 0x02, 0xb5, 0x90, 0x5a, 0x4e, 0xc7, 0x8f, 0x3c, 0x91, 0x78,
0x72, 0x0e, 0xe0, 0x6b, 0x68, 0x9f, 0x87, 0x4c, 0xd0, 0xbb, 0x6c, 0x78, 0x08, 0x15, 0x2b, 0x08,
0xa8, 0xe7, 0xc4, 0xd1, 0x24, 0x49, 0x0f, 0x61, 0x68, 0xcc, 0x22, 0x2e, 0x46, 0xbe, 0x30, 0x3e,
0x32, 0x2e, 0x12, 0xef, 0x14, 0xb0, 0xcc, 0xd2, 0x8d, 0x9c, 0xa5, 0xaf, 0x61, 0x5b, 0xaa, 0x1c,
0x78, 0x97, 0xfe, 0x2d, 0x6a, 0xf1, 0xaf, 0xd0, 0x9e, 0x8b, 0x25, 0x0b, 0x42, 0xb0, 0xe1, 0x59,
0x33, 0x9a, 0xca, 0xc9, 0xb6, 0xc4, 0x38, 0xfb, 0x1b, 0x4d, 0x3c, 0xa4, 0xda, 0x12, 0x9b, 0xf9,
0x0e, 0x55, 0x26, 0x35, 0x89, 0x6a, 0x23, 0x0d, 0xb6, 0x66, 0xbe, 0x73, 0xca, 0x66, 0x54, 0x59,
0x53, 0x26, 0x69, 0x57, 0x3a, 0x99, 0xf1, 0x2e, 0x0b, 0xb5, 0x4d, 0xb5, 0x82, 0xb8, 0x83, 0xff,
0x04, 0xed, 0xfe, 0xa0, 0x6b, 0xda, 0x21, 0x0b, 0xf2, 0x3b, 0x84, 0x2b, 0x20, 0x1f, 0xd5, 0x39,
0x82, 0xbe, 0x82, 0x96, 0x60, 0x33, 0xea, 0x47, 0xc2, 0xa4, 0xb6, 0xef, 0x39, 0x5c, 0x59, 0xd5,
0x24, 0x0b, 0x28, 0x7e, 0x06, 0x8d, 0x8c, 0xfb, 0xad, 0x7f, 0x81, 0x5a, 0xb0, 0xce, 0x1c, 0xc5,
0xd7, 0x24, 0xeb, 0xcc, 0xc1, 0xaf, 0x72, 0xba, 0xdf, 0xfa, 0x17, 0xc7, 0x2c, 0x4e, 0x5a, 0xe6,
0x70, 0x6d, 0xed, 0x45, 0x79, 0xb7, 0x49, 0x64, 0x13, 0xbf, 0x07, 0xad, 0x3f, 0xe8, 0x92, 0xc8,
0xf3, 0x98, 0x37, 0x7d, 0xeb, 0x5f, 0x98, 0xc2, 0x12, 0x32, 0xf8, 0x91, 0x2b, 0x72, 0x8c, 0x65,
0xc9, 0x28, 0x3d, 0x72, 0x3d, 0x1b, 0x38, 0xa9, 0x97, 0x64, 0x5b, 0x06, 0x96, 0xfb, 0x51, 0x68,
0xc7, 0x7e, 0xaa, 0x91, 0xa4, 0x87, 0x7f, 0x85, 0xed, 0xdc, 0xca, 0x15, 0xdd, 0xd7, 0x50, 0xfe,
0x8b, 0x7f, 0xa1, 0xf8, 0xea, 0xfb, 0x8f, 0x0b, 0xfb, 0x2e, 0x6f, 0x28, 0x91, 0x52, 0xd2, 0x4b,
0x8c, 0xf7, 0x98, 0xc7, 0xf8, 0x15, 0x4d, 0x93, 0x26, 0x87, 0xcc, 0xf7, 0xc6, 0x5b, 0xee, 0x7b,
0x89, 0xee, 0x1c, 0x82, 0xf7, 0xa0, 0x7e, 0x6c, 0x74, 0x4d, 0x2a, 0x04, 0xf3, 0xa6, 0x1c, 0x3d,
0x87, 0xfa, 0x85, 0xcb, 0xbc, 0x0f, 0x13, 0x3b, 0xcb, 0xe3, 0x26, 0x01, 0x05, 0xc5, 0x89, 0xfc,
0xaf, 0x0d, 0x68, 0x1d, 0x59, 0xce, 0x94, 0x8a, 0x6c, 0x8e, 0x06, 0x5b, 0xd4, 0xb3, 0x2e, 0x5c,
0x1a, 0xfb, 0xa0, 0x4a, 0xd2, 0xae, 0x74, 0xe3, 0x35, 0x73, 0x92, 0x6d, 0x2e, 0x9b, 0x12, 0x09,
0x98, 0x93, 0xd8, 0x21, 0x9b, 0x2a, 0xb3, 0x2d, 0x2f, 0xba, 0xb4, 0x6c, 0x11, 0x85, 0x34, 0x54,
0xf9, 0x52, 0x23, 0x05, 0x4c, 0x6a, 0x08, 0x42, 0xdf, 0x89, 0x6c, 0xa1, 0xd2, 0xa6, 0x46, 0xd2,
0xae, 0x72, 0x2b, 0x0d, 0x99, 0xe5, 0x6a, 0x95, 0xc4, 0xad, 0xaa, 0x87, 0x9e, 0x41, 0x3d, 0xe2,
0x74, 0xd2, 0xe9, 0x76, 0x26, 0x46, 0x67, 0xa8, 0x6d, 0x29, 0xbb, 0x6a, 0x11, 0xa7, 0x9d, 0x6e,
0xc7, 0xe8, 0x0c, 0xd1, 0x97, 0x20, 0x3b, 0x13, 0x32, 0xea, 0x0e, 0x4c, 0xad, 0xaa, 0x46, 0xab,
0x11, 0xa7, 0xaa, 0x8f, 0x76, 0xa1, 0x2d, 0x07, 0xfb, 0x83, 0xee, 0xe4, 0x9d, 0xf1, 0xc7, 0xc3,
0x13, 0x9d, 0x74, 0xb5, 0x9a, 0x92, 0x69, 0x45, 0x9c, 0xf6, 0x07, 0xdd, 0x14, 0x45, 0x18, 0x9a,
0xa9, 0xe4, 0xf0, 0xe4, 0xcc, 0x34, 0x34, 0x50, 0x62, 0xf5, 0x58, 0x4c, 0x41, 0xa9, 0x29, 0x52,
0x86, 0xe8, 0xe7, 0x5a, 0x3d, 0x33, 0x45, 0xe6, 0x93, 0x7e, 0x8e, 0x1e, 0xc1, 0x96, 0x1c, 0x3f,
0x1b, 0x9a, 0x5a, 0x23, 0xde, 0xf3, 0x11, 0xa7, 0x67, 0x43, 0x13, 0x3d, 0x05, 0x90, 0x03, 0xa6,
0x41, 0x06, 0xfa, 0xb1, 0xd6, 0xcc, 0xe6, 0xc5, 0x00, 0x7a, 0x0b, 0xad, 0xd0, 0x73, 0x18, 0x9f,
0xf0, 0x24, 0x10, 0x5a, 0x4b, 0x65, 0xcc, 0xff, 0x15, 0x32, 0xa6, 0x18, 0x2b, 0x43, 0x5c, 0xd1,
0xd0, 0xa3, 0x82, 0x34, 0xd5, 0xd4, 0x2c, 0x84, 0x43, 0x68, 0xdb, 0x8e, 0x3d, 0xa1, 0xf6, 0x6c,
0xce, 0xb6, 0xfd, 0xf9, 0x6c, 0x2d, 0xdb, 0xb1, 0x0d, 0x7b, 0x96, 0xd1, 0xe9, 0xd0, 0x88, 0x66,
0x39, 0xc3, 0xda, 0x8a, 0xea, 0xd9, 0x2d, 0x54, 0x67, 0x43, 0x93, 0xd4, 0xa3, 0x59, 0x66, 0x11,
0x1e, 0xc3, 0xc3, 0xe5, 0xca, 0x64, 0xe8, 0xae, 0x7c, 0x2e, 0x26, 0x96, 0xe3, 0xa4, 0xc7, 0x4a,
0x55, 0x02, 0xba, 0xe3, 0x84, 0xe8, 0x31, 0x54, 0x1d, 0x7a, 0x1d, 0x8f, 0xc5, 0x69, 0xb7, 0xe5,
0xd0, 0x6b, 0x39, 0x84, 0x7f, 0x0f, 0x5f, 0x7c, 0xa2, 0x53, 0x96, 0x23, 0xdb, 0x09, 0xfd, 0x59,
0x92, 0xb9, 0x71, 0x47, 0x6e, 0xe0, 0x4b, 0xe6, 0xd2, 0x84, 0x41, 0xb5, 0xf1, 0x04, 0x5e, 0x76,
0x69, 0xe0, 0xfa, 0x37, 0xd4, 0x49, 0x4d, 0x19, 0x78, 0x82, 0x86, 0x97, 0x96, 0x4d, 0xb3, 0x85,
0xbf, 0x81, 0x0d, 0x79, 0x86, 0xab, 0xc2, 0x51, 0xdf, 0xff, 0xaa, 0x78, 0x66, 0xae, 0x9a, 0x45,
0xd4, 0x1c, 0xfc, 0xf7, 0x32, 0x3c, 0x5e, 0xcd, 0xbc, 0xac, 0x1a, 0xff, 0x21, 0xa9, 0xbc, 0xd2,
0xcc, 0xd6, 0xfe, 0xd7, 0x9f, 0xa7, 0x6d, 0x6f, 0xe8, 0x3b, 0x34, 0x29, 0xd3, 0xb2, 0x78, 0x04,
0xd2, 0x39, 0x94, 0xf3, 0x83, 0xb4, 0x38, 0xcc, 0x11, 0xb4, 0x03, 0x55, 0x8f, 0x8a, 0x99, 0xc5,
0x3f, 0x1c, 0x24, 0xfb, 0x32, 0xeb, 0xe7, 0x77, 0xfd, 0x66, 0x71, 0xd7, 0x9f, 0x00, 0x72, 0xae,
0xec, 0xc0, 0xa4, 0xe1, 0x35, 0x0d, 0x53, 0xb5, 0x6a, 0x7f, 0xd6, 0xf7, 0x9f, 0x17, 0x8c, 0xec,
0xf6, 0x3b, 0xe3, 0xa2, 0x18, 0x59, 0x32, 0x15, 0xbd, 0x82, 0x66, 0x9a, 0x4a, 0x03, 0xef, 0x8c,
0xd3, 0x64, 0x3b, 0x17, 0x41, 0xdc, 0x81, 0x0d, 0xb9, 0x34, 0x04, 0x50, 0x19, 0xea, 0xa3, 0x33,
0xfd, 0xb8, 0x5d, 0x42, 0xdb, 0x50, 0x97, 0x3a, 0x26, 0x9d, 0xe3, 0x81, 0x31, 0x3a, 0x6d, 0xaf,
0x65, 0x80, 0x69, 0x90, 0xf7, 0x06, 0x69, 0xaf, 0xa3, 0x26, 0xd4, 0xce, 0x46, 0x43, 0x7d, 0xa4,
0x1f, 0x19, 0xdd, 0x76, 0x19, 0xff, 0xbb, 0x0c, 0xe8, 0x53, 0xab, 0xe6, 0xb7, 0xb5, 0xb1, 0x1f,
0x66, 0x55, 0x71, 0x8e, 0xa0, 0x5d, 0xd8, 0x8e, 0x7b, 0x99, 0xbb, 0x93, 0xdc, 0x59, 0x84, 0xe5,
0x35, 0xc1, 0xa5, 0x16, 0x57, 0x17, 0x81, 0xc4, 0xe3, 0x73, 0x00, 0xfd, 0x06, 0xda, 0x9e, 0x2f,
0xf4, 0x48, 0x5c, 0xf9, 0x21, 0x13, 0x96, 0x60, 0xd7, 0xf1, 0x01, 0x5a, 0x25, 0x9f, 0xe0, 0x68,
0x0f, 0x90, 0xe3, 0x8f, 0x7c, 0x71, 0xc8, 0x3c, 0x67, 0xae, 0x36, 0x8e, 0xc5, 0x92, 0x11, 0x79,
0x5e, 0xda, 0x96, 0xeb, 0x5e, 0x58, 0xf6, 0x87, 0xf8, 0x0c, 0x49, 0x4a, 0xe6, 0x02, 0x8a, 0x0e,
0xa0, 0x12, 0x5a, 0xde, 0x94, 0x72, 0x6d, 0x4b, 0x65, 0xf1, 0x93, 0x15, 0x21, 0x23, 0x52, 0x88,
0x24, 0xb2, 0xa8, 0x07, 0x5b, 0x7e, 0x20, 0x98, 0xef, 0x71, 0xad, 0xaa, 0xa6, 0x7d, 0x73, 0x47,
0xa4, 0xf7, 0x4e, 0x62, 0x71, 0xc3, 0x13, 0xe1, 0x0d, 0x49, 0x27, 0xa3, 0x0e, 0xd4, 0xb9, 0x5c,
0xa0, 0xdd, 0xf7, 0xb9, 0xe0, 0x5a, 0x4d, 0x71, 0xbd, 0x5c, 0xc5, 0x95, 0x49, 0x92, 0xfc, 0xac,
0x9d, 0x37, 0xd0, 0xc8, 0xb3, 0xcb, 0x53, 0xe7, 0x03, 0xbd, 0x49, 0xe2, 0x26, 0x9b, 0x72, 0xdf,
0xab, 0x7b, 0x6b, 0x12, 0xa6, 0xb8, 0xf3, 0x66, 0xfd, 0xc7, 0x35, 0xec, 0xc3, 0xf6, 0xc2, 0x1a,
0xd5, 0x19, 0x2a, 0x1b, 0xc7, 0xfe, 0x2f, 0x34, 0xcc, 0xee, 0x97, 0x19, 0x92, 0x8d, 0x9f, 0x05,
0x01, 0x4d, 0xcb, 0x4e, 0x0e, 0xc9, 0x62, 0xae, 0xee, 0x43, 0xf9, 0x98, 0x4b, 0x00, 0xff, 0x08,
0xf7, 0x97, 0xad, 0x48, 0xbd, 0x21, 0x2c, 0x3b, 0x7b, 0x43, 0x58, 0xb6, 0xba, 0x67, 0x04, 0x09,
0xff, 0x3a, 0x0b, 0xf0, 0x3f, 0xcb, 0xd0, 0x38, 0x67, 0x3d, 0x96, 0xa5, 0xe9, 0x0e, 0x54, 0x1d,
0xc6, 0xf3, 0x47, 0x71, 0xd6, 0x97, 0x74, 0x21, 0x9d, 0xa6, 0x67, 0x71, 0x48, 0xa7, 0x68, 0x3f,
0x77, 0x71, 0x6b, 0x2d, 0x54, 0xe7, 0x3c, 0x6d, 0xbe, 0x62, 0xe8, 0x50, 0xb3, 0x22, 0x71, 0x35,
0x51, 0x13, 0x37, 0xd4, 0xc4, 0x57, 0xab, 0x27, 0xea, 0x63, 0x99, 0xb2, 0x6a, 0x7a, 0xd5, 0x4a,
0x5a, 0xf2, 0x58, 0xb3, 0x82, 0x89, 0x7d, 0x65, 0x79, 0x1e, 0x75, 0x55, 0xbe, 0x36, 0x49, 0xcd,
0x0a, 0x3a, 0x31, 0x80, 0xbe, 0x85, 0xea, 0x21, 0xe7, 0x9d, 0xcb, 0xa9, 0x3e, 0x4e, 0x6a, 0xc6,
0xbd, 0x82, 0x82, 0x43, 0xd3, 0xec, 0x5c, 0x4e, 0x49, 0x26, 0x84, 0x7e, 0x80, 0x46, 0xdc, 0xee,
0xb8, 0x8c, 0x7a, 0x42, 0x15, 0x87, 0x15, 0x93, 0x0a, 0x82, 0xe8, 0x05, 0x34, 0xac, 0x60, 0x72,
0xc5, 0x1c, 0x3a, 0xe1, 0x9c, 0x39, 0xc9, 0x35, 0x00, 0xac, 0xa0, 0xcf, 0x1c, 0x6a, 0x72, 0xe6,
0xa0, 0xd7, 0xd0, 0x4a, 0xfc, 0x37, 0xf1, 0xe8, 0xc7, 0x99, 0xef, 0x25, 0xe7, 0x7b, 0x33, 0x41,
0x47, 0x0a, 0xc4, 0xdf, 0x24, 0x95, 0xa7, 0x02, 0xeb, 0xfa, 0xb8, 0x5d, 0x42, 0x5b, 0x50, 0x36,
0x4f, 0xf5, 0xf6, 0x1a, 0xba, 0x07, 0xdb, 0xe6, 0xa9, 0x3e, 0xe9, 0xe9, 0x83, 0xe3, 0x93, 0xf7,
0x06, 0x99, 0xe8, 0xe3, 0xf6, 0x3a, 0x7e, 0x05, 0x30, 0xf7, 0x0b, 0x6a, 0x40, 0xf5, 0x7c, 0xac,
0xef, 0x4f, 0xc6, 0xe6, 0xbb, 0x76, 0x09, 0x55, 0x61, 0xe3, 0x64, 0x6c, 0x8c, 0xda, 0x6b, 0x78,
0x0f, 0x2a, 0xb1, 0xd1, 0xb2, 0xf2, 0x9b, 0xe6, 0xa0, 0x9b, 0x56, 0x7e, 0xd9, 0x96, 0xc1, 0x1c,
0x9b, 0xef, 0xd2, 0x60, 0x8e, 0xcd, 0x77, 0x78, 0x0b, 0x36, 0x8d, 0x59, 0x20, 0x6e, 0xf6, 0xff,
0xb1, 0x0d, 0x95, 0xf1, 0xc1, 0xf9, 0x68, 0xfc, 0x3d, 0x1a, 0x82, 0x76, 0x44, 0x45, 0x7a, 0x6a,
0x15, 0x0e, 0x3f, 0x84, 0x8a, 0xa7, 0x85, 0x9c, 0xba, 0xf3, 0xe5, 0x2d, 0x07, 0x34, 0x2e, 0xa1,
0x3e, 0xdc, 0x8b, 0xb9, 0xfe, 0x67, 0xa6, 0x1e, 0x7c, 0x71, 0x44, 0xc5, 0xc2, 0x35, 0xf2, 0xbf,
0xe0, 0x39, 0x81, 0x2f, 0xcc, 0x4f, 0x78, 0x6e, 0x9b, 0x73, 0x17, 0xe1, 0x4f, 0xd0, 0x3a, 0xa2,
0x22, 0x7f, 0x21, 0x5e, 0x66, 0x95, 0x56, 0xc0, 0x72, 0xd2, 0x31, 0x83, 0x59, 0x64, 0x58, 0x29,
0xbd, 0xb3, 0x84, 0x1b, 0x97, 0x50, 0x17, 0x1a, 0x43, 0x79, 0xd5, 0x3e, 0x1b, 0x9a, 0xea, 0x4c,
0xb8, 0xe3, 0xda, 0xb4, 0x82, 0x65, 0x02, 0xcf, 0xe3, 0x60, 0xad, 0xbe, 0x52, 0x7c, 0xe6, 0xf5,
0x64, 0x85, 0x02, 0x1f, 0xfe, 0xff, 0x88, 0x0a, 0xdd, 0x75, 0xef, 0xbe, 0x15, 0x2d, 0xf3, 0xe1,
0x5e, 0xb1, 0xa4, 0xdf, 0xc5, 0x81, 0x4b, 0xc8, 0x85, 0x57, 0xb9, 0x6c, 0x5e, 0xad, 0x6d, 0xa7,
0xc0, 0x5c, 0xf8, 0x97, 0xd9, 0xf9, 0xcc, 0x25, 0xe3, 0x12, 0x32, 0x00, 0xc5, 0xaa, 0xce, 0xd9,
0xe5, 0xbc, 0xc0, 0x3e, 0x5e, 0x59, 0xeb, 0x56, 0x78, 0x69, 0xa8, 0x1e, 0x9f, 0x24, 0xf2, 0x92,
0xc3, 0xf5, 0xe9, 0xf2, 0xe7, 0x5c, 0xf2, 0xe6, 0xdd, 0x79, 0xb2, 0x6a, 0x58, 0xbe, 0xd7, 0x14,
0xdd, 0x76, 0x9e, 0x4e, 0x3e, 0x67, 0xef, 0x60, 0x5c, 0xfd, 0x7e, 0xc4, 0x25, 0x44, 0xe0, 0x41,
0x7f, 0xd0, 0x3d, 0xa2, 0x62, 0xfe, 0xa8, 0x8c, 0x9f, 0xa0, 0xab, 0x67, 0xdd, 0x69, 0xa2, 0x01,
0xa8, 0x3f, 0xe8, 0x76, 0x2c, 0xcf, 0xa6, 0xee, 0xdc, 0xca, 0x5b, 0x08, 0x97, 0x3b, 0x6e, 0x04,
0x8f, 0x62, 0xd3, 0x92, 0x27, 0x77, 0x26, 0xbf, 0x3c, 0x9d, 0x9e, 0xae, 0xe4, 0x97, 0xef, 0x79,
0x5c, 0x42, 0x87, 0xf0, 0x30, 0x33, 0x4b, 0x77, 0xdd, 0x3b, 0xe8, 0x96, 0xdb, 0xf4, 0xe7, 0xd4,
0x5d, 0x0b, 0xdf, 0x00, 0xb7, 0xad, 0xee, 0xf5, 0xe2, 0xd0, 0xd2, 0x2f, 0x04, 0x65, 0x60, 0xbd,
0x67, 0x66, 0x7f, 0x44, 0x0b, 0x61, 0x5d, 0xfc, 0x3b, 0x5a, 0x61, 0xe0, 0x3b, 0x80, 0x9e, 0x99,
0xfe, 0x4c, 0xa1, 0x62, 0xa4, 0x16, 0x7e, 0xc0, 0x16, 0x3c, 0xb6, 0xf8, 0x9d, 0xa5, 0x22, 0xd0,
0xec, 0x99, 0x47, 0x54, 0xa4, 0x1f, 0x43, 0x0b, 0x7c, 0x0b, 0xdf, 0x4a, 0x0b, 0x7c, 0x8b, 0xbf,
0x49, 0xb8, 0x84, 0x7e, 0x86, 0x07, 0x3d, 0xb3, 0x13, 0x52, 0x4b, 0xd0, 0xc2, 0x37, 0x1e, 0x2a,
0xde, 0xee, 0x96, 0x7d, 0x22, 0xee, 0xe0, 0xdb, 0x44, 0x32, 0x0d, 0x3f, 0x41, 0x5d, 0x7d, 0x4c,
0x1e, 0xab, 0x3b, 0xf7, 0x42, 0x54, 0xf2, 0xbf, 0xaf, 0x8b, 0xee, 0x93, 0x43, 0xb8, 0xf4, 0xdd,
0x1a, 0x3a, 0x82, 0xba, 0x61, 0x5f, 0x65, 0x5f, 0x65, 0xb7, 0x95, 0x92, 0x5b, 0xc6, 0x70, 0xe9,
0xa2, 0xa2, 0x7e, 0x89, 0x7f, 0xfb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x06, 0xb2, 0xdb,
0x33, 0x16, 0x00, 0x00,
// 2129 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xdd, 0x73, 0xe3, 0xb6,
0x11, 0x97, 0x2d, 0x7f, 0x48, 0xab, 0x0f, 0xeb, 0x70, 0x5f, 0x3c, 0xe7, 0x3e, 0xd1, 0xbb, 0xd4,
0xd3, 0x64, 0x9c, 0xc4, 0xf5, 0x34, 0x99, 0x9b, 0xe9, 0x34, 0xb4, 0x44, 0x59, 0xf2, 0x59, 0xb2,
0x06, 0xb4, 0xcf, 0xd3, 0xf6, 0x41, 0xa1, 0x49, 0x58, 0x46, 0x8f, 0x22, 0x59, 0x02, 0x74, 0xce,
0x7d, 0xc8, 0x43, 0xff, 0xc1, 0x3e, 0xf7, 0x0f, 0xe8, 0xdf, 0xd1, 0x0e, 0xc0, 0x0f, 0x91, 0x3a,
0xc9, 0xbe, 0x69, 0xde, 0x80, 0xc5, 0xe2, 0xb7, 0x8b, 0xdd, 0xc5, 0xee, 0x02, 0x00, 0x93, 0x30,
0xb0, 0x77, 0x83, 0xd0, 0x17, 0x3e, 0xaa, 0x8d, 0xf6, 0x7f, 0xf6, 0x46, 0xdf, 0x8d, 0x25, 0x09,
0xbf, 0x82, 0x86, 0x29, 0x42, 0xe6, 0x4d, 0x06, 0x94, 0x73, 0x6b, 0x42, 0x51, 0x0b, 0xca, 0x53,
0x3e, 0xd1, 0x56, 0x5e, 0xae, 0xec, 0x54, 0x89, 0x1c, 0xe2, 0x5d, 0xa8, 0x1b, 0xd7, 0xd4, 0x13,
0x84, 0xfe, 0x3d, 0xa2, 0x5c, 0xa0, 0xe7, 0x00, 0x2e, 0xe3, 0x82, 0x7a, 0xa7, 0x37, 0x01, 0x55,
0x8c, 0x65, 0x92, 0xa3, 0x60, 0x0b, 0x40, 0xf1, 0xbf, 0xb7, 0xdc, 0x88, 0xa2, 0x6d, 0xd8, 0x14,
0x5c, 0x49, 0x88, 0x31, 0x7b, 0x25, 0x92, 0x12, 0xd0, 0x23, 0x58, 0x17, 0x17, 0xbe, 0xef, 0x6a,
0xab, 0x2f, 0x57, 0x76, 0x2a, 0xbd, 0x12, 0x89, 0xa7, 0x48, 0x83, 0x0d, 0xc1, 0x3c, 0xf1, 0x87,
0x7d, 0xad, 0x2c, 0xd1, 0x7b, 0x25, 0x92, 0xcc, 0x0f, 0xd6, 0xa1, 0x7c, 0x6d, 0xb9, 0xf8, 0x18,
0xd6, 0x95, 0x08, 0x84, 0x60, 0x4d, 0xcc, 0xb4, 0x50, 0x63, 0xf4, 0x0d, 0x6c, 0x5c, 0x4b, 0xd1,
0x5c, 0x5b, 0x7d, 0x59, 0xde, 0xa9, 0xed, 0x3d, 0xde, 0xcd, 0x1d, 0x78, 0x77, 0xa6, 0x1a, 0x49,
0xd8, 0xf0, 0x4f, 0xf0, 0xe0, 0x94, 0x4e, 0x83, 0x0e, 0x0b, 0x4f, 0xc2, 0x2e, 0x73, 0x69, 0x7a,
0xd0, 0x16, 0x94, 0x1d, 0x16, 0xa6, 0xa6, 0x70, 0x58, 0x88, 0x1e, 0xc1, 0x46, 0x10, 0xd2, 0x4b,
0xf6, 0x51, 0x69, 0x5c, 0x25, 0xc9, 0x4c, 0x9a, 0xc4, 0xf7, 0xdc, 0x9b, 0xae, 0xef, 0x3a, 0x34,
0x54, 0x4a, 0x57, 0x48, 0x8e, 0x82, 0xbf, 0x87, 0x87, 0x73, 0x12, 0x78, 0xe0, 0x7b, 0x9c, 0xca,
0x8d, 0x21, 0xe5, 0x91, 0x2b, 0x46, 0x96, 0xb8, 0x4a, 0x24, 0xe5, 0x28, 0xf8, 0x04, 0xb6, 0x08,
0xb5, 0x9c, 0xbc, 0x56, 0x08, 0xd6, 0x82, 0x19, 0xb3, 0x1a, 0xa3, 0x07, 0xb0, 0xce, 0x85, 0x15,
0x0a, 0xa5, 0x56, 0x99, 0xc4, 0x13, 0xc9, 0xe9, 0x58, 0xc2, 0x52, 0xfa, 0xd4, 0x89, 0x1a, 0xe3,
0x6f, 0xa1, 0x35, 0x03, 0x4c, 0x94, 0x78, 0x0a, 0xd5, 0x90, 0x5a, 0x4e, 0xdb, 0x8f, 0x3c, 0x91,
0x58, 0x72, 0x46, 0xc0, 0xd7, 0xd0, 0x3a, 0x0f, 0x99, 0xa0, 0x77, 0xe9, 0xf0, 0x08, 0x36, 0xac,
0x20, 0xa0, 0x9e, 0x13, 0x7b, 0x93, 0x24, 0x33, 0x84, 0xa1, 0x3e, 0x8d, 0xb8, 0x18, 0xfa, 0xc2,
0xf8, 0xc8, 0xb8, 0x48, 0xac, 0x53, 0xa0, 0x65, 0x9a, 0xae, 0xe5, 0x34, 0x7d, 0x03, 0x5b, 0x52,
0x64, 0xdf, 0xbb, 0xf4, 0x6f, 0x11, 0x8b, 0x7f, 0x81, 0xd6, 0x8c, 0x2d, 0x39, 0x10, 0x82, 0x35,
0xcf, 0x9a, 0xd2, 0x94, 0x4f, 0x8e, 0x25, 0x8d, 0xb3, 0x7f, 0xd0, 0xc4, 0x42, 0x6a, 0x2c, 0x69,
0x53, 0xdf, 0xa1, 0x4a, 0xa5, 0x06, 0x51, 0x63, 0xa4, 0xc1, 0xe6, 0xd4, 0x77, 0x4e, 0xd9, 0x94,
0x2a, 0x6d, 0xca, 0x24, 0x9d, 0x4a, 0x23, 0x33, 0xde, 0x61, 0xa1, 0xb6, 0xae, 0x4e, 0x10, 0x4f,
0xf0, 0x5f, 0xa0, 0xd5, 0xeb, 0x77, 0x4c, 0x3b, 0x64, 0x41, 0xfe, 0x86, 0x70, 0x45, 0xc8, 0x7b,
0x75, 0x46, 0x41, 0x5f, 0x42, 0x53, 0xb0, 0x29, 0xf5, 0x23, 0x61, 0x52, 0xdb, 0xf7, 0x1c, 0xae,
0xb4, 0x6a, 0x90, 0x39, 0x2a, 0x7e, 0x0e, 0xf5, 0x0c, 0xfb, 0xc8, 0xbf, 0x40, 0x4d, 0x58, 0x65,
0x8e, 0xc2, 0x6b, 0x90, 0x55, 0xe6, 0xe0, 0xd7, 0x39, 0xd9, 0x47, 0xfe, 0xc5, 0x31, 0x8b, 0x83,
0x96, 0x39, 0x5c, 0x5b, 0x79, 0x59, 0xde, 0x69, 0x10, 0x39, 0xc4, 0xef, 0x41, 0xeb, 0xf5, 0x3b,
0x24, 0xf2, 0x3c, 0xe6, 0x4d, 0x8e, 0xfc, 0x0b, 0x53, 0x58, 0x42, 0x3a, 0x3f, 0x72, 0x45, 0x0e,
0xb1, 0x2c, 0x11, 0xa5, 0x45, 0xae, 0xa7, 0x7d, 0x27, 0xb5, 0x92, 0x1c, 0x4b, 0xc7, 0x72, 0x3f,
0x0a, 0xed, 0xd8, 0x4e, 0x55, 0x92, 0xcc, 0xf0, 0x2f, 0xb0, 0x95, 0x3b, 0xb9, 0x82, 0xfb, 0x0a,
0xca, 0x7f, 0xf3, 0x2f, 0x14, 0x5e, 0x6d, 0xef, 0x49, 0xe1, 0xde, 0xe5, 0x15, 0x25, 0x92, 0x4b,
0x5a, 0x89, 0xf1, 0x2e, 0xf3, 0x18, 0xbf, 0xa2, 0x69, 0xd0, 0xe4, 0x28, 0xb3, 0xbb, 0x71, 0xc4,
0x7d, 0x2f, 0x91, 0x9d, 0xa3, 0xe0, 0x5d, 0xa8, 0x1d, 0x1b, 0x1d, 0x93, 0x0a, 0xc1, 0xbc, 0x09,
0x47, 0x2f, 0xa0, 0x76, 0xe1, 0x32, 0xef, 0xc3, 0xd8, 0xce, 0xe2, 0xb8, 0x41, 0x40, 0x91, 0xe2,
0x40, 0xfe, 0xcf, 0x1a, 0x34, 0x0f, 0x2d, 0x67, 0x42, 0x45, 0xb6, 0x47, 0x83, 0x4d, 0xea, 0x59,
0x17, 0x2e, 0x8d, 0x6d, 0x50, 0x21, 0xe9, 0x54, 0x9a, 0xf1, 0x9a, 0x39, 0xc9, 0x35, 0x97, 0x43,
0x49, 0x09, 0x98, 0x93, 0xe8, 0x21, 0x87, 0x2a, 0xb2, 0x2d, 0x2f, 0xba, 0xb4, 0x6c, 0x11, 0x85,
0x34, 0x54, 0xf1, 0x52, 0x25, 0x05, 0x9a, 0x94, 0x10, 0x84, 0xbe, 0x13, 0xd9, 0x42, 0x85, 0x4d,
0x95, 0xa4, 0x53, 0x65, 0x56, 0x1a, 0x32, 0xcb, 0xd5, 0x36, 0x12, 0xb3, 0xaa, 0x19, 0x7a, 0x0e,
0xb5, 0x88, 0xd3, 0x71, 0xbb, 0xd3, 0x1e, 0x1b, 0xed, 0x81, 0xb6, 0xa9, 0xf4, 0xaa, 0x46, 0x9c,
0xb6, 0x3b, 0x6d, 0xa3, 0x3d, 0x40, 0x5f, 0x80, 0x9c, 0x8c, 0xc9, 0xb0, 0xd3, 0x37, 0xb5, 0x8a,
0x5a, 0xad, 0x44, 0x9c, 0xaa, 0x39, 0xda, 0x81, 0x96, 0x5c, 0xec, 0xf5, 0x3b, 0xe3, 0x77, 0xc6,
0x9f, 0x0f, 0x4e, 0x74, 0xd2, 0xd1, 0xaa, 0x8a, 0xa7, 0x19, 0x71, 0xda, 0xeb, 0x77, 0x52, 0x2a,
0xc2, 0xd0, 0x48, 0x39, 0x07, 0x27, 0x67, 0xa6, 0xa1, 0x81, 0x62, 0xab, 0xc5, 0x6c, 0x8a, 0x94,
0xaa, 0x22, 0x79, 0x88, 0x7e, 0xae, 0xd5, 0x32, 0x55, 0x64, 0x3c, 0xe9, 0xe7, 0xe8, 0x31, 0x6c,
0xca, 0xf5, 0xb3, 0x81, 0xa9, 0xd5, 0xe3, 0x3b, 0x1f, 0x71, 0x7a, 0x36, 0x30, 0xd1, 0x33, 0x00,
0xb9, 0x60, 0x1a, 0xa4, 0xaf, 0x1f, 0x6b, 0x8d, 0x6c, 0x5f, 0x4c, 0x40, 0x47, 0xd0, 0x0c, 0x3d,
0x87, 0xf1, 0x31, 0x4f, 0x1c, 0xa1, 0x35, 0x55, 0xc4, 0xfc, 0xa6, 0x10, 0x31, 0x45, 0x5f, 0x19,
0xe2, 0x8a, 0x86, 0x1e, 0x15, 0xa4, 0xa1, 0xb6, 0x66, 0x2e, 0x1c, 0x40, 0xcb, 0x76, 0xec, 0x31,
0xb5, 0xa7, 0x33, 0xb4, 0xad, 0xcf, 0x47, 0x6b, 0xda, 0x8e, 0x6d, 0xd8, 0xd3, 0x0c, 0x4e, 0x87,
0x7a, 0x34, 0xcd, 0x29, 0xd6, 0x52, 0x50, 0xcf, 0x6f, 0x81, 0x3a, 0x1b, 0x98, 0xa4, 0x16, 0x4d,
0x33, 0x8d, 0xf0, 0x08, 0x1e, 0x2d, 0x16, 0x26, 0x5d, 0x77, 0xe5, 0x73, 0x31, 0xb6, 0x1c, 0x27,
0x2d, 0x2b, 0x15, 0x49, 0xd0, 0x1d, 0x27, 0x44, 0x4f, 0xa0, 0xe2, 0xd0, 0xeb, 0x78, 0x2d, 0x0e,
0xbb, 0x4d, 0x87, 0x5e, 0xcb, 0x25, 0xfc, 0x47, 0xb8, 0xf7, 0x89, 0x4c, 0x99, 0x8e, 0x6c, 0x27,
0xf4, 0xa7, 0x49, 0xe4, 0xc6, 0x13, 0x79, 0x81, 0x2f, 0x99, 0x4b, 0x13, 0x04, 0x35, 0xc6, 0x63,
0x78, 0xd5, 0xa1, 0x81, 0xeb, 0xdf, 0x50, 0x27, 0x55, 0xa5, 0xef, 0x09, 0x1a, 0x5e, 0x5a, 0x36,
0xcd, 0x0e, 0xfe, 0x16, 0xd6, 0x64, 0x0d, 0x57, 0x89, 0xa3, 0xb6, 0xf7, 0x65, 0xb1, 0x66, 0x2e,
0xdb, 0x45, 0xd4, 0x1e, 0xfc, 0xcf, 0x32, 0x3c, 0x59, 0x8e, 0xbc, 0x28, 0x1b, 0xff, 0x29, 0xc9,
0xbc, 0x52, 0xcd, 0xe6, 0xde, 0x57, 0x9f, 0x27, 0x6d, 0x77, 0xe0, 0x3b, 0x34, 0x49, 0xd3, 0x32,
0x79, 0x04, 0xd2, 0x38, 0x94, 0xf3, 0xfd, 0x34, 0x39, 0xcc, 0x28, 0x68, 0x1b, 0x2a, 0x1e, 0x15,
0x53, 0x8b, 0x7f, 0xd8, 0x4f, 0xee, 0x65, 0x36, 0xcf, 0xdf, 0xfa, 0xf5, 0xe2, 0xad, 0x3f, 0x01,
0xe4, 0x5c, 0xd9, 0x81, 0x49, 0xc3, 0x6b, 0x1a, 0xa6, 0x62, 0xd5, 0xfd, 0xac, 0xed, 0xbd, 0x28,
0x28, 0xd9, 0xe9, 0xb5, 0x47, 0x45, 0x36, 0xb2, 0x60, 0x2b, 0x7a, 0x0d, 0x8d, 0x34, 0x94, 0xfa,
0xde, 0x19, 0xa7, 0xc9, 0x75, 0x2e, 0x12, 0x71, 0x1b, 0xd6, 0xe4, 0xd1, 0x10, 0xc0, 0xc6, 0x40,
0x1f, 0x9e, 0xe9, 0xc7, 0xad, 0x12, 0xda, 0x82, 0x9a, 0x94, 0x31, 0x6e, 0x1f, 0xf7, 0x8d, 0xe1,
0x69, 0x6b, 0x25, 0x23, 0x98, 0x06, 0x79, 0x6f, 0x90, 0xd6, 0x2a, 0x6a, 0x40, 0xf5, 0x6c, 0x38,
0xd0, 0x87, 0xfa, 0xa1, 0xd1, 0x69, 0x95, 0xf1, 0x7f, 0xcb, 0x80, 0x3e, 0xd5, 0x6a, 0xd6, 0xad,
0x8d, 0xfc, 0x30, 0xcb, 0x8a, 0x33, 0x0a, 0xda, 0x81, 0xad, 0x78, 0x96, 0x99, 0x3b, 0x89, 0x9d,
0x79, 0xb2, 0x6c, 0x13, 0x5c, 0x6a, 0x71, 0xd5, 0x08, 0x24, 0x16, 0x9f, 0x11, 0xd0, 0xef, 0xa0,
0xe5, 0xf9, 0x42, 0x8f, 0xc4, 0x95, 0x1f, 0x32, 0x61, 0x09, 0x76, 0x1d, 0x17, 0xd0, 0x0a, 0xf9,
0x84, 0x8e, 0x76, 0x01, 0x39, 0xfe, 0xd0, 0x17, 0x07, 0xcc, 0x73, 0x66, 0x62, 0x63, 0x5f, 0x2c,
0x58, 0x91, 0xf5, 0xd2, 0xb6, 0x5c, 0xf7, 0xc2, 0xb2, 0x3f, 0xc4, 0x35, 0x24, 0x49, 0x99, 0x73,
0x54, 0xb4, 0x0f, 0x1b, 0xa1, 0xe5, 0x4d, 0x28, 0xd7, 0x36, 0x55, 0x14, 0x3f, 0x5d, 0xe2, 0x32,
0x22, 0x99, 0x48, 0xc2, 0x8b, 0xba, 0xb0, 0xe9, 0x07, 0x82, 0xf9, 0x1e, 0xd7, 0x2a, 0x6a, 0xdb,
0xd7, 0x77, 0x78, 0x7a, 0xf7, 0x24, 0x66, 0x37, 0x3c, 0x11, 0xde, 0x90, 0x74, 0x33, 0x6a, 0x43,
0x8d, 0xcb, 0x03, 0xda, 0x3d, 0x9f, 0x0b, 0xae, 0x55, 0x15, 0xd6, 0xab, 0x65, 0x58, 0x19, 0x27,
0xc9, 0xef, 0xda, 0x7e, 0x0b, 0xf5, 0x3c, 0xba, 0xac, 0x3a, 0x1f, 0xe8, 0x4d, 0xe2, 0x37, 0x39,
0x94, 0xf7, 0x5e, 0xf5, 0xad, 0x89, 0x9b, 0xe2, 0xc9, 0xdb, 0xd5, 0x1f, 0x56, 0xb0, 0x0f, 0x5b,
0x73, 0x67, 0x54, 0x35, 0x54, 0x0e, 0x8e, 0xfd, 0x9f, 0x69, 0x98, 0xf5, 0x97, 0x19, 0x25, 0x5b,
0x3f, 0x0b, 0x02, 0x9a, 0xa6, 0x9d, 0x1c, 0x25, 0xf3, 0xb9, 0xea, 0x87, 0xf2, 0x3e, 0x97, 0x04,
0xfc, 0x03, 0x3c, 0x58, 0x74, 0x22, 0xf5, 0x86, 0xb0, 0xec, 0xec, 0x0d, 0x61, 0xd9, 0xaa, 0xcf,
0x08, 0x12, 0xfc, 0x55, 0x16, 0xe0, 0x7f, 0x97, 0xa1, 0x7e, 0xce, 0xba, 0x2c, 0x0b, 0xd3, 0x6d,
0xa8, 0x38, 0x8c, 0xe7, 0x4b, 0x71, 0x36, 0x97, 0x70, 0x21, 0x9d, 0xa4, 0xb5, 0x38, 0xa4, 0x13,
0xb4, 0x97, 0x6b, 0xdc, 0x9a, 0x73, 0xd9, 0x39, 0x0f, 0x9b, 0xcf, 0x18, 0x3a, 0x54, 0xad, 0x48,
0x5c, 0x8d, 0xd5, 0xc6, 0x35, 0xb5, 0xf1, 0xf5, 0xf2, 0x8d, 0xfa, 0x48, 0x86, 0xac, 0xda, 0x5e,
0xb1, 0x92, 0x91, 0x2c, 0x6b, 0x56, 0x30, 0xb6, 0xaf, 0x2c, 0xcf, 0xa3, 0xae, 0x8a, 0xd7, 0x06,
0xa9, 0x5a, 0x41, 0x3b, 0x26, 0xa0, 0x6f, 0xa0, 0x72, 0xc0, 0x79, 0xfb, 0x72, 0xa2, 0x8f, 0x92,
0x9c, 0x71, 0xbf, 0x20, 0xe0, 0xc0, 0x34, 0xdb, 0x97, 0x13, 0x92, 0x31, 0xa1, 0xef, 0xa1, 0x1e,
0x8f, 0xdb, 0x2e, 0xa3, 0x9e, 0x50, 0xc9, 0x61, 0xc9, 0xa6, 0x02, 0x23, 0x7a, 0x09, 0x75, 0x2b,
0x18, 0x5f, 0x31, 0x87, 0x8e, 0x39, 0x67, 0x4e, 0xd2, 0x06, 0x80, 0x15, 0xf4, 0x98, 0x43, 0x4d,
0xce, 0x1c, 0xf4, 0x06, 0x9a, 0x89, 0xfd, 0xc6, 0x1e, 0xfd, 0x38, 0xf5, 0xbd, 0xa4, 0xbe, 0x37,
0x12, 0xea, 0x50, 0x11, 0xf1, 0xd7, 0x49, 0xe6, 0xd9, 0x80, 0x55, 0x7d, 0xd4, 0x2a, 0xa1, 0x4d,
0x28, 0x9b, 0xa7, 0x7a, 0x6b, 0x05, 0xdd, 0x87, 0x2d, 0xf3, 0x54, 0x1f, 0x77, 0xf5, 0xfe, 0xf1,
0xc9, 0x7b, 0x83, 0x8c, 0xf5, 0x51, 0x6b, 0x15, 0xbf, 0x06, 0x98, 0xd9, 0x05, 0xd5, 0xa1, 0x72,
0x3e, 0xd2, 0xf7, 0xc6, 0x23, 0xf3, 0x5d, 0xab, 0x84, 0x2a, 0xb0, 0x76, 0x32, 0x32, 0x86, 0xad,
0x15, 0xbc, 0x0b, 0x1b, 0xb1, 0xd2, 0x32, 0xf3, 0x9b, 0x66, 0xbf, 0x93, 0x66, 0x7e, 0x39, 0x96,
0xce, 0x1c, 0x99, 0xef, 0x52, 0x67, 0x8e, 0xcc, 0x77, 0x78, 0x13, 0xd6, 0x8d, 0x69, 0x20, 0x6e,
0xf6, 0xfe, 0xb5, 0x05, 0x1b, 0xa3, 0xfd, 0xf3, 0xe1, 0xe8, 0x3b, 0x34, 0x00, 0xed, 0x90, 0x8a,
0xb4, 0x6a, 0x15, 0x8a, 0x1f, 0x42, 0xc5, 0x6a, 0x21, 0xb7, 0x6e, 0x7f, 0x71, 0x4b, 0x81, 0xc6,
0x25, 0xd4, 0x83, 0xfb, 0x31, 0xd6, 0xaf, 0x46, 0xea, 0xc2, 0xbd, 0x43, 0x2a, 0xe6, 0xda, 0xc8,
0xff, 0x03, 0xe7, 0x04, 0xee, 0x99, 0x9f, 0xe0, 0xdc, 0xb6, 0xe7, 0x2e, 0xc0, 0x1f, 0xa1, 0x79,
0x48, 0x45, 0xbe, 0x21, 0x5e, 0xa4, 0x95, 0x56, 0xa0, 0xe5, 0xb8, 0x63, 0x04, 0xb3, 0x88, 0xb0,
0x94, 0x7b, 0x7b, 0x01, 0x36, 0x2e, 0xa1, 0x0e, 0xd4, 0x07, 0xb2, 0xd5, 0x3e, 0x1b, 0x98, 0xaa,
0x26, 0xdc, 0xd1, 0x36, 0x2d, 0x41, 0x19, 0xc3, 0x8b, 0xd8, 0x59, 0xcb, 0x5b, 0x8a, 0xcf, 0x6c,
0x4f, 0x96, 0x08, 0xf0, 0xe1, 0xb7, 0x87, 0x54, 0xe8, 0xae, 0x7b, 0x77, 0x57, 0xb4, 0xc8, 0x86,
0xbb, 0xc5, 0x94, 0x7e, 0x17, 0x06, 0x2e, 0x21, 0x17, 0x5e, 0xe7, 0xa2, 0x79, 0xb9, 0xb4, 0xed,
0x02, 0x72, 0xe1, 0x5f, 0x66, 0xfb, 0x33, 0x8f, 0x8c, 0x4b, 0xc8, 0x00, 0x14, 0x8b, 0x3a, 0x67,
0x97, 0xb3, 0x04, 0xfb, 0x64, 0x69, 0xae, 0x5b, 0x62, 0xa5, 0x23, 0x78, 0x9c, 0x53, 0xba, 0x80,
0xb5, 0xc8, 0x2a, 0xcb, 0xf1, 0x71, 0x09, 0x0d, 0xd4, 0x43, 0x96, 0x44, 0x5e, 0x52, 0xa8, 0x9f,
0x2d, 0x7e, 0x1a, 0x26, 0xef, 0xe7, 0xed, 0xa7, 0xcb, 0x96, 0xe5, 0xdb, 0x4f, 0xc1, 0x6d, 0xe5,
0xe1, 0xe4, 0xd3, 0xf8, 0x0e, 0xc4, 0xe5, 0x6f, 0x51, 0x5c, 0x42, 0x04, 0x1e, 0xf6, 0xfa, 0x9d,
0x43, 0x2a, 0x66, 0x0f, 0xd4, 0xf8, 0x39, 0xbb, 0x7c, 0xd7, 0x9d, 0x2a, 0x1a, 0x80, 0x7a, 0xfd,
0x4e, 0xdb, 0xf2, 0x6c, 0xea, 0xce, 0xb4, 0xbc, 0x05, 0x70, 0xb1, 0x13, 0x86, 0xf0, 0x38, 0x56,
0x2d, 0x79, 0xbe, 0x67, 0xfc, 0x8b, 0x9d, 0xf0, 0x6c, 0x29, 0xfe, 0xb1, 0xec, 0xd3, 0x4b, 0xe8,
0x00, 0x1e, 0x65, 0x6a, 0xe9, 0xae, 0x7b, 0x07, 0xdc, 0x62, 0x9d, 0xfe, 0x9a, 0x9a, 0x6b, 0xee,
0x4b, 0xe1, 0xb6, 0xd3, 0xbd, 0x99, 0x5f, 0x5a, 0xf8, 0x1d, 0xa1, 0x14, 0xac, 0x75, 0xcd, 0xec,
0xbf, 0x69, 0xce, 0xad, 0xf3, 0xff, 0x50, 0x4b, 0x14, 0x7c, 0x07, 0xd0, 0x35, 0xd3, 0x5f, 0x2e,
0x54, 0xf4, 0xd4, 0xdc, 0x6f, 0xda, 0x9c, 0xc5, 0xe6, 0xbf, 0xc6, 0x94, 0x07, 0x1a, 0x5d, 0xf3,
0x90, 0x8a, 0xf4, 0x93, 0x69, 0x0e, 0x6f, 0xee, 0x8b, 0x6a, 0x0e, 0x6f, 0xfe, 0x67, 0x0a, 0x97,
0xd0, 0x4f, 0xf0, 0xb0, 0x6b, 0xb6, 0x43, 0x6a, 0x09, 0x5a, 0xf8, 0x12, 0x44, 0xc5, 0x4e, 0x71,
0xd1, 0x87, 0xe4, 0x36, 0xbe, 0x8d, 0x25, 0x93, 0xf0, 0x23, 0xd4, 0xd4, 0x27, 0xe7, 0xb1, 0xea,
0xdf, 0xe7, 0xbc, 0x92, 0xff, 0xc9, 0x9d, 0x37, 0x9f, 0x5c, 0xc2, 0xa5, 0x6f, 0x57, 0xd0, 0x21,
0xd4, 0x0c, 0xfb, 0x2a, 0xfb, 0x76, 0xbb, 0x2d, 0x2d, 0xdd, 0xb2, 0x86, 0x4b, 0x17, 0x1b, 0xea,
0xc7, 0xf9, 0xf7, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x4d, 0xc0, 0x56, 0x7f, 0x16, 0x00,
0x00,
}

View File

@ -19,6 +19,7 @@ service P4WNP1 {
// WiFi
rpc DeployWifiSettings(WiFiSettings) returns (Empty) {}
rpc GetDeployedWifiSettings(Empty) returns (WiFiSettings) {}
//HIDScript / job management
rpc HIDRunScript(HIDScriptRequest) returns (HIDScriptResult) {}

View File

@ -28,6 +28,21 @@ var (
type server struct {}
func (s *server) GetDeployedWifiSettings(ctx context.Context, req *pb.Empty) (resp *pb.WiFiSettings, err error) {
return ServiceState.Wifi.GetDeployWifiSettings()
}
func (s *server) DeployWifiSettings(ctx context.Context, ws *pb.WiFiSettings) (empty *pb.Empty, err error) {
log.Printf("Trying to deploy WiFi settings %v", ws)
empty = &pb.Empty{}
err = ServiceState.Wifi.DeployWifiSettings(ws)
if err != nil {
log.Printf("Error deploying WiFi settings settings %v", err)
}
return
}
func (s *server) GetDeployedEthernetInterfaceSettings(ctx context.Context, req *pb.StringMessage) (resp *pb.EthernetInterfaceSettings, err error) {
if settings,exist := ServiceState.StoredNetworkSetting[req.Msg]; exist && settings.SettingsInUse {
return settings, nil
@ -247,15 +262,6 @@ func (s *server) HIDGetScriptJobResult(ctx context.Context, sJob *pb.HIDScriptJo
return
}
func (s *server) DeployWifiSettings(ctx context.Context, ws *pb.WiFiSettings) (empty *pb.Empty, err error) {
log.Printf("Trying to deploy WiFi settings %v", ws)
empty = &pb.Empty{}
err = DeployWifiSettings(ws)
if err != nil {
log.Printf("Error deploying WiFi settings settings %v", err)
}
return
}
func (s *server) DeployEthernetInterfaceSettings(ctx context.Context, es *pb.EthernetInterfaceSettings) (empty *pb.Empty, err error) {
log.Printf("Trying to deploy ethernet interface settings %v", es)

View File

@ -12,6 +12,7 @@ type GlobalServiceState struct {
Led *LedState
HidDevPath map[string]string //stores device path for HID devices
StoredNetworkSetting map[string]*pb.EthernetInterfaceSettings
Wifi *WifiState
}
func InitGlobalServiceState() (err error) {
@ -39,6 +40,9 @@ func InitGlobalServiceState() (err error) {
IpAddress4: "172.24.0.1",
Netmask4: "255.255.255.0",
}
state.Wifi = &WifiState{
Settings: GetDefaultWiFiSettings(),
}
state.HidDevPath = make(map[string]string) //should be initialized BEFORE UsbGadgetManager uses it
state.EvMgr = NewEventManager(20)

View File

@ -39,6 +39,10 @@ const (
WPA_SUPPLICANT_CONNECT_TIMEOUT = time.Second * 20
)
type WifiState struct {
Settings *pb.WiFiSettings
}
type BSS struct {
SSID string
BSSID net.HardwareAddr
@ -48,7 +52,14 @@ type BSS struct {
Signal float32 //Signal strength in dBm
}
func DeployWifiSettings(ws *pb.WiFiSettings) (err error) {
func (state WifiState) GetDeployWifiSettings() (ws *pb.WiFiSettings,err error) {
return state.Settings, nil
}
func (state *WifiState) DeployWifiSettings(ws *pb.WiFiSettings) (err error) {
// ToDo: Lock state while setting up
log.Printf("Trying to deploy WiFi settings:\n%v\n", ws)
ifName := wifi_if_name
@ -143,6 +154,10 @@ func DeployWifiSettings(ws *pb.WiFiSettings) (err error) {
}
log.Printf("... WiFi settings deployed successfully, checking for stored interface configuration...\n")
// store new state
state.Settings = ws
ReInitNetworkInterface(ifName)
return nil
}

3
web_client/ToDo.txt Normal file
View File

@ -0,0 +1,3 @@
- input validation
- additional modes for WiFi client connections (providing a custom wpa_supplicant.conf -> interferes with failover top AP mode currently)

View File

@ -30,78 +30,199 @@ func InitComponentsWiFi() {
},
),
hvue.Computed("modes", func(vm *hvue.VM) interface{} {
hvue.Computed("wifiAuthModes", func(vm *hvue.VM) interface{} {
modes := js.Global.Get("Array").New()
for val,name := range pb.WiFiSettings_Mode_name {
for val,_ := range pb.WiFiSettings_APAuthMode_name {
mode := struct {
*js.Object
Val int `js:"val"`
Name string `js:"name"`
Label string `js:"label"`
Value int `js:"value"`
}{Object:O()}
mode.Val = val
mode.Name = name
mode.Value = val
switch pb.WiFiSettings_APAuthMode(val) {
case pb.WiFiSettings_WPA2_PSK:
mode.Label = "WPA2"
case pb.WiFiSettings_OPEN:
mode.Label = "Open"
default:
mode.Label = "Unknown"
}
modes.Call("push", mode)
}
return modes
}),
hvue.Computed("authModes", func(vm *hvue.VM) interface{} {
hvue.Computed("wifiModes", func(vm *hvue.VM) interface{} {
modes := js.Global.Get("Array").New()
for val,name := range pb.WiFiSettings_APAuthMode_name {
for val,_ := range pb.WiFiSettings_Mode_name {
mode := struct {
*js.Object
Val int `js:"val"`
Name string `js:"name"`
Label string `js:"label"`
Value int `js:"value"`
}{Object:O()}
mode.Val = val
mode.Name = name
mode.Value = val
switch pb.WiFiSettings_Mode(val) {
case pb.WiFiSettings_AP:
mode.Label = "Access Point (AP)"
case pb.WiFiSettings_STA:
mode.Label = "Station (Client)"
case pb.WiFiSettings_STA_FAILOVER_AP:
mode.Label = "Client with Failover to AP"
default:
mode.Label = "Unknown"
}
modes.Call("push", mode)
}
return modes
}),
hvue.Method("reset",
func(vm *hvue.VM) {
vm.Get("$store").Call("dispatch", VUEX_ACTION_UPDATE_WIFI_SETTINGS_FROM_DEPLOYED)
}),
hvue.Method("deploy",
func(vm *hvue.VM, wifiSettings *jsWiFiSettings) {
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_WIFI_SETTINGS, wifiSettings)
}),
)
}
const templateWiFi = `
<div>
<table>
<tr>
<td>Enabled</td>
<td><toggle-switch v-model="enabled"></toggle-switch></td>
</tr>
<tr>
<td>Enable Nexmon</td>
<td><toggle-switch v-model="enableNexmon"></toggle-switch></td>
</tr>
<tr>
<td>Regulatory Domain</td>
<td><input v-model="settings.reg"></input></td>
</tr>
<tr>
<td>Mode</td>
<td>
<select v-model="settings.mode">
<option v-for="mode in modes" :value="mode.val">{{mode.name}}</option>
</select>
</td>
</tr>
<tr v-if="settings.mode != 1">
<td>AP Channel</td>
<td><input v-model.number="settings.channel"></input></td>
</tr>
<tr v-if="settings.mode != 1">
<td>AP Auth Algo</td>
<td>
<select v-model="settings.authMode">
<option v-for="mode in authModes" :value="mode.val">{{mode.name}}</option>
</select>
</td>
</tr>
<tr v-if="settings.mode != 1">
<td>Hide SSID</td>
<td><toggle-switch v-model="settings.hideSsid"></toggle-switch></td></tr>
</table>
{{ settings }}
</div>
<q-page>
<q-card inline class="q-ma-sm">
<q-card-title>
WiFi settings
</q-card-title>
<q-card-actions>
<q-btn color="primary" @click="deploy(settings)" label="deploy"></q-btn>
<q-btn color="secondary" @click="reset" label="reset"></q-btn>
</q-card-actions>
<q-list link>
<q-item-separator />
<q-list-header>Generic</q-list-header>
<q-item tag="label">
<q-item-side>
<q-toggle v-model="enabled"></q-toggle>
</q-item-side>
<q-item-main>
<q-item-tile label>Enabled</q-item-tile>
<q-item-tile sublabel>Enable/Disable WiFi</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-side>
<q-toggle v-model="enableNexmon"></q-toggle>
</q-item-side>
<q-item-main>
<q-item-tile label>Nexmon</q-item-tile>
<q-item-tile sublabel>Enable/Disable modified nexmon firmware (needed for WiFi covert channel and KARMA)</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-main>
<q-item-tile label>Regulatory domain</q-item-tile>
<q-item-tile sublabel>Regulatory domain according to ISO/IEC 3166-1 alpha2 (example "US")</q-item-tile>
<q-item-tile>
<q-input v-model="settings.reg" inverted></q-input>
</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-main>
<q-item-tile label>Working Mode</q-item-tile>
<q-item-tile sublabel>Work as Access Point or Client</q-item-tile>
<q-item-tile>
<q-select v-model="settings.mode" :options="wifiModes" color="secondary" inverted></q-select>
</q-item-tile>
</q-item-main>
</q-item>
<template v-if="settings.mode != 0">
<q-item-separator />
<q-list-header>WiFi client settings (station mode)</q-list-header>
<q-item tag="label">
<q-item-main>
<q-item-tile label>SSID</q-item-tile>
<q-item-tile sublabel>Network name to connect</q-item-tile>
<q-item-tile>
<q-input v-model="settings.staSsid" color="primary" inverted></q-input>
</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-main>
<q-item-tile label>Pre shared key</q-item-tile>
<q-item-tile sublabel>If empty, a network with Open Authentication is assumed (Warning: PLAIN TRANSMISSION)</q-item-tile>
<q-item-tile>
<q-input v-model="settings.staPsk" type="password" color="primary" inverted></q-input>
</q-item-tile>
</q-item-main>
</q-item>
</template>
<template v-if="settings.mode == 2">
<q-item-separator />
<q-item>
<q-item-main>
<q-alert type="warning">
If the SSID provided for station mode couldn't be connected, an attempt is started to failo-over to Access Point mode with settings below
</q-alert>
</q-item-main>
</q-item>
</template>
<template v-if="settings.mode != 1">
<q-item-separator />
<q-list-header>Access Point settings</q-list-header>
<q-item tag="label">
<q-item-main>
<q-item-tile label>Channel</q-item-tile>
<q-item-tile sublabel>Must exist in regulatory domain (example 13)</q-item-tile>
<q-item-tile>
<q-input v-model="settings.channel" type="number" inverted></q-input>
</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-main>
<q-item-tile label>Authentication Mode</q-item-tile>
<q-item-tile sublabel>Authentication Mode for Access Point (ignored for client mode)</q-item-tile>
<q-item-tile>
<q-select v-model="settings.authMode" :options="wifiAuthModes" color="primary" inverted></q-select>
</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-main>
<q-item-tile label>SSID</q-item-tile>
<q-item-tile sublabel>Network name (Service Set Identifier)</q-item-tile>
<q-item-tile>
<q-input v-model="settings.apSsid" color="primary" inverted></q-input>
</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-side>
<q-toggle v-model="settings.hideSsid"></q-toggle>
</q-item-side>
<q-item-main>
<q-item-tile label>Hide SSID</q-item-tile>
<q-item-tile sublabel>Access Point doesn't send beacons with its SSID</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-main>
<q-item-tile label>Pre shared key</q-item-tile>
<q-item-tile sublabel>Warning: PLAIN TRANSMISSION</q-item-tile>
<q-item-tile>
<q-input v-model="settings.apPsk" type="password" color="primary" inverted></q-input>
</q-item-tile>
</q-item-main>
</q-item>
</template>
</q-list>
</q-card>
</q-page>
`

View File

@ -389,6 +389,28 @@ func (target *jsWiFiSettings) fromGo(src *pb.WiFiSettings) {
}
}
func (src *jsWiFiSettings) toGo() (target *pb.WiFiSettings) {
target = &pb.WiFiSettings{
Disabled: src.Disabled,
Reg: src.Reg,
Mode: pb.WiFiSettings_Mode(src.Mode),
AuthMode: pb.WiFiSettings_APAuthMode(src.AuthMode),
DisableNexmon: src.DisableNexmon,
ApChannel: uint32(src.Channel),
ApHideSsid: src.HideSsid,
BssCfgClient: &pb.BSSCfg{
SSID: src.STA_SSID,
PSK: src.STA_PSK,
},
BssCfgAP: &pb.BSSCfg{
SSID: src.AP_SSID,
PSK: src.AP_PSK,
},
}
return target
}
/* Network Settings */
type jsEthernetSettingsList struct {
*js.Object

View File

@ -17,7 +17,12 @@ const (
VUEX_ACTION_DEPLOY_CURRENT_GADGET_SETTINGS = "deployCurrentGadgetSettings"
VUEX_ACTION_UPDATE_GADGET_SETTINGS_FROM_DEPLOYED = "updateCurrentGadgetSettingsFromDeployed"
VUEX_ACTION_DEPLOY_ETHERNET_INTERFACE_SETTINGS = "deployEthernetInterfaceSettings"
VUEX_ACTION_UPDATE_WIFI_SETTINGS_FROM_DEPLOYED = "updateCurrentWifiSettingsFromDeployed"
VUEX_ACTION_DEPLOY_WIFI_SETTINGS = "deployWifiSettings"
VUEX_MUTATION_SET_CURRENT_GADGET_SETTINGS_TO = "setCurrentGadgetSettings"
VUEX_MUTATION_SET_CURRENT_WIFI_SETTINGS = "setCurrentWifiSettings"
VUEX_MUTATION_SET_CURRENT_HID_SCRIPT_SOURCE_TO = "setCurrentHIDScriptSource"
initHIDScript = `layout('us'); // US keyboard layout
@ -78,6 +83,7 @@ func createGlobalStateStruct() GlobalState {
state.IsModalEnabled = false
state.FailedConnectionAttempts = 0
//Retrieve Interface settings
// ToDo: Replace panics by default values
ifSettings,err := RpcClient.GetAllDeployedEthernetInterfaceSettings(time.Second*5)
if err != nil { panic("Couldn't retrieve interface settings") }
state.InterfaceSettings = ifSettings
@ -109,6 +115,34 @@ func actionUpdateGadgetSettingsFromDeployed(store *mvuex.Store, context *mvuex.A
return
}
func actionUpdateWifiSettingsFromDeployed(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
//fetch deployed gadget settings
dWS,err := RpcClient.GetDeployedWiFiSettings(time.Second * 5)
if err != nil {
println("Couldn't retrieve deployed WiFi settings")
return
}
//commit to current
context.Commit(VUEX_MUTATION_SET_CURRENT_WIFI_SETTINGS, dWS)
}()
return
}
func actionDeployWifiSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, settings *jsWiFiSettings) {
go func() {
println("Vuex dispatch deploy WiFi settings")
// convert to Go type
goSettings := settings.toGo()
err := RpcClient.DeployeWifiSettings(time.Second*3, goSettings)
if err != nil {Alert(err)}
}()
}
func actionUpdateRunningHidJobs(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
//fetch deployed gadget settings
@ -235,6 +269,10 @@ func initMVuex() *mvuex.Store {
state.CurrentGadgetSettings = settings
return
}),
mvuex.Mutation(VUEX_MUTATION_SET_CURRENT_WIFI_SETTINGS, func (store *mvuex.Store, state *GlobalState, settings *jsWiFiSettings) {
state.WiFiSettings = settings
return
}),
/*
mvuex.Mutation("startLogListening", func (store *mvuex.Store, state *GlobalState) {
state.EventReceiver.StartListening()
@ -249,6 +287,8 @@ func initMVuex() *mvuex.Store {
mvuex.Action(VUEX_ACTION_DEPLOY_CURRENT_GADGET_SETTINGS, actionDeployCurrentGadgetSettings),
mvuex.Action(VUEX_ACTION_UPDATE_RUNNING_HID_JOBS, actionUpdateRunningHidJobs),
mvuex.Action(VUEX_ACTION_DEPLOY_ETHERNET_INTERFACE_SETTINGS, actionDeployEthernetInterfaceSettings),
mvuex.Action(VUEX_ACTION_UPDATE_WIFI_SETTINGS_FROM_DEPLOYED, actionUpdateWifiSettingsFromDeployed),
mvuex.Action(VUEX_ACTION_DEPLOY_WIFI_SETTINGS, actionDeployWifiSettings),
)
// fetch deployed gadget settings

View File

@ -15,9 +15,9 @@ import (
type Rpc struct {
*sync.Mutex
Client pb.P4WNP1Client
eventListeningOn bool
eventListeningCtx *context.Context
Client pb.P4WNP1Client
eventListeningOn bool
eventListeningCtx *context.Context
eventListeningCancel context.CancelFunc
}
@ -32,49 +32,71 @@ func NewRpcClient(addr string) Rpc {
func (rpc *Rpc) DeployedEthernetInterfaceSettings(timeout time.Duration, settings *pb.EthernetInterfaceSettings) (err error) {
// ToDo: The RPC call has to return an error in case deployment fails
ctx,cancel := context.WithTimeout(context.Background(), timeout)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
_,err = rpc.Client.DeployEthernetInterfaceSettings(ctx, settings)
_, err = rpc.Client.DeployEthernetInterfaceSettings(ctx, settings)
return
}
func (rpc *Rpc) DeployeWifiSettings(timeout time.Duration, settings *pb.WiFiSettings) (err error) {
// ToDo: The RPC call has to return an error in case deployment fails
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
_, err = rpc.Client.DeployWifiSettings(ctx, settings)
return
}
func (rpc *Rpc) GetDeployedWiFiSettings(timeout time.Duration) (settingsList *jsWiFiSettings, err error) {
//ToDo: Only placeholde, replace with real "get deployed" RPC
ws := &pb.WiFiSettings{
BssCfgAP: &pb.BSSCfg{
PSK: "somesecretPSK",
SSID: "TheAP-SSID",
},
BssCfgClient: &pb.BSSCfg{
PSK: "somesecretPSKForExistingAP",
SSID: "ExistingSSID",
},
Mode: pb.WiFiSettings_STA_FAILOVER_AP,
DisableNexmon: false,
ApHideSsid: false,
ApChannel: 13,
AuthMode: pb.WiFiSettings_WPA2_PSK,
Reg: "DE",
Disabled: false,
}
jsWs := &jsWiFiSettings{Object: O()}
jsWs.fromGo(ws)
return jsWs, nil
/*
//ToDo: Only placeholder, replace with real "get deployed" RPC
ws := &pb.WiFiSettings{
BssCfgAP: &pb.BSSCfg{
PSK: "somesecretPSK",
SSID: "TheAP-SSID",
},
BssCfgClient: &pb.BSSCfg{
PSK: "somesecretPSKForExistingAP",
SSID: "ExistingSSID",
},
Mode: pb.WiFiSettings_STA_FAILOVER_AP,
DisableNexmon: false,
ApHideSsid: false,
ApChannel: 13,
AuthMode: pb.WiFiSettings_WPA2_PSK,
Reg: "DE",
Disabled: false,
}
*/
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
ws,err := rpc.Client.GetDeployedWifiSettings(ctx, &pb.Empty{})
if err != nil {
println("Error GetDeployedWifiSettings", err)
return nil, err
}
jsWs := &jsWiFiSettings{Object: O()}
jsWs.fromGo(ws)
return jsWs, nil
}
func (rpc *Rpc) GetAllDeployedEthernetInterfaceSettings(timeout time.Duration) (settingsList *jsEthernetSettingsList, err error) {
ctx,cancel := context.WithTimeout(context.Background(), timeout)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
deployedSettings,err := rpc.Client.GetAllDeployedEthernetInterfaceSettings(ctx,&pb.Empty{})
deployedSettings, err := rpc.Client.GetAllDeployedEthernetInterfaceSettings(ctx, &pb.Empty{})
if err != nil {
println("Error GetAllDeployedEthernetInterfaceSettings", err)
return nil, err
}
settingsList = &jsEthernetSettingsList{Object:O()}
settingsList = &jsEthernetSettingsList{Object: O()}
settingsList.fromGo(deployedSettings)
return settingsList, nil
@ -95,45 +117,45 @@ func (rpc *Rpc) GetAllDeployedEthernetInterfaceSettings(timeout time.Duration) (
func (rpc *Rpc) RpcGetRunningHidJobStates(timeout time.Duration) (states []*pb.HIDRunningJobStateResult, err error) {
println("RpcGetRunningHidJobStates called")
ctx,cancel := context.WithTimeout(context.Background(), timeout)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
// get running job IDs
joblist, err := rpc.Client.HIDGetRunningScriptJobs(ctx,&pb.Empty{})
if err != nil { return nil, err }
joblist, err := rpc.Client.HIDGetRunningScriptJobs(ctx, &pb.Empty{})
if err != nil {
return nil, err
}
states = make([]*pb.HIDRunningJobStateResult, len(joblist.Ids))
for idx,jobid := range joblist.Ids {
jobstate, err := rpc.Client.HIDGetRunningJobState(ctx, &pb.HIDScriptJob{Id:jobid})
if err != nil { return nil, err }
for idx, jobid := range joblist.Ids {
jobstate, err := rpc.Client.HIDGetRunningJobState(ctx, &pb.HIDScriptJob{Id: jobid})
if err != nil {
return nil, err
}
states[idx] = jobstate
}
return states,nil
return states, nil
}
func (rpc *Rpc) RpcGetDeployedGadgetSettings(timeout time.Duration) (*pb.GadgetSettings, error) {
//gs := vue.GetVM(c).Get("gadgetSettings")
println("RpcGetDeployedGadgetSettings called")
ctx,cancel := context.WithTimeout(context.Background(), timeout)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
return rpc.Client.GetDeployedGadgetSetting(ctx, &pb.Empty{})
}
func (rpc *Rpc) RpcSetRemoteGadgetSettings(targetGS *pb.GadgetSettings, timeout time.Duration) (err error) {
//gs := vue.GetVM(c).Get("gadgetSettings")
println("RpcSetRemoteGadgetSettings called")
ctx,cancel := context.WithTimeout(context.Background(), timeout)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
//Set gadget settings
_, err = rpc.Client.SetGadgetSettings(ctx, targetGS)
if err != nil {
@ -150,26 +172,28 @@ func (rpc *Rpc) RpcDeployRemoteGadgetSettings(timeout time.Duration) (*pb.Gadget
//gs := vue.GetVM(c).Get("gadgetSettings")
println("RpcDeployRemoteGadgetSettings called")
ctx,cancel := context.WithTimeout(context.Background(), timeout)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
return rpc.Client.DeployGadgetSetting(ctx, &pb.Empty{})
}
func (rpc *Rpc) ConnectionTest(timeout time.Duration) (err error) {
//gs := vue.GetVM(c).Get("gadgetSettings")
println("RpcDeployRemoteGadgetSettings called")
ctx,cancel := context.WithTimeout(context.Background(), timeout)
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
req := &pb.StringMessage{Msg:"ping"}
resp,err := rpc.Client.EchoRequest(ctx, req)
if err != nil { return err }
if resp.Msg != req.Msg { errors.New("Unexpected response")}
req := &pb.StringMessage{Msg: "ping"}
resp, err := rpc.Client.EchoRequest(ctx, req)
if err != nil {
return err
}
if resp.Msg != req.Msg {
errors.New("Unexpected response")
}
return nil
}
@ -177,7 +201,6 @@ func (rpc *Rpc) StartListening() {
println("Start listening called", globalState.EventReceiver)
//Note: This method is responsible for handling server streaming of events
// It isn't possible to use the stream for connection watching (heartbeat), for the following reasons
// 1) A connection loss can be detected in case `evStream.Recv()` fails with an error, but a successful websocket
@ -192,7 +215,7 @@ func (rpc *Rpc) StartListening() {
go func() {
for {
println("Try to connect server ...")
for RpcClient.ConnectionTest(time.Second * 3) != nil {
for RpcClient.ConnectionTest(time.Second*3) != nil {
println("... failed, retry for 3 seconds")
globalState.FailedConnectionAttempts++
}
@ -200,7 +223,7 @@ func (rpc *Rpc) StartListening() {
globalState.IsConnected = true
globalState.FailedConnectionAttempts = 0
ctx,cancel := context.WithCancel(context.Background())
ctx, cancel := context.WithCancel(context.Background())
rpc.eventListeningCancel = cancel
// try RPC call
@ -236,16 +259,13 @@ func (rpc *Rpc) StartListening() {
println("Connection to server lost, reconnecting ...")
globalState.IsConnected = false
//retry to connect (outer loop)
}
return
}()
}
func (rpc *Rpc) StopListening() {
rpc.eventListeningCancel()
}
}