正在显示
1 个修改的文件
包含
109 行增加
和
0 行删除
src/server/spserver/spsmtp.hpp
0 → 100644
1 | +/* | ||
2 | + * Copyright 2009 Stephen Liu | ||
3 | + * For license terms, see the file COPYING along with this library. | ||
4 | + */ | ||
5 | + | ||
6 | +#ifndef __spsmtp_hpp__ | ||
7 | +#define __spsmtp_hpp__ | ||
8 | + | ||
9 | +#include "sphandler.hpp" | ||
10 | + | ||
11 | +class SP_Buffer; | ||
12 | +class SP_ArrayList; | ||
13 | + | ||
14 | +class SP_SmtpHandler { | ||
15 | +public: | ||
16 | + virtual ~SP_SmtpHandler(); | ||
17 | + | ||
18 | + virtual void error(); | ||
19 | + | ||
20 | + virtual void timeout(); | ||
21 | + | ||
22 | + enum { | ||
23 | + eAccept = 0, // command accepted | ||
24 | + eReject = -1, // command rejected | ||
25 | + eClose = -2 // force to close the connection | ||
26 | + }; | ||
27 | + | ||
28 | + virtual int welcome( const char * clientIP, const char * serverIP, SP_Buffer * reply ); | ||
29 | + | ||
30 | + virtual int help( const char * args, SP_Buffer * reply ); | ||
31 | + | ||
32 | + virtual int helo( const char * args, SP_Buffer * reply ); | ||
33 | + | ||
34 | + virtual int ehlo( const char * args, SP_Buffer * reply ); | ||
35 | + | ||
36 | + /** | ||
37 | + * Called after the AUTH LOGIN during a SMTP exchange. | ||
38 | + * | ||
39 | + * @param user is the encoded username | ||
40 | + * @param pass is the encoded password | ||
41 | + */ | ||
42 | + virtual int auth( const char * user, const char * pass, SP_Buffer * reply ); | ||
43 | + | ||
44 | + virtual int noop( const char * args, SP_Buffer * reply ); | ||
45 | + | ||
46 | + /** | ||
47 | + * Called first, after the MAIL FROM during a SMTP exchange. | ||
48 | + * | ||
49 | + * @param args is the args of the MAIL FROM | ||
50 | + */ | ||
51 | + virtual int from( const char * args, SP_Buffer * reply ) = 0; | ||
52 | + | ||
53 | + /** | ||
54 | + * Called once for every RCPT TO during a SMTP exchange. | ||
55 | + * This will occur after a from() call. | ||
56 | + * | ||
57 | + * @param args is the args of the RCPT TO | ||
58 | + */ | ||
59 | + virtual int rcpt( const char * args, SP_Buffer * reply ) = 0; | ||
60 | + | ||
61 | + /** | ||
62 | + * Called when the DATA part of the SMTP exchange begins. Will | ||
63 | + * only be called if at least one recipient was accepted. | ||
64 | + * | ||
65 | + * @param data will be the smtp data stream, stripped of any extra '.' chars | ||
66 | + */ | ||
67 | + virtual int data( const char * data, SP_Buffer * reply ) = 0; | ||
68 | + | ||
69 | + /** | ||
70 | + * This method is called whenever a RSET command is sent. It should | ||
71 | + * be used to clean up any pending deliveries. | ||
72 | + */ | ||
73 | + virtual int rset( SP_Buffer * reply ) = 0; | ||
74 | +}; | ||
75 | + | ||
76 | +class SP_SmtpHandlerList { | ||
77 | +public: | ||
78 | + SP_SmtpHandlerList(); | ||
79 | + ~SP_SmtpHandlerList(); | ||
80 | + | ||
81 | + int getCount(); | ||
82 | + void append( SP_SmtpHandler * handler ); | ||
83 | + SP_SmtpHandler * getItem( int index ); | ||
84 | + | ||
85 | +private: | ||
86 | + SP_ArrayList * mList; | ||
87 | +}; | ||
88 | + | ||
89 | +class SP_SmtpHandlerFactory { | ||
90 | +public: | ||
91 | + virtual ~SP_SmtpHandlerFactory(); | ||
92 | + | ||
93 | + virtual SP_SmtpHandler * create() const = 0; | ||
94 | +}; | ||
95 | + | ||
96 | +class SP_SmtpHandlerAdapterFactory : public SP_HandlerFactory { | ||
97 | +public: | ||
98 | + SP_SmtpHandlerAdapterFactory( SP_SmtpHandlerFactory * factory ); | ||
99 | + | ||
100 | + virtual ~SP_SmtpHandlerAdapterFactory(); | ||
101 | + | ||
102 | + virtual SP_Handler * create() const; | ||
103 | + | ||
104 | +private: | ||
105 | + SP_SmtpHandlerFactory * mFactory; | ||
106 | +}; | ||
107 | + | ||
108 | +#endif | ||
109 | + |
请
注册
或
登录
后发表评论