| 1 | #ifndef HEADER_CURL_POP3_H | 
| 2 | #define  | 
| 3 | /*************************************************************************** | 
| 4 |  *                                  _   _ ____  _ | 
| 5 |  *  Project                     ___| | | |  _ \| | | 
| 6 |  *                             / __| | | | |_) | | | 
| 7 |  *                            | (__| |_| |  _ <| |___ | 
| 8 |  *                             \___|\___/|_| \_\_____| | 
| 9 |  * | 
| 10 |  * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. | 
| 11 |  * | 
| 12 |  * This software is licensed as described in the file COPYING, which | 
| 13 |  * you should have received as part of this distribution. The terms | 
| 14 |  * are also available at https://curl.se/docs/copyright.html. | 
| 15 |  * | 
| 16 |  * You may opt to use, copy, modify, merge, publish, distribute and/or sell | 
| 17 |  * copies of the Software, and permit persons to whom the Software is | 
| 18 |  * furnished to do so, under the terms of the COPYING file. | 
| 19 |  * | 
| 20 |  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | 
| 21 |  * KIND, either express or implied. | 
| 22 |  * | 
| 23 |  * SPDX-License-Identifier: curl | 
| 24 |  * | 
| 25 |  ***************************************************************************/ | 
| 26 |  | 
| 27 | #include "pingpong.h" | 
| 28 | #include "curl_sasl.h" | 
| 29 |  | 
| 30 | /**************************************************************************** | 
| 31 |  * POP3 unique setup | 
| 32 |  ***************************************************************************/ | 
| 33 | typedef enum { | 
| 34 |   POP3_STOP,         /* do nothing state, stops the state machine */ | 
| 35 |   POP3_SERVERGREET,  /* waiting for the initial greeting immediately after | 
| 36 |                         a connect */ | 
| 37 |   POP3_CAPA, | 
| 38 |   POP3_STARTTLS, | 
| 39 |   POP3_UPGRADETLS,   /* asynchronously upgrade the connection to SSL/TLS | 
| 40 |                        (multi mode only) */ | 
| 41 |   POP3_AUTH, | 
| 42 |   POP3_APOP, | 
| 43 |   POP3_USER, | 
| 44 |   POP3_PASS, | 
| 45 |   POP3_COMMAND, | 
| 46 |   POP3_QUIT, | 
| 47 |   POP3_LAST          /* never used */ | 
| 48 | } pop3state; | 
| 49 |  | 
| 50 | /* This POP3 struct is used in the Curl_easy. All POP3 data that is | 
| 51 |    connection-oriented must be in pop3_conn to properly deal with the fact that | 
| 52 |    perhaps the Curl_easy is changed between the times the connection is | 
| 53 |    used. */ | 
| 54 | struct POP3 { | 
| 55 |   curl_pp_transfer transfer; | 
| 56 |   char *id;               /* Message ID */ | 
| 57 |   char *custom;           /* Custom Request */ | 
| 58 | }; | 
| 59 |  | 
| 60 | /* pop3_conn is used for struct connection-oriented data in the connectdata | 
| 61 |    struct */ | 
| 62 | struct pop3_conn { | 
| 63 |   struct pingpong pp; | 
| 64 |   pop3state state;        /* Always use pop3.c:state() to change state! */ | 
| 65 |   size_t eob;             /* Number of bytes of the EOB (End Of Body) that | 
| 66 |                              have been received so far */ | 
| 67 |   size_t strip;           /* Number of bytes from the start to ignore as | 
| 68 |                              non-body */ | 
| 69 |   struct SASL sasl;       /* SASL-related storage */ | 
| 70 |   char *apoptimestamp;    /* APOP timestamp from the server greeting */ | 
| 71 |   unsigned char authtypes; /* Accepted authentication types */ | 
| 72 |   unsigned char preftype;  /* Preferred authentication type */ | 
| 73 |   BIT(ssldone);           /* Is connect() over SSL done? */ | 
| 74 |   BIT(tls_supported);     /* StartTLS capability supported by server */ | 
| 75 | }; | 
| 76 |  | 
| 77 | extern const struct Curl_handler Curl_handler_pop3; | 
| 78 | extern const struct Curl_handler Curl_handler_pop3s; | 
| 79 |  | 
| 80 | /* Authentication type flags */ | 
| 81 | #define POP3_TYPE_CLEARTEXT (1 << 0) | 
| 82 | #define POP3_TYPE_APOP      (1 << 1) | 
| 83 | #define POP3_TYPE_SASL      (1 << 2) | 
| 84 |  | 
| 85 | /* Authentication type values */ | 
| 86 | #define POP3_TYPE_NONE      0 | 
| 87 | #define POP3_TYPE_ANY       (POP3_TYPE_CLEARTEXT|POP3_TYPE_APOP|POP3_TYPE_SASL) | 
| 88 |  | 
| 89 | /* This is the 5-bytes End-Of-Body marker for POP3 */ | 
| 90 | #define POP3_EOB "\x0d\x0a\x2e\x0d\x0a" | 
| 91 | #define POP3_EOB_LEN 5 | 
| 92 |  | 
| 93 | /* This function scans the body after the end-of-body and writes everything | 
| 94 |  * until the end is found */ | 
| 95 | CURLcode Curl_pop3_write(struct Curl_easy *data, char *str, size_t nread); | 
| 96 |  | 
| 97 | #endif /* HEADER_CURL_POP3_H */ | 
| 98 |  |