"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "tn3270-5.2.0-glibc/tn3270/api/api_exch.h" of archive tn3270-5.2.0-glibc.tgz:


As a special service "SfR Fresh" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
    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	4.1 (Berkeley) 12/4/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 };