Files

29 lines
882 B
Go

package domain
import (
"errors"
rvboxv1 "github.com/rvbox/rvbox/gen/go/rvbox/v1"
)
var ErrNoCompatibleProtocol = errors.New("no compatible protocol version")
// SelectProtocol chooses the highest mutually supported minor version.
func SelectProtocol(server, client *rvboxv1.ProtocolRange) (*rvboxv1.ProtocolVersion, error) {
if server == nil || client == nil || server.Major == 0 || client.Major == 0 || server.Major != client.Major || server.MinMinor > server.MaxMinor || client.MinMinor > client.MaxMinor {
return nil, ErrNoCompatibleProtocol
}
minimum := server.MinMinor
if client.MinMinor > minimum {
minimum = client.MinMinor
}
maximum := server.MaxMinor
if client.MaxMinor < maximum {
maximum = client.MaxMinor
}
if minimum > maximum {
return nil, ErrNoCompatibleProtocol
}
return &rvboxv1.ProtocolVersion{Major: server.Major, Minor: maximum}, nil
}