/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ #ifndef POP_H #define POP_H #include "apr.h" #include "apr_md5.h" #include "apr_hash.h" #include "httpd.h" #include "util_filter.h" #ifdef __cplusplus extern "C" { #endif #define MAX_INVALID_CMD 10 module AP_MODULE_DECLARE_DATA pop_module; apr_hash_t *ap_pop_hash; typedef int ap_pop_handler(request_rec *r, char *a); typedef struct pop_handler_st { ap_pop_handler *func; int states; } pop_handler_st; #define POP_STRING_LENGTH 256 #define POP_DEFAULT_MAILDROP "/var/mail" #define POP_QUIT 1 #define POP_USER_UNKNOWN 2 #define POP_USER_NOT_ALLOWED 3 #define POP_NO_LOCK 4 #define POP_NO_MAILDROP 5 #define POP_BAD_STATE 6 #define POP_BAD_MSG_NUM 7 typedef enum {POP_AUTH = 1, USER_ACK = 2, POP_TRANSACTION = 4, UPDATE = 8} pop_state; #define POP_ALL_STATES POP_AUTH | USER_ACK | POP_TRANSACTION | UPDATE typedef struct pop_mbox pop_mbox; typedef struct pop_conn_rec { int pop_on; const char *maildrop; } pop_conn_rec; typedef struct pop_user_rec { apr_pool_t *p; conn_rec *c; request_rec *r; char *user; char *passwd; char *auth_string; const char *maildrop; pop_state state; pop_mbox *mbox; apr_file_t *fp; apr_mmap_t *mm; int high_access; /* we only compute one ctx at a time, but it is a lot easier to * keep this in the user_rec struct, because we won't have to * re-allocate space for it every time we need one. */ apr_md5_ctx_t *ctx; } pop_user_rec; typedef struct pop_msg { APR_RING_ENTRY(pop_msg) link; int id; int deleted; apr_size_t msg_size; apr_off_t header_start; apr_off_t header_end; apr_off_t msg_start; apr_off_t msg_end; } pop_msg; struct pop_mbox { APR_RING_HEAD(pop_msgs_list, pop_msg) list; }; int process_pop_connection_internal(request_rec *r, apr_bucket_brigade *bb); apr_status_t pop_parse_maildrop(request_rec *r, pop_mbox **mbox); void ap_pop_register_handler(char *key, ap_pop_handler *func, int states, apr_pool_t *p); int ap_handle_user(request_rec *r, char *buffer); int ap_handle_passwd(request_rec *r, char *buffer); int ap_handle_quit(request_rec *r, char *buffer); int ap_handle_dele(request_rec *r, char *buffer); int ap_handle_last(request_rec *r, char *buffer); int ap_handle_list(request_rec *r, char *buffer); int ap_handle_noop(request_rec *r, char *buffer); int ap_handle_retr(request_rec *r, char *buffer); int ap_handle_rset(request_rec *r, char *buffer); int ap_handle_stat(request_rec *r, char *buffer); int ap_handle_uidl(request_rec *r, char *buffer); int ap_handle_top(request_rec *r, char *buffer); #ifdef __cplusplus } #endif #endif /* POP_H */