205 lines
7.2 KiB
C
205 lines
7.2 KiB
C
/*
|
|
* The contents of this file are subject to the Netscape Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Netscape Messaging Access SDK Version 3.5 code,
|
|
* released on or about June 15, 1998. *
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
* Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s): ______________________________________.
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 1997 and 1998 Netscape Communications Corporation
|
|
* (http://home.netscape.com/misc/trademarks.html)
|
|
*/
|
|
|
|
#ifndef POP3PRIV_H
|
|
#define POP3PRIV_H
|
|
|
|
/*
|
|
* pop3priv.h
|
|
* @author derekt@netscape.com
|
|
* @version 1.0
|
|
*/
|
|
|
|
#include "nsmail.h"
|
|
#include "nsio.h"
|
|
#include "linklist.h"
|
|
|
|
/* Default port number. */
|
|
#define DEFAULT_POP3_PORT 110
|
|
|
|
/* Maximum definitions. */
|
|
#define MAX_DOMAIN_LENGTH 64
|
|
#define MAX_USERHNAME_LENGTH 64
|
|
#define MAX_RCPTBUFFER_LENGTH 100
|
|
#define MAX_PATH_LENGTH 256
|
|
#define MAX_COMMANDLINE_LENGTH 512
|
|
#define MAX_REPLYLINE_LENGTH 512
|
|
#define MAX_TEXTLINE_LENGTH 1000
|
|
#define MAX_BUFFER_LENGTH 1024
|
|
|
|
/* Response types for POP3. */
|
|
typedef enum pop3_ResponseType
|
|
{
|
|
CONN,
|
|
DELE,
|
|
LISTA,
|
|
LIST,
|
|
NOOP,
|
|
PASS,
|
|
QUIT,
|
|
RSET,
|
|
RETR,
|
|
SENDCOMMANDA,
|
|
SENDCOMMAND,
|
|
STAT,
|
|
TOP,
|
|
UIDLA,
|
|
UIDL,
|
|
USER,
|
|
XAUTHLISTA,
|
|
XAUTHLIST,
|
|
XSENDER
|
|
} pop3_ResponseType_t;
|
|
|
|
/* Response variables for POP3. */
|
|
const static pop3_ResponseType_t POP3Response_CONN = CONN;
|
|
const static pop3_ResponseType_t POP3Response_DELE = DELE;
|
|
const static pop3_ResponseType_t POP3Response_LISTA = LISTA;
|
|
const static pop3_ResponseType_t POP3Response_LIST = LIST;
|
|
const static pop3_ResponseType_t POP3Response_NOOP = NOOP;
|
|
const static pop3_ResponseType_t POP3Response_PASS = PASS;
|
|
const static pop3_ResponseType_t POP3Response_QUIT = QUIT;
|
|
const static pop3_ResponseType_t POP3Response_RSET = RSET;
|
|
const static pop3_ResponseType_t POP3Response_RETR = RETR;
|
|
const static pop3_ResponseType_t POP3Response_SENDCOMMANDA = SENDCOMMANDA;
|
|
const static pop3_ResponseType_t POP3Response_SENDCOMMAND = SENDCOMMAND;
|
|
const static pop3_ResponseType_t POP3Response_STAT = STAT;
|
|
const static pop3_ResponseType_t POP3Response_TOP = TOP;
|
|
const static pop3_ResponseType_t POP3Response_UIDLA = UIDLA;
|
|
const static pop3_ResponseType_t POP3Response_UIDL = UIDL;
|
|
const static pop3_ResponseType_t POP3Response_USER = USER;
|
|
const static pop3_ResponseType_t POP3Response_XAUTHLISTA = XAUTHLISTA;
|
|
const static pop3_ResponseType_t POP3Response_XAUTHLIST = XAUTHLIST;
|
|
const static pop3_ResponseType_t POP3Response_XSENDER = XSENDER;
|
|
|
|
/* Constants used in building commands. */
|
|
const static char dele[] = "DELE ";
|
|
const static char list[] = "LIST ";
|
|
const static char noop[] = "NOOP";
|
|
const static char pass[] = "PASS ";
|
|
const static char quit[] = "QUIT";
|
|
const static char rset[] = "RSET";
|
|
const static char retr[] = "RETR ";
|
|
const static char stat[] = "STAT";
|
|
const static char top[] = "TOP ";
|
|
const static char uidl[] = "UIDL ";
|
|
const static char user[] = "USER ";
|
|
const static char xauthlist[] = "XAUTHLIST ";
|
|
const static char xsender[] = "XSENDER ";
|
|
const static char space[] = " ";
|
|
const static char ok[] = "+OK";
|
|
const static char err[] = "-ERR";
|
|
|
|
/*
|
|
* Structure used by a client to communicate to a POP3 server.
|
|
* This structure stores IO_t structure which deals with
|
|
* the specifics of communication.
|
|
*/
|
|
typedef struct pop3Client
|
|
{
|
|
/* Communication structure. */
|
|
IO_t io;
|
|
|
|
/* List of command types sent to the server. */
|
|
LinkedList_t * pCommandList;
|
|
|
|
/* Flag indicating if a response must be processed. */
|
|
boolean mustProcess;
|
|
|
|
/* Flag indicating we are in the middle of a multiline response. */
|
|
boolean multiLineState;
|
|
|
|
/* Get/Set variables */
|
|
int chunkSize;
|
|
double timeout;
|
|
pop3Sink_t * pop3Sink;
|
|
|
|
/* Re-used variables */
|
|
char commandBuffer[MAX_COMMANDLINE_LENGTH];
|
|
char responseLine[MAX_TEXTLINE_LENGTH];
|
|
char * messageData;
|
|
int messageDataSize;
|
|
int messageNumber;
|
|
} pop3Client_i_t;
|
|
|
|
/* Function pointer for responses. */
|
|
typedef void (*sinkMethod_t)( pop3SinkPtr_t, const char * );
|
|
|
|
/* Internal parsing functions. */
|
|
static int setStatusInfo( const char * in_responseLine, boolean * out_status );
|
|
static int parseSingleLine( pop3Client_t *, sinkMethod_t );
|
|
static int parseConnect( pop3Client_t * in_pPOP3 );
|
|
static int parseDelete( pop3Client_t * in_pPOP3 );
|
|
static int parseListA( pop3Client_t * in_pPOP3 );
|
|
static int parseList( pop3Client_t * in_pPOP3 );
|
|
static int parseNoop( pop3Client_t * in_pPOP3 );
|
|
static int parsePass( pop3Client_t * in_pPOP3 );
|
|
static int parseQuit( pop3Client_t * in_pPOP3 );
|
|
static int parseRset( pop3Client_t * in_pPOP3 );
|
|
static int parseRetr( pop3Client_t * in_pPOP3 );
|
|
static int parseSendCommandA( pop3Client_t * in_pPOP3 );
|
|
static int parseSendCommand( pop3Client_t * in_pPOP3 );
|
|
static int parseStat( pop3Client_t * in_pPOP3 );
|
|
static int parseTop( pop3Client_t * in_pPOP3 );
|
|
static int parseUidlA( pop3Client_t * in_pPOP3 );
|
|
static int parseUidl( pop3Client_t * in_pPOP3 );
|
|
static int parseUser( pop3Client_t * in_pPOP3 );
|
|
static int parseXAuthListA( pop3Client_t * in_pPOP3 );
|
|
static int parseXAuthList( pop3Client_t * in_pPOP3 );
|
|
static int parseXSender( pop3Client_t * in_pPOP3 );
|
|
|
|
/* Internal sink functions used to check for NULL function pointers. */
|
|
static void pop3Sink_connect( pop3Sink_t *, const char * );
|
|
static void pop3Sink_delete( pop3Sink_t *, const char * );
|
|
static void pop3Sink_error( pop3Sink_t *, const char * );
|
|
static void pop3Sink_listStart( pop3Sink_t * );
|
|
static void pop3Sink_list( pop3Sink_t *, int, int );
|
|
static void pop3Sink_listComplete( pop3Sink_t * );
|
|
static void pop3Sink_noop( pop3Sink_t * );
|
|
static void pop3Sink_pass(pop3Sink_t *, const char * );
|
|
static void pop3Sink_quit(pop3Sink_t *, const char * );
|
|
static void pop3Sink_reset(pop3Sink_t *, const char * );
|
|
static void pop3Sink_retrieveStart( pop3Sink_t *, int, int );
|
|
static void pop3Sink_retrieve( pop3Sink_t *, const char * );
|
|
static void pop3Sink_retrieveComplete( pop3Sink_t * );
|
|
static void pop3Sink_sendCommandStart( pop3Sink_t * );
|
|
static void pop3Sink_sendCommand( pop3Sink_t *, const char * );
|
|
static void pop3Sink_sendCommandComplete( pop3Sink_t * );
|
|
static void pop3Sink_stat( pop3Sink_t *, int, int );
|
|
static void pop3Sink_topStart( pop3Sink_t *, int );
|
|
static void pop3Sink_top( pop3Sink_t *, const char * );
|
|
static void pop3Sink_topComplete( pop3Sink_t * );
|
|
static void pop3Sink_uidListStart( pop3Sink_t * );
|
|
static void pop3Sink_uidList( pop3Sink_t *, int, const char * );
|
|
static void pop3Sink_uidListComplete( pop3Sink_t * );
|
|
static void pop3Sink_user( pop3Sink_t *, const char * );
|
|
static void pop3Sink_xAuthListStart( pop3Sink_t * );
|
|
static void pop3Sink_xAuthList( pop3Sink_t *, int, const char * );
|
|
static void pop3Sink_xAuthListComplete( pop3Sink_t * );
|
|
static void pop3Sink_xSender( pop3Sink_t *, const char * );
|
|
|
|
#endif /* POP3_H */
|