wfc-server/gpcm/report.go
2026-04-05 09:52:28 -04:00

77 lines
2.1 KiB
Go

package gpcm
import (
"strconv"
"wwfc/common"
"wwfc/logging"
"wwfc/qr2"
"github.com/logrusorgru/aurora/v3"
)
func (g *GameSpySession) handleWWFCReport(command common.GameSpyCommand) {
for key, value := range command.OtherValues {
logging.Info(g.ModuleName, "WiiLink Report:", aurora.Yellow(key))
keyColored := aurora.BrightCyan(key).String()
switch key {
default:
logging.Error(g.ModuleName, "Unknown record", aurora.Cyan(key).String()+":", aurora.Cyan(value))
case "wl:bad_packet":
profileId, err := strconv.ParseUint(value, 10, 32)
if err != nil {
logging.Error(g.ModuleName, "Error decoding", keyColored+":", err.Error())
continue
}
logging.Warn(g.ModuleName, "Report bad packet from", aurora.BrightCyan(strconv.FormatUint(profileId, 10)))
logging.Event("reported_bad_packet", map[string]any{
"profile_id": g.User.ProfileId,
"sender_id": profileId,
})
case "wl:stall":
profileId, err := strconv.ParseUint(value, 10, 32)
if err != nil {
logging.Error(g.ModuleName, "Error decoding", keyColored+":", err.Error())
continue
}
logging.Warn(g.ModuleName, "Room stall caused by", aurora.BrightCyan(strconv.FormatUint(profileId, 10)))
logging.Event("reported_stall", map[string]any{
"profile_id": g.User.ProfileId,
"stalling_id": profileId,
})
case "wl:mkw_user":
if g.GameName != "mariokartwii" {
logging.Warn(g.ModuleName, "Ignoring", keyColored+":", "from wrong game")
continue
}
packet, err := common.Base64DwcEncoding.DecodeString(value)
if err != nil {
logging.Error(g.ModuleName, "Error decoding", keyColored+":", err.Error())
continue
}
if len(packet) != 0xC0 {
logging.Error(g.ModuleName, "Invalid", keyColored, "record length:", len(packet))
continue
}
qr2.ProcessUSER(g.User.ProfileId, g.QR2IP, packet)
case "wl:mkw_select_course", "wl:mkw_select_cc":
if g.GameName != "mariokartwii" {
logging.Warn(g.ModuleName, "Ignoring", keyColored, "from wrong game")
continue
}
qr2.ProcessMKWSelectRecord(g.User.ProfileId, key, value)
}
}
}