Arquivos
ardrone_autonomy/ARDroneLib/Soft/Lib/utils/ardrone_ftp.h
T
2013-10-21 11:07:21 -07:00

250 linhas
12 KiB
C

/**
* @file ardrone_ftp.h
* @author nicolas.brulez@parrot.com
* @date 2011/04/06
* Copyright Parrot SA. 2011
*/
#ifndef _ARDRONE_FTP_H_
#define _ARDRONE_FTP_H_
#include <VP_Com/vp_com_socket.h>
/**
* Enum type for ftp function return/error codes
*/
typedef enum
{
FTP_FAIL=0,
FTP_BUSY,
FTP_SUCCESS,
FTP_TIMEOUT,
FTP_BADSIZE,
FTP_SAMESIZE,
FTP_PROGRESS,
FTP_ABORT,
} _ftp_status;
/**
* Success test for _ftp_status
*/
static inline int
FTP_SUCCEDED (_ftp_status ftp_result)
{
return ((FTP_SUCCESS == ftp_result) ||
(FTP_SAMESIZE == ftp_result));
}
/**
* Failure test for _ftp_status
*/
static inline int
FTP_FAILED (_ftp_status ftp_result)
{
return ((FTP_FAIL == ftp_result) ||
(FTP_TIMEOUT == ftp_result) ||
(FTP_BADSIZE == ftp_result) ||
(FTP_ABORT == ftp_result) ||
(FTP_BUSY == ftp_result));
}
/**
* FTP structure. Must be allocated by ftpConnect, and cleaned by ftpClose
*/
typedef struct _ftp_s
{
vp_com_socket_t *socket;
Read readSock;
Write writeSock;
int connected;
int opInProgress;
int abortCurrentOp;
_ftp_status lastStatus;
char *lastFileList;
void * tag; // Allows to put any pointer to some useful data that is associated with this ftp connectionS
} _ftp_t;
/**
* Last error message from ardrone_ftp lib
* (Useful when FTP_PRINT_ERROR is defined to 0 in ardrone_ftp.c)
*/
extern char *FTPlastErrorMessage;
/**
* Callback type for all asynchronous operations on FTP.
* The callback may be called several times with "FTP_PROGRESS" as the status
* But only once with any other status.
* @param arg for ftpList : char *pointer to list string (or NULL in case of failure), for ftpGet/ftpPut, float *pointer to progression if status is FTP_PROGRESS, NULL otherwise
*/
typedef void (*ftp_callback)(_ftp_status status, void *arg, _ftp_t *callingFtp);
/**
* @brief Connect to a FTP server
* @param ip IP address (ipv4, string format) of the server. (e.g. "192.168.1.1"). Must not be NULL.
* @param port Port of the FTP server (default ftp port is 21)
* @param username Username on the server (put "anonymous" for an anonymous connexion). Must not be NULL.
* @param password Password for the user (put "" for an anonymous connexion). Must not be NULL.
* @param status Pointer to a _ftp_status value which will hold error codes from this call. Must not be NULL.
* @return A pointer to the FTP structure allocated during the call, or NULL if the connexion failed.
*/
_ftp_t *ftpConnect (const char *ip, int port, const char *username, const char *password, _ftp_status *status);
/**
* @brief Connect to a FTP server
* @param name Host name (string format) of the server. (e.g. "www.google.fr"). Must not be NULL.
* @param port Port of the FTP server (default ftp port is 21)
* @param username Username on the server (put "anonymous" for an anonymous connexion). Must not be NULL.
* @param password Password for the user (put "" for an anonymous connexion). Must not be NULL.
* @param status Pointer to a _ftp_status value which will hold error codes from this call. Must not be NULL.
* @return A pointer to the FTP structure allocated during the call, or NULL if the connexion failed.
*/
_ftp_t *ftpConnectFromName (const char *name, int port, const char *username, const char *password, _ftp_status *status);
/**
* @brief Close a connexion to a FTP server (Server disconnexion and cleanup)
* @param ftp Pointer to a FTP structure pointer (works with NULL FTP structure pointers).
* @return Returns FTP_SUCCESS if the connexion to the server was opened, else FTP_FAIL. In any case of failure, the ftp pointer is reset to NULL and all possible cleanup was done.
*/
_ftp_status ftpClose (_ftp_t **ftp);
/**
* @brief Send a file to a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param localName Name of the file on the local filesystem (relative or absolute path). Must not be NULL.
* @param remoteName Name of the file that will be created on the FTP server (in server PWD !). Must not be NULL.
* @param useResume Flag for using or not the transfert resume function. If activated, this function will try to complete the distant file with bytes from local file.
* @param callback Callback that will be called upon progress/completion of the command. If NULL is specified, the function won't return until completion/failure (This functionnality is NOT thread safe !).
* @return If callback is not NULL, the return values can be :
* @return - FTP_SUCCESS : Operation is launched (Result of the operation will be passed as the "status" arg of callback)
* @return - FTP_BUSY : An operation is already in progress for this FTP connexion.
* @return - FTP_FAIL : Unexpected error (see error message)
* @return If callback is NULL, the return values can be :
* @return - FTP_SUCCESS : No errors, transfert was OK
* @return - FTP_TIMEOUT : Timeout during transfert (retry with useResume=1 to resume the transfert)
* @return - FTP_BADSIZE : useResume was set to 1 and the distant file is greater than the local file
* @return - FTP_SAMESIZE : useResume was set to 1 and the distant file has the same size as the local file (no data transfert was done)
* @return - FTP_FAIL : Unexpected error (see error message)
* @return - FTP_ABORT : Operation was aborted
*/
_ftp_status ftpPut (_ftp_t *ftp, const char *localName, const char *remoteName, int useResume, ftp_callback callback);
/**
* @brief Get a file from a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param remoteName Name of the file that will be got from the FTP server (in server PWD !). Must not be NULL.
* @param localName Name of the file on the local filesystem (relative or absolute path). Must not be NULL.
* @param useResume Flag for using or not the transfert resume function. If activated, this function will try to complete the local file with bytes from distant file.
* @param callback Callback that will be called upon progress/completion of the command. If NULL is specified, the function won't return until completion/failure (This functionnality is NOT thread safe !).
* @return If callback is not NULL, the return values can be :
* @return - FTP_SUCCESS : Operation is launched (Result of the operation will be passed as the "status" arg of callback)
* @return - FTP_BUSY : An operation is already in progress for this FTP connexion.
* @return - FTP_FAIL : Unexpectee error (see error message)
* @return If callback is NULL, the return values can be :
* @return - FTP_SUCCESS : No errors, transfert was OK
* @return - FTP_TIMEOUT : Timeout during transfert (retry with useResume=1 to resume the transfert)
* @return - FTP_BADSIZE : useResume was set to 1 and the local file is greater than the distant file
* @return - FTP_SAMESIZE : useResume was set to 1 and the local file has the same size as the distant file (no data transfert was done)
* @return - FTP_FAIL : Unexpected error (see error message)
* @return - FTP_ABORT : Operation was aborted
*/
_ftp_status ftpGet (_ftp_t *ftp, const char *remoteName, const char *localName, int useResume, ftp_callback callback);
/**
* @brief Get a list of the current directory on a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param fileList Must to be NULL if callback is NULL. This function allocate list result. YOU MUST TO DISALLOCATE THE POINTER
* @param callback Callback that will be called upon progress/completion of the command. If NULL is specified, the function won't return until completion/failure (This functionnality is NOT thread safe !).
* @return If callback is not NULL, the return values can be :
* @return - FTP_SUCCESS : Operation is launched (Result of the operation will be passed as the "status" arg of callback)
* @return - FTP_BUSY : An operation is already in progress for this FTP connexion.
* @return - FTP_FAIL : Unexpectee error (see error message)
* @return If callback is NULL, the return values can be :
* @return - FTP_SUCCESS : No errors, transfert was OK
* @return - FTP_TIMEOUT : Timeout during transfert
* @return - FTP_FAIL : Unexpected error (see error message)
* @return - FTP_ABORT : Operation was aborted
*/
_ftp_status ftpList (_ftp_t *ftp, char **fileList, ftp_callback callback);
/**
* @brief Remove a file from a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param remoteName Name (in server PWD) of the file to remove. Must not be NULL.
* @return The return values can be :
* @return - FTP_SUCCESS : Deletion was OK (even if the file did not exist on server)
* @return - FTP_TIMEOUT : Timeout during command transfert
* @return - FTP_FAIL : Unexpected error (see error message)
*/
_ftp_status ftpRemove (_ftp_t *ftp, const char *remoteName);
/**
* @brief Rename a file/directory on a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param origin Initial name of the file/directory on the server. Must not be NULL.
* @param dest New name of the file/directory on the server. Must not be NULL.
* @return The return values can be :
* @return - FTP_SUCCESS : Renaming was OK
* @return - FTP_SAMESIZE : origin file does not exist on server
* @return - FTP_TIMEOUT : Timeout during command transfert
* @return - FTP_FAIL : Unexpected error (see error message)
*/
_ftp_status ftpRename (_ftp_t *ftp, const char *origin, const char *dest);
/**
* @brief Change working directory on a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param nextDir New working directory on server (relative path). Must not be NULL.
* @return The return values can be :
* @return - FTP_SUCCESS : Changed directory
* @return - FTP_TIMEOUT : Timeout during command transfert
* @return - FTP_FAIL : Unexpected error (see error message)
*/
_ftp_status ftpCd (_ftp_t *ftp, const char *nextDir);
/**
* @brief Get the working directory of a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param workingDir Pointer that will hold the server PWD. Must not be NULL.
* @param wdLen Size of workingDir array (used internally for strncpy)
* @return The return values can be :
* @return - FTP_SUCCESS : Got server PWD in workingDir
* @return - FTP_TIMEOUT : Timeout during command transfert
* @return - FTP_FAIL : Unexpected error (see error message)
*/
_ftp_status ftpPwd (_ftp_t *ftp, char *workingDir, int wdLen);
/**
* @brief Create a directory on a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param dirName Name of the directory to create (in server PWD). Must not be NULL.
* @return The return values can be :
* @return - FTP_SUCCESS : Successfully created dirName directory
* @return - FTP_TIMEOUT : Timeout during command transfert
* @return - FTP_FAIL : Unexpected error (see error message)
*/
_ftp_status ftpMkdir (_ftp_t *ftp, const char *dirName);
/**
* @brief Remove a directory from a connected FTP server
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @param dirName Name of the directory to delete (in server PWD). Must not be NULL.
* @return The return values can be :
* @return - FTP_SUCCESS : Successfully deleted dirName directory
* @return - FTP_BADSIZE : dirName directory didn't exist, or was not empty
* @return - FTP_TIMEOUT : Timeout during command transfert
* @return - FTP_FAIL : Unexpected error (see error message)
*/
_ftp_status ftpRmdir (_ftp_t *ftp, const char *dirName);
/**
* @brief Abort current FTP operation
* @param ftp A pointer to a connected (created by ftpConnect) FTP server.
* @return The return values can be :
* @return - FTP_SUCCESS : Successfully aborted and operation
* @return - FTP_SAMESIZE : FTP had no operation in progress
* @return - FTP_FAIL : FTP is not open/initialized
*/
_ftp_status ftpAbort (_ftp_t *ftp);
#endif // _ARDRONE_FTP_H_