Back to index

lightning-sunbird  0.9+nobinonly
nsFTPConn.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is Mozilla Communicator client code, released
00016  * March 31, 1998.
00017  *
00018  * The Initial Developer of the Original Code is
00019  * Netscape Communications Corporation.
00020  * Portions created by the Initial Developer are Copyright (C) 1998
00021  * the Initial Developer. All Rights Reserved.
00022  *
00023  * Contributor(s):
00024  *   Samir Gehani <sgehani@netscape.com>
00025  *
00026  * Alternatively, the contents of this file may be used under the terms of
00027  * either of the GNU General Public License Version 2 or later (the "GPL"),
00028  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00029  * in which case the provisions of the GPL or the LGPL are applicable instead
00030  * of those above. If you wish to allow use of your version of this file only
00031  * under the terms of either the GPL or the LGPL, and not to allow others to
00032  * use your version of this file under the terms of the MPL, indicate your
00033  * decision by deleting the provisions above and replace them with the notice
00034  * and other provisions required by the GPL or the LGPL. If you do not delete
00035  * the provisions above, a recipient may use your version of this file under
00036  * the terms of any one of the MPL, the GPL or the LGPL.
00037  *
00038  * ***** END LICENSE BLOCK ***** */
00039 
00040 #ifndef _NS_FTPCONN_H_
00041 #define _NS_FTPCONN_H_
00042 
00043 class nsSocket; 
00044 
00045 typedef int (*FTPGetCB)(int aBytesRd, int aTotal);
00046 
00047 class nsFTPConn
00048 {
00049 public:
00050     nsFTPConn(char *aHost);
00051     nsFTPConn(char *aHost, int (*aEventPumpCB)(void));
00052     ~nsFTPConn();
00053 
00054     /* ftp type */
00055     enum
00056     {
00057         ASCII = 0,
00058         BINARY
00059     };
00060 
00061     /* connection state */
00062     enum
00063     {
00064         OPEN = 0,
00065         GETTING,
00066         CLOSED
00067     };
00068 
00069     int     Open();
00070     int     Open(char *aHost);
00071     int     ResumeOrGet(char *aSrvPath, char *aLoclPath, int aType, 
00072                 int aOvWrite, FTPGetCB aCBFunc);
00073     int     Get(char *aSrvPath, char *aLoclPath, int aType, 
00074                 int aOvWrite, FTPGetCB aCBFunc);
00075     int     Get(char *aSrvPath, char *aLoclPath, int aType, int aResumePos,
00076                 int aOvWrite, FTPGetCB aCBFunc);
00077     int     Close();
00078 
00079 /*--------------------------------------------------------------------* 
00080  *  Errors 
00081  *--------------------------------------------------------------------*/
00082     enum
00083     {
00084         OK                  = 0,
00085         E_MEM               = -801, /* out of memory */
00086         E_PARAM             = -802, /* parameter null or incorrect */
00087         E_ALREADY_OPEN      = -803, /* connection already established */
00088         E_NOT_OPEN          = -804, /* connection not established, can't use */
00089         E_CMD_ERR           = -805, /* ftp command error */
00090         E_CMD_FAIL          = -806, /* ftp command failed */
00091         E_CMD_UNEXPECTED    = -807, /* ftp command unexpected response */
00092         E_WRITE             = -808, /* write to socket/fd failed */
00093         E_READ              = -809, /* read on socket/fd failed */
00094         E_SMALL_BUF         = -810, /* buffer too small, provide bigger one */
00095         E_CANT_OVWRITE      = -811, /* cannot overwrite existing file */
00096         E_LOCL_INIT         = -812, /* local file open/init failed */
00097         E_USER_CANCEL       = -813, /* user canceled the download */
00098         E_INVALID_ADDR      = -814  /* couldn't parse address/port */
00099     };
00100 
00101 private:
00102     int         FlushCntlSock(nsSocket *aSock, int bailOnTimeOut = 1);
00103     int         IssueCmd(const char *aCmd, char *aResp, int aRespSize, 
00104                          nsSocket *aSock);
00105     int         ParseAddr(char *aBuf, char **aHost, int *aPort);
00106     int         DataInit(char *aHost, int aPort, nsSocket **aSock); 
00107 
00108     int         (*mEventPumpCB)(void);
00109     char        *mHost;
00110     int         mState;
00111     int         mPassive;
00112     nsSocket    *mCntlSock;
00113     nsSocket    *mDataSock;
00114 };
00115 
00116 #ifndef NULL
00117 #define NULL 0
00118 #endif
00119 
00120 #ifndef TRUE
00121 #define TRUE 1
00122 #endif
00123 
00124 #ifndef FALSE
00125 #define FALSE 0
00126 #endif
00127 
00128 #ifdef DUMP
00129 #undef DUMP
00130 #endif 
00131 
00132 #if defined(DEBUG) || defined(DEBUG_sgehani)
00133 #define DUMP(_msg) printf("%s %d: %s\n", __FILE__, __LINE__, _msg);
00134 #else
00135 #define DUMP(_msg)  
00136 #endif /* DEBUG */
00137 
00138 #ifndef ERR_CHECK
00139 #define ERR_CHECK(_func)                                            \
00140 do {                                                                \
00141     err = _func;                                                    \
00142     if (err != OK)                                                  \
00143         goto BAIL;                                                  \
00144 } while(0);
00145 
00146 #endif
00147 
00148 #endif /* _NS_FTPCONN_H_ */
00149