X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FSoft%2FLib%2Futils%2Fardrone_ftp.h;fp=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FSoft%2FLib%2Futils%2Fardrone_ftp.h;h=bab67d17cafb25ced526c66f17708db57e0ee1a5;hb=9ec9bc13b75d30bc45535c54a652934debfcea92;hp=0000000000000000000000000000000000000000;hpb=ae0a3c2dc0898400aca0dd6b439c5db8044db7b2;p=mardrone diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/Soft/Lib/utils/ardrone_ftp.h b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/Soft/Lib/utils/ardrone_ftp.h new file mode 100644 index 0000000..bab67d1 --- /dev/null +++ b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/Soft/Lib/utils/ardrone_ftp.h @@ -0,0 +1,246 @@ +/** + * @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 + +/** + * 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_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 ip 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_