4.4BSD snapshot (revision 8.1); add 1993 to copyright
[unix-history] / usr / src / include / arpa / telnet.h
index ba0226b..0d74eb2 100644 (file)
@@ -1,12 +1,15 @@
 /*
 /*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1983, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)telnet.h    5.9 (Berkeley) %G%
+ *     @(#)telnet.h    8.1 (Berkeley) %G%
  */
 
  */
 
+#ifndef _TELNET_H_
+#define        _TELNET_H_
+
 /*
  * Definitions for the TELNET protocol.
  */
 /*
  * Definitions for the TELNET protocol.
  */
 char *telcmds[] = {
        "EOF", "SUSP", "ABORT", "EOR",
        "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
 char *telcmds[] = {
        "EOF", "SUSP", "ABORT", "EOR",
        "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
-       "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC",
+       "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
 };
 };
+#else
+extern char *telcmds[];
+#endif
+
 #define        TELCMD_FIRST    xEOF
 #define        TELCMD_LAST     IAC
 #define        TELCMD_FIRST    xEOF
 #define        TELCMD_LAST     IAC
-#define        TELCMD_OK(x)    ((x) <= TELCMD_LAST && (x) >= TELCMD_FIRST)
+#define        TELCMD_OK(x)    ((unsigned int)(x) <= TELCMD_LAST && \
+                        (unsigned int)(x) >= TELCMD_FIRST)
 #define        TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
 #define        TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
-#endif
 
 /* telnet options */
 #define TELOPT_BINARY  0       /* 8-bit data path */
 
 /* telnet options */
 #define TELOPT_BINARY  0       /* 8-bit data path */
@@ -81,12 +88,16 @@ char *telcmds[] = {
 #define        TELOPT_TSPEED   32      /* terminal speed */
 #define        TELOPT_LFLOW    33      /* remote flow control */
 #define TELOPT_LINEMODE        34      /* Linemode option */
 #define        TELOPT_TSPEED   32      /* terminal speed */
 #define        TELOPT_LFLOW    33      /* remote flow control */
 #define TELOPT_LINEMODE        34      /* Linemode option */
-#define        TELOPT_AUTHENTICATION 45 /* XXX Auto Authenticate */
+#define TELOPT_XDISPLOC        35      /* X Display Location */
+#define TELOPT_ENVIRON 36      /* Environment variables */
+#define        TELOPT_AUTHENTICATION 37/* Authenticate */
+#define        TELOPT_ENCRYPT  38      /* Encryption option */
 #define        TELOPT_EXOPL    255     /* extended-options-list */
 
 #define        TELOPT_EXOPL    255     /* extended-options-list */
 
-#define        NTELOPTS        (1+TELOPT_AUTHENTICATION)
+
+#define        NTELOPTS        (1+TELOPT_ENCRYPT)
 #ifdef TELOPTS
 #ifdef TELOPTS
-char *telopts[NTELOPTS] = {
+char *telopts[NTELOPTS+1] = {
        "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
        "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
        "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
        "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
        "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
        "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
@@ -95,19 +106,27 @@ char *telopts[NTELOPTS] = {
        "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
        "TACACS UID", "OUTPUT MARKING", "TTYLOC",
        "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
        "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
        "TACACS UID", "OUTPUT MARKING", "TTYLOC",
        "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
-       "LINEMODE", "UNKNOWN 35", "UNKNOWN 36", "UNKNOWN 37",
-       "UNKNOWN 38", "UNKNOWN 39", "UNKNOWN 40", "UNKNOWN 41",
-       "UNKNOWN 42", "UNKNOWN 43", "UNKNOWN 44", "AUTHENTICATION",
+       "LINEMODE", "XDISPLOC", "ENVIRON", "AUTHENTICATION",
+       "ENCRYPT",
+       0,
 };
 #define        TELOPT_FIRST    TELOPT_BINARY
 };
 #define        TELOPT_FIRST    TELOPT_BINARY
-#define        TELOPT_LAST     TELOPT_AUTHENTICATION
-#define        TELOPT_OK(x)    ((x) <= TELOPT_LAST && (x) >= TELOPT_FIRST)
+#define        TELOPT_LAST     TELOPT_ENCRYPT
+#define        TELOPT_OK(x)    ((unsigned int)(x) <= TELOPT_LAST)
 #define        TELOPT(x)       telopts[(x)-TELOPT_FIRST]
 #endif
 
 /* sub-option qualifiers */
 #define        TELQUAL_IS      0       /* option is... */
 #define        TELQUAL_SEND    1       /* send option */
 #define        TELOPT(x)       telopts[(x)-TELOPT_FIRST]
 #endif
 
 /* sub-option qualifiers */
 #define        TELQUAL_IS      0       /* option is... */
 #define        TELQUAL_SEND    1       /* send option */
+#define        TELQUAL_INFO    2       /* ENVIRON: informational version of IS */
+#define        TELQUAL_REPLY   2       /* AUTHENTICATION: client version of IS */
+#define        TELQUAL_NAME    3       /* AUTHENTICATION: client version of IS */
+
+#define        LFLOW_OFF               0       /* Disable remote flow control */
+#define        LFLOW_ON                1       /* Enable remote flow control */
+#define        LFLOW_RESTART_ANY       2       /* Restart output on any char */
+#define        LFLOW_RESTART_XON       3       /* Restart output only on XON */
 
 /*
  * LINEMODE suboptions
 
 /*
  * LINEMODE suboptions
@@ -120,8 +139,10 @@ char *telopts[NTELOPTS] = {
 #define        MODE_EDIT       0x01
 #define        MODE_TRAPSIG    0x02
 #define        MODE_ACK        0x04
 #define        MODE_EDIT       0x01
 #define        MODE_TRAPSIG    0x02
 #define        MODE_ACK        0x04
+#define MODE_SOFT_TAB  0x08
+#define MODE_LIT_ECHO  0x10
 
 
-#define        MODE_MASK       (MODE_EDIT|MODE_TRAPSIG|MODE_ACK)
+#define        MODE_MASK       0x1f
 
 /* Not part of protocol, but needed to simplify things... */
 #define MODE_FLOW              0x0100
 
 /* Not part of protocol, but needed to simplify things... */
 #define MODE_FLOW              0x0100
@@ -151,9 +172,24 @@ char *telopts[NTELOPTS] = {
 
 #define        NSLC            18
 
 
 #define        NSLC            18
 
-#define        SLC_NAMES       "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
+/*
+ * For backwards compatability, we define SLC_NAMES to be the
+ * list of names if SLC_NAMES is not defined.
+ */
+#define        SLC_NAMELIST    "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
                        "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
                        "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
-                       "LNEXT", "XON", "XOFF", "FORW1", "FORW2"
+                       "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
+#ifdef SLC_NAMES
+char *slc_names[] = {
+       SLC_NAMELIST
+};
+#else
+extern char *slc_names[];
+#define        SLC_NAMES SLC_NAMELIST
+#endif
+
+#define        SLC_NAME_OK(x)  ((unsigned int)(x) <= NSLC)
+#define SLC_NAME(x)    slc_names[x]
 
 #define        SLC_NOSUPPORT   0
 #define        SLC_CANTCHANGE  1
 
 #define        SLC_NOSUPPORT   0
 #define        SLC_CANTCHANGE  1
@@ -169,16 +205,87 @@ char *telopts[NTELOPTS] = {
 #define        SLC_FLUSHIN     0x40
 #define        SLC_FLUSHOUT    0x20
 
 #define        SLC_FLUSHIN     0x40
 #define        SLC_FLUSHOUT    0x20
 
+#define        ENV_VALUE       0
+#define        ENV_VAR         1
+#define        ENV_ESC         2
+#define ENV_USERVAR    3
+
 /*
  * AUTHENTICATION suboptions
  */
 
 /*
  * AUTHENTICATION suboptions
  */
 
-#define        TELQUAL_AUTHTYPE_NONE           0
-#define        TELQUAL_AUTHTYPE_PRIVATE        1
-#define        TELQUAL_AUTHTYPE_KERBEROS       2
+/*
+ * Who is authenticating who ...
+ */
+#define        AUTH_WHO_CLIENT         0       /* Client authenticating server */
+#define        AUTH_WHO_SERVER         1       /* Server authenticating client */
+#define        AUTH_WHO_MASK           1
+
+/*
+ * amount of authentication done
+ */
+#define        AUTH_HOW_ONE_WAY        0
+#define        AUTH_HOW_MUTUAL         2
+#define        AUTH_HOW_MASK           2
+
+#define        AUTHTYPE_NULL           0
+#define        AUTHTYPE_KERBEROS_V4    1
+#define        AUTHTYPE_KERBEROS_V5    2
+#define        AUTHTYPE_SPX            3
+#define        AUTHTYPE_MINK           4
+#define        AUTHTYPE_CNT            5
+
+#define        AUTHTYPE_TEST           99
+
+#ifdef AUTH_NAMES
+char *authtype_names[] = {
+       "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
+};
+#else
+extern char *authtype_names[];
+#endif
+
+#define        AUTHTYPE_NAME_OK(x)     ((unsigned int)(x) < AUTHTYPE_CNT)
+#define        AUTHTYPE_NAME(x)        authtype_names[x]
+
+/*
+ * ENCRYPTion suboptions
+ */
+#define        ENCRYPT_IS              0       /* I pick encryption type ... */
+#define        ENCRYPT_SUPPORT         1       /* I support encryption types ... */
+#define        ENCRYPT_REPLY           2       /* Initial setup response */
+#define        ENCRYPT_START           3       /* Am starting to send encrypted */
+#define        ENCRYPT_END             4       /* Am ending encrypted */
+#define        ENCRYPT_REQSTART        5       /* Request you start encrypting */
+#define        ENCRYPT_REQEND          6       /* Request you send encrypting */
+#define        ENCRYPT_ENC_KEYID       7
+#define        ENCRYPT_DEC_KEYID       8
+#define        ENCRYPT_CNT             9
+
+#define        ENCTYPE_ANY             0
+#define        ENCTYPE_DES_CFB64       1
+#define        ENCTYPE_DES_OFB64       2
+#define        ENCTYPE_CNT             3
+
+#ifdef ENCRYPT_NAMES
+char *encrypt_names[] = {
+       "IS", "SUPPORT", "REPLY", "START", "END",
+       "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
+       0,
+};
+char *enctype_names[] = {
+       "ANY", "DES_CFB64",  "DES_OFB64",  0,
+};
+#else
+extern char *encrypt_names[];
+extern char *enctype_names[];
+#endif
+
+
+#define        ENCRYPT_NAME_OK(x)      ((unsigned int)(x) < ENCRYPT_CNT)
+#define        ENCRYPT_NAME(x)         encrypt_names[x]
 
 
-/* Kerberos-specific */
+#define        ENCTYPE_NAME_OK(x)      ((unsigned int)(x) < ENCTYPE_CNT)
+#define        ENCTYPE_NAME(x)         enctype_names[x]
 
 
-#define        TELQUAL_AUTHTYPE_KERBEROS_V4            4
-#define        TELQUAL_AUTHTYPE_KERBEROS_V5            5
-#define        TELQUAL_AUTHTYPE_KERBEROS_USERNAME      1
+#endif /* !_TELNET_H_ */