Exemple #1
0
        static void superWebSocketInject()
        {
            /** 
                becase m_ProtocolProcessorFactory is a private static field , no associate Property
                and initialized in static WebSocket constructor, 
                so we have to reflect this property and replace origional Rfc6455Process with our hacked rfc6455Processor.
                If you want to check it, please refer WebSocket4Net\WebSocket4Net\WebSocket.cs
            */
            var fieldFactory = typeof(WebSocket).GetField("m_ProtocolProcessorFactory",
                BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.ExactBinding);

            var valFactory = fieldFactory.GetValue(null);

            /**
                because m_OrderedProcessors is a private field of ProtocolProcessorFactory, and initialized in the constructor,
                so have to reflect this property to get the protocol processors.
            */
            var fieldArry = valFactory.GetType()
                .GetField("m_OrderedProcessors",
                BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.ExactBinding);

            var valArry = fieldArry.GetValue(valFactory) as IProtocolProcessor[];
            if (valArry != null)
            {
                for (int i = 0; i < valArry.Length; i++)
                {
                    var processor = valArry[i];
                    if (processor.Version != WebSocketVersion.Rfc6455)
                    {
                        continue;
                    }

                    /**
                        Use Rfc6455Processor by default to transfer data between client and server if not set WebSocketVersion.
                        and our codes did not set WebSocketVersion, So we should hack Rfc6455Processor.
                    */
                    var hackedProcessor = new HackedRfc6455Processor(processor);
                    valArry[i] = hackedProcessor;
                    break;
                }
            }
        }
        static void superWebSocketInject()
        {
            var fieldFactory = typeof(WebSocket).GetField("m_ProtocolProcessorFactory",
                BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.ExactBinding);

            var valFactory = fieldFactory.GetValue(null);

            var fieldArry = valFactory.GetType()
                .GetField("m_OrderedProcessors",
                BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.ExactBinding);

            var valArry = fieldArry.GetValue(valFactory) as IProtocolProcessor[];
            if (valArry != null)
            {
                for (int i = 0; i < valArry.Length; i++)
                {
                    var processor = valArry[i];
                    if (processor.Version != WebSocketVersion.Rfc6455)
                    {
                        continue;
                    }

                    var hackedProcessor = new HackedRfc6455Processor(processor);
                    valArry[i] = hackedProcessor;
                    break;
                }
            }
        }