Skip to content

Commit e3e27b9

Browse files
committed
🐛 Fix info queries failing because of challenge response
1 parent 4eb4134 commit e3e27b9

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

src/gameServer/gameServer.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,17 @@ class GameServerQuery {
7070
throw new Error(err);
7171
}
7272

73+
// If the server replied with a challenge, grab challenge number and send request again
74+
if (resultBuffer.compare(Buffer.from([0xFF, 0xFF, 0xFF, 0xFF, 0x41]), 0, 5, 0, 5) === 0) {
75+
resultBuffer = resultBuffer.slice(5);
76+
const challenge = resultBuffer;
77+
try {
78+
resultBuffer = await this._promiseSocket.send(this._buildInfoPacket(challenge), this._host, this._port);
79+
} catch (err: any) {
80+
throw new Error(err);
81+
}
82+
}
83+
7384
const parsedInfoBuffer = this._parseInfoBuffer(resultBuffer);
7485
return parsedInfoBuffer as InfoResponse;
7586
}
@@ -120,18 +131,15 @@ class GameServerQuery {
120131
let packet = Buffer.concat([
121132
Buffer.from([0xFF, 0xFF, 0xFF, 0xFF]),
122133
Buffer.from([0x54]),
123-
Buffer.from('Source Engine Query', 'ascii')
134+
Buffer.from('Source Engine Query', 'ascii'),
135+
Buffer.from([0x00])
124136
]);
125137
if (challenge) {
126138
packet = Buffer.concat([
127139
packet,
128140
challenge
129141
]);
130142
}
131-
packet = Buffer.concat([
132-
packet,
133-
Buffer.from([0x00])
134-
]);
135143
return packet;
136144
}
137145

src/masterServer/masterServer.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,13 @@ class MasterServerQuery {
6868
// @ts-ignore
6969
let val = this._filters[key];
7070
str += '\\' + key + '\\';
71-
str += (key === 'nor' || key === 'nand')
72-
? Object.keys(val).length + this._slashifyObject(val)
73-
: val;
71+
if (key === 'nor' || key === 'nand') {
72+
str += Object.keys(val).length + this._slashifyObject(val);
73+
} else if (Array.isArray(val)) {
74+
str += val.join(',');
75+
} else {
76+
str += val;
77+
}
7478
}
7579
str += '\x00';
7680
return str;

0 commit comments

Comments
 (0)