|
|
1.1 ! root 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) 3/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: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.