Home | History | Annotate | Line # | Download | only in X11
      1 /*
      2  * Copyright 1989 Network Computing Devices, Inc., Mountain View, California.
      3  *
      4  * Permission to use, copy, modify, and distribute this software and its
      5  * documentation for any purpose and without fee is hereby granted, provided
      6  * that the above copyright notice appear in all copies and that both that
      7  * copyright notice and this permission notice appear in supporting
      8  * documentation, and that the name of N.C.D. not be used in advertising or
      9  * publicity pertaining to distribution of the software without specific,
     10  * written prior permission.  N.C.D. makes no representations about the
     11  * suitability of this software for any purpose.  It is provided "as is"
     12  * without express or implied warranty.
     13  *
     14  */
     15 
     16 #ifndef _XDMCP_H_
     17 #define _XDMCP_H_
     18 
     19 #include <X11/Xmd.h>
     20 
     21 #include <X11/Xfuncproto.h>
     22 
     23 _XFUNCPROTOBEGIN
     24 
     25 #define XDM_PROTOCOL_VERSION	1
     26 #define XDM_UDP_PORT		177
     27 
     28 /* IANA has assigned FF0X:0:0:0:0:0:0:12B as the permanently assigned
     29  * multicast addresses for XDMCP, where X in the prefix may be replaced
     30  * by any valid scope identifier, such as 1 for Node-Local, 2 for Link-Local,
     31  * 5 for Site-Local, and so on.  We set the default here to the Link-Local
     32  * version to most closely match the old IPv4 subnet broadcast behavior.
     33  * Both xdm and X -query allow specifying a different address if a different
     34  * scope is defined.
     35  */
     36 #define XDM_DEFAULT_MCAST_ADDR6	"ff02:0:0:0:0:0:0:12b"
     37 
     38 #define XDM_MAX_MSGLEN		8192
     39 #define XDM_MIN_RTX		2
     40 #define XDM_MAX_RTX		32
     41 #define XDM_RTX_LIMIT		7
     42 #define XDM_KA_RTX_LIMIT	4
     43 #define XDM_DEF_DORMANCY	(3 * 60)	/* 3 minutes */
     44 #define XDM_MAX_DORMANCY	(24 * 60 * 60)	/* 24 hours */
     45 
     46 typedef enum {
     47     BROADCAST_QUERY = 1, QUERY, INDIRECT_QUERY, FORWARD_QUERY,
     48     WILLING, UNWILLING, REQUEST, ACCEPT, DECLINE, MANAGE, REFUSE,
     49     FAILED, KEEPALIVE, ALIVE
     50 } xdmOpCode;
     51 
     52 typedef enum {
     53     XDM_QUERY, XDM_BROADCAST, XDM_INDIRECT, XDM_COLLECT_QUERY,
     54     XDM_COLLECT_BROADCAST_QUERY, XDM_COLLECT_INDIRECT_QUERY,
     55     XDM_START_CONNECTION, XDM_AWAIT_REQUEST_RESPONSE,
     56     XDM_AWAIT_MANAGE_RESPONSE, XDM_MANAGE, XDM_RUN_SESSION, XDM_OFF,
     57     XDM_AWAIT_USER_INPUT, XDM_KEEPALIVE, XDM_AWAIT_ALIVE_RESPONSE,
     58 #if defined(IPv6) && defined(AF_INET6)
     59     XDM_MULTICAST, XDM_COLLECT_MULTICAST_QUERY,
     60 #endif
     61     XDM_KEEP_ME_LAST
     62 } xdmcp_states;
     63 
     64 #ifdef NOTDEF
     65 /* table of hosts */
     66 
     67 #define XDM_MAX_STR_LEN 21
     68 #define XDM_MAX_HOSTS 20
     69 struct xdm_host_table {
     70   struct sockaddr_in sockaddr;
     71   char name[XDM_MAX_STR_LEN];
     72   char status[XDM_MAX_STR_LEN];
     73 };
     74 #endif /* NOTDEF */
     75 
     76 typedef CARD8	*CARD8Ptr;
     77 typedef CARD16	*CARD16Ptr;
     78 typedef CARD32	*CARD32Ptr;
     79 
     80 typedef struct _ARRAY8 {
     81     CARD16	length;
     82     CARD8Ptr	data;
     83 } ARRAY8, *ARRAY8Ptr;
     84 
     85 typedef struct _ARRAY16 {
     86     CARD8	length;
     87     CARD16Ptr	data;
     88 } ARRAY16, *ARRAY16Ptr;
     89 
     90 typedef struct _ARRAY32 {
     91     CARD8	length;
     92     CARD32Ptr	data;
     93 } ARRAY32, *ARRAY32Ptr;
     94 
     95 typedef struct _ARRAYofARRAY8 {
     96     CARD8	length;
     97     ARRAY8Ptr	data;
     98 } ARRAYofARRAY8, *ARRAYofARRAY8Ptr;
     99 
    100 typedef struct _XdmcpHeader {
    101     CARD16  version, opcode, length;
    102 } XdmcpHeader, *XdmcpHeaderPtr;
    103 
    104 typedef struct _XdmcpBuffer {
    105     BYTE    *data;
    106     int	    size;		/* size of buffer pointed by to data */
    107     int	    pointer;		/* current index into data */
    108     int	    count;		/* bytes read from network into data */
    109 } XdmcpBuffer, *XdmcpBufferPtr;
    110 
    111 typedef struct _XdmAuthKey {
    112     BYTE    data[8];
    113 } XdmAuthKeyRec, *XdmAuthKeyPtr;
    114 
    115 
    116 /* implementation-independent network address structure.
    117    Equiv to sockaddr* for sockets. */
    118 
    119 typedef char *XdmcpNetaddr;
    120 
    121 #ifndef __has_attribute
    122 # define __has_attribute(x) 0  /* Compatibility with older compilers */
    123 #endif
    124 
    125 #if __has_attribute(access)
    126 # define XDM_ACCESS_ATTRIBUTE(X) __attribute__((access X))
    127 #else
    128 # define XDM_ACCESS_ATTRIBUTE(X)
    129 #endif
    130 
    131 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((read_only, 2))
    132 extern int XdmcpWriteARRAY16(XdmcpBufferPtr buffer, const ARRAY16Ptr array);
    133 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((read_only, 2))
    134 extern int XdmcpWriteARRAY32(XdmcpBufferPtr buffer, const ARRAY32Ptr array);
    135 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((read_only, 2))
    136 extern int XdmcpWriteARRAY8(XdmcpBufferPtr buffer, const ARRAY8Ptr array);
    137 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((read_only, 2))
    138 extern int XdmcpWriteARRAYofARRAY8(XdmcpBufferPtr buffer, const ARRAYofARRAY8Ptr array);
    139 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    140 extern int XdmcpWriteCARD16(XdmcpBufferPtr buffer, unsigned value);
    141 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    142 extern int XdmcpWriteCARD32(XdmcpBufferPtr buffer, unsigned value);
    143 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    144 extern int XdmcpWriteCARD8(XdmcpBufferPtr buffer, unsigned value);
    145 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((read_only, 2))
    146 extern int XdmcpWriteHeader(XdmcpBufferPtr  buffer, const XdmcpHeaderPtr  header);
    147 
    148 XDM_ACCESS_ATTRIBUTE((read_only, 2))
    149 extern int XdmcpFlush(int fd, XdmcpBufferPtr buffer, XdmcpNetaddr to, int tolen);
    150 
    151 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    152 extern int XdmcpReadARRAY16(XdmcpBufferPtr buffer, ARRAY16Ptr array);
    153 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    154 extern int XdmcpReadARRAY32(XdmcpBufferPtr buffer, ARRAY32Ptr array);
    155 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    156 extern int XdmcpReadARRAY8(XdmcpBufferPtr buffer, ARRAY8Ptr array);
    157 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    158 extern int XdmcpReadARRAYofARRAY8(XdmcpBufferPtr buffer, ARRAYofARRAY8Ptr array);
    159 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    160 extern int XdmcpReadCARD16(XdmcpBufferPtr buffer, CARD16Ptr valuep);
    161 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    162 extern int XdmcpReadCARD32(XdmcpBufferPtr buffer, CARD32Ptr valuep);
    163 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    164 extern int XdmcpReadCARD8(XdmcpBufferPtr buffer, CARD8Ptr valuep);
    165 XDM_ACCESS_ATTRIBUTE((read_write, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    166 extern int XdmcpReadHeader(XdmcpBufferPtr buffer, XdmcpHeaderPtr header);
    167 
    168 XDM_ACCESS_ATTRIBUTE((read_write, 2))
    169 extern int XdmcpFill(int fd, XdmcpBufferPtr buffer, XdmcpNetaddr from, int *fromlen);
    170 
    171 XDM_ACCESS_ATTRIBUTE((read_only, 1))
    172 extern int XdmcpReadRemaining(const XdmcpBufferPtr buffer);
    173 
    174 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    175 extern void XdmcpDisposeARRAY8(ARRAY8Ptr array);
    176 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    177 extern void XdmcpDisposeARRAY16(ARRAY16Ptr array);
    178 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    179 extern void XdmcpDisposeARRAY32(ARRAY32Ptr array);
    180 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    181 extern void XdmcpDisposeARRAYofARRAY8(ARRAYofARRAY8Ptr array);
    182 
    183 XDM_ACCESS_ATTRIBUTE((read_only, 1)) XDM_ACCESS_ATTRIBUTE((write_only, 2))
    184 extern int XdmcpCopyARRAY8(const ARRAY8Ptr src, ARRAY8Ptr dst);
    185 
    186 XDM_ACCESS_ATTRIBUTE((read_only, 1)) XDM_ACCESS_ATTRIBUTE((read_only, 2))
    187 extern int XdmcpARRAY8Equal(const ARRAY8Ptr array1, const ARRAY8Ptr array2);
    188 
    189 XDM_ACCESS_ATTRIBUTE((write_only, 1))
    190 extern void XdmcpGenerateKey (XdmAuthKeyPtr key);
    191 extern void XdmcpIncrementKey (XdmAuthKeyPtr key);
    192 extern void XdmcpDecrementKey (XdmAuthKeyPtr key);
    193 #ifdef HASXDMAUTH
    194 extern void XdmcpWrap(unsigned char *input, unsigned char *wrapper, unsigned char *output, int bytes);
    195 extern void XdmcpUnwrap(unsigned char *input, unsigned char *wrapper, unsigned char *output, int bytes);
    196 #endif
    197 
    198 #ifndef TRUE
    199 #define TRUE	1
    200 #define FALSE	0
    201 #endif
    202 
    203 XDM_ACCESS_ATTRIBUTE((read_only, 1)) XDM_ACCESS_ATTRIBUTE((read_only, 2))
    204 extern int XdmcpCompareKeys (const XdmAuthKeyPtr a, const XdmAuthKeyPtr b);
    205 
    206 XDM_ACCESS_ATTRIBUTE((write_only, 1))
    207 extern int XdmcpAllocARRAY16 (ARRAY16Ptr array, int length);
    208 XDM_ACCESS_ATTRIBUTE((write_only, 1))
    209 extern int XdmcpAllocARRAY32 (ARRAY32Ptr array, int length);
    210 XDM_ACCESS_ATTRIBUTE((write_only, 1))
    211 extern int XdmcpAllocARRAY8 (ARRAY8Ptr array, int length);
    212 XDM_ACCESS_ATTRIBUTE((write_only, 1))
    213 extern int XdmcpAllocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length);
    214 
    215 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    216 extern int XdmcpReallocARRAY16 (ARRAY16Ptr array, int length);
    217 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    218 extern int XdmcpReallocARRAY32 (ARRAY32Ptr array, int length);
    219 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    220 extern int XdmcpReallocARRAY8 (ARRAY8Ptr array, int length);
    221 XDM_ACCESS_ATTRIBUTE((read_write, 1))
    222 extern int XdmcpReallocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length);
    223 
    224 _XFUNCPROTOEND
    225 
    226 #endif /* _XDMCP_H_ */
    227