Example #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);
        }
Example #2
0
        /// <summary>
        /// Reads message from buffer.
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="bufferManager"></param>
        /// <param name="contentType"></param>
        /// <returns></returns>
        public override Message ReadMessage(ArraySegment <byte> buffer, BufferManager bufferManager, string contentType)
        {
            byte[] msgContents = new byte[buffer.Count];

            Array.Copy(buffer.Array, buffer.Offset, msgContents, 0, msgContents.Length);
            bufferManager.ReturnBuffer(buffer.Array);


            string content = Encoding.UTF8.GetString(buffer.Array, buffer.Offset, buffer.Count);

            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.LogResponse(content);
                }
            }

            if (contentType == Internals.Http.HttpHelper.APPLICATIONSOAPXML)
            {
                MemoryStream validateStream = new MemoryStream(msgContents);
                foreach (IChannelController controller in _controllers)
                {
                    IValidatingController validatingController = controller as IValidatingController;
                    if (validatingController != null)
                    {
                        validatingController.Validate(validateStream);
                    }
                }
                validateStream.Close();
            }

            MemoryStream stream  = new MemoryStream(msgContents);
            Message      message = ReadMessage(stream, int.MaxValue, contentType);

            return(message);
        }
        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);
                }
            }
        }
        void LogResponse(byte[] messageBytes, int count)
        {
            int offset = 0;

            while (messageBytes[offset] != '<' && offset < count)
            {
                offset++;
            }
            string content = FormatContent(Encoding.UTF8.GetString(messageBytes, offset, count - offset));

            content = FormatContent(content);

            foreach (IChannelController controller in _controllers)
            {
                ITrafficListener listener = controller as ITrafficListener;
                if (listener != null)
                {
                    listener.LogResponse(content);
                }
            }
        }
Example #5
0
 public void SetListener(ITrafficListener listener)
 {
     _listener = listener;
 }
Example #6
0
 public void RemoveListener(ITrafficListener listener)
 {
     _listeners.Remove(listener);
 }
Example #7
0
 public void AddListener(ITrafficListener listener)
 {
     _listeners.Add(listener);
 }