196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**************************************************************** 296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one * 396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * or more contributor license agreements. See the NOTICE file * 496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed with this work for additional information * 596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * regarding copyright ownership. The ASF licenses this file * 696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * to you under the Apache License, Version 2.0 (the * 796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * "License"); you may not use this file except in compliance * 896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * with the License. You may obtain a copy of the License at * 996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * * 1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * * 1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, * 1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * software distributed under the License is distributed on an * 1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * KIND, either express or implied. See the License for the * 1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * specific language governing permissions and limitations * 1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * under the License. * 1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ****************************************************************/ 1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage org.apache.james.mime4j.message; 2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.IOException; 2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.InputStream; 2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.OutputStream; 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.util.Stack; 2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.james.mime4j.BodyDescriptor; 2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.james.mime4j.ContentHandler; 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.james.mime4j.MimeStreamParser; 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.james.mime4j.decoder.Base64InputStream; 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.james.mime4j.decoder.QuotedPrintableInputStream; 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.james.mime4j.field.Field; 3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.james.mime4j.field.UnstructuredField; 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 378546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy * Represents a MIME message. The following code parses a stream into a 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <code>Message</code> object. 398546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy * 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <pre> 4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Message msg = new Message(new BufferedInputStream( 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * new FileInputStream("mime.msg"))); 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * </pre> 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * 458546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy * 468546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy * 4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Id: Message.java,v 1.3 2004/10/02 12:41:11 ntherning Exp $ 4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class Message extends Entity implements Body { 508546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Creates a new empty <code>Message</code>. 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public Message() { 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 568546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Parses the specified MIME message stream into a <code>Message</code> 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * instance. 608546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy * 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @param is the stream to parse. 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @throws IOException on I/O errors. 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public Message(InputStream is) throws IOException { 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project MimeStreamParser parser = new MimeStreamParser(); 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project parser.setContentHandler(new MessageBuilder()); 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project parser.parse(is); 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 708546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Gets the <code>Subject</code> field. 738546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy * 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @return the <code>Subject</code> field or <code>null</code> if it 7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * doesn't exist. 7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public UnstructuredField getSubject() { 7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return (UnstructuredField) getHeader().getField(Field.SUBJECT); 7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 828546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy * 8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.message.Entity#writeTo(java.io.OutputStream) 8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 858546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy @Override 8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void writeTo(OutputStream out) throws IOException { 8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getHeader().writeTo(out); 8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Body body = getBody(); 9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (body instanceof Multipart) { 9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Multipart mp = (Multipart) body; 9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mp.writeTo(out); 9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } else { 9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project body.writeTo(out); 9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 978546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 988546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private class MessageBuilder implements ContentHandler { 1008546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy private Stack<Object> stack = new Stack<Object>(); 1018546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public MessageBuilder() { 10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1048546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private void expect(Class c) { 10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (!c.isInstance(stack.peek())) { 10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throw new IllegalStateException("Internal stack error: " 10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project + "Expected '" + c.getName() + "' found '" 10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project + stack.peek().getClass().getName() + "'"); 11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1128546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#startMessage() 11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void startMessage() { 11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (stack.isEmpty()) { 11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project stack.push(Message.this); 11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } else { 12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Entity.class); 12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Message m = new Message(); 12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ((Entity) stack.peek()).setBody(m); 12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project stack.push(m); 12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1268546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#endMessage() 12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void endMessage() { 13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Message.class); 13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project stack.pop(); 13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1348546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#startHeader() 13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void startHeader() { 13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project stack.push(new Header()); 14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1418546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#field(java.lang.String) 14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void field(String fieldData) { 14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Header.class); 14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ((Header) stack.peek()).addField(Field.parse(fieldData)); 14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1498546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#endHeader() 15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void endHeader() { 15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Header.class); 15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Header h = (Header) stack.pop(); 15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Entity.class); 15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ((Entity) stack.peek()).setHeader(h); 15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1598546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#startMultipart(org.apache.james.mime4j.BodyDescriptor) 16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void startMultipart(BodyDescriptor bd) { 16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Entity.class); 1658546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Entity e = (Entity) stack.peek(); 16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Multipart multiPart = new Multipart(); 16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project e.setBody(multiPart); 16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project stack.push(multiPart); 17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1718546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#body(org.apache.james.mime4j.BodyDescriptor, java.io.InputStream) 17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void body(BodyDescriptor bd, InputStream is) throws IOException { 17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Entity.class); 1778546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String enc = bd.getTransferEncoding(); 17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if ("base64".equals(enc)) { 18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project is = new Base64InputStream(is); 18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } else if ("quoted-printable".equals(enc)) { 18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project is = new QuotedPrintableInputStream(is); 18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1848546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Body body = null; 18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (bd.getMimeType().startsWith("text/")) { 18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project body = new MemoryTextBody(is, bd.getCharset()); 18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } else { 18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project body = new MemoryBinaryBody(is); 19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1918546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ((Entity) stack.peek()).setBody(body); 19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 1948546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 19596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#endMultipart() 19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void endMultipart() { 19996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project stack.pop(); 20096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 2018546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 20296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 20396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#startBodyPart() 20496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void startBodyPart() { 20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Multipart.class); 2078546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project BodyPart bodyPart = new BodyPart(); 20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ((Multipart) stack.peek()).addBodyPart(bodyPart); 21096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project stack.push(bodyPart); 21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 2128546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#endBodyPart() 21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void endBodyPart() { 21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(BodyPart.class); 21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project stack.pop(); 21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 2208546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#epilogue(java.io.InputStream) 22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void epilogue(InputStream is) throws IOException { 22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Multipart.class); 22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project StringBuffer sb = new StringBuffer(); 22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int b; 22896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project while ((b = is.read()) != -1) { 22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project sb.append((char) b); 23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ((Multipart) stack.peek()).setEpilogue(sb.toString()); 23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 2338546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#preamble(java.io.InputStream) 23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 23796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void preamble(InputStream is) throws IOException { 23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project expect(Multipart.class); 23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project StringBuffer sb = new StringBuffer(); 24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project int b; 24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project while ((b = is.read()) != -1) { 24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project sb.append((char) b); 24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ((Multipart) stack.peek()).setPreamble(sb.toString()); 24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 2468546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy 24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * TODO: Implement me 2498546e21e1e127845071c595beda16fc23eb0f58eTodd Kennedy * 25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @see org.apache.james.mime4j.ContentHandler#raw(java.io.InputStream) 25196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void raw(InputStream is) throws IOException { 25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project throw new UnsupportedOperationException("Not supported"); 25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 258