165 lines
3.4 KiB
C
165 lines
3.4 KiB
C
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
wshatalk.h
|
|
|
|
Abstract:
|
|
|
|
|
|
Author:
|
|
|
|
Nikhil Kamkolkar (nikhilk@microsoft.com)
|
|
|
|
Revision History:
|
|
10 Jul 1992 Initial Version
|
|
|
|
--*/
|
|
|
|
#include "atalktdi.h"
|
|
#include "atalkwsh.h" // winsock header file for appletalk
|
|
|
|
#define WSH_ATALK_ADSPSTREAM L"\\Device\\AtalkAdsp\\Stream"
|
|
#define WSH_ATALK_ADSPRDM L"\\Device\\AtalkAdsp"
|
|
#define WSH_ATALK_PAPRDM L"\\Device\\AtalkPap"
|
|
|
|
#define WSH_KEYPATH_CODEPAGE \
|
|
TEXT("SYSTEM\\CurrentControlSet\\Control\\Nls\\Codepage")
|
|
|
|
#define WSHREG_VALNAME_CODEPAGE TEXT("MACCP")
|
|
|
|
//
|
|
// Device names for DDP need protocol field at the end - defined in wshdata.h
|
|
//
|
|
|
|
//
|
|
// Structure and variables to define the triples supported by Appletalk. The
|
|
// first entry of each array is considered the canonical triple for
|
|
// that socket type; the other entries are synonyms for the first.
|
|
//
|
|
|
|
typedef struct _MAPPING_TRIPLE {
|
|
INT AddressFamily;
|
|
INT SocketType;
|
|
INT Protocol;
|
|
} MAPPING_TRIPLE, *PMAPPING_TRIPLE;
|
|
|
|
|
|
//
|
|
// The socket context structure for this DLL. Each open Appletalk socket
|
|
// will have one of these context structures, which is used to maintain
|
|
// information about the socket.
|
|
//
|
|
|
|
typedef struct _WSHATALK_SOCKET_CONTEXT
|
|
{
|
|
INT AddressFamily;
|
|
INT SocketType;
|
|
INT Protocol;
|
|
} WSHATALK_SOCKET_CONTEXT, *PWSHATALK_SOCKET_CONTEXT;
|
|
|
|
|
|
|
|
|
|
//
|
|
// Forward declarations of internal routines.
|
|
//
|
|
|
|
BOOL FAR PASCAL
|
|
WshDllInitialize(
|
|
HINSTANCE hInstance,
|
|
DWORD nReason,
|
|
LPVOID pReserved);
|
|
|
|
BOOLEAN
|
|
WshRegGetCodePage(
|
|
VOID);
|
|
|
|
BOOLEAN
|
|
WshNbpNameToMacCodePage(
|
|
IN OUT PWSH_NBP_NAME pNbpName);
|
|
|
|
BOOLEAN
|
|
WshNbpNameToOemCodePage(
|
|
IN OUT PWSH_NBP_NAME pNbpName);
|
|
|
|
BOOLEAN
|
|
WshZoneListToOemCodePage(
|
|
IN OUT PUCHAR pZoneList,
|
|
IN USHORT NumZones);
|
|
|
|
BOOLEAN
|
|
WshConvertStringMacToOem(
|
|
IN PUCHAR pSrcMacString,
|
|
IN USHORT SrcStringLen,
|
|
OUT PUCHAR pDestOemString,
|
|
IN PUSHORT pDestStringLen);
|
|
|
|
BOOLEAN
|
|
WshConvertStringOemToMac(
|
|
IN PUCHAR pSrcOemString,
|
|
IN USHORT SrcStringLen,
|
|
OUT PUCHAR pDestMacString,
|
|
IN PUSHORT pDestStringLen);
|
|
|
|
INT
|
|
WSHNtStatusToWinsockErr(
|
|
IN NTSTATUS Status);
|
|
|
|
BOOLEAN
|
|
IsTripleInList (
|
|
IN PMAPPING_TRIPLE List,
|
|
IN ULONG ListLength,
|
|
IN INT AddressFamily,
|
|
IN INT SocketType,
|
|
IN INT Protocol);
|
|
|
|
VOID
|
|
CompleteTdiActionApc (
|
|
IN PVOID ApcContext,
|
|
IN PIO_STATUS_BLOCK IoStatusBlock);
|
|
|
|
//
|
|
// Macros
|
|
//
|
|
|
|
|
|
#if DBG
|
|
#define DBGPRINT(Fmt) \
|
|
{ \
|
|
DbgPrint("WSHATALK: "); \
|
|
DbgPrint Fmt; \
|
|
}
|
|
|
|
#define DBGBRK() \
|
|
{ \
|
|
DbgBreakPoint(); \
|
|
}
|
|
#else
|
|
|
|
#define DBGPRINT(Fmt)
|
|
#define DBGBRK()
|
|
|
|
#endif
|
|
|
|
#define SOCK_TO_TDI_ATALKADDR(tdiAddr, sockAddr) \
|
|
{ \
|
|
(tdiAddr)->TAAddressCount = 1; \
|
|
(tdiAddr)->Address[0].AddressLength = sizeof(TDI_ADDRESS_APPLETALK); \
|
|
(tdiAddr)->Address[0].AddressType = TDI_ADDRESS_TYPE_APPLETALK; \
|
|
(tdiAddr)->Address[0].Address[0].Network = (sockAddr)->sat_net; \
|
|
(tdiAddr)->Address[0].Address[0].Node = (sockAddr)->sat_node; \
|
|
(tdiAddr)->Address[0].Address[0].Socket = (sockAddr)->sat_socket; \
|
|
}
|
|
|
|
|
|
#define TDI_TO_SOCK_ATALKADDR(sockAddr, tdiAddr) \
|
|
{ \
|
|
(sockAddr)->sat_family = AF_APPLETALK; \
|
|
(sockAddr)->sat_net = (tdiAddr)->Address[0].Address[0].Network; \
|
|
(sockAddr)->sat_node = (tdiAddr)->Address[0].Address[0].Node; \
|
|
(sockAddr)->sat_socket = (tdiAddr)->Address[0].Address[0].Socket; \
|
|
}
|