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