AmendHub

Download

jcs

/

subtext

/

nomodem.h

 

(View History)

jcs   nomodem: Read upload data from ibuf in chunks to speed it up a little Latest amendment: 495 on 2023-04-27

1 /*
2 * Copyright (c) 2023 joshua stein <jcs@jcs.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 #ifndef __NOMODEM_H__
18 #define __NOMODEM_H__
19
20 #include "session.h"
21 #include "util.h"
22
23 /* handshake sequence */
24 #define NOMODEM_START0 0x01
25 #define NOMODEM_START1 0x00
26 #define NOMODEM_START2 0x01
27 #define NOMODEM_START3 0x00
28
29 /* then a version */
30 #define NOMODEM_VERSION 0x01
31
32 /* then a command */
33 #define NOMODEM_CMD_SEND 0x01 /* we are sending you a file */
34 #define NOMODEM_CMD_RECEIVE 0x02 /* please upload a file to us */
35
36 #define NOMODEM_ACK 0x01
37 #define NOMODEM_CANCEL 0x03 /* ^C */
38
39 #define NOMODEM_TIMEOUT 20
40
41 enum {
42 NOMODEM_MODE_SENDING,
43 NOMODEM_MODE_RECEIVING
44 };
45
46 struct nomodem_session {
47 struct session *session;
48
49 short mode;
50 FILE *file;
51 unsigned long file_size;
52 char file_name[64];
53 char *file_path;
54 bool need_header;
55 bool need_header_ack;
56 unsigned long last_input;
57
58 unsigned char *buf;
59 size_t buf_size;
60 };
61
62 struct nomodem_session * nomodem_send(struct session *s, FILE *fp,
63 char *filename);
64 struct nomodem_session * nomodem_receive(struct session *s, char *path);
65 bool nomodem_timed_out(struct nomodem_session *ns);
66 bool nomodem_continue(struct nomodem_session *ns);
67 void nomodem_finish(struct nomodem_session **nsp);
68 unsigned short nomodem_get_char(struct nomodem_session *ns);
69
70 #endif