Esempio n. 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageSinkParameters"/> class.
 /// </summary>
 /// <param name="config">The config.</param>
 /// <param name="data">The data.</param>
 public MessageSinkParameters(IMessageSinkConfiguration config, byte[] data)
 {
     if (config == null)
     {
         ThrowHelper.ThrowArgumentNullException("config");
     }
     if (data == null)
     {
         ThrowHelper.ThrowArgumentNullException("data");
     }
     ConfigurationToDeserialize = config;
     SerializedData             = data;
 }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MessageHeader"/> class.
        /// </summary>
        /// <param name="messageSinkId">The message sink id.</param>
        /// <param name="messageLength">Length of the message.</param>
        /// <param name="messageSinkConfiguration">The message sink configuration.</param>
        public MessageHeader(String messageSinkId, int messageLength, IMessageSinkConfiguration messageSinkConfiguration)
        {
            if (string.IsNullOrEmpty(messageSinkId))
            {
                ThrowHelper.ThrowArgumentNullException("messageSinkId");
            }
            if (messageLength < 0)
            {
                ThrowHelper.ThrowArgumentOutOfRangeException("messageLength");
            }

            this.mMessageSinkId            = messageSinkId;
            this.mMessageLength            = messageLength;
            this.mMessageSinkConfiguration = messageSinkConfiguration;
            if (messageSinkConfiguration != null)
            {
                this.mMessageSinkConfigurationClassName = messageSinkConfiguration.GetType().FullName;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Writes the specified stream.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="data">The data.</param>
        /// <param name="messageSinkId">The message sink id.</param>
        /// <param name="messageSinkConfiguration">The message sink configuration.</param>
        /// <param name="maxMessageSize">Size of the max message.</param>
        /// <exception cref="MessageSecurityException">
        /// Provided data size is larger than the maximum allowed message size.
        /// or
        /// Serialized message size is larger then the maximum allowed size.
        /// </exception>
        public void Write(NetworkStream stream, byte[] data, String messageSinkId, IMessageSinkConfiguration messageSinkConfiguration, int maxMessageSize)
        {
            if (stream == null)
            {
                ThrowHelper.ThrowArgumentNullException("stream");
            }
            if (data == null)
            {
                ThrowHelper.ThrowArgumentNullException("data");
            }

            if (maxMessageSize > 0 && data.Length > maxMessageSize)
            {
                throw new MessageSecurityException(string.Format("Provided data size ({0}) is larger than the maximum allowed message size ({1}).", data.Length.ToString(), maxMessageSize.ToString()));
            }

            using (MemoryStream ms = new MemoryStream())
            {
                MessageHeader header = new MessageHeader(messageSinkId, data.Length, messageSinkConfiguration);
                using (MemoryStream outputStream = new MemoryStream())
                {
                    mFormatter.Write(outputStream, header);

                    if (maxMessageSize > 0 && outputStream.Length > maxMessageSize)
                    {
                        throw new MessageSecurityException("Serialized message size is larger then the maximum allowed size.");
                    }
                    byte[] streamData = outputStream.ToArray();
                    byte[] lenBytes   = Encoding.UTF8.GetBytes(streamData.Length.ToString());
                    ms.Write(lenBytes, 0, lenBytes.Length);     // fejléc hossza
                    ms.WriteByte((byte)0);                      // lezáró karakter
                    ms.Write(streamData, 0, streamData.Length); // header info
                    ms.Write(data, 0, data.Length);             // data
                    ms.WriteTo(stream);
                }
            }
        }