jwaatalkwsh.pas 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. {******************************************************************************}
  2. { }
  3. { Winsock2 AppleTalk API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: atalkwsh.h, released June 2000. The original Pascal }
  9. { code is: ATalkWsh.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. unit JwaAtalkWsh;
  43. interface
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "atalkwsh.h"'}
  47. {$HPPEMIT ''}
  48. {$I jediapilib.inc}
  49. uses
  50. JwaWinSock2;
  51. //
  52. // All protocol types should be specified in the Decimal base
  53. //
  54. const
  55. DECIMAL_BASE = 10;
  56. {$EXTERNALSYM DECIMAL_BASE}
  57. //
  58. // Protocol number 0 is invalid in the Appletalk case
  59. //
  60. ATPROTO_BASE = 1000 * AF_APPLETALK;
  61. {$EXTERNALSYM ATPROTO_BASE}
  62. SOL_APPLETALK = ATPROTO_BASE;
  63. {$EXTERNALSYM SOL_APPLETALK}
  64. DDPPROTO_RTMP = ATPROTO_BASE + 1;
  65. {$EXTERNALSYM DDPPROTO_RTMP}
  66. DDPPROTO_NBP = ATPROTO_BASE + 2;
  67. {$EXTERNALSYM DDPPROTO_NBP}
  68. DDPPROTO_ATP = ATPROTO_BASE + 3;
  69. {$EXTERNALSYM DDPPROTO_ATP}
  70. DDPPROTO_AEP = ATPROTO_BASE + 4;
  71. {$EXTERNALSYM DDPPROTO_AEP}
  72. DDPPROTO_RTMPRQ = ATPROTO_BASE + 5;
  73. {$EXTERNALSYM DDPPROTO_RTMPRQ}
  74. DDPPROTO_ZIP = ATPROTO_BASE + 6;
  75. {$EXTERNALSYM DDPPROTO_ZIP}
  76. DDPPROTO_ADSP = ATPROTO_BASE + 7;
  77. {$EXTERNALSYM DDPPROTO_ADSP}
  78. DDPPROTO_MAX = ATPROTO_BASE + 255;
  79. {$EXTERNALSYM DDPPROTO_MAX}
  80. //
  81. // Define the higher layer appletalk protocol types
  82. //
  83. ATPROTO_ADSP = DDPPROTO_MAX + 1;
  84. {$EXTERNALSYM ATPROTO_ADSP}
  85. ATPROTO_ATP = DDPPROTO_MAX + 2;
  86. {$EXTERNALSYM ATPROTO_ATP}
  87. ATPROTO_ASP = DDPPROTO_MAX + 3;
  88. {$EXTERNALSYM ATPROTO_ASP}
  89. ATPROTO_PAP = DDPPROTO_MAX + 4;
  90. {$EXTERNALSYM ATPROTO_PAP}
  91. SO_REGISTER_NAME = $A000;
  92. {$EXTERNALSYM SO_REGISTER_NAME}
  93. SO_DEREGISTER_NAME = $A001;
  94. {$EXTERNALSYM SO_DEREGISTER_NAME}
  95. SO_REMOVE_NAME = SO_DEREGISTER_NAME;
  96. {$EXTERNALSYM SO_REMOVE_NAME}
  97. SO_LOOKUP_NAME = $A002;
  98. {$EXTERNALSYM SO_LOOKUP_NAME}
  99. SO_CONFIRM_NAME = $A003;
  100. {$EXTERNALSYM SO_CONFIRM_NAME}
  101. SO_LOOKUP_MYZONE = $A004;
  102. {$EXTERNALSYM SO_LOOKUP_MYZONE}
  103. SO_GETMYZONE = SO_LOOKUP_MYZONE;
  104. {$EXTERNALSYM SO_GETMYZONE}
  105. SO_LOOKUP_ZONES = $A005;
  106. {$EXTERNALSYM SO_LOOKUP_ZONES}
  107. SO_GETZONELIST = SO_LOOKUP_ZONES;
  108. {$EXTERNALSYM SO_GETZONELIST}
  109. SO_LOOKUP_ZONES_ON_ADAPTER = $A006;
  110. {$EXTERNALSYM SO_LOOKUP_ZONES_ON_ADAPTER}
  111. SO_GETLOCALZONES = SO_LOOKUP_ZONES_ON_ADAPTER;
  112. {$EXTERNALSYM SO_GETLOCALZONES}
  113. SO_LOOKUP_NETDEF_ON_ADAPTER = $A007;
  114. {$EXTERNALSYM SO_LOOKUP_NETDEF_ON_ADAPTER}
  115. SO_GETNETINFO = SO_LOOKUP_NETDEF_ON_ADAPTER;
  116. {$EXTERNALSYM SO_GETNETINFO}
  117. //
  118. // PAP-specific options
  119. //
  120. SO_PAP_SET_SERVER_STATUS = $A007;
  121. {$EXTERNALSYM SO_PAP_SET_SERVER_STATUS}
  122. SO_PAP_GET_SERVER_STATUS = $A008;
  123. {$EXTERNALSYM SO_PAP_GET_SERVER_STATUS}
  124. SO_PAP_PRIME_READ = $A009;
  125. {$EXTERNALSYM SO_PAP_PRIME_READ}
  126. ATADDR_ANY = 0; // Dynamic socket (=0)
  127. {$EXTERNALSYM ATADDR_ANY}
  128. ATADDR_BROADCAST = $FF; // Broadcast node id (=ff)
  129. {$EXTERNALSYM ATADDR_BROADCAST}
  130. //
  131. // Define flags/error codes peculiar to Appletalk
  132. //
  133. WSAEMSGPARTIAL = WSABASEERR + 100;
  134. {$EXTERNALSYM WSAEMSGPARTIAL}
  135. // Maximum pap status size
  136. MAX_PAP_STATUS_SIZE = 255;
  137. {$EXTERNALSYM MAX_PAP_STATUS_SIZE}
  138. MIN_PAP_READ_BUF_SIZE = 4096;
  139. {$EXTERNALSYM MIN_PAP_READ_BUF_SIZE}
  140. // These are the unused 4 bytes returned in the PAP status packet. If ever
  141. // they are to be interpreted, they will be available.
  142. PAP_UNUSED_STATUS_BYTES = 4;
  143. {$EXTERNALSYM PAP_UNUSED_STATUS_BYTES}
  144. //
  145. // SOCKADDR_AT structure
  146. //
  147. type
  148. SOCKADDR_AT = record
  149. sat_family: USHORT;
  150. sat_net: USHORT;
  151. sat_node: UCHAR;
  152. sat_socket: UCHAR;
  153. end;
  154. {$EXTERNALSYM SOCKADDR_AT}
  155. PSOCKADDR_AT = ^SOCKADDR_AT;
  156. {$EXTERNALSYM PSOCKADDR_AT}
  157. TSockAddrAT = SOCKADDR_AT;
  158. PSockAddrAT = PSOCKADDR_AT;
  159. //
  160. // ***WARNING***
  161. // This is defined to be the same as the ATALK ADDRESS defined in atalktdi.h
  162. // Change this if the other changes.
  163. //
  164. type
  165. WSH_ATALK_ADDRESS = record
  166. case Integer of
  167. 0: (
  168. Network: USHORT;
  169. Node: UCHAR;
  170. Socket: UCHAR);
  171. 1: (
  172. Address: ULONG);
  173. end;
  174. {$EXTERNALSYM WSH_ATALK_ADDRESS}
  175. PWSH_ATALK_ADDRESS = ^WSH_ATALK_ADDRESS;
  176. {$EXTERNALSYM PWSH_ATALK_ADDRESS}
  177. TWSHATalkAddress = WSH_ATALK_ADDRESS;
  178. PWSHATalkAddress = PWSH_ATALK_ADDRESS;
  179. //
  180. // Typedefs for the various options
  181. //
  182. //
  183. // ***WARNING***:
  184. // This should be exactly the same as NBP_NAME defined in atalktdi.h
  185. //
  186. const
  187. MAX_ENTITY = 32;
  188. {$EXTERNALSYM MAX_ENTITY}
  189. type
  190. WSH_NBP_NAME = record
  191. ObjectNameLen: CHAR;
  192. ObjectName: array [0..MAX_ENTITY - 1] of CHAR;
  193. TypeNameLen: CHAR;
  194. TypeName: array [0..MAX_ENTITY - 1] of CHAR;
  195. ZoneNameLen: CHAR;
  196. ZoneName: array [0..MAX_ENTITY - 1] of CHAR;
  197. end;
  198. {$EXTERNALSYM WSH_NBP_NAME}
  199. PWSH_NBP_NAME = ^WSH_NBP_NAME;
  200. {$EXTERNALSYM PWSH_NBP_NAME}
  201. TWSHNBPName = WSH_NBP_NAME;
  202. PWSHNBPName = PWSH_NBP_NAME;
  203. WSH_NBP_TUPLE = record
  204. Address: WSH_ATALK_ADDRESS;
  205. Enumerator: USHORT;
  206. NbpName: WSH_NBP_NAME;
  207. end;
  208. {$EXTERNALSYM WSH_NBP_TUPLE}
  209. PWSH_NBP_TUPLE = ^WSH_NBP_TUPLE;
  210. {$EXTERNALSYM PWSH_NBP_TUPLE}
  211. TWSHNBPTuple = WSH_NBP_TUPLE;
  212. PWSHNBPTuple = PWSH_NBP_TUPLE;
  213. WSH_REGISTER_NAME = WSH_NBP_NAME;
  214. {$EXTERNALSYM WSH_REGISTER_NAME}
  215. TWSHRegisterName = WSH_REGISTER_NAME;
  216. PWSH_REGISTER_NAME = ^WSH_NBP_NAME;
  217. {$EXTERNALSYM PWSH_REGISTER_NAME}
  218. PWSHRegisterName = PWSH_REGISTER_NAME;
  219. WSH_DEREGISTER_NAME = WSH_NBP_NAME;
  220. {$EXTERNALSYM WSH_DEREGISTER_NAME}
  221. TWSHDeregisterName = WSH_DEREGISTER_NAME;
  222. PWSH_DEREGISTER_NAME = ^WSH_NBP_NAME;
  223. {$EXTERNALSYM PWSH_DEREGISTER_NAME}
  224. PWSHDeregisterName = PWSH_DEREGISTER_NAME;
  225. WSH_REMOVE_NAME = WSH_NBP_NAME;
  226. {$EXTERNALSYM WSH_REMOVE_NAME}
  227. TWSHRemoveName = WSH_REMOVE_NAME;
  228. PWSH_REMOVE_NAME = ^WSH_NBP_NAME;
  229. {$EXTERNALSYM PWSH_REMOVE_NAME}
  230. PWSHRemoveName = PWSH_REMOVE_NAME;
  231. _WSH_LOOKUP_ZONES = record
  232. NoZones: ULONG;
  233. //
  234. // CHAR Zones[] - null separated zones
  235. //
  236. end;
  237. {$EXTERNALSYM _WSH_LOOKUP_ZONES}
  238. WSH_LOOKUP_ZONES = _WSH_LOOKUP_ZONES;
  239. {$EXTERNALSYM WSH_LOOKUP_ZONES}
  240. PWSH_LOOKUP_ZONES = ^WSH_LOOKUP_ZONES;
  241. {$EXTERNALSYM PWSH_LOOKUP_ZONES}
  242. TWSHLookupZones = WSH_LOOKUP_ZONES;
  243. PWSHLookupZones = PWSH_LOOKUP_ZONES;
  244. _WSH_LOOKUP_NETDEF_ON_ADAPTER = record
  245. NetworkRangeLowerEnd: USHORT;
  246. NetworkRangeUpperEnd: USHORT;
  247. // This will be followed by a null terminated ansi default zone.
  248. // PUCHAR DefaultZone[]
  249. end;
  250. {$EXTERNALSYM _WSH_LOOKUP_NETDEF_ON_ADAPTER}
  251. WSH_LOOKUP_NETDEF_ON_ADAPTER = _WSH_LOOKUP_NETDEF_ON_ADAPTER;
  252. {$EXTERNALSYM WSH_LOOKUP_NETDEF_ON_ADAPTER}
  253. PWSH_LOOKUP_NETDEF_ON_ADAPTER = ^WSH_LOOKUP_NETDEF_ON_ADAPTER;
  254. {$EXTERNALSYM PWSH_LOOKUP_NETDEF_ON_ADAPTER}
  255. TWSHLookupNetDefOnAdapter = WSH_LOOKUP_NETDEF_ON_ADAPTER;
  256. PWSHLookupNetDefOnAdapter = PWSH_LOOKUP_NETDEF_ON_ADAPTER;
  257. _WSH_LOOKUP_NAME = record
  258. LookupTuple: WSH_NBP_TUPLE;
  259. NoTuples: ULONG;
  260. //
  261. // Array of NoTuple WSH_NBP_TUPLEs
  262. //
  263. end;
  264. {$EXTERNALSYM _WSH_LOOKUP_NAME}
  265. WSH_LOOKUP_NAME = _WSH_LOOKUP_NAME;
  266. {$EXTERNALSYM WSH_LOOKUP_NAME}
  267. PWSH_LOOKUP_NAME = ^WSH_LOOKUP_NAME;
  268. {$EXTERNALSYM PWSH_LOOKUP_NAME}
  269. TWSHLookupName = WSH_LOOKUP_NAME;
  270. PWSHLookupName = PWSH_LOOKUP_NAME;
  271. _WSH_PAP_GET_SERVER_STATUS = record
  272. ServerAddr: SOCKADDR_AT;
  273. Reserved: array [0..PAP_UNUSED_STATUS_BYTES - 1] of UCHAR;
  274. ServerStatus: array [0..MAX_PAP_STATUS_SIZE] of UCHAR;
  275. end;
  276. {$EXTERNALSYM _WSH_PAP_GET_SERVER_STATUS}
  277. WSH_PAP_GET_SERVER_STATUS = _WSH_PAP_GET_SERVER_STATUS;
  278. {$EXTERNALSYM WSH_PAP_GET_SERVER_STATUS}
  279. PWSH_PAP_GET_SERVER_STATUS = ^WSH_PAP_GET_SERVER_STATUS;
  280. {$EXTERNALSYM PWSH_PAP_GET_SERVER_STATUS}
  281. TWSHPapGetServerStatus = WSH_PAP_GET_SERVER_STATUS;
  282. PWSHPapGetServerStatus = PWSH_PAP_GET_SERVER_STATUS;
  283. implementation
  284. end.