diff --git a/protocol/client_identification.go b/protocol/client_identification.go index 64ca0ee..99c28d2 100644 --- a/protocol/client_identification.go +++ b/protocol/client_identification.go @@ -16,7 +16,7 @@ type ClientIdentificationPDU struct { MajorVersion int `validate:"min=0,max=999"` MinorVersion int `validate:"min=0,max=999"` CID int `validate:"min=100000,max=9999999"` - SysUID int `validate:""` + SysUID string `validate:"required,min=1,max=64"` InitialChallenge string `validate:"required,hexadecimal,min=2,max=32"` } @@ -24,7 +24,7 @@ func (p *ClientIdentificationPDU) Serialize() string { clientIDBytes := make([]byte, 2) binary.BigEndian.PutUint16(clientIDBytes, p.ClientID) clientIDStr := hex.EncodeToString(clientIDBytes) - return fmt.Sprintf("$ID%s:%s:%s:%s:%d:%d:%d:%d:%s%s", + return fmt.Sprintf("$ID%s:%s:%s:%s:%d:%d:%d:%s:%s%s", p.From, p.To, clientIDStr, p.ClientName, p.MajorVersion, p.MinorVersion, p.CID, p.SysUID, p.InitialChallenge, PacketDelimiter) } @@ -42,6 +42,7 @@ func (p *ClientIdentificationPDU) Parse(packet string) error { From: fields[0], To: fields[1], ClientName: fields[3], + SysUID: fields[7], InitialChallenge: fields[8], } @@ -70,10 +71,6 @@ func (p *ClientIdentificationPDU) Parse(packet string) error { return NewGenericFSDError(SyntaxError, fields[6], "invalid CID") } - if pdu.SysUID, err = strconv.Atoi(fields[7]); err != nil { - return NewGenericFSDError(SyntaxError, fields[7], "invalid system UID") - } - if err = V.Struct(&pdu); err != nil { if validatorErr := getFSDErrorFromValidatorErrors(err); err != nil { return validatorErr diff --git a/protocol/client_identification_test.go b/protocol/client_identification_test.go index 9c87adb..fae4546 100644 --- a/protocol/client_identification_test.go +++ b/protocol/client_identification_test.go @@ -28,7 +28,7 @@ func TestParseClientIdentificationPDU(t *testing.T) { MajorVersion: 1, MinorVersion: 2, CID: 1234567, - SysUID: 12345678, + SysUID: "12345678", InitialChallenge: "abcd1234", }, wantErr: nil, @@ -70,10 +70,10 @@ func TestParseClientIdentificationPDU(t *testing.T) { wantErr: NewGenericFSDError(SyntaxError, "XY", "invalid minor version"), }, { - name: "Invalid SysUID - Non-numeric", - packet: "$IDCLIENT:SERVER:1234:ClientName:1:2:0001234:SYSUID:abcd1234\r\n", + name: "missing sysuid", + packet: "$IDCLIENT:SERVER:1234:ClientName:1:2:0001234::abcdefgh\r\n", want: &ClientIdentificationPDU{}, - wantErr: NewGenericFSDError(SyntaxError, "SYSUID", "invalid system UID"), + wantErr: NewGenericFSDError(SyntaxError, "", "validation error"), }, { name: "Invalid CID - too long", @@ -131,7 +131,7 @@ func TestClientIdentificationPDU_Serialize(t *testing.T) { MajorVersion: 1, MinorVersion: 2, CID: 1234567, - SysUID: 12345678, + SysUID: "12345678", InitialChallenge: "abcd1234", }, want: "$IDCLIENT:SERVER:1234:ClientName:1:2:1234567:12345678:abcd1234\r\n", diff --git a/test/fsd_client_logic_test.go b/test/fsd_client_logic_test.go index 5a9204a..4e702af 100644 --- a/test/fsd_client_logic_test.go +++ b/test/fsd_client_logic_test.go @@ -31,7 +31,7 @@ type clientStruct struct { clientName string majorVersion int minorVersion int - sysUID int + sysUID string initialChallenge string networkRating int protocolRevsion int @@ -119,7 +119,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -156,7 +156,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -195,7 +195,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -305,7 +305,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -420,7 +420,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -482,7 +482,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -522,7 +522,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -559,7 +559,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -590,7 +590,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -626,7 +626,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -658,7 +658,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "30984979d8caed23", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -695,7 +695,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -731,7 +731,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: protocol.NetworkRatingSUP, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -762,7 +762,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -798,7 +798,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: protocol.NetworkRatingOBS, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -834,7 +834,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: 1, protocolRevsion: protocol.ProtoRevisionVatsim2022, @@ -869,7 +869,7 @@ func TestFSDClientLogic(t *testing.T) { clientName: "vPilot", majorVersion: 3, minorVersion: 8, - sysUID: -99999, + sysUID: "-99999", initialChallenge: "abcdef", networkRating: protocol.NetworkRatingOBS, protocolRevsion: protocol.ProtoRevisionVatsim2022, diff --git a/test/fsd_client_login_test.go b/test/fsd_client_login_test.go index d351c6f..4083b61 100644 --- a/test/fsd_client_login_test.go +++ b/test/fsd_client_login_test.go @@ -75,7 +75,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: user1.CID, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: "0123456789abcdef", } @@ -131,7 +131,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: user1.CID, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: "0123456789abcdef", } @@ -181,7 +181,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: user1.CID, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: "0123456789abcdef", } @@ -241,7 +241,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: user1.CID, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: "0123456789abcdef", } @@ -316,7 +316,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: user1.CID, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: string(lotsOfNines), // <-- Make this field 4096 bytes long } @@ -395,7 +395,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: 9999999, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: "0123456789abcdef", } @@ -465,7 +465,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: user1.CID, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: "0123456789abcdef", } @@ -534,7 +534,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: user1.CID, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: "0123456789abcdef", } @@ -604,7 +604,7 @@ func TestFSDClientLogin(t *testing.T) { MajorVersion: 3, MinorVersion: 8, CID: user1.CID, - SysUID: -99999, + SysUID: "-99999", InitialChallenge: "0123456789abcdef", }