/* * Copyright (c) 2023 joshua stein * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef __BINKP_H__ #define __BINKP_H__ #include "fidopkt.h" #include "tcp.h" #include "uthread.h" #include "util.h" struct binkp_frame { u_int16_t data_size; char command_id; #define BINKP_DATA -1 #define BINKP_COMMAND_M_NUL 0 #define BINKP_COMMAND_M_ADR 1 #define BINKP_COMMAND_M_PWD 2 #define BINKP_COMMAND_M_FILE 3 #define BINKP_COMMAND_M_OK 4 #define BINKP_COMMAND_M_EOB 5 #define BINKP_COMMAND_M_GOT 6 #define BINKP_COMMAND_M_ERR 7 #define BINKP_COMMAND_M_BSY 8 #define BINKP_COMMAND_M_GET 9 #define BINKP_COMMAND_M_SKIP 10 char type; #define BINKP_TYPE_DATA 0x0 #define BINKP_TYPE_COMMAND 0x1 }; struct binkp_file { char filename[64]; size_t size; unsigned long mtime; size_t data_read; Str255 pfilename; short frefnum; }; struct binkp_connection { TCPiopb tcp_send_iopb; TCPiopb tcp_read_iopb; StreamPtr tcp_stream; unsigned char *tcp_buf; size_t tcp_buf_size; wdsEntry tcp_wds[2]; TCPStatusPB tcp_status_pb; char *buf; size_t buf_size; struct binkp_frame cur_frame; struct binkp_file cur_incoming_file; time_t last_frame_at; bool done_receiving; bool done_sending; bool error; }; extern bool binkp_ready; extern time_t binkp_next_poll; extern bool binkp_last_poll_error; void binkp_init(void); bool binkp_reinit(void); void binkp_atexit(void); void binkp_poll(void); bool binkp_scan_message(struct fidopkt_message *msg); bool binkp_packets_in_outbox(void); #endif