Files
Mozilla/mozilla/msgsdk/C/protocol/SMTP/include/smtppriv.h
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

177 lines
5.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 SMTPPRIV_H
#define SMTPPRIV_H
/*
* smtppriv.h
* @author derekt@netscape.com
* @version 1.0
*/
#include "nsmail.h"
#include "nsio.h"
#include "linklist.h"
/* Default port number. */
#define DEFAULT_SMTP_PORT 25
/* 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 SMTP. */
typedef enum smtp_ResponseType
{
BDAT,
CONN,
DATA,
EHLO,
EXPN,
HELP,
MAIL,
NOOP,
QUIT,
RCPT,
RSET,
SEND,
SENDCOMMAND,
VRFY
} smtp_ResponseType_t;
/* Response variables for SMTP. */
const static smtp_ResponseType_t SMTPResponse_BDAT = BDAT;
const static smtp_ResponseType_t SMTPResponse_CONN = CONN;
const static smtp_ResponseType_t SMTPResponse_DATA = DATA;
const static smtp_ResponseType_t SMTPResponse_EHLO = EHLO;
const static smtp_ResponseType_t SMTPResponse_EXPN = EXPN;
const static smtp_ResponseType_t SMTPResponse_HELP = HELP;
const static smtp_ResponseType_t SMTPResponse_MAIL = MAIL;
const static smtp_ResponseType_t SMTPResponse_NOOP = NOOP;
const static smtp_ResponseType_t SMTPResponse_QUIT = QUIT;
const static smtp_ResponseType_t SMTPResponse_RCPT = RCPT;
const static smtp_ResponseType_t SMTPResponse_RSET = RSET;
const static smtp_ResponseType_t SMTPResponse_SEND = SEND;
const static smtp_ResponseType_t SMTPResponse_SENDCOMMAND = SENDCOMMAND;
const static smtp_ResponseType_t SMTPResponse_VRFY = VRFY;
/* Constants used for sending commands. */
const static char bdat[] = "BDAT ";
const static char data[] = "DATA";
const static char ehlo[] = "EHLO ";
const static char helo[] = "HELO ";
const static char expn[] = "EXPN ";
const static char help[] = "HELP ";
const static char mailFrom[] = "MAIL FROM:<";
const static char noop[] = "NOOP";
const static char quit[] = "QUIT";
const static char rcptTo[] = "RCPT TO:<";
const static char rset[] = "RSET";
const static char vrfy[] = "VRFY ";
const static char rBracket[] = ">";
const static char eomessage[] = "\r\n.";
const static char bdatLast[] = " LAST";
const static char empty[] = "";
const static char pipelining[] = "PIPELINING";
/*
* Structure used by a client to communicate to a SMTP server.
* This structure stores IO_t structure which deals with
* the specifics of communication.
*/
typedef struct smtpClient
{
/* 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;
/* State variable indicating if the DATA command was last executed. */
boolean fDATASent;
/* Last character sent to the server used for byte stuffing messages. */
char lastSentChar;
/* Boolean variable indicating if the server supports PIPELINING. */
boolean pipeliningSupported;
/* Get/Set variables */
int chunkSize;
double timeout;
smtpSink_t * smtpSink;
boolean pipelining;
/* Re-used variables */
char * messageData;
char commandBuffer[512];
char responseLine[512];
} smtpClient_i_t;
/* Function pointer for responses. */
typedef void (*sinkMethod_t)( smtpSinkPtr_t, int , const char * );
typedef void (*sinkMethodComplete_t)( smtpSinkPtr_t );
/* Internal parsing functions. */
static int setStatusInfo( const char * in_responseLine, int * out_responseCode );
static int parseSingleLine( smtpClient_t *, sinkMethod_t );
static int parseMultiLine( smtpClient_t *, sinkMethod_t, sinkMethodComplete_t );
static int parseData( smtpClient_t * in_pSMTP );
static int parseEhlo( smtpClient_t * );
static void invokeCallback( smtpSink_t *, sinkMethod_t, int, const char * );
#ifdef SMTP_HIGHLEVEL_API
/*
* A higher level API
* @author derekt@netscape.com
* @version 1.0
*/
typedef struct returnInfo
{
boolean error;
char errorBuffer[512];
} returnInfo_t;
/* Internal high level functions. */
void cleanup( smtpClient_t * in_pClient, smtpSink_t * in_pSink );
void cleanupServerError( smtpClient_t * in_pClient, smtpSink_t * fin_pSink, char * out_serverError );
#endif /*SMTP_HIGHLEVEL_API*/
#endif /* SMTP_H */