JwaAtalkWsh.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:11k
源码类别:

Windows编程

开发平台:

Delphi

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