BasicSMTP.h

Go to the documentation of this file.
00001 /*
00002  * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By
00003  * downloading, copying, installing or using the software you agree to
00004  * this license. If you do not agree to this license, do not download,
00005  * install, copy or use the software.
00006  * 
00007  * Intel Open Source License 
00008  * 
00009  * Copyright (c) 2005 Intel Corporation. All rights reserved. 
00010  * 
00011  * Redistribution and use in source and binary forms, with or without
00012  * modification, are permitted provided that the following conditions are
00013  * met:
00014  * 
00015  *   Redistributions of source code must retain the above copyright
00016  *   notice, this list of conditions and the following disclaimer.
00017  * 
00018  *   Redistributions in binary form must reproduce the above copyright
00019  *   notice, this list of conditions and the following disclaimer in the
00020  *   documentation and/or other materials provided with the distribution.
00021  * 
00022  *   Neither the name of the Intel Corporation nor the names of its
00023  *   contributors may be used to endorse or promote products derived from
00024  *   this software without specific prior written permission.
00025  *  
00026  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00027  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00028  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00029  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR
00030  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00031  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00032  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00033  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00034  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00035  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00036  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00037  */
00038 #ifndef _OASYS_BASIC_SMTP_H_
00039 #define _OASYS_BASIC_SMTP_H_
00040 
00041 #include "SMTP.h"
00042 #include "util/StringUtils.h"
00043 
00044 namespace oasys {
00045 
00046 //----------------------------------------------------------------------------
00050 class BasicSMTPMsg {
00051 public:
00052     std::string              from_;
00053     std::vector<std::string> to_;
00054     std::string              msg_;
00055 
00056     BasicSMTPMsg() {}
00057     BasicSMTPMsg(const std::string& from,
00058                  const std::string& to,
00059                  const std::string& msg)
00060     {
00061         from_ = from;
00062         tokenize(to, ", ", &to_);
00063         msg_  = msg;
00064     }
00065     
00066     bool valid() {
00067         return (from_.size() > 0 &&
00068                 to_.size()   > 0 &&
00069                 msg_.size()  > 0);
00070     }
00071     
00072     void clear() {
00073         from_.clear();
00074         to_.clear();
00075         msg_.clear();
00076     }
00077 };
00078 
00079 //----------------------------------------------------------------------------
00084 class BasicSMTPSender : public SMTPSender {
00085 public:
00086     BasicSMTPSender(const std::string& helo_domain, BasicSMTPMsg* msg);
00087     virtual ~BasicSMTPSender() {}
00088     
00089 protected:
00091     void get_HELO_domain(std::string* domain);
00092     void get_MAIL_from(std::string* from);
00093     void get_RCPT_list(std::vector<std::string>* to);
00094     void get_DATA(const std::string** data);
00095     int smtp_error(int code);
00097 
00098     std::string   helo_domain_;
00099     BasicSMTPMsg* msg_;
00100 };
00101 
00102 //----------------------------------------------------------------------------
00106 class BasicSMTPHandler : public SMTPHandler {
00107 public:
00108     BasicSMTPHandler();
00109 
00111     int smtp_HELO(const char* domain);
00112     int smtp_MAIL(const char* from);
00113     int smtp_RCPT(const char* to);
00114     int smtp_DATA_begin();
00115     int smtp_DATA_line(const char* line);
00116     int smtp_DATA_end();
00117     int smtp_RSET();
00118     int smtp_QUIT();
00120 
00121     virtual void message_recvd(const BasicSMTPMsg& msg) = 0;
00122 
00123 private:
00125     BasicSMTPMsg cur_msg_;
00126 };
00127 
00128 } // namespace oasys 
00129 
00130 #endif /* _OASYS_BASIC_SMTP_H_ */

Generated on Fri Dec 22 14:47:57 2006 for DTN Reference Implementation by  doxygen 1.5.1