Exemple #1
0
        /// <summary>
        /// Parses a <see cref="NameValueCollection"/> to a <see cref="MessageHeader"/>
        /// </summary>
        /// <param name="headers">The collection that should be traversed and parsed</param>
        /// <returns>A valid <see cref="MessageHeader"/> object</returns>
        /// <exception cref="ArgumentNullException">If <paramref name="headers"/> is <see langword="null"/></exception>
        private void ParseHeaders(NameValueCollection headers)
        {
            if (headers == null)
            {
                throw new ArgumentNullException("headers");
            }

            // Now begin to parse the header values
            foreach (string headerName in headers.Keys)
            {
                string[] headerValues = headers.GetValues(headerName);
                if (headerValues != null)
                {
                    foreach (string headerValue in headerValues)
                    {
                        try
                        {
                            ParseHeader(headerName, headerValue);
                        }
                        catch (Exception ex)
                        {
                            if (_parsingErrorHandler != null)
                            {
                                _parsingErrorHandler.HandleParseError(new ParseError(ex, headerValue, string.Format("On header {0}", headerName)));
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Used to construct the topmost message part
        /// </summary>
        /// <param name="rawBody">The body that needs to be parsed</param>
        /// <param name="headers">The headers that should be used from the message</param>
        /// <param name="parsingErrorHandler">(Optional) It is notifified when an error occurs while parsing something in the message.
        /// If it is not null, the handler handles the error on the specific element without stopping the message parsing process</param>
        /// <exception cref="ArgumentNullException">If <paramref name="rawBody"/> or <paramref name="headers"/> is <see langword="null"/></exception>
        internal MessagePart(byte[] rawBody, MessageHeader headers, IParsingErrorHandler parsingErrorHandler = null)
        {
            if (rawBody == null)
            {
                throw new ArgumentNullException("rawBody");
            }

            if (headers == null)
            {
                throw new ArgumentNullException("headers");
            }

            _parsingErrorHandler = parsingErrorHandler;

            ContentType             = headers.ContentType;
            ContentDescription      = headers.ContentDescription;
            ContentTransferEncoding = headers.ContentTransferEncoding;
            ContentId          = headers.ContentId;
            ContentDisposition = headers.ContentDisposition;

            FileName = FindFileName(ContentType, ContentDisposition, "(no name)");
            try
            {
                BodyEncoding = ParseBodyEncoding(ContentType.CharSet);
            }
            catch (FormatException ex)
            {
                BodyEncoding = Encoding.UTF8;
                if (_parsingErrorHandler != null)
                {
                    _parsingErrorHandler.HandleParseError(new ParseError(ex, ContentType.CharSet, string.Format("On body encoding. Encoding set to {0}", BodyEncoding.EncodingName)));
                }
                else
                {
                    throw;
                }
            }

            ParseBody(rawBody);
        }
Exemple #3
0
	    /// <summary>
	    /// Used to construct the topmost message part
	    /// </summary>
	    /// <param name="rawBody">The body that needs to be parsed</param>
	    /// <param name="headers">The headers that should be used from the message</param>
        /// <param name="parsingErrorHandler">(Optional) It is notifified when an error occurs while parsing something in the message. 
        /// If it is not null, the handler handles the error on the specific element without stopping the message parsing process</param>
	    /// <exception cref="ArgumentNullException">If <paramref name="rawBody"/> or <paramref name="headers"/> is <see langword="null"/></exception>
	    internal MessagePart(byte[] rawBody, MessageHeader headers, IParsingErrorHandler parsingErrorHandler = null)
		{
		    if(rawBody == null)
				throw new ArgumentNullException("rawBody");
			
			if(headers == null)
				throw new ArgumentNullException("headers");

		    _parsingErrorHandler = parsingErrorHandler;

			ContentType = headers.ContentType;
			ContentDescription = headers.ContentDescription;
			ContentTransferEncoding = headers.ContentTransferEncoding;
			ContentId = headers.ContentId;
			ContentDisposition = headers.ContentDisposition;

			FileName = FindFileName(ContentType, ContentDisposition, "(no name)");
		    try
		    {
		        BodyEncoding = ParseBodyEncoding(ContentType.CharSet);
		    }
		    catch (FormatException ex)
		    {
		        BodyEncoding = Encoding.UTF8;
		        if (_parsingErrorHandler != null)
		        {
                    _parsingErrorHandler.HandleParseError(new ParseError(ex, ContentType.CharSet, string.Format("On body encoding. Encoding set to {0}", BodyEncoding.EncodingName)));
		        }
		        else
		        {
                    throw;
		        }
		    }

			ParseBody(rawBody);
		}