private void encodeMultipart(ImapResponseComposer composer, Structure structure, final String subType, final boolean includeExtensions, ImapSession session) throws IOException { composer.openParen(); for (Iterator<Structure> it = structure.parts(); it.hasNext();) { final Structure part = it.next(); encodeStructure(composer, part, includeExtensions, true, session); } composer.quoteUpperCaseAscii(subType); if (includeExtensions) { final List<String> languages = structure.getLanguages(); nillableQuotes(composer, structure.getParameters()); bodyFldDsp(structure, composer, session); nillableQuotes(composer, languages); nillableQuote(composer, structure.getLocation()); } composer.closeParen(); }
private void encodeStructure(final ImapResponseComposer composer, final Structure structure, final boolean includeExtensions, final String mediaType, final String subType, boolean isInnerPart, ImapSession session) throws IOException { // // Workaround for broken clients // See IMAP-91 // final boolean includeOptionalExtensions = includeExtensions && !neverAddBodyStructureExtensions; if (isInnerPart) { composer.skipNextSpace(); } if (ImapConstants.MIME_TYPE_MULTIPART.equalsIgnoreCase(mediaType)) { encodeMultipart(composer, structure, subType, includeOptionalExtensions, session); } else { if (ImapConstants.MIME_TYPE_MESSAGE.equalsIgnoreCase(mediaType) && ImapConstants.MIME_SUBTYPE_RFC822.equalsIgnoreCase(subType)) { encodeRfc822Message(composer, structure, mediaType, subType, includeOptionalExtensions, session); } else { encodeBasic(composer, structure, includeOptionalExtensions, mediaType, subType, session); } } }
protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { if (acceptableMessage instanceof FetchResponse) { final FetchResponse fetchResponse = (FetchResponse) acceptableMessage; final long messageNumber = fetchResponse.getMessageNumber(); composer.untagged().message(messageNumber).message(ImapConstants.FETCH_COMMAND_NAME).openParen(); encodeModSeq(composer, fetchResponse); encodeFlags(composer, fetchResponse); encodeInternalDate(composer, fetchResponse); encodeSize(composer, fetchResponse); encodeEnvelope(composer, fetchResponse); encodeBody(composer, fetchResponse.getBody(), session); encodeBodyStructure(composer, fetchResponse.getBodyStructure(), session); encodeUid(composer, fetchResponse); encodeBodyElements(composer, fetchResponse.getElements()); composer.closeParen().end(); } }
private void encodeOnePartBodyExtensions(final ImapResponseComposer composer, final Structure structure, ImapSession session) throws IOException { final String md5 = structure.getMD5(); final List<String> languages = structure.getLanguages(); final String location = structure.getLocation(); nillableQuote(composer, md5); bodyFldDsp(structure, composer, session); nillableQuotes(composer, languages); nillableQuote(composer, location); }
private void encodeBasic(final ImapResponseComposer composer, final Structure structure, final boolean includeExtensions, final String mediaType, final String subType, ImapSession session) throws IOException { if (ImapConstants.MIME_TYPE_TEXT.equalsIgnoreCase(mediaType)) { final long lines = structure.getLines(); encodeBodyFields(composer, structure, mediaType, subType); composer.message(lines); } else { encodeBodyFields(composer, structure, mediaType, subType); } if (includeExtensions) { encodeOnePartBodyExtensions(composer, structure, session); } composer.closeParen(); }
private void encodeRfc822Message(ImapResponseComposer composer, Structure structure, String mediaType, String subType, boolean includeExtensions, ImapSession session) throws IOException { final long lines = structure.getLines(); final FetchResponse.Envelope envelope = structure.getEnvelope(); final FetchResponse.Structure embeddedStructure = structure.getBody(); encodeBodyFields(composer, structure, mediaType, subType); encodeEnvelope(composer, envelope, false); encodeStructure(composer, embeddedStructure, includeExtensions, false, session); composer.message(lines); if (includeExtensions) { encodeOnePartBodyExtensions(composer, structure, session); } composer.closeParen(); }
@Before public void setUp() throws Exception { mockNextEncoder = mock(ImapEncoder.class); encoder = new FetchResponseEncoder(mockNextEncoder, true); flags = new Flags(Flags.Flag.DELETED); stubStructure = mock(FetchResponse.Structure.class); }
private void encodeEnvelope(ImapResponseComposer composer, FetchResponse.Envelope envelope, boolean prefixWithName) throws IOException { if (envelope != null) { final String date = envelope.getDate(); final String subject = envelope.getSubject(); final FetchResponse.Envelope.Address[] from = envelope.getFrom(); final FetchResponse.Envelope.Address[] sender = envelope.getSender(); final FetchResponse.Envelope.Address[] replyTo = envelope.getReplyTo(); final FetchResponse.Envelope.Address[] to = envelope.getTo(); final FetchResponse.Envelope.Address[] cc = envelope.getCc(); final FetchResponse.Envelope.Address[] bcc = envelope.getBcc(); final String inReplyTo = envelope.getInReplyTo(); final String messageId = envelope.getMessageId(); if (prefixWithName) { composer.message(ENVELOPE); } composer.openParen(); nillableQuote(composer, date); nillableQuote(composer, subject); encodeAddresses(composer, from); encodeAddresses(composer, sender); encodeAddresses(composer, replyTo); encodeAddresses(composer, to); encodeAddresses(composer, cc); encodeAddresses(composer, bcc); nillableQuote(composer, inReplyTo); nillableQuote(composer, messageId); composer.closeParen(); } }
private void encodeAddresses(ImapResponseComposer composer, FetchResponse.Envelope.Address[] addresses) throws IOException { if (addresses == null || addresses.length == 0) { composer.nil(); } else { composer.openParen(); for (FetchResponse.Envelope.Address address : addresses) { encodeAddress(composer, address); } composer.closeParen(); } }
private ImapResponseComposer bodyFldDsp(final Structure structure, final ImapResponseComposer composer, ImapSession session) throws IOException { final String disposition = structure.getDisposition(); if (disposition == null) { composer.nil(); } else { composer.openParen(); composer.quote(disposition); final Map<String, String> params = structure.getDispositionParams(); bodyFldParam(params, composer, session); composer.closeParen(); } return composer; }
private void encodeRfc822Message(ImapResponseComposer composer, Structure structure, final String mediaType, final String subType, final boolean includeExtensions, ImapSession session) throws IOException { final long lines = structure.getLines(); final FetchResponse.Envelope envelope = structure.getEnvelope(); final FetchResponse.Structure embeddedStructure = structure.getBody(); encodeBodyFields(composer, structure, mediaType, subType); encodeEnvelope(composer, envelope, false); encodeStructure(composer, embeddedStructure, includeExtensions, false, session); composer.message(lines); if (includeExtensions) { encodeOnePartBodyExtensions(composer, structure, session); } composer.closeParen(); }
private void encodeOnePartBodyExtensions(ImapResponseComposer composer, Structure structure, ImapSession session) throws IOException { final String md5 = structure.getMD5(); final List<String> languages = structure.getLanguages(); final String location = structure.getLocation(); nillableQuote(composer, md5); bodyFldDsp(structure, composer, session); nillableQuotes(composer, languages); nillableQuote(composer, location); }
@Before public void setUp() throws Exception { mockNextEncoder = mock(ImapEncoder.class); encoder = new FetchResponseEncoder(mockNextEncoder, false); flags = new Flags(Flags.Flag.DELETED); }
private void encodeBasic(ImapResponseComposer composer, Structure structure, boolean includeExtensions, String mediaType, String subType, ImapSession session) throws IOException { if (ImapConstants.MIME_TYPE_TEXT.equalsIgnoreCase(mediaType)) { final long lines = structure.getLines(); encodeBodyFields(composer, structure, mediaType, subType); composer.message(lines); } else { encodeBodyFields(composer, structure, mediaType, subType); } if (includeExtensions) { encodeOnePartBodyExtensions(composer, structure, session); } composer.closeParen(); }
private void encodeEnvelope(final ImapResponseComposer composer, final FetchResponse.Envelope envelope, boolean prefixWithName) throws IOException { if (envelope != null) { final String date = envelope.getDate(); final String subject = envelope.getSubject(); final FetchResponse.Envelope.Address[] from = envelope.getFrom(); final FetchResponse.Envelope.Address[] sender = envelope.getSender(); final FetchResponse.Envelope.Address[] replyTo = envelope.getReplyTo(); final FetchResponse.Envelope.Address[] to = envelope.getTo(); final FetchResponse.Envelope.Address[] cc = envelope.getCc(); final FetchResponse.Envelope.Address[] bcc = envelope.getBcc(); final String inReplyTo = envelope.getInReplyTo(); final String messageId = envelope.getMessageId(); if (prefixWithName) { composer.message(ENVELOPE); } composer.openParen(); nillableQuote(composer, date); nillableQuote(composer, subject); encodeAddresses(composer, from); encodeAddresses(composer, sender); encodeAddresses(composer, replyTo); encodeAddresses(composer, to); encodeAddresses(composer, cc); encodeAddresses(composer, bcc); nillableQuote(composer, inReplyTo); nillableQuote(composer, messageId); composer.closeParen(); } }
private void encodeAddresses(final ImapResponseComposer composer, final FetchResponse.Envelope.Address[] addresses) throws IOException { if (addresses == null || addresses.length == 0) { composer.nil(); } else { composer.openParen(); final int length = addresses.length; for (int i = 0; i < length; i++) { final FetchResponse.Envelope.Address address = addresses[i]; encodeAddress(composer, address); } composer.closeParen(); } }
private ImapResponseComposer bodyFldDsp(Structure structure, ImapResponseComposer composer, ImapSession session) throws IOException { final String disposition = structure.getDisposition(); if (disposition == null) { composer.nil(); } else { composer.openParen(); composer.quote(disposition); final Map<String, String> params = structure.getDispositionParams(); bodyFldParam(params, composer, session); composer.closeParen(); } return composer; }
@Override protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { if (acceptableMessage instanceof FetchResponse) { final FetchResponse fetchResponse = (FetchResponse) acceptableMessage; final long messageNumber = fetchResponse.getMessageNumber(); composer.untagged().message(messageNumber).message(ImapConstants.FETCH_COMMAND_NAME).openParen(); encodeModSeq(composer, fetchResponse); encodeFlags(composer, fetchResponse); encodeInternalDate(composer, fetchResponse); encodeSize(composer, fetchResponse); encodeEnvelope(composer, fetchResponse); encodeBody(composer, fetchResponse.getBody(), session); encodeBodyStructure(composer, fetchResponse.getBodyStructure(), session); encodeUid(composer, fetchResponse); encodeBodyElements(composer, fetchResponse.getElements()); composer.closeParen().end(); } }
private void encodeMultipart(ImapResponseComposer composer, Structure structure, String subType, boolean includeExtensions, ImapSession session) throws IOException { composer.openParen(); for (Iterator<Structure> it = structure.parts(); it.hasNext();) { final Structure part = it.next(); encodeStructure(composer, part, includeExtensions, true, session); } composer.quoteUpperCaseAscii(subType); if (includeExtensions) { final List<String> languages = structure.getLanguages(); nillableQuotes(composer, structure.getParameters()); bodyFldDsp(structure, composer, session); nillableQuotes(composer, languages); nillableQuote(composer, structure.getLocation()); } composer.closeParen(); }
private void encodeStructure(ImapResponseComposer composer, Structure structure, boolean includeExtensions, String mediaType, String subType, boolean isInnerPart, ImapSession session) throws IOException { // // Workaround for broken clients // See IMAP-91 // final boolean includeOptionalExtensions = includeExtensions && !neverAddBodyStructureExtensions; if (isInnerPart) { composer.skipNextSpace(); } if (ImapConstants.MIME_TYPE_MULTIPART.equalsIgnoreCase(mediaType)) { encodeMultipart(composer, structure, subType, includeOptionalExtensions, session); } else { if (ImapConstants.MIME_TYPE_MESSAGE.equalsIgnoreCase(mediaType) && ImapConstants.MIME_SUBTYPE_RFC822.equalsIgnoreCase(subType)) { encodeRfc822Message(composer, structure, mediaType, subType, includeOptionalExtensions, session); } else { encodeBasic(composer, structure, includeOptionalExtensions, mediaType, subType, session); } } }