| #ifndef BACKEND_H |
| #define BACKEND_H |
| |
| #include <stddef.h> |
| #include <inttypes.h> |
| #include <stdbool.h> |
| #include <zlib.h> |
| #include "serial.h" |
| #include "tftp.h" |
| |
| /* Backend flags */ |
| #define BE_NEEDLEN 0x01 |
| |
| struct upload_backend { |
| const char *name; |
| const char *helpmsg; |
| int minargs; |
| |
| size_t dbytes; |
| size_t zbytes; |
| const char **argv; |
| |
| uint32_t now; |
| |
| int (*write)(struct upload_backend *); |
| |
| z_stream zstream; |
| char *outbuf; |
| size_t alloc; |
| }; |
| |
| /* zout.c */ |
| int init_data(struct upload_backend *be, const char *argv[]); |
| int write_data(struct upload_backend *be, const void *buf, size_t len); |
| int flush_data(struct upload_backend *be); |
| |
| /* cpio.c */ |
| #define cpio_init init_data |
| int cpio_hdr(struct upload_backend *be, uint32_t mode, size_t datalen, |
| const char *filename); |
| int cpio_mkdir(struct upload_backend *be, const char *filename); |
| int cpio_writefile(struct upload_backend *be, const char *filename, |
| const void *data, size_t len); |
| int cpio_close(struct upload_backend *be); |
| #define MODE_FILE 0100644 |
| #define MODE_DIR 0040755 |
| |
| /* backends.c */ |
| struct upload_backend *get_upload_backend(const char *name); |
| |
| /* backends */ |
| extern struct upload_backend upload_tftp; |
| extern struct upload_backend upload_ymodem; |
| extern struct upload_backend upload_srec; |
| |
| #endif /* BACKEND_H */ |