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>