Full hosted rooms are refused with IMVU's own full-room code
CI / build (push) Successful in 29s

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
dhkatzandClaude Opus 5.5 committed 2026-10-30 07:07:31 -07:00
1 parent 56c47e806f
commit 6aac769246
3 files changed
+10 -4

No files matched your search

+4 -1
View File
@@ -780,8 +780,11 @@ func (r *Rooms) joinChat(ctx context.Context, n int64, inviteID string) *http.Re
} }
// Refused as the client's own refusals are (it shows the explanation; booted ones as booted). // Refused as the client's own refusals are (it shows the explanation; booted ones as booted).
reason := int64(0) reason := int64(0)
if a.Reason == "banned" { switch a.Reason {
case "banned":
reason = errorPublicRoomBooted reason = errorPublicRoomBooted
case "full":
reason = errorPublicRoomFull
} }
return xmlrpcAnswer(xmlrpc.Struct{{Name: "response", Value: "declined"}, {Name: "reason", Value: reason}, {Name: "explanation", Value: msg}}) return xmlrpcAnswer(xmlrpc.Struct{{Name: "response", Value: "declined"}, {Name: "reason", Value: reason}, {Name: "explanation", Value: msg}})
} }
+1 -1
View File
@@ -151,7 +151,7 @@ func TestHostedRoom(t *testing.T) {
t.Fatalf("events %v", *events) t.Fatalf("events %v", *events)
} }
// A full room: the client is told why. // A full room: the client is told why.
if resp, _ := xmlrpcCall(t, r, "chat.imvu.com", "chat.getOrMakeChat", xmlrpc.Struct{{Name: "activity", Value: "publicroom-88-2100000009"}}); get(resp.Params[0], "response") != "declined" || get(resp.Params[0], "explanation") != "This room is full." { if resp, _ := xmlrpcCall(t, r, "chat.imvu.com", "chat.getOrMakeChat", xmlrpc.Struct{{Name: "activity", Value: "publicroom-88-2100000009"}}); get(resp.Params[0], "response") != "declined" || get(resp.Params[0], "explanation") != "This room is full." || get(resp.Params[0], "reason") != int64(5) {
t.Fatalf("full room: %+v", resp) t.Fatalf("full room: %+v", resp)
} }
+5 -2
View File
@@ -20,8 +20,11 @@ import (
"git.t5de.dev/t5de/t5de-proxy/internal/xmlrpc" "git.t5de.dev/t5de/t5de-proxy/internal/xmlrpc"
) )
// errorPublicRoomBooted is the client's reason code for being refused a room it was booted from. // The client's reason codes for refused joins: booted (it shows "booted"), and full (IMVU's own wording).
const errorPublicRoomBooted = 4 const (
errorPublicRoomFull = 5
errorPublicRoomBooted = 4
)
// invite is an invitation the client sent (outgoing, by the local ID the client knows) or got (incoming). // invite is an invitation the client sent (outgoing, by the local ID the client knows) or got (incoming).
type invite struct { type invite struct {