MegaGlest/source/shared_lib/include/feathery_ftp/ftp.h
Mark Vejvoda 7cf9c189b2 - disallow non compressed tileset downloads when client IP not on same subnet as host
- bugfix for LAN server broadcasting
- bugfix for empty message on player disconnect (now properly shows that player switched to AI mode)
2011-11-29 05:07:18 +00:00

200 lines
7.2 KiB
C

/**
* Feathery FTP-Server <https://sourceforge.net/projects/feathery>
* Copyright (C) 2005-2010 Andreas Martin (andreas.martin@linuxmail.org)
*
* ftp.h - ftp-server interface-header
*
* Contains all internal definitions and prototypes of feathery.
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef FTP_H_
#define FTP_H_
/**
* @brief specifies the type of operation that is in progress
*/
typedef enum
{
OP_NOP = 0, ///< no operation
OP_RETR = 1, ///< RETR command
OP_STOR = 2, ///< STOR command
OP_LIST = 3 ///< LIST command
}operation_E;
/**
* @brief infos about a file/directory transmittion
* @see ftpExecTransmission
*/
typedef struct
{
operation_E op; ///< active transmission
void* fsHandle; ///< file or directory handle of current transmission
socket_t dataSocket; ///< data socket of current transmission
uint32_t fileSize; ///< size of file to transmit
}transmission_S;
/**
* @brief Data of a ftp session
*/
typedef struct
{
int open; ///< TRUE, if the session is open
int authenticated; ///< TRUE, if user is authenticated via USER and PASS commands
int userId; ///< id of the dedicated user account, is 0 until execution of USER command
int rxBufWriteIdx; ///< currect write index of receive buffer rxBuf
char rxBuf[LEN_RXBUF]; ///< receive buffer for ftp commands
char workingDir[MAX_PATH_LEN]; ///< current working directory (absolute path which is relative to the root-path of the user account)
ip_t remoteIp; ///< IP of connected ftp client
port_t remoteFTPServerPassivePort; ///< Port of the FTP Server from the clients perspective related to Passive connection
port_t remotePort; ///< Port of connected ftp client for control connection
port_t remoteDataPort; ///< Port of connected ftp client for data connection
int passive; ///< TRUE, if passive-mode is activated via PSV command
int binary; ///< TRUE, if binary-mode is active
uint32_t timeLastCmd; ///< timestamp of last ftp activity (used for timeout generation)
socket_t ctrlSocket; ///< socket for control connection
socket_t passiveDataSocket; ///< listener socket for data connections in passive mode
ip_t passiveIp; ///< IP of the FTP Server from the clients perspective related to Passive connection
port_t passivePort; ///< Port of the FTP Server from the clients perspective related to Passive connection
transmission_S activeTrans; ///< infos about a currently active file/directory-transmission
}ftpSession_S;
/**
* @brief format in which a message is to be displayed
*/
typedef enum
{
MSG_NORMAL = 0, ///< normal message, no translation
MSG_QUOTE = 1, ///< message will be displayed between doublequotes
MSG_MULTILINE = 2 ///< message contains multiple lines
}msgmode_E;
/**
* @brief time-structure
*/
typedef struct
{
uint16_t year; ///< year 0000-9999
uint8_t month; ///< month 1 - 12
uint8_t day; ///< day 1 - 31
uint8_t hour; ///< hour 0 - 23
uint8_t minute; ///< minute 0 - 59
uint8_t second; ///< second 0 - 59
}ftpTime_S;
/**
* @brief type of a file
*/
typedef enum
{
TYPE_FILE = 1, ///< regular file
TYPE_DIR = 2, ///< directory
TYPE_LINK = 4 ///< hard link
}ftpFileType_E;
/**
* @brief infos about a file or directory similar to stat
*/
typedef struct
{
ftpFileType_E type; ///< filetype
uint16_t mode; ///< access rights (currently unused)
ftpTime_S cTime; ///< creation time (currently unused)
ftpTime_S aTime; ///< last access time (currently unused)
ftpTime_S mTime; ///< time of last modification
uint32_t size; ///< size
int links; ///< count of hard links
char user[20]; ///< owner
char group[20]; ///< group
}ftpPathInfo_S;
extern int ftpOpenSession(socket_t ctrlSocket, ip_t remoteIp, port_t remotePort);
extern int ftpCloseSession(int id);
extern ftpSession_S* ftpGetSession(int id);
extern int ftpAuthSession(int id);
extern const char* ftpGetRealPath(int id, const char* path, int normalize);
extern int ftpChangeDir(int id, const char* path);
extern void ftpOpenTransmission(int id, operation_E op, void* fsHandle, socket_t dataSocket, uint32_t fileSize);
extern void ftpCloseTransmission(int id);
extern int ftpGetActiveTransCnt(void);
extern int ftpFindAccount(const char* name);
extern const char * ftpFindAccountById(int userid);
extern int ftpCheckPassword(int userId, const char* passw);
extern int ftpCheckAccRights(int userId, int accRights);
extern const char* ftpGetRoot(int userId, int* len);
extern int ftpSendMsg(msgmode_E mode, int sessionId, int ret, const char* msg);
extern int ftpExecTransmission(int sessionId);
extern void ftpParseCmd(int sessionId);
extern int ftpRemoveTrailingSlash(char* path);
extern void ftpRemoveDoubleSlash(char* path);
extern char* ftpMergePaths(char* dest, ...);
extern uint32_t ftpGetUnixTime(void);
extern char *ftpStrcpy(char *dest, const char *src);
extern void ftpArchInit();
extern void ftpArchCleanup(void);
extern int ftpGetLocalTime(ftpTime_S *t);
extern void* ftpOpenDir(const char* path);
extern const char* ftpReadDir(void* dirHandle);
extern int ftpCloseDir(void* dirHandle);
extern int ftpStat(const char* path, ftpPathInfo_S *info);
#if ANSI_FILE_IO
# define ftpOpenFile fopen
# define ftpCloseFile fclose
# define ftpReadFile fread
# define ftpWriteFile fwrite
# define ftpRemoveFile remove
#else
extern void* ftpOpenFile(const char *filename, const char *mode);
extern int ftpCloseFile(void *stream );
extern int ftpReadFile(void *buffer, size_t size, size_t count, void *stream);
extern int ftpWriteFile(const void *buffer, size_t size, size_t count, void *stream);
extern int ftpRemoveFile(const char* path);
#endif
extern int ftpMakeDir(const char* path);
extern int ftpRemoveDir(const char* path);
extern int ftpCloseSocket(socket_t *s);
extern int ftpSend(socket_t s, const void *data, int len);
extern int ftpReceive(socket_t s, void *data, int len);
extern socket_t ftpEstablishDataConnection(int passive, ip_t *ip, port_t *port, int sessionId);
extern socket_t ftpAcceptDataConnection(socket_t listner);
extern socket_t ftpCreateServerSocket(int portNumber);
extern socket_t ftpAcceptServerConnection(socket_t server, ip_t *remoteIP, port_t *remotePort);
extern int ftpTrackSocket(socket_t s);
extern int ftpUntrackSocket(socket_t s);
extern int ftpTestSocket(socket_t s);
extern int ftpSelect(int poll);
extern int ftpGetPassivePort();
extern int ftpGetListenPort();
extern int getLastSocketError();
extern const char * getLastSocketErrorText(int *errNumber);
#endif /* FTP_H_ */