Skip to content

Commit d2a5db7

Browse files
committed
fix: loginrequest correctly parses
1 parent 0bbae7f commit d2a5db7

File tree

6 files changed

+54
-93
lines changed

6 files changed

+54
-93
lines changed

libs/@rustymotors/binary/src/lib/BinaryMember.ts

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { getServerLogger } from "rusty-motors-shared";
2-
31
export const BINARY_ALIGNMENT = 4;
42

53
/**
@@ -77,18 +75,27 @@ export function verifyAlignment(buffer: Uint8Array, alignment: number) {
7775
export class BinaryMember {
7876
protected value: Uint8Array;
7977
protected maxSize: number;
80-
constructor(size = 0) {
78+
protected shouldPad: boolean;
79+
80+
constructor(size = 0, shouldPad = true) {
8181
this.value = new Uint8Array(size);
8282
this.maxSize = size;
83+
this.shouldPad = shouldPad;
8384
}
8485
set(v: Uint8Array) {
8586
if (v.length > this.maxSize) {
8687
throw new Error(`Value exceeds maximum size of ${this.maxSize}`);
8788
}
88-
this.value = addAlignementPadding(v, BINARY_ALIGNMENT);
89+
if (this.shouldPad) {
90+
this.value = addAlignementPadding(v, BINARY_ALIGNMENT);
91+
}
92+
this.value = v;
8993
}
9094
get() {
91-
verifyAlignment(this.value, BINARY_ALIGNMENT);
95+
if (this.shouldPad) {
96+
verifyAlignment(this.value, BINARY_ALIGNMENT);
97+
return this.value;
98+
}
9299
return this.value;
93100
}
94101
size() {
@@ -101,8 +108,8 @@ export class BinaryMember {
101108
}
102109

103110
export class Uint8_t extends BinaryMember {
104-
constructor() {
105-
super(1);
111+
constructor(shouldPad = true) {
112+
super(1, shouldPad);
106113
}
107114
}
108115

@@ -165,16 +172,12 @@ export class Uint8_tArray extends BinaryMember {
165172
* The prefix is in network byte order.
166173
*/
167174
export class CString extends BinaryMember {
168-
private _rawLength = 0
169175
constructor(size: number) {
170176
super(size);
171177
}
172178

173179

174180
override set(v: Uint8Array) {
175-
const log = getServerLogger("Binary.CString");
176-
log.debug({ v }, "Setting CString");
177-
178181
if (v.length > this.maxSize + 4) {
179182
throw new Error(`CString exceeds maximum size of ${this.maxSize + 4}, got ${v.length}`);
180183
}
@@ -190,9 +193,7 @@ export class CString extends BinaryMember {
190193
throw new Error(`CString length is ${stringLength} but only ${v.length - 4} bytes are available`);
191194
}
192195

193-
this._rawLength = stringLength
194-
195-
this.value = addAlignementPadding(v.slice(4, stringLength + 4), BINARY_ALIGNMENT);
196+
this.value = v.slice(4, stringLength + 4);
196197
}
197198
/**
198199
* Returns the string as a sequence of characters followed by a null terminator.
@@ -215,14 +216,6 @@ export class CString extends BinaryMember {
215216
override size(): number {
216217
return this.value.length + 4;
217218
}
218-
219-
/**
220-
* Returns the length of the string.
221-
* @returns {number} The length of the string.
222-
*/
223-
get length(): number {
224-
return this._rawLength;
225-
}
226219
}
227220

228221

libs/@rustymotors/roomserver/src/lib/LoginRequest.ts

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import { CString, Uint32_t, Uint8_tArray } from "@rustymotors/binary";
22
import { PacketBody } from "./types.js";
33
import { UserInfo } from "./UserInfo.js";
4-
import { getServerLogger } from "rusty-motors-shared";
5-
6-
const log = getServerLogger("RoomServer.LoginRequest", "roomserver");
74

85
export class LoginRequest implements PacketBody {
96
private _userInfo: UserInfo = new UserInfo();
@@ -21,13 +18,6 @@ export class LoginRequest implements PacketBody {
2118
);
2219
}
2320

24-
if (v.length !== this.size()) {
25-
log.warn(
26-
{ expectedSize: this.size(), actualSize: v.length },
27-
"Message smaller than expected size",
28-
);
29-
}
30-
3121
try {
3222
let offset = 0;
3323
this._userInfo.set(v.slice(0, this._userInfo.size()));
@@ -36,45 +26,44 @@ export class LoginRequest implements PacketBody {
3626
v.slice(offset, offset + this._customerNumber.size()),
3727
);
3828
offset += this._customerNumber.size();
39-
this._flags.set(v.slice(offset, offset + this._flags.size()));
40-
offset += this._flags.size();
41-
this._version.set(v.slice(offset, offset + this._version.size()));
42-
offset += this._version.size();
43-
this._hostName.set(v.slice(offset, offset + this._hostName.size()));
44-
offset += this._hostName.size();
45-
this._ipAddress.set(v.slice(offset, offset + this._ipAddress.size()));
46-
offset += this._ipAddress.size();
29+
this._flags.set(v.slice(offset, offset + this._flags.size()));
30+
offset += this._flags.size();
31+
this._version.set(v.slice(offset, offset + this._version.size()));
32+
offset += this._version.size();
33+
this._hostName.set(v.slice(offset, offset + this._hostName.size()));
34+
offset += this._hostName.size();
35+
this._ipAddress.set(v.slice(offset, offset + this._ipAddress.size()));
36+
offset += this._ipAddress.size();
4737
this._keyHash.set(v.slice(offset, offset + this._keyHash.size()));
38+
offset += this._keyHash.size();
4839
} catch (error) {
49-
log.error(
50-
{ error, self: this, value: v },
51-
`Error setting LoginRequest: ${(error as Error).message}`,
52-
);
53-
throw error;
40+
const e = new Error(`Error setting LoginRequest: ${(error as Error).message}`);
41+
e.cause = error;
42+
throw e;
5443
}
5544
}
5645

5746
serialize(): Uint8Array {
5847
return new Uint8Array([
5948
...this._userInfo.get(),
6049
...this._customerNumber.get(),
61-
...this._flags.get(),
62-
...this._version.get(),
63-
...this._hostName.get(),
64-
...this._ipAddress.get(),
65-
...this._keyHash.get(),
50+
...this._flags.get(),
51+
...this._version.get(),
52+
...this._hostName.get(),
53+
...this._ipAddress.get(),
54+
...this._keyHash.get(),
6655
]);
6756
}
6857

6958
size(): number {
7059
return (
7160
this._userInfo.size() +
7261
this._customerNumber.size() +
73-
this._flags.size() +
74-
this._version.size() +
75-
this._hostName.size() +
76-
this._ipAddress.size() +
77-
this._keyHash.size()
62+
this._flags.size() +
63+
this._version.size() +
64+
this._hostName.size() +
65+
this._ipAddress.size() +
66+
this._keyHash.size()
7867
);
7968
}
8069

libs/@rustymotors/roomserver/src/lib/RoomServer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ export class RoomServer {
6363

6464
log.debug({ connectionId, getServerInfoRequest }, "Received NPS_LOGIN");
6565

66-
} catch (error) {
67-
log.error({ connectionId, error }, `Error handling NPS_LOGIN: ${error.message}`);
66+
} catch (error: any) {
67+
log.error({ connectionId, error }, `Error handling NPS_LOGIN: ${(error as Error).message}`);
6868
return {
6969
connectionId,
7070
messages: [],

libs/@rustymotors/roomserver/src/lib/UserCar.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
import { BinaryMember, Uint32_t, Uint8_t } from "@rustymotors/binary";
1+
import { BinaryMember, Uint32_t } from "@rustymotors/binary";
22
import { CarDecal } from "./CarDecal.js";
3-
import { getServerLogger } from "rusty-motors-shared";
4-
5-
const log = getServerLogger("RoomServer.UserCar", "roomserver");
63

74
export class UserCar extends BinaryMember {
85
private _carId: Uint32_t = new Uint32_t();
@@ -71,11 +68,9 @@ export class UserCar extends BinaryMember {
7168
value = v.slice(offset, offset + this._decal.size());
7269
this._decal.set(value);
7370
} catch (error) {
74-
log.error(
75-
{ error, value, self: this },
76-
`Error setting UserCar: ${(error as Error).message}`,
77-
);
78-
throw error;
71+
const e = new Error(`Error setting UserCar: ${(error as Error).message}`);
72+
e.cause = error;
73+
throw e;
7974
}
8075
}
8176

libs/@rustymotors/roomserver/src/lib/UserData.ts

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
import { BinaryMember, Uint32_t, Uint8_t, Uint16_t } from "@rustymotors/binary";
22
import { UserCar } from "./UserCar.js";
3-
import { getServerLogger } from "rusty-motors-shared";
4-
5-
const log = getServerLogger("RoomServer.UserInfo", "roomserver");
63

74
export class UserData extends BinaryMember {
85
private _carId: UserCar = new UserCar();
96
private _lobbyId: Uint32_t = new Uint32_t();
107
private _clubId: Uint32_t = new Uint32_t();
11-
private _isInLobby: Uint8_t = new Uint8_t();
12-
private _isInTransit: Uint8_t = new Uint8_t();
13-
private _isInRace: Uint8_t = new Uint8_t();
14-
private _isValid: Uint8_t = new Uint8_t();
15-
private _unused: Uint32_t = new Uint32_t();
8+
private _isInLobby: Uint8_t = new Uint8_t(false);
9+
private _isInTransit: Uint8_t = new Uint8_t(false);
10+
private _isInRace: Uint8_t = new Uint8_t(false);
11+
private _isValid: Uint8_t = new Uint8_t(false);
1612
private _performance: Uint32_t = new Uint32_t();
1713
private _points: Uint16_t = new Uint16_t();
1814
private _level: Uint16_t = new Uint16_t();
@@ -59,9 +55,6 @@ export class UserData extends BinaryMember {
5955
value = v.slice(offset, offset + this._isValid.size());
6056
this._isValid.set(value);
6157
offset += this._isValid.size();
62-
value = v.slice(offset, offset + this._unused.size());
63-
this._unused.set(value);
64-
offset += this._unused.size();
6558
value = v.slice(offset, offset + this._performance.size());
6659
this._performance.set(value);
6760
offset += this._performance.size();
@@ -71,11 +64,9 @@ export class UserData extends BinaryMember {
7164
value = v.slice(offset, offset + this._level.size());
7265
this._level.set(value);
7366
} catch (error) {
74-
log.error(
75-
{ error, value },
76-
`Error setting UserData: ${(error as Error).message}`,
77-
);
78-
throw error;
67+
const e = new Error(`Error setting UserData: ${(error as Error).message}`);
68+
e.cause = error;
69+
throw e;
7970
}
8071
}
8172

@@ -88,7 +79,6 @@ export class UserData extends BinaryMember {
8879
...this._isInTransit.get(),
8980
...this._isInRace.get(),
9081
...this._isValid.get(),
91-
...this._unused.get(),
9282
...this._performance.get(),
9383
...this._points.get(),
9484
...this._level.get(),
@@ -104,7 +94,6 @@ export class UserData extends BinaryMember {
10494
this._isInTransit.size() +
10595
this._isInRace.size() +
10696
this._isValid.size() +
107-
this._unused.size() +
10897
this._performance.size() +
10998
this._points.size() +
11099
this._level.size()

libs/@rustymotors/roomserver/src/lib/UserInfo.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ import {
55
Uint8_tArray,
66
} from "@rustymotors/binary";
77
import { UserData } from "./UserData.js";
8-
import { getServerLogger } from "rusty-motors-shared";
9-
10-
const log = getServerLogger("RoomServer.UserInfo", "roomserver");
118

129
export class UserInfo extends BinaryMember {
1310
private _userId: Uint32_t = new Uint32_t();
@@ -40,15 +37,13 @@ export class UserInfo extends BinaryMember {
4037
offset += this._userId.size();
4138
value = v.slice(offset, offset + this._userName.size());
4239
this._userName.set(value);
43-
offset += this._userName.length;
44-
45-
log.debug({ offset, self: this, size: this._userData.size() }, "Setting UserInfo");
46-
40+
offset += this._userName.size();
4741
value = v.slice(offset, offset + this._userData.size());
4842
this._userData.set(value);
4943
} catch (error) {
50-
log.error({ error, value }, `Error setting UserInfo: ${(error as Error).message}`);
51-
throw error;
44+
const e = new Error(`Error setting UserInfo: ${(error as Error).message}`);
45+
e.cause = error;
46+
throw e;
5247
}
5348
}
5449

0 commit comments

Comments
 (0)