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