To compile on msdos and sun systems.
[unix-history] / usr / src / usr.bin / tn3270 / api / api_exch.h
CommitLineData
9ceed847
GM
1/*
2 * This file describes the structures passed back and forth
3 * between the API client and API server on a Unix-based
4 * tn3270 implementation.
62946391 5 *
d024bcc4
GM
6 */
7
8/*
9 * The following are the low-level opcodes exchanged between the
10 * two sides. These are designed to allow for type, sequence number,
11 * and direction checking.
12 *
13 * We enforce conversation flow. There are three states: CONTENTION,
14 * SEND, and RECEIVE. Both sides start in CONTENTION.
15 * We never leave RECEIVE state without first reading a TURNAROUND
16 * opcode. We never leave SEND state without first writing a TURNAROUND
17 * opcode. This scheme ensures that we always have conversation flowing
18 * in a synchronized direction (or detect an application error), and that
19 * we never hang with both sides trying to read from the "wire".
62946391 20 *
d024bcc4
GM
21 * State event action
22 *
23 * CONTENTION read request send TURNAROUND
24 * read RTS
25 * enter RECEIVE
26 * CONTENTION write request send RTS
27 * read TURNAROUND
28 * enter SEND
29 *
30 * RECEIVE read request read whatever
31 * RECEIVE write request read TURNAROUND
32 *
33 * SEND read request send TURNAROUND
34 * SEND write write whatever
9ceed847
GM
35 */
36
d024bcc4
GM
37#define EXCH_EXCH_COMMAND 0 /* The following is a command */
38#define EXCH_EXCH_TURNAROUND 1 /* Your turn to send */
39#define EXCH_EXCH_RTS 2 /* Request to send */
40#define EXCH_EXCH_TYPE 3 /* The following is a type */
41
42struct exch_exch {
43 unsigned char
44 opcode, /* COMMAND, TURNAROUND, or TYPE */
45 my_sequence, /* 0-ff, initially zero */
46 your_sequence, /* 0-ff, initially zero */
47 command_or_type; /* Application level command or type */
48 unsigned short
49 length; /* The length of any following data */
50};
51
52/*
53 * The following are the command codes which the higher level protocols
54 * send and receive.
55 */
9ceed847 56
d024bcc4
GM
57#define EXCH_CMD_ASSOCIATE 0 /* Connect [client->server] */
58#define EXCH_CMD_DISASSOCIATE 1 /* Disconnect [client->server] */
59#define EXCH_CMD_SEND_AUTH 2 /* Send password [server->client] */
9ceed847
GM
60 /*
61 * struct storeage_desc
62 * char prompt[]
63 * struct storeage_desc
64 * char seed[]
65 */
d024bcc4 66#define EXCH_CMD_AUTH 3 /* Authorization [client->server] */
9ceed847
GM
67 /*
68 * struct storeage_desc
69 * char authenticator[]
70 */
d024bcc4
GM
71#define EXCH_CMD_ASSOCIATED 4 /* Connected [server->client] */
72#define EXCH_CMD_REJECTED 5 /* Too bad [server->client] */
9ceed847
GM
73 /*
74 * struct storeage_desc
75 * char message[]
76 */
77
d024bcc4 78#define EXCH_CMD_REQUEST 6 /* A request [client->server] */
9ceed847
GM
79 /* struct regs,
80 * struct sregs,
81 * struct storage_desc
82 * char bytes[]
83 */
d024bcc4 84#define EXCH_CMD_GIMME 7 /* Send storage [server->client] */
9ceed847
GM
85 /*
86 * struct storage_desc
87 */
d024bcc4 88#define EXCH_CMD_HEREIS 8 /* Here is storage [BOTH WAYS] */
9ceed847
GM
89 /*
90 * struct storage_desc
91 * char bytes[]
92 */
d024bcc4 93#define EXCH_CMD_REPLY 9 /* End of discussion */
9ceed847
GM
94 /*
95 * struct regs,
96 * struct sregs,
97 */
98
d024bcc4
GM
99/*
100 * The following are typed parameters sent across the wire.
101 *
102 * This should be done much more generally, with some form of
103 * XDR or mapped conversation ability.
104 */
105
106#define EXCH_TYPE_REGS 0
107#define EXCH_TYPE_SREGS 1
108#define EXCH_TYPE_STORE_DESC 2
109#define EXCH_TYPE_BYTES 3
9ceed847
GM
110
111/*
62946391 112 * each parameter that comes over looks like:
9ceed847
GM
113 *
114 * char type of following
115 * short (2 bytes) length of following (network byte order)
116 * following
117 */
118
119struct storage_descriptor {
120 long location; /* In network byte order */
121 short length; /* In network byte order */
122};