SXXXXXXX_PyDownloadFwViaSRIO/_OLD/Vecchia_app/FpgaBeamMeUp/bsk/bsk_tftpd.h
2026-01-22 17:10:05 +01:00

102 lines
3.1 KiB
C

/*
* bsk_tftpd.h
*
* Created on: 25/ago/2016
* Author: chessaa
*/
#ifndef BSK_TFTPD_H_
#define BSK_TFTPD_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef int bsk_tftpd_context_id_t;
typedef void* bsk_tftp_cookie_t;
typedef struct
{
const char* name;
unsigned int port;
bsk_tftp_cookie_t cookie;
} bsk_tftpd_context_info_t;
typedef enum
{
bsk_tftpd_open_file, //data is the filename, null terminaled. block and size N/A
bsk_tftpd_data,
bsk_tftpd_end, //last block, with maybe a zero len data
bsk_tftpd_open_read_not_supported, //data is the filename, null terminaled. block and size N/A
bsk_tftpd_error
} bsk_tftpd_receive_delegate_operation_t;
#define TFTP_EUNDEF 0 /* not defined */
#define TFTP_ENOTFOUND 1 /* file not found */
#define TFTP_EACCESS 2 /* access violation */
#define TFTP_ENOSPACE 3 /* disk full or allocation exceeded */
#define TFTP_EBADOP 4 /* illegal TFTP operation */
#define TFTP_EBADID 5 /* unknown transfer ID */
#define TFTP_EEXISTS 6 /* file already exists */
#define TFTP_ENOUSER 7 /* no such user */
#define TFTP_EBADOPTION 8 /* bad option */
#define TFTP_ECANCELLED 99 /* cancelled by administrator */
typedef enum
{
bsk_tftpd_ok=0,
bsk_tftpd_err_not_found=1,
bsk_tftpd_err_access,
bsk_tftpd_err_no_space,
bsk_tftpd_err_bad_operation,
bsk_tftpd_err_bad_id,
bsk_tftpd_err_file_exists,
bsk_tftpd_dont_ack=100
} bsk_tftpd_status_t;
typedef struct
{
bsk_tftpd_status_t sts;
const char* ack_msg;
} bsk_tftpd_receive_status_t;
const bsk_tftpd_context_info_t* bsk_tftpd_context_info(bsk_tftpd_context_id_t);
bsk_tftpd_context_id_t bsk_tftpd_context_initialize(bsk_tftpd_context_id_t id, const char* name, unsigned int port, bsk_tftp_cookie_t cookie);
extern int bsk_tftpd_process_packet(bsk_tftpd_context_id_t id, unsigned int client_address, unsigned int client_port, const void* packet, unsigned int size_bytes);
extern int bsk_tftpd_send_ack(bsk_tftpd_context_id_t id, bsk_tftpd_status_t code, const char* msg);
extern int bsk_tftpd_set_busy(bsk_tftpd_context_id_t id, const char* msg); //msg=0 means NO BUSY
//Delegates:
typedef int (*bsk_tftpd_send_delegate_t)(bsk_tftpd_context_id_t, unsigned int client_address, unsigned int port, const void* const data, unsigned int size);
extern void bsk_tftpd_set_send_delegate(bsk_tftpd_context_id_t id, bsk_tftpd_send_delegate_t send_delegate);
typedef int (*bsk_tftpd_log_delegate_t)(bsk_tftpd_context_id_t, const char* const msg, ...);
extern void bsk_tftpd_set_log_delegate(bsk_tftpd_context_id_t, bsk_tftpd_log_delegate_t log_delegate);
typedef bsk_tftpd_receive_status_t (*bsk_tftpd_receive_delegate_t)(bsk_tftpd_context_id_t id, bsk_tftpd_receive_delegate_operation_t op, const void* const data, unsigned int block, unsigned int offset, unsigned int size_bytes);
extern void bsk_tftpd_set_receive_delegate(bsk_tftpd_context_id_t, bsk_tftpd_receive_delegate_t receive_delegate);
//Client I/F
extern int bsk_tftpd_send_rrq(unsigned int client_address, unsigned int port, const char* fname);
#ifdef __cplusplus
}
#endif
#endif /* BSK_TFTPD_H_ */