Xdmcp.h revision fc544a13
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
46typedef 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
52typedef 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
69struct 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
76typedef CARD8	*CARD8Ptr;
77typedef CARD16	*CARD16Ptr;
78typedef CARD32	*CARD32Ptr;
79
80typedef struct _ARRAY8 {
81    CARD16	length;
82    CARD8Ptr	data;
83} ARRAY8, *ARRAY8Ptr;
84
85typedef struct _ARRAY16 {
86    CARD8	length;
87    CARD16Ptr	data;
88} ARRAY16, *ARRAY16Ptr;
89
90typedef struct _ARRAY32 {
91    CARD8	length;
92    CARD32Ptr	data;
93} ARRAY32, *ARRAY32Ptr;
94
95typedef struct _ARRAYofARRAY8 {
96    CARD8	length;
97    ARRAY8Ptr	data;
98} ARRAYofARRAY8, *ARRAYofARRAY8Ptr;
99
100typedef struct _XdmcpHeader {
101    CARD16  version, opcode, length;
102} XdmcpHeader, *XdmcpHeaderPtr;
103
104typedef 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
111typedef struct _XdmAuthKey {
112    BYTE    data[8];
113} XdmAuthKeyRec, *XdmAuthKeyPtr;
114
115
116/* implementation-independent network address structure.
117   Equiv to sockaddr* for sockets. */
118
119typedef char *XdmcpNetaddr;
120
121extern int XdmcpWriteARRAY16(XdmcpBufferPtr buffer, const ARRAY16Ptr array);
122extern int XdmcpWriteARRAY32(XdmcpBufferPtr buffer, const ARRAY32Ptr array);
123extern int XdmcpWriteARRAY8(XdmcpBufferPtr buffer, const ARRAY8Ptr array);
124extern int XdmcpWriteARRAYofARRAY8(XdmcpBufferPtr buffer, const ARRAYofARRAY8Ptr array);
125extern int XdmcpWriteCARD16(XdmcpBufferPtr buffer, unsigned value);
126extern int XdmcpWriteCARD32(XdmcpBufferPtr buffer, unsigned value);
127extern int XdmcpWriteCARD8(XdmcpBufferPtr buffer, unsigned value);
128extern int XdmcpWriteHeader(XdmcpBufferPtr  buffer, const XdmcpHeaderPtr  header);
129
130extern int XdmcpFlush(int fd, XdmcpBufferPtr buffer, XdmcpNetaddr to, int tolen);
131
132extern int XdmcpReadARRAY16(XdmcpBufferPtr buffer, ARRAY16Ptr array);
133extern int XdmcpReadARRAY32(XdmcpBufferPtr buffer, ARRAY32Ptr array);
134extern int XdmcpReadARRAY8(XdmcpBufferPtr buffer, ARRAY8Ptr array);
135extern int XdmcpReadARRAYofARRAY8(XdmcpBufferPtr buffer, ARRAYofARRAY8Ptr array);
136extern int XdmcpReadCARD16(XdmcpBufferPtr buffer, CARD16Ptr valuep);
137extern int XdmcpReadCARD32(XdmcpBufferPtr buffer, CARD32Ptr valuep);
138extern int XdmcpReadCARD8(XdmcpBufferPtr buffer, CARD8Ptr valuep);
139extern int XdmcpReadHeader(XdmcpBufferPtr buffer, XdmcpHeaderPtr header);
140
141extern int XdmcpFill(int fd, XdmcpBufferPtr buffer, XdmcpNetaddr from, int *fromlen);
142
143extern int XdmcpReadRemaining(const XdmcpBufferPtr buffer);
144
145extern void XdmcpDisposeARRAY8(ARRAY8Ptr array);
146extern void XdmcpDisposeARRAY16(ARRAY16Ptr array);
147extern void XdmcpDisposeARRAY32(ARRAY32Ptr array);
148extern void XdmcpDisposeARRAYofARRAY8(ARRAYofARRAY8Ptr array);
149
150extern int XdmcpCopyARRAY8(const ARRAY8Ptr src, ARRAY8Ptr dst);
151
152extern int XdmcpARRAY8Equal(const ARRAY8Ptr array1, const ARRAY8Ptr array2);
153
154extern void XdmcpGenerateKey (XdmAuthKeyPtr key);
155extern void XdmcpIncrementKey (XdmAuthKeyPtr key);
156extern void XdmcpDecrementKey (XdmAuthKeyPtr key);
157#ifdef HASXDMAUTH
158extern void XdmcpWrap(unsigned char *input, unsigned char *wrapper, unsigned char *output, int bytes);
159extern void XdmcpUnwrap(unsigned char *input, unsigned char *wrapper, unsigned char *output, int bytes);
160#endif
161
162#ifndef TRUE
163#define TRUE	1
164#define FALSE	0
165#endif
166
167extern int XdmcpCompareKeys (const XdmAuthKeyPtr a, const XdmAuthKeyPtr b);
168
169extern int XdmcpAllocARRAY16 (ARRAY16Ptr array, int length);
170extern int XdmcpAllocARRAY32 (ARRAY32Ptr array, int length);
171extern int XdmcpAllocARRAY8 (ARRAY8Ptr array, int length);
172extern int XdmcpAllocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length);
173
174extern int XdmcpReallocARRAY16 (ARRAY16Ptr array, int length);
175extern int XdmcpReallocARRAY32 (ARRAY32Ptr array, int length);
176extern int XdmcpReallocARRAY8 (ARRAY8Ptr array, int length);
177extern int XdmcpReallocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length);
178
179_XFUNCPROTOEND
180
181#endif /* _XDMCP_H_ */
182