Beispiel #1
0
        private void SendProtocolRequests(Channel channel, ApplicationSupportedProtocols applicationProtocols, ICollection <ModifierSupportedProtocols> supportedModifierProtocols)
        {
            supportedModifierProtocols.forEach(modifierProtocol =>
            {
                ProtocolSelection <string, ModifierProtocol> protocolSelection = _modifierProtocolRepository.getAll(modifierProtocol.identifier(), modifierProtocol.versions());
                channel.Write(new ModifierProtocolRequest(protocolSelection.Identifier(), protocolSelection.Versions()));
            });

            ProtocolSelection <int, Protocol_ApplicationProtocol> applicationProtocolSelection = _applicationProtocolRepository.getAll(applicationProtocols.Identifier(), applicationProtocols.Versions());

            channel.WriteAndFlush(new ApplicationProtocolRequest(applicationProtocolSelection.Identifier(), applicationProtocolSelection.Versions()));
        }
Beispiel #2
0
        public override void Handle(ApplicationProtocolResponse applicationProtocolResponse)
        {
            EnsureMagic();
            if (applicationProtocolResponse.StatusCode() != SUCCESS)
            {
                Decline("Unsuccessful application protocol response");
                return;
            }

            Optional <Protocol_ApplicationProtocol> protocol = _applicationProtocolRepository.select(applicationProtocolResponse.ProtocolName(), applicationProtocolResponse.Version());

            if (!protocol.Present)
            {
                ProtocolSelection <int, Protocol_ApplicationProtocol> knownApplicationProtocolVersions = _applicationProtocolRepository.getAll(_supportedApplicationProtocol.identifier(), _supportedApplicationProtocol.versions());
                Decline(string.Format("Mismatch of application protocols between client and server: Server protocol {0} version {1:D}: Client protocol {2} versions {3}", applicationProtocolResponse.ProtocolName(), applicationProtocolResponse.Version(), knownApplicationProtocolVersions.Identifier(), knownApplicationProtocolVersions.Versions()));
            }
            else
            {
                _negotiatedApplicationProtocol = protocol.get();

                SendSwitchOverRequestIfReady();
            }
        }