xref: /original-bsd/usr.bin/tn3270/api/api_exch.h (revision f1656be1)
1 /*
2  * Copyright (c) 1988 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of California at Berkeley. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  *
12  *	@(#)api_exch.h	3.2 (Berkeley) 03/28/88
13  */
14 
15 /*
16  * This file describes the structures passed back and forth
17  * between the API client and API server on a Unix-based
18  * tn3270 implementation.
19  */
20 
21 /*
22  * The following are the low-level opcodes exchanged between the
23  * two sides.  These are designed to allow for type, sequence number,
24  * and direction checking.
25  *
26  * We enforce conversation flow.  There are three states: CONTENTION,
27  * SEND, and RECEIVE.  Both sides start in CONTENTION.
28  * We never leave RECEIVE state without first reading a TURNAROUND
29  * opcode.  We never leave SEND state without first writing a TURNAROUND
30  * opcode.  This scheme ensures that we always have conversation flowing
31  * in a synchronized direction (or detect an application error), and that
32  * we never hang with both sides trying to read from the "wire".
33  *
34  * State	event			action
35  *
36  * CONTENTION	read request		send TURNAROUND
37  *					read RTS
38  *					enter RECEIVE
39  * CONTENTION	write request		send RTS
40  *					read TURNAROUND
41  *					enter SEND
42  *
43  * RECEIVE	read request		read whatever
44  * RECEIVE	write request		read TURNAROUND
45  *
46  * SEND		read request		send TURNAROUND
47  * SEND		write			write whatever
48  */
49 
50 #define	EXCH_EXCH_COMMAND	0	/* The following is a command */
51 #define	EXCH_EXCH_TURNAROUND	1	/* Your turn to send */
52 #define	EXCH_EXCH_RTS		2	/* Request to send */
53 #define	EXCH_EXCH_TYPE		3	/* The following is a type */
54 
55 struct exch_exch {
56     unsigned char
57 	opcode,			/* COMMAND, TURNAROUND, or TYPE */
58 	my_sequence,		/* 0-ff, initially zero */
59 	your_sequence,		/* 0-ff, initially zero */
60 	command_or_type;	/* Application level command or type */
61     unsigned short
62 	length;			/* The length of any following data */
63 };
64 
65 /*
66  * The following are the command codes which the higher level protocols
67  * send and receive.
68  */
69 
70 #define	EXCH_CMD_ASSOCIATE	0	/* Connect [client->server] */
71 	/*
72 	 * struct storage_desc
73 	 * char key[]
74 	 */
75 #define	EXCH_CMD_DISASSOCIATE	1	/* Disconnect [client->server] */
76 #define	EXCH_CMD_SEND_AUTH	2	/* Send password [server->client] */
77 	/*
78 	 * struct storage_desc
79 	 * char prompt[]
80 	 * struct storage_desc
81 	 * char seed[]
82 	 */
83 #define	EXCH_CMD_AUTH		3	/* Authorization [client->server] */
84 	/*
85 	 * struct storage_desc
86 	 * char authenticator[]
87 	 */
88 #define	EXCH_CMD_ASSOCIATED	4	/* Connected [server->client] */
89 #define	EXCH_CMD_REJECTED	5	/* Too bad [server->client] */
90 	/*
91 	 * struct storage_desc
92 	 * char message[]
93 	 */
94 
95 #define	EXCH_CMD_REQUEST	6	/* A request [client->server] */
96 	/* struct regs,
97 	 * struct sregs,
98 	 * struct storage_desc
99 	 * char bytes[]
100 	 */
101 #define	EXCH_CMD_GIMME		7	/* Send storage [server->client] */
102 	/*
103 	 * struct storage_desc
104 	 */
105 #define	EXCH_CMD_HEREIS		8	/* Here is storage [BOTH WAYS] */
106 	/*
107 	 * struct storage_desc
108 	 * char bytes[]
109 	 */
110 #define	EXCH_CMD_REPLY		9	/* End of discussion */
111 	/*
112 	 * struct regs,
113 	 * struct sregs,
114 	 */
115 
116 /*
117  * The following are typed parameters sent across the wire.
118  *
119  * This should be done much more generally, with some form of
120  * XDR or mapped conversation ability.
121  */
122 
123 #define	EXCH_TYPE_REGS		0
124 #define	EXCH_TYPE_SREGS		1
125 #define	EXCH_TYPE_STORE_DESC	2
126 #define	EXCH_TYPE_BYTES		3
127 
128 /*
129  * each parameter that comes over looks like:
130  *
131  *	char			type of following
132  *	short (2 bytes)		length of following (network byte order)
133  *	following
134  */
135 
136 struct storage_descriptor {
137     long	location;	/* In network byte order */
138     short	length;		/* In network byte order */
139 };
140