windows-nt/Source/XPSP1/NT/net/wins/server/inc/rplmsgf.h
2020-09-26 16:20:57 +08:00

336 lines
6.7 KiB
C

#ifndef _RPLMSGF_
#define _RPLMSGF_
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
rplmsgf.h
Abstract:
header file for interfacing with the rplmsgf.c module
Functions:
Portability:
This header is portable.
Author:
Pradeep Bahl (PradeepB) Jan-1993
Revision History:
Modification Date Person Description of Modification
------------------ ------- ---------------------------
--*/
/*
includes
*/
#include "wins.h"
#include "comm.h"
#include "rpl.h"
/*
defines
*/
/*
Sizes for the different messages to be sent between replicators
*/
#define RPLMSGF_ADDVERSMAP_REQ_SIZE (sizeof(LONG) + COMM_N_TCP_HDR_SZ)
#define RPLMSGF_SNDENTRIES_REQ_SIZE (COMM_N_TCP_HDR_SZ + sizeof(RPLMSGF_SENDENTRIES_REQ_T))
#define RPLMSGF_ADDVERSMAP_RSP_SIZE_M(_NoOfOwners) \
(COMM_N_TCP_HDR_SZ + \
sizeof(RPLMSGF_ADDVERSMAP_RSP_T) + \
(sizeof(RPLMSGF_OWNER_MAP_INFO_T) * (_NoOfOwners)));
//
// RPLMSGF_UPD_VERS_NO_REQ_T includes COMM_N_TCP_HDR
//
#define RPLMSGF_UPDVERSNO_REQ_SIZE sizeof(RPLMSGF_UPD_VERS_NO_REQ_T)
#define RPLMSGF_UPDVERSNO_RSP_SIZE (sizeof(RPLMSGF_UPD_VERS_NO_RSP_T) + \
COMM_N_TCP_HDR_SZ)
/*
macros
*/
#define RPLMSGF_SET_OPC_M(pTmpB, Opc_e) \
{ \
*(pTmpB)++ = 0; \
*(pTmpB)++ = 0; \
*(pTmpB)++ = 0; \
*(pTmpB)++ = (BYTE)(Opc_e); \
}
//
// Opcode is stored in the 4th byte of the message (in keeping with the
// convention of passing the MSB first).
//
#define RPLMSGF_GET_OPC_FROM_MSG_M(pBuff, Opc_e) \
{ \
Opc_e = *(pBuff + 3); \
}
/*
* externs
*/
/*
* typedef definitions
*/
//
// Message structures
//
//
// Some of these structures are used just for determining the sizes of the
// buffers used for formatting the messages corresponding to them
//
typedef struct _RPLMSGF_ADD_VERS_MAP_REQ_T {
DWORD Opcode;
} RPLMSGF_ADD_VERS_MAP_REQ_T, *PRPLMSGF_ADD_VERS_MAP_REQ_T;
typedef struct _RPLMSGF_OWNER_MAP_INFO_T {
COMM_ADD_T Add;
VERS_NO_T MaxVersNo;
VERS_NO_T StartVersNo;
DWORD Uid;
} RPLMSGF_OWNER_MAP_INFO_T, *PRPLMSGF_OWNER_MAP_INFO_T;
typedef struct _RPLMSGF_ADDVERSMAP_RSP_T {
DWORD LengthOfMsg;
DWORD Opcode;
DWORD NoOfOwners;
PRPLMSGF_OWNER_MAP_INFO_T pOwnerInfo;
DWORD RplTimeInterval;
} RPLMSGF_ADDVERSMAP_RSP_T, *PRPLMSGF_ADDVERSMAP_RSP_T;
typedef struct _RPLMSGF_SENDENTRIES_REQ_T {
DWORD LengthOfMsg;
DWORD Opcode;
COMM_ADD_T Add;
VERS_NO_T MaxVersNo;
VERS_NO_T MinVersNo;
DWORD TypOfRec;
} RPLMSGF_SENDENTRIES_REQ_T, PRPLMSGF_SENDENTRIES_REQ_T;
typedef struct _RPLMSGF_UPD_VERS_NO_REQ_T {
COMM_TCP_HDR_T TcpHdr;
DWORD Opcode;
BYTE Name[NMSDB_MAX_NAM_LEN];
DWORD NameLen;
} RPLMSGF_UPD_VERS_NO_REQ_T, *PRPLMSGF_UPD_VERS_NO_REQ_T;
typedef struct _RPLMSGF_UPD_VERS_NO_RSP_T {
DWORD Opcode;
BYTE Rcode;
} RPLMSGF_UPD_VERS_NO_RSP_T, *PRPLMSGF_UPD_VERS_NO_RSP_T;
/*
RPLMSGF_MSG_OPCODE_E -- lists the various opcodes used in messages sent
between replicators of different WINS servers.
These opcodes are used by the formatting and unformatting
functions of module rplmsgf.c
*/
typedef enum _RPLMSGF_MSG_OPCODE_E {
RPLMSGF_E_ADDVERSNO_MAP_REQ = 0,
RPLMSGF_E_ADDVERSNO_MAP_RSP,
RPLMSGF_E_SNDENTRIES_REQ,
RPLMSGF_E_SNDENTRIES_RSP,
RPLMSGF_E_UPDATE_NTF, //update notification
RPLMSGF_E_UPDATE_NTF_PROP, //update notification (to be
//propagated
RPLMSGF_E_UPDVERSNO_REQ, //update vers. no request
RPLMSGF_E_UPDVERSNO_RSP, //update vers. no response
//adding the following two at the end
//so as to not mess up the parser's notion
//of the above ones
RPLMSGF_E_UPDATE_NTF_PRS, //update notification on a pers. conn
RPLMSGF_E_UPDATE_NTF_PROP_PRS //update notification (to be propagated
} RPLMSGF_MSG_OPCODE_E, *PRPLMSGF_MSG_OPCODE_E;
/*
function declarations
*/
extern
VOID
RplMsgfFrmAddVersMapReq(
IN LPBYTE pBuff,
OUT LPDWORD pMsgLen
);
extern
VOID
RplMsgfFrmAddVersMapRsp(
#if SUPPORT612WINS > 0
IN BOOL fPnrIsBeta1Wins,
#endif
IN RPLMSGF_MSG_OPCODE_E Opcode_e,
IN LPBYTE pBuff,
IN DWORD BuffLen,
IN PRPL_ADD_VERS_NO_T pOwnerAddVersNoMap,
IN DWORD MaxNoOfOwners,
IN DWORD RplTimeInterval,
OUT LPDWORD pMsgLen
);
extern
VOID
RplMsgfFrmSndEntriesReq(
#if SUPPORT612WINS > 0
IN BOOL fPnrIsBeta1Wins,
#endif
IN LPBYTE pBuff,
IN PCOMM_ADD_T pWinsAdd,
IN VERS_NO_T MaxversNo,
IN VERS_NO_T MinVersNo,
IN DWORD RplType,
OUT LPDWORD pMsgLen
);
extern
VOID
RplMsgfFrmSndEntriesRsp (
#if SUPPORT612WINS > 0
IN BOOL fPnrIsBeta1Wins,
#endif
IN LPBYTE pBuff,
IN DWORD NoOfRecs,
IN LPBYTE pName,
IN DWORD NameLen,
IN BOOL fGrp,
IN DWORD NoOfAdd,
IN PCOMM_ADD_T pNodeAdd,
IN DWORD Flag,
IN VERS_NO_T VersNo,
IN BOOL fFirstTime,
OUT LPBYTE *ppNewPos
);
extern
VOID
RplMsgfFrmUpdVersNoReq(
IN LPBYTE pBuff,
IN LPBYTE pName,
IN DWORD NameLen,
#if 0
IN BOOL fBrowserName,
IN BOOL fStatic,
IN BYTE NodeTyp,
IN PCOMM_ADD_T pNodeAdd,
#endif
OUT LPDWORD pMsgLen
);
extern
VOID
RplMsgfFrmUpdVersNoRsp(
IN LPBYTE pBuff,
IN BYTE Rcode,
OUT LPDWORD pMsgLen
);
extern
VOID
RplMsgfUfmAddVersMapRsp(
#if SUPPORT612WINS > 0
IN BOOL fPnrIsBeta1Wins,
#endif
IN LPBYTE pBuff,
OUT LPDWORD pNoOfMaps,
OUT LPDWORD pRplTimeInterval,
IN OUT PRPL_ADD_VERS_NO_T *ppAddVers
);
extern
VOID
RplMsgfUfmSndEntriesReq(
#if SUPPORT612WINS > 0
IN BOOL fPnrIsBeta1Wins,
#endif
IN LPBYTE pBuff,
OUT PCOMM_ADD_T pWinsAdd,
OUT PVERS_NO_T pMaxVersNo,
OUT PVERS_NO_T pMinVersNo,
OUT LPDWORD pRplType
);
extern
VOID
RplMsgfUfmSndEntriesRsp(
#if SUPPORT612WINS > 0
IN BOOL fPnrIsBeta1Wins,
#endif
IN OUT LPBYTE *ppBuff,
OUT LPDWORD pNoOfRecs,
OUT IN LPBYTE pName,
OUT LPDWORD pNameLen,
OUT LPBOOL pfGrp,
OUT LPDWORD pNoOfAdd,
OUT PCOMM_ADD_T pNodeAdd,
OUT LPDWORD pFlag,
OUT PVERS_NO_T pVersNo,
IN BOOL fFirstTime
);
extern
VOID
RplMsgfUfmUpdVersNoReq(
IN LPBYTE pBuff,
IN LPBYTE pName,
IN LPDWORD pNameLen
#if 0
IN LPBOOL pfBrowserName,
IN LPBOOL pfStatic,
IN LPBYTE pNodeTyp,
IN PCOMM_ADD_T pNodeAdd
#endif
);
extern
VOID
RplMsgfUfmUpdVersNoRsp(
IN LPBYTE pBuff,
IN LPBYTE pRcode
);
extern
VOID
RplMsgfUfmPullPnrReq(
LPBYTE pMsg,
DWORD MsgLen,
PRPLMSGF_MSG_OPCODE_E pPullReqType_e
);
#endif //_RPLMSGF_