1#ifndef BACKEND_H 2#define BACKEND_H 3 4#include <stddef.h> 5#include <inttypes.h> 6#include <stdbool.h> 7#include <zlib.h> 8#include "serial.h" 9#include "tftp.h" 10 11/* Backend flags */ 12#define BE_NEEDLEN 0x01 13 14struct upload_backend { 15 const char *name; 16 const char *helpmsg; 17 int minargs; 18 19 size_t dbytes; 20 size_t zbytes; 21 const char **argv; 22 23 uint32_t now; 24 25 int (*write)(struct upload_backend *); 26 27 z_stream zstream; 28 char *outbuf; 29 size_t alloc; 30}; 31 32/* zout.c */ 33int init_data(struct upload_backend *be, const char *argv[]); 34int write_data(struct upload_backend *be, const void *buf, size_t len); 35int flush_data(struct upload_backend *be); 36 37/* cpio.c */ 38#define cpio_init init_data 39int cpio_hdr(struct upload_backend *be, uint32_t mode, size_t datalen, 40 const char *filename); 41int cpio_mkdir(struct upload_backend *be, const char *filename); 42int cpio_writefile(struct upload_backend *be, const char *filename, 43 const void *data, size_t len); 44int cpio_close(struct upload_backend *be); 45#define MODE_FILE 0100644 46#define MODE_DIR 0040755 47 48/* backends.c */ 49struct upload_backend *get_upload_backend(const char *name); 50 51/* backends */ 52extern struct upload_backend upload_tftp; 53extern struct upload_backend upload_ymodem; 54extern struct upload_backend upload_srec; 55 56#endif /* BACKEND_H */ 57