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.smtp;
017    
018    import java.io.File;
019    import java.io.PrintStream;
020    import java.net.InetAddress;
021    import java.util.Random;
022    
023    import com.hs.mail.container.config.Config;
024    import com.hs.mail.container.server.socket.TcpTransport;
025    import com.hs.mail.smtp.message.MailAddress;
026    import com.hs.mail.smtp.message.SmtpMessage;
027    
028    /**
029     * 
030     * @author Won Chul Doh
031     * @since May 30, 2010
032     *
033     */
034    public class SmtpSession {
035            
036        /**
037         * Static Random instance used to generate SMTP ids
038         */
039        private final static Random random = new Random();
040    
041        private TcpTransport transport;
042            private InetAddress clientAddress;
043            private String clientDomain;
044            private String protocol;
045            private String smtpID;
046            private long authID = -1;
047            private boolean debug = false;
048            private PrintStream out;        // debug output stream 
049            private SmtpMessage message;
050    
051            public SmtpSession(TcpTransport trans) {
052                    this.transport = trans;
053                    this.clientAddress = trans.getRemoteAddress();
054                    this.smtpID = random.nextInt(1024) + "";
055            }
056            
057            public void setDebug(boolean debug) {
058                    this.debug = debug;
059            }
060            
061            public synchronized void setDebugOut(PrintStream out) {
062                    this.out = out;
063            }
064            
065            public synchronized PrintStream getDebugOut() {
066                    if (out == null)
067                            return System.out;
068                    else
069                            return out;
070            }
071    
072        public TcpTransport getTransport() {
073                    return transport;
074            }
075            
076            public InetAddress getClientAddress() {
077                    return clientAddress;
078            }
079    
080            public String getRemoteIP() {
081                    return clientAddress.getHostAddress();
082            }
083    
084            public String getRemoteHost() {
085                    return clientAddress.getHostName();
086            }
087    
088            public String getClientDomain() {
089                    return clientDomain;
090            }
091    
092            public void setClientDomain(String domain) {
093                    this.clientDomain = domain;
094            }
095            
096            public String getProtocol() {
097                    return protocol;
098            }
099            
100            public void setProtocol(String protocol) {
101                    this.protocol = protocol;
102            }
103            
104            public String getSessionID() {
105                    return smtpID;
106            }
107            
108            public long getAuthID() {
109                    return authID;
110            }
111    
112            public void setAuthID(long authID) {
113                    this.authID = authID;
114            }
115    
116            public SmtpMessage getMessage() {
117                    return message;
118            }
119    
120            public void setMessage(SmtpMessage message) {
121                    this.message = message;
122            }
123    
124            public void createSmtpMessage(MailAddress from) {
125                    this.message = new SmtpMessage(from);
126            }
127            
128            public void writeResponse(String response) {
129                    transport.println(response);
130                    if (debug)
131                            getDebugOut().println(response);
132            }
133            
134    }