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