コード例 #1
0
        /// <summary>
        /// Writes message
        /// </summary>
        /// <param name="message"></param>
        /// <param name="maxMessageSize"></param>
        /// <param name="bufferManager"></param>
        /// <param name="messageOffset"></param>
        /// <returns></returns>
        public override ArraySegment <byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
        {
            int idx = -1;

            for (int i = 0; i < message.Headers.Count; i++)
            {
                if (message.Headers[i].Name == "VsDebuggerCausalityData")
                {
                    idx = i;
                    break;
                }
            }
            if (idx >= 0)
            {
                message.Headers.RemoveAt(idx);
            }

            byte[] messageBytes  = ProcessMessage(message);
            int    messageLength = messageBytes.Length;

            int totalLength = messageLength + messageOffset;

            byte[] totalBytes = bufferManager.TakeBuffer(totalLength);
            Array.Copy(messageBytes, 0, totalBytes, messageOffset, messageLength);

            ArraySegment <byte> byteArray;

            byteArray = new ArraySegment <byte>(totalBytes, messageOffset, messageLength);

            string content;

            content = Encoding.GetEncoding(factory.CharSet).GetString(messageBytes);
            try
            {
                MemoryStream memoryStream = new MemoryStream();
                XmlDocument  document     = new XmlDocument();
                document.LoadXml(content);
                document.Save(memoryStream);
                memoryStream.Seek(0, SeekOrigin.Begin);
                TextReader rdr = new StreamReader(memoryStream);
                content = rdr.ReadToEnd();
                rdr.Close();
            }
            catch (Exception exc)
            {
                // Log content as is
            }

            foreach (IChannelController controller in _controllers)
            {
                ITrafficListener listener = controller as ITrafficListener;
                if (listener != null)
                {
                    listener.LogRequest(content);
                }
            }

            return(byteArray);
        }
コード例 #2
0
        void LogRequest(Stream requestStream)
        {
            TextReader rdr     = new StreamReader(requestStream);
            string     content = rdr.ReadToEnd();

            requestStream.Seek(0, SeekOrigin.Begin);

            content = FormatContent(content);


            foreach (IChannelController controller in _controllers)
            {
                ITrafficListener listener = controller as ITrafficListener;
                if (listener != null)
                {
                    listener.LogRequest(content);
                }
            }
        }
コード例 #3
0
        public override ArraySegment <byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
        {
            ArraySegment <byte> byteArray = baseEncoder.WriteMessage(message, maxMessageSize, bufferManager);

            byte[] messageBytes;
            messageBytes = byteArray.Array;
            string content = Encoding.UTF8.GetString(messageBytes);

            if (_behaviour != null)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(content);

                System.Diagnostics.Debug.WriteLine("Content before spoiling: ");
                System.Diagnostics.Debug.WriteLine(content);

                XmlNamespaceManager manager = new XmlNamespaceManager(xmlDoc.NameTable);
                foreach (string key in _behaviour.Namespaces.Keys)
                {
                    manager.AddNamespace(key, _behaviour.Namespaces[key]);
                }

                XmlNode node = xmlDoc.SelectSingleNode(_behaviour.NodePath, manager);
                //node = xmlDoc.SelectSingleNode("/s:Envelope", manager);
                //node = xmlDoc.SelectSingleNode("/s:Envelope/s:Body", manager);
                //node = xmlDoc.SelectSingleNode("/s:Envelope/s:Body/onvif:SetDiscoveryMode", manager);
                if (node != null)
                {
                    node.InnerText = _behaviour.NodeValue;
                }

                MemoryStream stream = new MemoryStream();
                XmlWriter    writer = new XmlTextWriter(stream, Encoding.GetEncoding(factory.CharSet));

                xmlDoc.WriteTo(writer);
                int messageLength = (int)stream.Length;
                writer.Close();

                messageBytes = stream.GetBuffer();

                content = Encoding.UTF8.GetString(messageBytes);
                System.Diagnostics.Debug.WriteLine("Content after spoiling: ");
                System.Diagnostics.Debug.WriteLine(content);


                int    totalLength = messageLength + messageOffset;
                byte[] totalBytes  = bufferManager.TakeBuffer(totalLength);
                Array.Copy(messageBytes, 0, totalBytes, messageOffset, messageLength);

                byteArray = new ArraySegment <byte>(totalBytes, messageOffset, messageLength);
            }

            if (_listener != null)
            {
                _listener.LogRequest(content);
            }
            return(byteArray);

            /*
             * MemoryStream stream = new MemoryStream();
             * XmlWriter writer = XmlWriter.Create(stream, this.writerSettings);
             * message.WriteMessage(writer);
             * writer.Close();
             *
             * byte[] messageBytes = stream.GetBuffer();
             * int messageLength = (int)stream.Position;
             * stream.Close();
             *
             * string content = Encoding.UTF8.GetString(messageBytes);
             *
             * if (_listener != null)
             * {
             *  _listener.LogRequest(content);
             * }
             *
             * int totalLength = messageLength + messageOffset;
             * byte[] totalBytes = bufferManager.TakeBuffer(totalLength);
             * Array.Copy(messageBytes, 0, totalBytes, messageOffset, messageLength);
             *
             * ArraySegment<byte> byteArray = new ArraySegment<byte>(totalBytes, messageOffset, messageLength);
             * return byteArray;*/
        }