Skip to content

Commit ca6cd9c

Browse files
[Horizon/WebAPIService/SVO] - Various bug fixes.
Horizon: Fixes some packet handling bugs, revised the MPS game joining appid exception check to match the MUM one, removes some useless extension methods. WebAPIServive: Fixes a double to int parsing bug for the furniture_up endpoint in the JUGGERNAUT Bramblenook API. SVO: Fixes the Wipeout 2048 leaderboard handling (no data for now).
1 parent 36fe1b7 commit ca6cd9c

File tree

15 files changed

+1706
-1594
lines changed

15 files changed

+1706
-1594
lines changed

AuxiliaryServices/HorizonService/LIBRARY.Common/Utils.cs

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,10 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Diagnostics;
43

54
namespace Horizon.LIBRARY.Common
65
{
76
public static class Utils
87
{
9-
public static byte[] FromString(string str)
10-
{
11-
byte[] buffer = new byte[str.Length / 2];
12-
13-
for (int i = 0; i < buffer.Length; ++i)
14-
{
15-
buffer[i] = byte.Parse(str.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);
16-
}
17-
18-
return buffer;
19-
}
20-
21-
public static byte[] FromStringFlipped(string str)
22-
{
23-
byte[] buffer = new byte[str.Length / 2];
24-
25-
int strIndex = str.Length - 2;
26-
for (int i = 0; i < buffer.Length; ++i)
27-
{
28-
buffer[i] = byte.Parse(str.Substring(strIndex, 2), System.Globalization.NumberStyles.HexNumber);
29-
strIndex -= 2;
30-
}
31-
32-
return buffer;
33-
}
34-
358
#region LINQ
369

3710
/// <summary>

AuxiliaryServices/HorizonService/RT.Common/Types.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2389,6 +2389,17 @@ public enum MGCL_GAME_HOST_TYPE : int
23892389
MGCLGameHostMax = 7,
23902390
}
23912391

2392+
[Flags]
2393+
public enum StartupMessageFlags : byte
2394+
{
2395+
None = 0,
2396+
HasStartupInfo = 1 << 1, // 0x02
2397+
HasGlobalTimeReset = 1 << 2, // 0x04
2398+
HasFieldSetA = 1 << 3, // 0x08
2399+
HasFieldSetB = 1 << 4, // 0x10
2400+
HasFieldSetC = 1 << 5, // 0x20
2401+
}
2402+
23922403
public enum MGCL_ERROR_CODE : sbyte
23932404
{
23942405
/// <summary>

AuxiliaryServices/HorizonService/RT.Models/Lobby/MediusGetMyClanMessagesResponse.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public override void Deserialize(MessageReader reader)
2525
MessageID = reader.Read<MessageId>();
2626
StatusCode = reader.Read<MediusCallbackStatus>();
2727
ClanID = reader.ReadInt32();
28-
2928

3029
if (reader.MediusVersion == 113)
3130
{
@@ -35,8 +34,6 @@ public override void Deserialize(MessageReader reader)
3534
else
3635
Message = reader.ReadString(Constants.CLANMSG_MAXLEN);
3736

38-
//Message = reader.ReadString(Constants.CLANMSG_MAXLEN);
39-
4037
EndOfList = reader.ReadBoolean();
4138
}
4239

@@ -47,7 +44,6 @@ public override void Serialize(MessageWriter writer)
4744
writer.Write(MessageID ?? MessageId.Empty);
4845
writer.Write(StatusCode);
4946
writer.Write(ClanID);
50-
5147

5248
if (writer.MediusVersion == 113)
5349
{
@@ -57,7 +53,6 @@ public override void Serialize(MessageWriter writer)
5753
else
5854
writer.Write(Message, Constants.CLANMSG_MAXLEN);
5955

60-
//writer.Write(Message, Constants.CLANMSG_MAXLEN);
6156
writer.Write(EndOfList);
6257
}
6358

AuxiliaryServices/HorizonService/RT.Models/Lobby/MediusSendClanMessageRequest.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,26 @@ public class MediusSendClanMessageRequest : BaseLobbyMessage, IMediusRequest
1717

1818
public override void Deserialize(MessageReader reader)
1919
{
20-
//
2120
base.Deserialize(reader);
2221

23-
//
2422
MessageID = reader.Read<MessageId>();
2523
SessionKey = reader.ReadString(Constants.SESSIONKEY_MAXLEN);
26-
if(reader.MediusVersion == 113)
27-
{
24+
if (reader.MediusVersion == 113)
2825
Message = reader.ReadString(Constants.CLANMSG_MAXLEN_113_2);
29-
} else
30-
{
26+
else
3127
Message = reader.ReadString(Constants.CLANMSG_MAXLEN);
32-
}
3328
}
3429

3530
public override void Serialize(MessageWriter writer)
3631
{
37-
//
3832
base.Serialize(writer);
3933

40-
//
4134
writer.Write(MessageID ?? MessageId.Empty);
4235
writer.Write(SessionKey, Constants.SESSIONKEY_MAXLEN);
4336
if (writer.MediusVersion == 113)
44-
{
4537
writer.Write(Message, Constants.CLANMSG_MAXLEN_113_2);
46-
}
4738
else
48-
{
4939
writer.Write(Message, Constants.CLANMSG_MAXLEN);
50-
}
5140
}
5241

5342
public override string ToString()

AuxiliaryServices/HorizonService/RT.Models/Lobby/MediusSendClanMessageResponse.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,17 @@ public class MediusSendClanMessageResponse : BaseLobbyMessage, IMediusResponse
1616

1717
public override void Deserialize(MessageReader reader)
1818
{
19-
//
2019
base.Deserialize(reader);
2120

22-
//
2321
MessageID = reader.Read<MessageId>();
2422
reader.ReadBytes(3);
2523
StatusCode = reader.Read<MediusCallbackStatus>();
2624
}
2725

2826
public override void Serialize(MessageWriter writer)
2927
{
30-
//
3128
base.Serialize(writer);
3229

33-
//
3430
writer.Write(MessageID ?? MessageId.Empty);
3531
writer.Write(new byte[3]);
3632
writer.Write(StatusCode);

AuxiliaryServices/HorizonService/RT.Models/MGCL/MediusServerCreateGameOnSelfRequest0.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,17 @@ public override void Serialize(MessageWriter writer)
6363
base.Serialize(writer);
6464

6565
writer.Write(MessageID ?? MessageId.Empty);
66-
writer.Write(GameName, Constants.MGCL_GAMENAME_MAXLEN);
66+
67+
if (writer.MediusVersion == 113)
68+
writer.Write(GameName, Constants.MGCL_GAMENAME_MAXLEN1);
69+
else
70+
writer.Write(GameName, Constants.MGCL_GAMENAME_MAXLEN);
6771
writer.Write(GameStats, Constants.MGCL_GAMESTATS_MAXLEN);
68-
writer.Write(GamePassword, Constants.MGCL_GAMEPASSWORD_MAXLEN);
72+
73+
if (writer.MediusVersion == 113)
74+
writer.Write(GamePassword, Constants.MGCL_GAMEPASSWORD_MAXLEN1);
75+
else
76+
writer.Write(GamePassword, Constants.MGCL_GAMEPASSWORD_MAXLEN);
6977
writer.Write(new byte[3]);
7078
writer.Write(ApplicationID);
7179
writer.Write(MaxPlayers);

AuxiliaryServices/HorizonService/RT.Models/RT/RT_MSG_SERVER_APP.cs

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class RT_MSG_SERVER_APP : BaseScertMessage
1010
public override RT_MSG_TYPE Id => RT_MSG_TYPE.RT_MSG_SERVER_APP;
1111

1212
public BaseMediusMessage Message { get; set; } = null;
13-
//public BaseMediusGHSMessage GHSMessage { get; set; } = null;
13+
1414
public override bool SkipEncryption
1515
{
1616
get => Message?.SkipEncryption ?? base.SkipEncryption;
@@ -24,32 +24,16 @@ public override bool SkipEncryption
2424
public override void Deserialize(MessageReader reader)
2525
{
2626
Message = BaseMediusMessage.Instantiate(reader);
27-
/*
28-
if(reader.AppId == 0)
29-
{
30-
//GHSMessage = BaseMediusGHSMessage.Instantiate(reader);
31-
} else
32-
{
33-
34-
}
35-
*/
3627
}
3728

3829
public override void Serialize(MessageWriter writer)
3930
{
40-
writer.Write(Message.PacketClass);
41-
writer.Write(Message.PacketType);
42-
Message.Serialize(writer);
43-
/*
4431
if (Message != null)
4532
{
46-
} else
47-
{
48-
writer.Write(GHSMessage.msgSize);
49-
writer.Write(ReverseBytes16((ushort)GHSMessage.GhsOpcode));
50-
GHSMessage.Serialize(writer);
33+
writer.Write(Message.PacketClass);
34+
writer.Write(Message.PacketType);
35+
Message.Serialize(writer);
5136
}
52-
*/
5337
}
5438

5539
public override bool CanLog()
@@ -65,23 +49,6 @@ public override string ToString()
6549
{
6650
return base.ToString() + " " +
6751
$"Message: {Message}";
68-
/*
69-
if(Message != null)
70-
{
71-
} else {
72-
return base.ToString() + " " +
73-
$"GHSMessage: {GHSMessage}";
74-
}
75-
*/
76-
}
77-
/// <summary>
78-
/// Reverses UInt16
79-
/// </summary>
80-
/// <param name="nValue"></param>
81-
/// <returns></returns>
82-
public static ushort ReverseBytes16(ushort nValue)
83-
{
84-
return (ushort)((ushort)((nValue >> 8)) | (nValue << 8));
8552
}
8653
}
8754
}

AuxiliaryServices/HorizonService/RT.Models/RT/RT_MSG_SERVER_CONNECT_ACCEPT_TCP.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ public class RT_MSG_SERVER_CONNECT_ACCEPT_TCP : BaseScertMessage
2020

2121
public override void Deserialize(MessageReader reader)
2222
{
23-
2423
if (reader.MediusVersion <= 108)
2524
{
2625
UNK_07 = reader.ReadBytes(3);

AuxiliaryServices/HorizonService/RT.Models/RT/RT_MSG_SERVER_HELLO.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
using System.IO;
21
using Org.BouncyCastle.Math;
32
using Horizon.RT.Common;
4-
using Horizon.LIBRARY.Common;
53
using Horizon.LIBRARY.Common.Stream;
64
using System;
5+
using NetworkLibrary.Extension;
76

87
namespace Horizon.RT.Models
98
{
@@ -20,8 +19,8 @@ public class RT_MSG_SERVER_HELLO : BaseScertMessage
2019
public bool MLS = false;
2120
public byte EncryptFlagDisable = 0x02;
2221

23-
public byte[] Certificate = Utils.FromString("71000006e702308202e3308201cba00302010202140100000000000000000000001100000000000001300d06092a864886f70d0101050500308196310b3009060355040613025553310b3009060355040813024341311230100603550407130953616e20446965676f3131302f060355040a1328534f4e5920436f6d707574657220456e7465727461696e6d656e7420416d657269636120496e632e31143012060355040b130b53434552542047726f7570311d301b06035504031314534345525420526f6f7420417574686f72697479301e170d3035303432363231303133385a170d3335303432353233353935395a308187310b3009060355040613025553310b3009060355040813024341311230100603550407130953616e20446965676f3131302f060355040a1328534f4e5920436f6d707574657220456e7465727461696e6d656e7420416d657269636120496e632e31143012060355040b130b53434552542047726f7570310e300c060355040313054d41532031305c300d06092a864886f70d0101010500034b003048024100c4f75716ec835d2325689f91ff85ed9bfc3211db9c164f41852e264e569d2802008054a0ef459e7e3eabb87fae576e735434d1d124b30b11bd6de098148601550203000011300d06092a864886f70d010105050003820101006c91abeeb59ac01dfbb080646e4df616f833c36a5a448773f7c1acb8ec162ff811ab11f8051294e20754361827b259a534b010dfbb42e56b571ae453779682ca8650ac5dd0b3888cfb16fb858e5c39dff094380bc4f6f0268ade80c22878afc4c16099c64d435a9ab67101e63b0f5336febb1f71683ba0b0ac7eab2ef0d10d9324b6ce5683d1ab359deda17c47f2a253162674be37c2ce185d90c76b7fd7d9983c289747ad10828b385b82d7eb18f52f2eced4c3a65b0dd63dd8c83c5f92203829fdbf1a85c78b869283b0b1d5fe1bb5e85749abf50e46d9decca190c2d954b6e442e58fbde9958af397e9af575e1f76d63f35ee5987406c109db7da50557e8600000000");
24-
public byte[] MLSCert = Utils.FromString("71000006e702308202e3308201cba00302010202140100000000000000000000001100000000000004300d06092a864886f70d0101050500308196310b3009060355040613025553310b3009060355040813024341311230100603550407130953616e20446965676f3131302f060355040a1328534f4e5920436f6d707574657220456e7465727461696e6d656e7420416d657269636120496e632e31143012060355040b130b53434552542047726f7570311d301b06035504031314534345525420526f6f7420417574686f72697479301e170d3035303432373231303233335a170d3335303432363233353935395a308187310b3009060355040613025553310b3009060355040813024341311230100603550407130953616e20446965676f3131302f060355040a1328534f4e5920436f6d707574657220456e7465727461696e6d656e7420416d657269636120496e632e31143012060355040b130b53434552542047726f7570310e300c060355040313054d4c532030305c300d06092a864886f70d0101010500034b003048024100cf16b818a204ba6db8fc85d866e4f708e6cfa754a5a2399d08eafdfdbbff852d3f1c86944e157dd8f6408d7cd9cfdab409d32fddee05bdde8cff303187b374690203000011300d06092a864886f70d010105050003820101007cc5ccb73e8bffb1888d870279767063a8ea2a619fdd3bbc0b1209b5384853408ec61aafa8b9071f9e41ab93bb56dbcea59ebf18ca113775fd146c3e97fb673db572f849dc906e9f6ee6817cdcf104c4ac4758020ff2443b770d0979fce7cd8807c69ef787e51660e22e35ca19f43da41346ee619d1a707c335684f183ea432c38aaf5dbb277c8527ad98412d7624362d89d52af9f39459db0c5159a8d737262b4a9abdd95b1b8d9d586230bc3cef9fafab68b0fa8e516a89672aa4f0b3956c0a1fbb392b4b7cfca233bee6b83a4b90fe9a8211803f35f3ab83ef81dd2077e185cfc86204adc2538225951a6e9473540d647cbca5d2f6d189644006f2af7d85386dbb9b3d4885887fbb394268da005317eff6eed");
22+
public byte[] Certificate = "71000006e702308202e3308201cba00302010202140100000000000000000000001100000000000001300d06092a864886f70d0101050500308196310b3009060355040613025553310b3009060355040813024341311230100603550407130953616e20446965676f3131302f060355040a1328534f4e5920436f6d707574657220456e7465727461696e6d656e7420416d657269636120496e632e31143012060355040b130b53434552542047726f7570311d301b06035504031314534345525420526f6f7420417574686f72697479301e170d3035303432363231303133385a170d3335303432353233353935395a308187310b3009060355040613025553310b3009060355040813024341311230100603550407130953616e20446965676f3131302f060355040a1328534f4e5920436f6d707574657220456e7465727461696e6d656e7420416d657269636120496e632e31143012060355040b130b53434552542047726f7570310e300c060355040313054d41532031305c300d06092a864886f70d0101010500034b003048024100c4f75716ec835d2325689f91ff85ed9bfc3211db9c164f41852e264e569d2802008054a0ef459e7e3eabb87fae576e735434d1d124b30b11bd6de098148601550203000011300d06092a864886f70d010105050003820101006c91abeeb59ac01dfbb080646e4df616f833c36a5a448773f7c1acb8ec162ff811ab11f8051294e20754361827b259a534b010dfbb42e56b571ae453779682ca8650ac5dd0b3888cfb16fb858e5c39dff094380bc4f6f0268ade80c22878afc4c16099c64d435a9ab67101e63b0f5336febb1f71683ba0b0ac7eab2ef0d10d9324b6ce5683d1ab359deda17c47f2a253162674be37c2ce185d90c76b7fd7d9983c289747ad10828b385b82d7eb18f52f2eced4c3a65b0dd63dd8c83c5f92203829fdbf1a85c78b869283b0b1d5fe1bb5e85749abf50e46d9decca190c2d954b6e442e58fbde9958af397e9af575e1f76d63f35ee5987406c109db7da50557e8600000000".HexStringToByteArray();
23+
public byte[] MLSCert = "71000006e702308202e3308201cba00302010202140100000000000000000000001100000000000004300d06092a864886f70d0101050500308196310b3009060355040613025553310b3009060355040813024341311230100603550407130953616e20446965676f3131302f060355040a1328534f4e5920436f6d707574657220456e7465727461696e6d656e7420416d657269636120496e632e31143012060355040b130b53434552542047726f7570311d301b06035504031314534345525420526f6f7420417574686f72697479301e170d3035303432373231303233335a170d3335303432363233353935395a308187310b3009060355040613025553310b3009060355040813024341311230100603550407130953616e20446965676f3131302f060355040a1328534f4e5920436f6d707574657220456e7465727461696e6d656e7420416d657269636120496e632e31143012060355040b130b53434552542047726f7570310e300c060355040313054d4c532030305c300d06092a864886f70d0101010500034b003048024100cf16b818a204ba6db8fc85d866e4f708e6cfa754a5a2399d08eafdfdbbff852d3f1c86944e157dd8f6408d7cd9cfdab409d32fddee05bdde8cff303187b374690203000011300d06092a864886f70d010105050003820101007cc5ccb73e8bffb1888d870279767063a8ea2a619fdd3bbc0b1209b5384853408ec61aafa8b9071f9e41ab93bb56dbcea59ebf18ca113775fd146c3e97fb673db572f849dc906e9f6ee6817cdcf104c4ac4758020ff2443b770d0979fce7cd8807c69ef787e51660e22e35ca19f43da41346ee619d1a707c335684f183ea432c38aaf5dbb277c8527ad98412d7624362d89d52af9f39459db0c5159a8d737262b4a9abdd95b1b8d9d586230bc3cef9fafab68b0fa8e516a89672aa4f0b3956c0a1fbb392b4b7cfca233bee6b83a4b90fe9a8211803f35f3ab83ef81dd2077e185cfc86204adc2538225951a6e9473540d647cbca5d2f6d189644006f2af7d85386dbb9b3d4885887fbb394268da005317eff6eed".HexStringToByteArray();
2524
public BigInteger RsaPublicKey = BigInteger.Zero;
2625

2726
public RT_MSG_SERVER_HELLO()
@@ -38,7 +37,7 @@ public override void Deserialize(MessageReader reader)
3837
public override void Serialize(MessageWriter writer)
3938
{
4039
//If PS3 Medius Version 112/113, Send PS3 MAS Cert for Encryption/Decryption
41-
if ((writer.MediusVersion == 112 || writer.MediusVersion == 113) && MLS == false)
40+
if ((writer.MediusVersion == 112 || writer.MediusVersion == 113) && !MLS)
4241
{
4342
// serialize rsa modulus
4443
// this is sent in server hello at offset 0x194
@@ -55,7 +54,7 @@ public override void Serialize(MessageWriter writer)
5554
writer.Write(Certificate);
5655
}
5756
//If PS3 Medius Version 112/113, and is MLS, Send PS3 MLS Cert for Encryption/Decryption
58-
else if ((writer.MediusVersion == 112 || writer.MediusVersion == 113) && MLS == true)
57+
else if ((writer.MediusVersion == 112 || writer.MediusVersion == 113) && MLS)
5958
{
6059
// serialize rsa modulus
6160
// this is sent in server hello at offset 0x194

0 commit comments

Comments
 (0)