001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *  http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing,
013     * software distributed under the License is distributed on an
014     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     * KIND, either express or implied.  See the License for the
016     * specific language governing permissions and limitations
017     * under the License.
018     */
019    
020    package org.apache.geronimo.javamail.store.pop3.connection;
021    
022    import java.io.ByteArrayInputStream;
023    
024    import org.apache.geronimo.javamail.store.pop3.POP3Constants;
025    
026    import org.apache.geronimo.mail.util.Base64;
027    
028    /**
029     * This class provides the basic implementation for the POP3Response.
030     * 
031     * @see org.apache.geronimo.javamail.store.pop3.POP3Response
032     * @version $Rev: 597135 $ $Date: 2007-11-21 11:26:57 -0500 (Wed, 21 Nov 2007) $
033     */
034    
035    public class POP3Response implements POP3Constants {
036    
037        private int status = ERR;
038    
039        private String firstLine;
040    
041        private byte[] data;
042    
043        POP3Response(int status, String firstLine, byte []data) {
044            this.status = status;
045            this.firstLine = firstLine;
046            this.data = data;
047        }
048    
049        public int getStatus() {
050            return status;
051        }
052        
053        public byte[] getData() {
054            return data; 
055        }
056    
057        public ByteArrayInputStream getContentStream() {
058            return new ByteArrayInputStream(data);
059        }
060    
061        public String getFirstLine() {
062            return firstLine;
063        }
064        
065        public boolean isError() {
066            return status == ERR; 
067        }
068        
069        public boolean isChallenge() {
070            return status == CHALLENGE; 
071        }
072        
073        /**
074         * Decode the message portion of a continuation challenge response.
075         * 
076         * @return The byte array containing the decoded data. 
077         */
078        public byte[] decodeChallengeResponse() 
079        {
080            // the challenge response is a base64 encoded string...
081            return Base64.decode(firstLine.trim()); 
082        }
083    
084    }
085