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