/// <summary> /// Parses MIME entity body from the specified reader. /// </summary> /// <param name="reader">Body reader from where to parse body.</param> /// <param name="owner">Specifies if body will be stream owner.</param> /// <returns>Returns true if this is last boundary in the message or in multipart "body parts".</returns> internal override void ParseFromReader(LineReader reader, bool owner) { // For multipart we need todo new limiting(limits to specified boundary) reader. _MIME_MultipartReader r = new _MIME_MultipartReader(reader, m_Boundary); while (r.Next()) { MIME_Entity bodyPart = new MIME_Entity(); bodyPart.Parse(r, owner); m_pParts.Add(bodyPart); } }
/// <summary> /// Internal body parsing. /// </summary> /// <param name="owner">Owner MIME entity.</param> /// <param name="mediaType">MIME media type. For example: text/plain.</param> /// <param name="stream">Stream from where to read body.</param> /// <param name="body">Multipart body instance.</param> /// <exception cref="ArgumentNullException">Is raised when <b>stream</b>, <b>mediaType</b>, <b>stream</b> or <b>body</b> is null reference.</exception> /// <exception cref="ParseException">Is raised when any parsing errors.</exception> protected static void ParseInternal(MIME_Entity owner, string mediaType, SmartStream stream, MIME_b_Multipart body) { if (owner == null) { throw new ArgumentNullException("owner"); } if (mediaType == null) { throw new ArgumentNullException("mediaType"); } if (stream == null) { throw new ArgumentNullException("stream"); } if (owner.ContentType == null || owner.ContentType.Param_Boundary == null) { throw new ParseException("Multipart entity has not required 'boundary' parameter."); } if (body == null) { throw new ArgumentNullException("body"); } _MultipartReader multipartReader = new _MultipartReader(stream, owner.ContentType.Param_Boundary); while (multipartReader.Next()) { MIME_Entity entity = new MIME_Entity(); entity.Parse(new SmartStream(multipartReader, false), Encoding.UTF8, body.DefaultBodyPartContentType); body.m_pBodyParts.Add(entity); entity.SetParent(owner); } body.m_TextPreamble = multipartReader.TextPreamble; body.m_TextEpilogue = multipartReader.TextEpilogue; body.BodyParts.SetModified(false); }
/// <summary> /// Internal body parsing. /// </summary> /// <param name="owner">Owner MIME entity.</param> /// <param name="mediaType">MIME media type. For example: text/plain.</param> /// <param name="stream">Stream from where to read body.</param> /// <param name="body">Multipart body instance.</param> /// <exception cref="ArgumentNullException">Is raised when <b>stream</b>, <b>mediaType</b>, <b>stream</b> or <b>body</b> is null reference.</exception> /// <exception cref="ParseException">Is raised when any parsing errors.</exception> protected static void ParseInternal(MIME_Entity owner,string mediaType,SmartStream stream,MIME_b_Multipart body) { if(owner == null){ throw new ArgumentNullException("owner"); } if(mediaType == null){ throw new ArgumentNullException("mediaType"); } if(stream == null){ throw new ArgumentNullException("stream"); } if(owner.ContentType == null || owner.ContentType.Param_Boundary == null){ throw new ParseException("Multipart entity has not required 'boundary' parameter."); } if(body == null){ throw new ArgumentNullException("body"); } _MultipartReader multipartReader = new _MultipartReader(stream,owner.ContentType.Param_Boundary); while(multipartReader.Next()){ MIME_Entity entity = new MIME_Entity(); entity.Parse(new SmartStream(multipartReader,false),Encoding.UTF8,body.DefaultBodyPartContentType); body.m_pBodyParts.Add(entity); entity.SetParent(owner); } body.m_TextPreamble = multipartReader.TextPreamble; body.m_TextEpilogue = multipartReader.TextEpilogue; body.BodyParts.SetModified(false); }
/// <summary> /// Parses MIME entity body from the specified reader. /// </summary> /// <param name="reader">Body reader from where to parse body.</param> /// <param name="owner">Specifies if body will be stream owner.</param> /// <returns>Returns true if this is last boundary in the message or in multipart "body parts".</returns> internal override void ParseFromReader(LineReader reader,bool owner) { // For multipart we need todo new limiting(limits to specified boundary) reader. _MIME_MultipartReader r = new _MIME_MultipartReader(reader,m_Boundary); while(r.Next()){ MIME_Entity bodyPart = new MIME_Entity(); bodyPart.Parse(r,owner); m_pParts.Add(bodyPart); } }