ADR-001: Paquetes de Servicio
Estado: Aceptado
Fecha: 2025-09-22
Por qué
Necesitamos señales del plano de control (p. ej., reinicio de sesión) que sean inequívocas, sin asignaciones al parsear y compatibles con versiones anteriores.
Decisión
Coexisten dos codificaciones:
-
Legado:
[type] // 1 byteMantenido para compatibilidad con versiones anteriores (actualmente solo
SessionReset). -
V1 enmarcado:
0xFF 0x01 [type] // 3 bytes: prefijo, versión, tipoProporciona versionado para evolución futura.
Detección (estricta)
Un paquete es de servicio si y solo si:
len==1ytypees conocido (legado), olen==3y los bytes son0xFF 0x01 <tipo-conocido>(v1). Todo lo demás no es un paquete de servicio.
API
package service
type PacketType uint8
const (
Unknown PacketType = iota
SessionReset
)
type PacketHandler interface {
TryParseType(pkt []byte) (PacketType, bool) // sin asignaciones
EncodeLegacy(t PacketType, buffer []byte) ([]byte, error) // sin asignaciones: buffer está preasignado
EncodeV1(t PacketType, buffer []byte) ([]byte, error) // sin asignaciones: buffer está preasignado
}
Compatibilidad y Despliegue
- Recibir: siempre aceptar tanto legado como v1.
- Enviar: por defecto legado. Después del flag de característica en el handshake (
ServicePacketsV1=true), enviar v1 a ese cliente; de lo contrario mantener legado.