dmose%mozilla.org 9fc7780ead updating license boilerplate to xPL v1.1
git-svn-id: svn://10.0.0.236/trunk@52523 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-02 06:20:05 +00:00

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 */