(header string, expectedRole SpeakerRole, supportedVersions RPCVersionList)
| 332 | } |
| 333 | |
| 334 | func validateHeader(header string, expectedRole SpeakerRole, supportedVersions RPCVersionList) (RPCVersion, error) { |
| 335 | parts := strings.Split(header, " ") |
| 336 | if len(parts) != 3 { |
| 337 | return RPCVersion{}, xerrors.New("wrong number of parts") |
| 338 | } |
| 339 | if parts[0] != headerPreamble { |
| 340 | return RPCVersion{}, xerrors.New("invalid preamble") |
| 341 | } |
| 342 | if parts[1] != string(expectedRole) { |
| 343 | return RPCVersion{}, xerrors.New("unexpected role") |
| 344 | } |
| 345 | otherVersions, err := ParseRPCVersionList(parts[2]) |
| 346 | if err != nil { |
| 347 | return RPCVersion{}, xerrors.Errorf("parse version list %q: %w", parts[2], err) |
| 348 | } |
| 349 | compatibleVersion, ok := supportedVersions.IsCompatibleWith(otherVersions) |
| 350 | if !ok { |
| 351 | return RPCVersion{}, |
| 352 | xerrors.Errorf("current supported versions %q is not compatible with peer versions %q", supportedVersions.String(), otherVersions.String()) |
| 353 | } |
| 354 | return compatibleVersion, nil |
| 355 | } |
| 356 | |
| 357 | type request[S rpcMessage, R rpcMessage] struct { |
| 358 | ctx context.Context |
no test coverage detected