A transport reconnect could recover the wrong room or retain obsolete host authority. Authenticate retained membership and recover the relay-authoritative role without falling back to create or join. Release retained membership through authenticated teardown and document the coordinated relay rollout.
69 lines
2.5 KiB
Go
69 lines
2.5 KiB
Go
// Code generated by scripts/codegen/generate_relay_protocol.py. DO NOT EDIT.
|
|
|
|
package main
|
|
|
|
const (
|
|
relayProtocolVersion = 2
|
|
legacyRelayProtocolVersion = 0
|
|
|
|
relayTypeCreate = "create"
|
|
relayTypeJoin = "join"
|
|
relayTypeResume = "resume"
|
|
relayTypeBroadcast = "broadcast"
|
|
relayTypeSendTo = "sendTo"
|
|
relayTypePing = "ping"
|
|
relayTypeLeave = "leave"
|
|
relayTypeEndSession = "endSession"
|
|
relayTypeTransferHost = "transferHost"
|
|
relayTypeCreated = "created"
|
|
relayTypeJoined = "joined"
|
|
relayTypeResumed = "resumed"
|
|
relayTypePeerJoined = "peerJoined"
|
|
relayTypePeerLeft = "peerLeft"
|
|
relayTypeMessage = "message"
|
|
relayTypeError = "error"
|
|
relayTypePong = "pong"
|
|
relayTypeLeft = "left"
|
|
relayTypeEnded = "ended"
|
|
relayTypeHostChanged = "hostChanged"
|
|
relayTypeHostTransferEligibility = "hostTransferEligibility"
|
|
relayErrorRateLimited = "rate_limited"
|
|
relayErrorInvalidMessage = "invalid_message"
|
|
relayErrorRoomExists = "room_exists"
|
|
relayErrorRoomNotFound = "room_not_found"
|
|
relayErrorRoomFull = "room_full"
|
|
relayErrorNotInRoom = "not_in_room"
|
|
relayErrorAlreadyInRoom = "already_in_room"
|
|
relayErrorPeerIdUnavailable = "peer_id_unavailable"
|
|
relayErrorProtocolMismatch = "protocol_mismatch"
|
|
relayErrorNotHost = "not_host"
|
|
relayErrorPeerNotFound = "peer_not_found"
|
|
relayErrorHostTransferUnavailable = "host_transfer_unavailable"
|
|
relayFeatureAtomicHostTransfer = "atomicHostTransfer"
|
|
relayFeatureAuthenticatedResume = "authenticatedResume"
|
|
relayCapabilityHostTransfer = "hostTransfer"
|
|
|
|
maxRoomSize = 8
|
|
maxMessageSize = 65536
|
|
maxSessionIDLength = 64
|
|
maxPeerIDLength = 128
|
|
reconnectTokenSize = 32
|
|
)
|
|
|
|
func supportedRelayProtocolVersion(version int) bool {
|
|
return version == legacyRelayProtocolVersion || version == relayProtocolVersion
|
|
}
|
|
|
|
func validRelayID(value string, maxLength int) bool {
|
|
if len(value) == 0 || len(value) > maxLength {
|
|
return false
|
|
}
|
|
for _, ch := range value {
|
|
if (ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z') &&
|
|
(ch < '0' || ch > '9') && ch != '_' && ch != '-' {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|