]> granicus.if.org Git - curl/commitdiff
complete rewrite to avoid the BSD license in the previous version
authorDaniel Stenberg <daniel@haxx.se>
Fri, 3 Aug 2001 15:11:28 +0000 (15:11 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 3 Aug 2001 15:11:28 +0000 (15:11 +0000)
lib/arpa_telnet.h

index 7c1c3b02b3c528571f0ab7d2a7f10bf66242c666..1f1890fb71f6652b6567c18f4ad7a25a5bd5f4af 100644 (file)
-/*
- * Copyright (c) 1983, 1993
- *     The Regents of the University of California.  All rights reserved.
+#ifndef __ARPA_TELNET_H
+#define __ARPA_TELNET_H
+/*****************************************************************************
+ *                                  _   _ ____  _     
+ *  Project                     ___| | | |  _ \| |    
+ *                             / __| | | | |_) | |    
+ *                            | (__| |_| |  _ <| |___ 
+ *                             \___|\___/|_| \_\_____|
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
+ * Copyright (C) 2001, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * In order to be useful for every potential user, curl and libcurl are
+ * dual-licensed under the MPL and the MIT/X-derivate licenses.
  *
- *     @(#)telnet.h    8.2 (Berkeley) 12/15/93
- */
-
-#ifndef _ARPA_TELNET_H
-#define _ARPA_TELNET_H
-
-/*
- * Definitions for the TELNET protocol.
- */
-#define        IAC     255             /* interpret as command: */
-#define        DONT    254             /* you are not to use option */
-#define        DO      253             /* please, you use option */
-#define        WONT    252             /* I won't use option */
-#define        WILL    251             /* I will use option */
-#define        SB      250             /* interpret as subnegotiation */
-#define        GA      249             /* you may reverse the line */
-#define        EL      248             /* erase the current line */
-#define        EC      247             /* erase the current character */
-#define        AYT     246             /* are you there */
-#define        AO      245             /* abort output--but let prog finish */
-#define        IP      244             /* interrupt process--permanently */
-#define        BREAK   243             /* break */
-#define        DM      242             /* data mark--for connect. cleaning */
-#define        NOP     241             /* nop */
-#define        SE      240             /* end sub negotiation */
-#define EOR     239             /* end of record (transparent mode) */
-#define        ABORT   238             /* Abort process */
-#define        SUSP    237             /* Suspend process */
-#define        xEOF    236             /* End of file: EOF is already used... */
-
-#define SYNCH  242             /* for telfunc calls */
-
-#ifdef TELCMDS
-static
-char *telcmds[] = {
-       "EOF", "SUSP", "ABORT", "EOR",
-       "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
-       "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
-};
-#else
-extern char *telcmds[];
-#endif
-
-#define        TELCMD_FIRST    xEOF
-#define        TELCMD_LAST     IAC
-#define        TELCMD_OK(x)    ((unsigned int)(x) <= TELCMD_LAST && \
-                        (unsigned int)(x) >= TELCMD_FIRST)
-#define        TELCMD(x)       telcmds[(x)-TELCMD_FIRST]
-
-/* telnet options */
-#define TELOPT_BINARY  0       /* 8-bit data path */
-#define TELOPT_ECHO    1       /* echo */
-#define        TELOPT_RCP      2       /* prepare to reconnect */
-#define        TELOPT_SGA      3       /* suppress go ahead */
-#define        TELOPT_NAMS     4       /* approximate message size */
-#define        TELOPT_STATUS   5       /* give status */
-#define        TELOPT_TM       6       /* timing mark */
-#define        TELOPT_RCTE     7       /* remote controlled transmission and echo */
-#define TELOPT_NAOL    8       /* negotiate about output line width */
-#define TELOPT_NAOP    9       /* negotiate about output page size */
-#define TELOPT_NAOCRD  10      /* negotiate about CR disposition */
-#define TELOPT_NAOHTS  11      /* negotiate about horizontal tabstops */
-#define TELOPT_NAOHTD  12      /* negotiate about horizontal tab disposition */
-#define TELOPT_NAOFFD  13      /* negotiate about formfeed disposition */
-#define TELOPT_NAOVTS  14      /* negotiate about vertical tab stops */
-#define TELOPT_NAOVTD  15      /* negotiate about vertical tab disposition */
-#define TELOPT_NAOLFD  16      /* negotiate about output LF disposition */
-#define TELOPT_XASCII  17      /* extended ascic character set */
-#define        TELOPT_LOGOUT   18      /* force logout */
-#define        TELOPT_BM       19      /* byte macro */
-#define        TELOPT_DET      20      /* data entry terminal */
-#define        TELOPT_SUPDUP   21      /* supdup protocol */
-#define        TELOPT_SUPDUPOUTPUT 22  /* supdup output */
-#define        TELOPT_SNDLOC   23      /* send location */
-#define        TELOPT_TTYPE    24      /* terminal type */
-#define        TELOPT_EOR      25      /* end or record */
-#define        TELOPT_TUID     26      /* TACACS user identification */
-#define        TELOPT_OUTMRK   27      /* output marking */
-#define        TELOPT_TTYLOC   28      /* terminal location number */
-#define        TELOPT_3270REGIME 29    /* 3270 regime */
-#define        TELOPT_X3PAD    30      /* X.3 PAD */
-#define        TELOPT_NAWS     31      /* window size */
-#define        TELOPT_TSPEED   32      /* terminal speed */
-#define        TELOPT_LFLOW    33      /* remote flow control */
-#define TELOPT_LINEMODE        34      /* Linemode option */
-#define TELOPT_XDISPLOC        35      /* X Display Location */
-#define TELOPT_OLD_ENVIRON 36  /* Old - Environment variables */
-#define        TELOPT_AUTHENTICATION 37/* Authenticate */
-#define        TELOPT_ENCRYPT  38      /* Encryption option */
-#define TELOPT_NEW_ENVIRON 39  /* New - Environment variables */
-#define        TELOPT_EXOPL    255     /* extended-options-list */
-
-
-#define        NTELOPTS        (1+TELOPT_NEW_ENVIRON)
-#ifdef TELOPTS
-static
-char *telopts[NTELOPTS+1] = {
-       "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
-       "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
-       "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
-       "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
-       "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
-       "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
-       "TACACS UID", "OUTPUT MARKING", "TTYLOC",
-       "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
-       "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
-       "ENCRYPT", "NEW-ENVIRON",
-       0,
-};
-#define        TELOPT_FIRST    TELOPT_BINARY
-#define        TELOPT_LAST     TELOPT_NEW_ENVIRON
-#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        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 */
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the MPL or the MIT/X-derivate
+ * licenses. You may pick one of these licenses.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id$
+ *****************************************************************************/
 
 /*
- * LINEMODE suboptions
+ * Telnet option defines. Add more here if in need.
  */
+#define TELOPT_BINARY   0  /* binary 8bit data */
+#define TELOPT_SGA      3  /* Supress Go Ahead */
+#define TELOPT_EXOPL  255  /* EXtended OPtions List */
+#define TELOPT_TTYPE   24  /* Terminal TYPE */
+#define TELOPT_XDISPLOC 35 /* X DISPlay LOCation */
 
-#define        LM_MODE         1
-#define        LM_FORWARDMASK  2
-#define        LM_SLC          3
-
-#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       0x1f
-
-/* Not part of protocol, but needed to simplify things... */
-#define MODE_FLOW              0x0100
-#define MODE_ECHO              0x0200
-#define MODE_INBIN             0x0400
-#define MODE_OUTBIN            0x0800
-#define MODE_FORCE             0x1000
-
-#define        SLC_SYNCH       1
-#define        SLC_BRK         2
-#define        SLC_IP          3
-#define        SLC_AO          4
-#define        SLC_AYT         5
-#define        SLC_EOR         6
-#define        SLC_ABORT       7
-#define        SLC_EOF         8
-#define        SLC_SUSP        9
-#define        SLC_EC          10
-#define        SLC_EL          11
-#define        SLC_EW          12
-#define        SLC_RP          13
-#define        SLC_LNEXT       14
-#define        SLC_XON         15
-#define        SLC_XOFF        16
-#define        SLC_FORW1       17
-#define        SLC_FORW2       18
-
-#define        NSLC            18
+#define TELOPT_NEW_ENVIRON 39  /* NEW ENVIRONment variables */
+#define NEW_ENV_VAR   0
+#define NEW_ENV_VALUE 1
 
 /*
- * For backwards compatability, we define SLC_NAMES to be the
- * list of names if SLC_NAMES is not defined.
+ * The telnet options represented as strings
  */
-#define        SLC_NAMELIST    "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
-                       "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
-                       "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0,
-#ifdef SLC_NAMES
-char *slc_names[] = {
-       SLC_NAMELIST
+static char *telnetoptions[]=
+{
+  "BINARY",      "ECHO",           "RCP",           "SUPPRESS GO AHEAD",
+  "NAME",        "STATUS"          "TIMING MARK",   "RCTE",
+  "NAOL",        "NAOP",           "NAOCRD",        "NAOHTS",
+  "NAOHTD",      "NAOFFD",         "NAOVTS",        "NAOVTD",
+  "NAOLFD",      "EXTEND ASCII",   "LOGOUT",        "BYTE MACRO",
+  "DE TERMINAL", "SUPDUP",         "SUPDUP OUTPUT", "SEND LOCATION",
+  "TERM TYPE",   "END OF RECORD",  "TACACS UID",    "OUTPUT MARKING",
+  "TTYLOC",      "3270 REGIME",    "X3 PAD",        "NAWS",
+  "TERM SPEED",  "LFLOW",          "LINEMODE",      "XDISPLOC",
+  "OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT",       "NEW-ENVIRON"
 };
-#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_VARIABLE    2
-#define        SLC_DEFAULT     3
-#define        SLC_LEVELBITS   0x03
+#define TELOPT_MAXIMUM TELOPT_NEW_ENVIRON
 
-#define        SLC_FUNC        0
-#define        SLC_FLAGS       1
-#define        SLC_VALUE       2
+#define TELOPT_OK(x) ((x) <= TELOPT_MAXIMUM)
+#define TELOPT(x)    telnetoptions[x]
 
-#define        SLC_ACK         0x80
-#define        SLC_FLUSHIN     0x40
-#define        SLC_FLUSHOUT    0x20
-
-#define        OLD_ENV_VAR     1
-#define        OLD_ENV_VALUE   0
-#define        NEW_ENV_VAR     0
-#define        NEW_ENV_VALUE   1
-#define        ENV_ESC         2
-#define        ENV_USERVAR     3
+#define NTELOPTS 40 
 
 /*
- * AUTHENTICATION suboptions
+ * First some defines
  */
+#define xEOF 236 /* End Of File */ 
+#define SE   240 /* Sub negotiation End */
+#define NOP  241 /* No OPeration */
+#define DM   242 /* Data Mark */
+#define GA   249 /* Go Ahead, reverse the line */
+#define SB   250 /* SuBnegotiation */
+#define WILL 251 /* Our side WILL use this option */
+#define WONT 252 /* Our side WON'T use this option */
+#define DO   253 /* DO use this option! */
+#define DONT 254 /* DON'T use this option! */
+#define IAC  255 /* Interpret As Command */
 
 /*
- * Who is authenticating who ...
+ * Then those numbers represented as strings:
  */
-#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,
+static char *telnetcmds[]=
+{
+  "EOF",  "SUSP",  "ABORT", "EOR",  "SE",
+  "NOP",  "DMARK", "BRK",   "IP",   "AO",
+  "AYT",  "EC",    "EL",    "GA",   "SB",
+  "WILL", "WONT",  "DO",    "DONT", "IAC"
 };
-#else
-extern char *authtype_names[];
-#endif
 
-#define        AUTHTYPE_NAME_OK(x)     ((unsigned int)(x) < AUTHTYPE_CNT)
-#define        AUTHTYPE_NAME(x)        authtype_names[x]
+#define TELCMD_MINIMUM xEOF /* the first one */
+#define TELCMD_MAXIMUM  IAC  /* surprise, 255 is the last one! ;-) */
 
-/*
- * 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 TELQUAL_IS   0
+#define TELQUAL_SEND 1
+#define TELQUAL_INFO 2
+#define TELQUAL_NAME 3
 
-#define        ENCTYPE_ANY             0
-#define        ENCTYPE_DES_CFB64       1
-#define        ENCTYPE_DES_OFB64       2
-#define        ENCTYPE_CNT             3
+#define TELCMD_OK(x) ( ((unsigned int)(x) >= TELCMD_MINIMUM) && \
+                       ((unsigned int)(x) <= TELCMD_MAXIMUM) )
+#define TELCMD(x)    telnetcmds[(x)-TELCMD_MINIMUM]
 
-#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]
-
-#define        ENCTYPE_NAME_OK(x)      ((unsigned int)(x) < ENCTYPE_CNT)
-#define        ENCTYPE_NAME(x)         enctype_names[x]
-#endif /* _ARPA_TELNET_H */