001 /*
002 * Copyright 2010 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package com.hs.mail.imap.server.codec;
017
018 import java.util.LinkedList;
019
020 import org.jboss.netty.buffer.ChannelBuffer;
021 import org.jboss.netty.buffer.ChannelBuffers;
022
023 import com.hs.mail.imap.parser.Token;
024
025 /**
026 * An IMAP message.
027 *
028 * @author Won Chul Doh
029 * @since Jan 22, 2010
030 *
031 */
032 public interface ImapMessage {
033
034 public String getCommand();
035
036 LinkedList<Token> getTokens();
037
038 /**
039 * Returns the content of this message. If there is no content, an
040 * {@link ChannelBuffers#EMPTY_BUFFER} is returned.
041 */
042 ChannelBuffer getLiteral();
043
044 /**
045 * Sets the content of this message. If {@code null} is specified, the
046 * content of this message will be set to
047 * {@link ChannelBuffers#EMPTY_BUFFER}.
048 */
049 void setLiteral(ChannelBuffer literal);
050
051 /**
052 * Returns the length of the content. Please note that this value is
053 * not retrieved from {@link #getContent()} but from the
054 * {@code "Content-Length"} header, and thus they are independent from each
055 * other.
056 *
057 * @return the content length or {@code 0} if this message does not have
058 * the {@code "Content-Length"} header
059 */
060 long getLiteralLength();
061
062 void setLiteralLength(long literalLength);
063
064 /**
065 * Returns {@code true} if and only if we need to send command continuation
066 * request before reading literal data.
067 */
068 boolean isNeedContinuationRequest();
069
070 }