Dependents: SimpleLCDClock readCard2Twitter_http AnalogClock_StepperMotor_NTP ServoCamV1
services/email/smtp/smtpClient.h
- Committer:
- donatien
- Date:
- 2010-05-24
- Revision:
- 0:a2dd0ba6cd2d
- Child:
- 1:7043cc0db03c
File content as of revision 0:a2dd0ba6cd2d:
#ifndef SMTP_CLIENT_H #define SMTP_CLIENT_H class EmailMessage; #include "if/net/net.h" #include "api/TcpSocket.h" #include "../emailMessage.h" #include "mbed.h" #define SMTP_REQUEST_TIMEOUT 5000 enum SmtpResult { SMTP_OK, SMTP_PRTCL, //Protocol error SMTP_TIMEOUT, //Connection timeout SMTP_DISC //Disconnected }; class SmtpClient /*: public NetService*/ { public: SmtpClient(); virtual ~SmtpClient(); void setHost(const Host& host); void send(EmailMessage* pMessage); class CDummy; template<class T> //Linker bug : Must be defined here :( void setOnResult( T* pItem, void (T::*pMethod)(SmtpResult) ) { m_pCbItem = (CDummy*) pItem; m_pCbMeth = (void (CDummy::*)(SmtpResult)) pMethod; } void init(); //Create and setup socket if needed void close(); private: int rc(char* buf); //Return code void process(bool moreData); //Main state-machine void setTimeout(int ms); void resetTimeout(); void onTimeout(); //Connection has timed out void onTcpSocketEvent(TcpSocketEvent e); void onResult(SmtpResult r); //Called when exchange completed or on failure EmailMessage* m_pMessage; TcpSocket* m_pTcpSocket; enum SmtpStep { SMTP_HELLO, SMTP_FROM, SMTP_TO, SMTP_DATA, SMTP_BODY, SMTP_BODYMORE, SMTP_EOF, SMTP_BYE }; SmtpStep m_nextState; CDummy* m_pCbItem; void (CDummy::*m_pCbMeth)(SmtpResult); Timeout m_watchdog; int m_timeout; int m_posInMsg; bool m_closed; Host m_host; }; #endif