LwFTP/lwftpc.h

132 lines
2.8 KiB
C

/*
* lwftpc.h
*
* Created on: Feb 20, 2024
* Author: "SeungJu Lim"
*/
#include <string.h>
#include "lwip/api.h"
#ifdef __cplusplus
#include <cstdio>
#include <cstring>
#include <cstdarg>
#include <cstdlib>
#else
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef LWFTPC_H_
#define LWFTPC_H_
typedef struct lwftp_session lwftp_session_t;
/** Timeout */
#define FTP_TIMEOUT 10000
/** Setting for LwFTP debug print */
#define LWFTP_DEBUG 1
/** Callback functions */
typedef void (*lwftp_data_callback_t)(lwftp_session_t *s, char *filename,
char *data);
void lwftp_store_callback(lwftp_session_t *s, char *filename, char *data);
void lwftp_retrieve_callback(lwftp_session_t *s, char *filename, char *data);
void lwftp_list_callback(lwftp_session_t *s, char *filename, char *outStr);
/** Connection state enums */
typedef enum {
LWFTP_CLOSED = 0,
LWFTP_CONNECTED,
LWFTP_USER_SENT,
LWFTP_PASS_SENT,
LWFTP_LOGGED,
LWFTP_PASV_SENT,
LWFTP_PASV_MODE,
LWFTP_LIST_SENT,
LWFTP_RETR_SENT,
LWFTP_STOR_SENT,
} control_state_t;
typedef enum {
LWFTP_DATA_CLOSED = 0,
LWFTP_DATA_XFER_READY,
LWFTP_DATA_XFERING,
LWFTP_DATA_XFER_COMPLETE,
} data_state_t;
/** Session structure */
typedef struct lwftp_session {
// user data
char *user;
char *pass;
ip_addr_t cli_ip;
ip_addr_t svr_ip;
u16_t svr_port;
u16_t data_port;
// connection data
struct netconn *conn;
struct netconn *data_conn;
control_state_t ctrl_state;
data_state_t data_state;
// callback things
lwftp_data_callback_t data_callback;
char *filename;
char *data;
char **outStr;
// semaphore things
SemaphoreHandle_t xfer_semaphore;
err_t result;
} lwftp_session_t;
/** Control & Data threads */
void lwftp_ctrl_thread(void *arg);
void lwftp_data_thread(void *arg);
/** FTP Commands */
err_t lwftp_store(lwftp_session_t *s, char *filename, char *data);
err_t lwftp_retrieve(lwftp_session_t *s, char *filename);
err_t lwftp_list(lwftp_session_t *s, char **outStr);
err_t lwftp_close(lwftp_session_t *s);
/** Transfer cmd & Open data port */
err_t lwftp_send(struct netconn *conn, char *data);
err_t lwftp_send_pasv(lwftp_session_t *s);
err_t lwftp_login(lwftp_session_t *s);
err_t lwftp_data_open(lwftp_session_t *s, char *response);
/** Data reception */
void onDataReceived(lwftp_session_t *s, void *data, size_t size);
/** Utilities */
void resetSession(lwftp_session_t *s);
char** extractFileNames(const char *input, int *fileCount);
char* genUniqFilName(char **fileNames, int fileCount,
const char *targetFileName);
/** Debugging print */
void debugPrint(const char *format, ...);
#ifdef __cplusplus
}
#endif
#endif /* LWFTPC_H_ */