ProcessMessage() public method

Process handshake and change cipher suite messages. This method should be called for every incoming message until the method returns true. You cannot encrypt or decrypt messages until the method return true. Each call to the method may include outgoing messages that need to be sent to the other peer.
Note: Within this library, this method is ONLY called from within the unit-tests.
NetMQSecurityErrorCode.InvalidContentType: Unknown content type. NetMQSecurityErrorCode.InvalidFrameLength: Wrong length for protocol version frame. NetMQSecurityErrorCode.InvalidFrameLength: Wrong length for message size. NetMQSecurityErrorCode.InvalidProtocolVersion: Wrong protocol version.
public ProcessMessage ( NetMQMessage incomingMessage, IList outgoingMesssages ) : bool
incomingMessage NetMQMessage the incoming message from the other peer
outgoingMesssages IList the list of outgoing messages that need to be sent to the other peer
return bool
Esempio n. 1
0
        public void Setup()
        {
            X509Certificate2 certificate = new X509Certificate2("NetMQ.Testing.pfx", "1");

            m_serverSecureChannel = new SecureChannel(ConnectionEnd.Server) { Certificate = certificate };

            m_clientSecureChannel = new SecureChannel(ConnectionEnd.Client);
            m_clientSecureChannel.SetVerifyCertificate(c => true);

            IList<NetMQMessage> clientOutgoingMessages = new List<NetMQMessage>();
            IList<NetMQMessage> serverOutgoingMessages = new List<NetMQMessage>();

            bool serverComplete = false;

            bool clientComplete = m_clientSecureChannel.ProcessMessage(null, clientOutgoingMessages);

            while (!serverComplete || !clientComplete)
            {
                if (!serverComplete)
                {
                    foreach (var message in clientOutgoingMessages)
                    {
                        serverComplete = m_serverSecureChannel.ProcessMessage(message, serverOutgoingMessages);

                        if (serverComplete)
                        {
                            break;
                        }
                    }

                    clientOutgoingMessages.Clear();
                }

                if (!clientComplete)
                {
                    foreach (var message in serverOutgoingMessages)
                    {
                        clientComplete = m_clientSecureChannel.ProcessMessage(message, clientOutgoingMessages);

                        if (clientComplete)
                        {
                            break;
                        }
                    }

                    serverOutgoingMessages.Clear();
                }
            }
        }