~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Nginx/mail/ngx_mail.h

Version: ~ [ nginx-0.8.20 ] ~ [ nginx-0.7.62 ] ~ [ nginx-0.6.39 ] ~

  1 
  2 /*
  3  * Copyright (C) Igor Sysoev
  4  */
  5 
  6 
  7 #ifndef _NGX_MAIL_H_INCLUDED_
  8 #define _NGX_MAIL_H_INCLUDED_
  9 
 10 
 11 #include <ngx_config.h>
 12 #include <ngx_core.h>
 13 #include <ngx_event.h>
 14 #include <ngx_event_connect.h>
 15 
 16 #if (NGX_MAIL_SSL)
 17 #include <ngx_mail_ssl_module.h>
 18 #endif
 19 
 20 
 21 
 22 typedef struct {
 23     void                  **main_conf;
 24     void                  **srv_conf;
 25 } ngx_mail_conf_ctx_t;
 26 
 27 
 28 typedef struct {
 29     u_char                  sockaddr[NGX_SOCKADDRLEN];
 30     socklen_t               socklen;
 31 
 32     /* server ctx */
 33     ngx_mail_conf_ctx_t    *ctx;
 34 
 35     unsigned                bind:1;
 36     unsigned                wildcard:1;
 37 #if (NGX_MAIL_SSL)
 38     unsigned                ssl:1;
 39 #endif
 40 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
 41     unsigned                ipv6only:2;
 42 #endif
 43 } ngx_mail_listen_t;
 44 
 45 
 46 typedef struct {
 47     ngx_mail_conf_ctx_t    *ctx;
 48     ngx_str_t               addr_text;
 49 #if (NGX_MAIL_SSL)
 50     ngx_uint_t              ssl;    /* unsigned   ssl:1; */
 51 #endif
 52 } ngx_mail_addr_conf_t;
 53 
 54 typedef struct {
 55     in_addr_t               addr;
 56     ngx_mail_addr_conf_t    conf;
 57 } ngx_mail_in_addr_t;
 58 
 59 
 60 #if (NGX_HAVE_INET6)
 61 
 62 typedef struct {
 63     struct in6_addr         addr6;
 64     ngx_mail_addr_conf_t    conf;
 65 } ngx_mail_in6_addr_t;
 66 
 67 #endif
 68 
 69 
 70 typedef struct {
 71     /* ngx_mail_in_addr_t or ngx_mail_in6_addr_t */
 72     void                   *addrs;
 73     ngx_uint_t              naddrs;
 74 } ngx_mail_port_t;
 75 
 76 
 77 typedef struct {
 78     int                     family;
 79     in_port_t               port;
 80     ngx_array_t             addrs;       /* array of ngx_mail_conf_addr_t */
 81 } ngx_mail_conf_port_t;
 82 
 83 
 84 typedef struct {
 85     struct sockaddr        *sockaddr;
 86     socklen_t               socklen;
 87 
 88     ngx_mail_conf_ctx_t    *ctx;
 89 
 90     unsigned                bind:1;
 91     unsigned                wildcard:1;
 92 #if (NGX_MAIL_SSL)
 93     unsigned                ssl:1;
 94 #endif
 95 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
 96     unsigned                ipv6only:2;
 97 #endif
 98 } ngx_mail_conf_addr_t;
 99 
100 
101 typedef struct {
102     ngx_array_t             servers;     /* ngx_mail_core_srv_conf_t */
103     ngx_array_t             listen;      /* ngx_mail_listen_t */
104 } ngx_mail_core_main_conf_t;
105 
106 
107 #define NGX_MAIL_POP3_PROTOCOL  0
108 #define NGX_MAIL_IMAP_PROTOCOL  1
109 #define NGX_MAIL_SMTP_PROTOCOL  2
110 
111 
112 typedef struct ngx_mail_protocol_s  ngx_mail_protocol_t;
113 
114 
115 typedef struct {
116     ngx_mail_protocol_t    *protocol;
117 
118     ngx_msec_t              timeout;
119     ngx_msec_t              resolver_timeout;
120 
121     ngx_flag_t              so_keepalive;
122 
123     ngx_str_t               server_name;
124 
125     u_char                 *file_name;
126     ngx_int_t               line;
127 
128     ngx_resolver_t         *resolver;
129 
130     /* server ctx */
131     ngx_mail_conf_ctx_t    *ctx;
132 } ngx_mail_core_srv_conf_t;
133 
134 
135 typedef enum {
136     ngx_pop3_start = 0,
137     ngx_pop3_user,
138     ngx_pop3_passwd,
139     ngx_pop3_auth_login_username,
140     ngx_pop3_auth_login_password,
141     ngx_pop3_auth_plain,
142     ngx_pop3_auth_cram_md5
143 } ngx_pop3_state_e;
144 
145 
146 typedef enum {
147     ngx_imap_start = 0,
148     ngx_imap_auth_login_username,
149     ngx_imap_auth_login_password,
150     ngx_imap_auth_plain,
151     ngx_imap_auth_cram_md5,
152     ngx_imap_login,
153     ngx_imap_user,
154     ngx_imap_passwd
155 } ngx_imap_state_e;
156 
157 
158 typedef enum {
159     ngx_smtp_start = 0,
160     ngx_smtp_auth_login_username,
161     ngx_smtp_auth_login_password,
162     ngx_smtp_auth_plain,
163     ngx_smtp_auth_cram_md5,
164     ngx_smtp_helo,
165     ngx_smtp_helo_xclient,
166     ngx_smtp_helo_from,
167     ngx_smtp_xclient,
168     ngx_smtp_xclient_from,
169     ngx_smtp_xclient_helo,
170     ngx_smtp_from,
171     ngx_smtp_to
172 } ngx_smtp_state_e;
173 
174 
175 typedef struct {
176     ngx_peer_connection_t   upstream;
177     ngx_buf_t              *buffer;
178 } ngx_mail_proxy_ctx_t;
179 
180 
181 typedef struct {
182     uint32_t                signature;         /* "MAIL" */
183 
184     ngx_connection_t       *connection;
185 
186     ngx_str_t               out;
187     ngx_buf_t              *buffer;
188 
189     void                  **ctx;
190     void                  **main_conf;
191     void                  **srv_conf;
192 
193     ngx_resolver_ctx_t     *resolver_ctx;
194 
195     ngx_mail_proxy_ctx_t   *proxy;
196 
197     ngx_uint_t              mail_state;
198 
199     unsigned                protocol:3;
200     unsigned                blocked:1;
201     unsigned                quit:1;
202     unsigned                quoted:1;
203     unsigned                backslash:1;
204     unsigned                no_sync_literal:1;
205     unsigned                starttls:1;
206     unsigned                esmtp:1;
207     unsigned                auth_method:3;
208     unsigned                auth_wait:1;
209 
210     ngx_str_t               login;
211     ngx_str_t               passwd;
212 
213     ngx_str_t               salt;
214     ngx_str_t               tag;
215     ngx_str_t               tagged_line;
216     ngx_str_t               text;
217 
218     ngx_str_t              *addr_text;
219     ngx_str_t               host;
220     ngx_str_t               smtp_helo;
221     ngx_str_t               smtp_from;
222     ngx_str_t               smtp_to;
223 
224     ngx_uint_t              command;
225     ngx_array_t             args;
226 
227     ngx_uint_t              login_attempt;
228 
229     /* used to parse POP3/IMAP/SMTP command */
230 
231     ngx_uint_t              state;
232     u_char                 *cmd_start;
233     u_char                 *arg_start;
234     u_char                 *arg_end;
235     ngx_uint_t              literal_len;
236 } ngx_mail_session_t;
237 
238 
239 typedef struct {
240     ngx_str_t              *client;
241     ngx_mail_session_t     *session;
242 } ngx_mail_log_ctx_t;
243 
244 
245 #define NGX_POP3_USER          1
246 #define NGX_POP3_PASS          2
247 #define NGX_POP3_CAPA          3
248 #define NGX_POP3_QUIT          4
249 #define NGX_POP3_NOOP          5
250 #define NGX_POP3_STLS          6
251 #define NGX_POP3_APOP          7
252 #define NGX_POP3_AUTH          8
253 #define NGX_POP3_STAT          9
254 #define NGX_POP3_LIST          10
255 #define NGX_POP3_RETR          11
256 #define NGX_POP3_DELE          12
257 #define NGX_POP3_RSET          13
258 #define NGX_POP3_TOP           14
259 #define NGX_POP3_UIDL          15
260 
261 
262 #define NGX_IMAP_LOGIN         1
263 #define NGX_IMAP_LOGOUT        2
264 #define NGX_IMAP_CAPABILITY    3
265 #define NGX_IMAP_NOOP          4
266 #define NGX_IMAP_STARTTLS      5
267 
268 #define NGX_IMAP_NEXT          6
269 
270 #define NGX_IMAP_AUTHENTICATE  7
271 
272 
273 #define NGX_SMTP_HELO          1
274 #define NGX_SMTP_EHLO          2
275 #define NGX_SMTP_AUTH          3
276 #define NGX_SMTP_QUIT          4
277 #define NGX_SMTP_NOOP          5
278 #define NGX_SMTP_MAIL          6
279 #define NGX_SMTP_RSET          7
280 #define NGX_SMTP_RCPT          8
281 #define NGX_SMTP_DATA          9
282 #define NGX_SMTP_VRFY          10
283 #define NGX_SMTP_EXPN          11
284 #define NGX_SMTP_HELP          12
285 #define NGX_SMTP_STARTTLS      13
286 
287 
288 #define NGX_MAIL_AUTH_PLAIN             0
289 #define NGX_MAIL_AUTH_LOGIN             1
290 #define NGX_MAIL_AUTH_LOGIN_USERNAME    2
291 #define NGX_MAIL_AUTH_APOP              3
292 #define NGX_MAIL_AUTH_CRAM_MD5          4
293 #define NGX_MAIL_AUTH_NONE              5
294 
295 
296 #define NGX_MAIL_AUTH_PLAIN_ENABLED     0x0002
297 #define NGX_MAIL_AUTH_LOGIN_ENABLED     0x0004
298 #define NGX_MAIL_AUTH_APOP_ENABLED      0x0008
299 #define NGX_MAIL_AUTH_CRAM_MD5_ENABLED  0x0010
300 #define NGX_MAIL_AUTH_NONE_ENABLED      0x0020
301 
302 
303 #define NGX_MAIL_PARSE_INVALID_COMMAND  20
304 
305 
306 typedef void (*ngx_mail_init_session_pt)(ngx_mail_session_t *s,
307     ngx_connection_t *c);
308 typedef void (*ngx_mail_init_protocol_pt)(ngx_event_t *rev);
309 typedef void (*ngx_mail_auth_state_pt)(ngx_event_t *rev);
310 typedef ngx_int_t (*ngx_mail_parse_command_pt)(ngx_mail_session_t *s);
311 
312 
313 struct ngx_mail_protocol_s {
314     ngx_str_t                   name;
315     in_port_t                   port[4];
316     ngx_uint_t                  type;
317 
318     ngx_mail_init_session_pt    init_session;
319     ngx_mail_init_protocol_pt   init_protocol;
320     ngx_mail_parse_command_pt   parse_command;
321     ngx_mail_auth_state_pt      auth_state;
322 
323     ngx_str_t                   internal_server_error;
324 };
325 
326 
327 typedef struct {
328     ngx_mail_protocol_t        *protocol;
329 
330     void                       *(*create_main_conf)(ngx_conf_t *cf);
331     char                       *(*init_main_conf)(ngx_conf_t *cf, void *conf);
332 
333     void                       *(*create_srv_conf)(ngx_conf_t *cf);
334     char                       *(*merge_srv_conf)(ngx_conf_t *cf, void *prev,
335                                       void *conf);
336 } ngx_mail_module_t;
337 
338 
339 #define NGX_MAIL_MODULE         0x4C49414D     /* "MAIL" */
340 
341 #define NGX_MAIL_MAIN_CONF      0x02000000
342 #define NGX_MAIL_SRV_CONF       0x04000000
343 
344 
345 #define NGX_MAIL_MAIN_CONF_OFFSET  offsetof(ngx_mail_conf_ctx_t, main_conf)
346 #define NGX_MAIL_SRV_CONF_OFFSET   offsetof(ngx_mail_conf_ctx_t, srv_conf)
347 
348 
349 #define ngx_mail_get_module_ctx(s, module)     (s)->ctx[module.ctx_index]
350 #define ngx_mail_set_ctx(s, c, module)         s->ctx[module.ctx_index] = c;
351 #define ngx_mail_delete_ctx(s, module)         s->ctx[module.ctx_index] = NULL;
352 
353 
354 #define ngx_mail_get_module_main_conf(s, module)                             \
355     (s)->main_conf[module.ctx_index]
356 #define ngx_mail_get_module_srv_conf(s, module)  (s)->srv_conf[module.ctx_index]
357 
358 #define ngx_mail_conf_get_module_main_conf(cf, module)                       \
359     ((ngx_mail_conf_ctx_t *) cf->ctx)->main_conf[module.ctx_index]
360 #define ngx_mail_conf_get_module_srv_conf(cf, module)                        \
361     ((ngx_mail_conf_ctx_t *) cf->ctx)->srv_conf[module.ctx_index]
362 
363 
364 #if (NGX_MAIL_SSL)
365 void ngx_mail_starttls_handler(ngx_event_t *rev);
366 ngx_int_t ngx_mail_starttls_only(ngx_mail_session_t *s, ngx_connection_t *c);
367 #endif
368 
369 
370 void ngx_mail_init_connection(ngx_connection_t *c);
371 
372 ngx_int_t ngx_mail_salt(ngx_mail_session_t *s, ngx_connection_t *c,
373     ngx_mail_core_srv_conf_t *cscf);
374 ngx_int_t ngx_mail_auth_plain(ngx_mail_session_t *s, ngx_connection_t *c,
375     ngx_uint_t n);
376 ngx_int_t ngx_mail_auth_login_username(ngx_mail_session_t *s,
377     ngx_connection_t *c, ngx_uint_t n);
378 ngx_int_t ngx_mail_auth_login_password(ngx_mail_session_t *s,
379     ngx_connection_t *c);
380 ngx_int_t ngx_mail_auth_cram_md5_salt(ngx_mail_session_t *s,
381     ngx_connection_t *c, char *prefix, size_t len);
382 ngx_int_t ngx_mail_auth_cram_md5(ngx_mail_session_t *s, ngx_connection_t *c);
383 ngx_int_t ngx_mail_auth_parse(ngx_mail_session_t *s, ngx_connection_t *c);
384 
385 void ngx_mail_send(ngx_event_t *wev);
386 ngx_int_t ngx_mail_read_command(ngx_mail_session_t *s, ngx_connection_t *c);
387 void ngx_mail_auth(ngx_mail_session_t *s, ngx_connection_t *c);
388 void ngx_mail_close_connection(ngx_connection_t *c);
389 void ngx_mail_session_internal_server_error(ngx_mail_session_t *s);
390 u_char *ngx_mail_log_error(ngx_log_t *log, u_char *buf, size_t len);
391 
392 
393 char *ngx_mail_capabilities(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
394 
395 
396 /* STUB */
397 void ngx_mail_proxy_init(ngx_mail_session_t *s, ngx_peer_addr_t *peer);
398 void ngx_mail_auth_http_init(ngx_mail_session_t *s);
399 /**/
400 
401 
402 extern ngx_uint_t    ngx_mail_max_module;
403 extern ngx_module_t  ngx_mail_core_module;
404 
405 
406 #endif /* _NGX_MAIL_H_INCLUDED_ */
407 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.