Xdmcp.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. #ifndef _XDMCP_H_
  16. #define _XDMCP_H_
  17. #include <X11/Xmd.h>
  18. #include <X11/Xfuncproto.h>
  19. _XFUNCPROTOBEGIN
  20. #define XDM_PROTOCOL_VERSION 1
  21. #define XDM_UDP_PORT 177
  22. /* IANA has assigned FF0X:0:0:0:0:0:0:12B as the permanently assigned
  23. * multicast addresses for XDMCP, where X in the prefix may be replaced
  24. * by any valid scope identifier, such as 1 for Node-Local, 2 for Link-Local,
  25. * 5 for Site-Local, and so on. We set the default here to the Link-Local
  26. * version to most closely match the old IPv4 subnet broadcast behavior.
  27. * Both xdm and X -query allow specifying a different address if a different
  28. * scope is defined.
  29. */
  30. #define XDM_DEFAULT_MCAST_ADDR6 "ff02:0:0:0:0:0:0:12b"
  31. #define XDM_MAX_MSGLEN 8192
  32. #define XDM_MIN_RTX 2
  33. #define XDM_MAX_RTX 32
  34. #define XDM_RTX_LIMIT 7
  35. #define XDM_KA_RTX_LIMIT 4
  36. #define XDM_DEF_DORMANCY (3 * 60) /* 3 minutes */
  37. #define XDM_MAX_DORMANCY (24 * 60 * 60) /* 24 hours */
  38. typedef enum {
  39. BROADCAST_QUERY = 1, QUERY, INDIRECT_QUERY, FORWARD_QUERY,
  40. WILLING, UNWILLING, REQUEST, ACCEPT, DECLINE, MANAGE, REFUSE,
  41. FAILED, KEEPALIVE, ALIVE
  42. } xdmOpCode;
  43. typedef enum {
  44. XDM_QUERY, XDM_BROADCAST, XDM_INDIRECT, XDM_COLLECT_QUERY,
  45. XDM_COLLECT_BROADCAST_QUERY, XDM_COLLECT_INDIRECT_QUERY,
  46. XDM_START_CONNECTION, XDM_AWAIT_REQUEST_RESPONSE,
  47. XDM_AWAIT_MANAGE_RESPONSE, XDM_MANAGE, XDM_RUN_SESSION, XDM_OFF,
  48. XDM_AWAIT_USER_INPUT, XDM_KEEPALIVE, XDM_AWAIT_ALIVE_RESPONSE,
  49. #if defined(IPv6) && defined(AF_INET6)
  50. XDM_MULTICAST, XDM_COLLECT_MULTICAST_QUERY,
  51. #endif
  52. XDM_KEEP_ME_LAST
  53. } xdmcp_states;
  54. #ifdef NOTDEF
  55. /* table of hosts */
  56. #define XDM_MAX_STR_LEN 21
  57. #define XDM_MAX_HOSTS 20
  58. struct xdm_host_table {
  59. struct sockaddr_in sockaddr;
  60. char name[XDM_MAX_STR_LEN];
  61. char status[XDM_MAX_STR_LEN];
  62. };
  63. #endif /* NOTDEF */
  64. typedef CARD8 *CARD8Ptr;
  65. typedef CARD16 *CARD16Ptr;
  66. typedef CARD32 *CARD32Ptr;
  67. typedef struct _ARRAY8 {
  68. CARD16 length;
  69. CARD8Ptr data;
  70. } ARRAY8, *ARRAY8Ptr;
  71. typedef struct _ARRAY16 {
  72. CARD8 length;
  73. CARD16Ptr data;
  74. } ARRAY16, *ARRAY16Ptr;
  75. typedef struct _ARRAY32 {
  76. CARD8 length;
  77. CARD32Ptr data;
  78. } ARRAY32, *ARRAY32Ptr;
  79. typedef struct _ARRAYofARRAY8 {
  80. CARD8 length;
  81. ARRAY8Ptr data;
  82. } ARRAYofARRAY8, *ARRAYofARRAY8Ptr;
  83. typedef struct _XdmcpHeader {
  84. CARD16 version, opcode, length;
  85. } XdmcpHeader, *XdmcpHeaderPtr;
  86. typedef struct _XdmcpBuffer {
  87. BYTE *data;
  88. int size; /* size of buffer pointed by to data */
  89. int pointer; /* current index into data */
  90. int count; /* bytes read from network into data */
  91. } XdmcpBuffer, *XdmcpBufferPtr;
  92. typedef struct _XdmAuthKey {
  93. BYTE data[8];
  94. } XdmAuthKeyRec, *XdmAuthKeyPtr;
  95. /* implementation-independent network address structure.
  96. Equiv to sockaddr* for sockets. */
  97. typedef char *XdmcpNetaddr;
  98. extern int XdmcpWriteARRAY16(XdmcpBufferPtr buffer, const ARRAY16Ptr array);
  99. extern int XdmcpWriteARRAY32(XdmcpBufferPtr buffer, const ARRAY32Ptr array);
  100. extern int XdmcpWriteARRAY8(XdmcpBufferPtr buffer, const ARRAY8Ptr array);
  101. extern int XdmcpWriteARRAYofARRAY8(XdmcpBufferPtr buffer, const ARRAYofARRAY8Ptr array);
  102. extern int XdmcpWriteCARD16(XdmcpBufferPtr buffer, unsigned value);
  103. extern int XdmcpWriteCARD32(XdmcpBufferPtr buffer, unsigned value);
  104. extern int XdmcpWriteCARD8(XdmcpBufferPtr buffer, unsigned value);
  105. extern int XdmcpWriteHeader(XdmcpBufferPtr buffer, const XdmcpHeaderPtr header);
  106. extern int XdmcpFlush(int fd, XdmcpBufferPtr buffer, XdmcpNetaddr to, int tolen);
  107. extern int XdmcpReadARRAY16(XdmcpBufferPtr buffer, ARRAY16Ptr array);
  108. extern int XdmcpReadARRAY32(XdmcpBufferPtr buffer, ARRAY32Ptr array);
  109. extern int XdmcpReadARRAY8(XdmcpBufferPtr buffer, ARRAY8Ptr array);
  110. extern int XdmcpReadARRAYofARRAY8(XdmcpBufferPtr buffer, ARRAYofARRAY8Ptr array);
  111. extern int XdmcpReadCARD16(XdmcpBufferPtr buffer, CARD16Ptr valuep);
  112. extern int XdmcpReadCARD32(XdmcpBufferPtr buffer, CARD32Ptr valuep);
  113. extern int XdmcpReadCARD8(XdmcpBufferPtr buffer, CARD8Ptr valuep);
  114. extern int XdmcpReadHeader(XdmcpBufferPtr buffer, XdmcpHeaderPtr header);
  115. extern int XdmcpFill(int fd, XdmcpBufferPtr buffer, XdmcpNetaddr from, int *fromlen);
  116. extern int XdmcpReadRemaining(const XdmcpBufferPtr buffer);
  117. extern void XdmcpDisposeARRAY8(ARRAY8Ptr array);
  118. extern void XdmcpDisposeARRAY16(ARRAY16Ptr array);
  119. extern void XdmcpDisposeARRAY32(ARRAY32Ptr array);
  120. extern void XdmcpDisposeARRAYofARRAY8(ARRAYofARRAY8Ptr array);
  121. extern int XdmcpCopyARRAY8(const ARRAY8Ptr src, ARRAY8Ptr dst);
  122. extern int XdmcpARRAY8Equal(const ARRAY8Ptr array1, const ARRAY8Ptr array2);
  123. extern void XdmcpGenerateKey (XdmAuthKeyPtr key);
  124. extern void XdmcpIncrementKey (XdmAuthKeyPtr key);
  125. extern void XdmcpDecrementKey (XdmAuthKeyPtr key);
  126. #ifdef HASXDMAUTH
  127. extern void XdmcpWrap(unsigned char *input, unsigned char *wrapper, unsigned char *output, int bytes);
  128. extern void XdmcpUnwrap(unsigned char *input, unsigned char *wrapper, unsigned char *output, int bytes);
  129. #endif
  130. #ifndef TRUE
  131. #define TRUE 1
  132. #define FALSE 0
  133. #endif
  134. extern int XdmcpCompareKeys (const XdmAuthKeyPtr a, const XdmAuthKeyPtr b);
  135. extern int XdmcpAllocARRAY16 (ARRAY16Ptr array, int length);
  136. extern int XdmcpAllocARRAY32 (ARRAY32Ptr array, int length);
  137. extern int XdmcpAllocARRAY8 (ARRAY8Ptr array, int length);
  138. extern int XdmcpAllocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length);
  139. extern int XdmcpReallocARRAY16 (ARRAY16Ptr array, int length);
  140. extern int XdmcpReallocARRAY32 (ARRAY32Ptr array, int length);
  141. extern int XdmcpReallocARRAY8 (ARRAY8Ptr array, int length);
  142. extern int XdmcpReallocARRAYofARRAY8 (ARRAYofARRAY8Ptr array, int length);
  143. _XFUNCPROTOEND
  144. #endif /* _XDMCP_H_ */