private void nextCurrent() throws IOException { if (rootPart != null) { if (writingHeaders) { writingHeaders = false; current = rootPart.getInputStream(); rootPart = null; } else { writingHeaders = true; bout.reset(); writer.append("--").append(boundary).append("\r\n"); writer.append("Content-Type: ").append(rootPart.getContentType()).append("\r\n"); writer.append("Content-ID: <").append(start).append(">\r\n\r\n"); writer.flush(); current = bout.createInputStream(); } } else { if (writingHeaders) { writingHeaders = false; current = att.getDataHandler().getInputStream(); } else if (atts.hasNext()) { att = atts.next(); writingHeaders = true; bout.reset(); writer.append("\r\n"); writer.append("--").append(boundary).append("\r\n"); Iterator<String> heads = att.getHeaderNames(); while (heads.hasNext()) { String s = heads.next(); writer.append(s).append(": ").append(att.getHeader(s)).append("\r\n"); } writer.append("\r\n"); writer.flush(); current = bout.createInputStream(); } } }
MultiPartDataSource(Message message, DataSource root) { atts = message.getAttachments().iterator(); String s = (String) message.get(Message.CONTENT_TYPE); boundary = findBoundary(s); start = findStart(s); if (!s.contains(boundary)) { s += "; boundary=\"" + boundary + "\""; } contentType = s; rootPart = root; try { writer = new OutputStreamWriter(bout, "ASCII"); writer.append("Content-Type: ").append(contentType).append("\r\n\r\n"); writer.flush(); current = bout.createInputStream(); } catch (Exception e) { // nothing } }