windows-nt/Source/XPSP1/NT/base/cluster/service/gs/msg.h
2020-09-26 16:20:57 +08:00

141 lines
2.6 KiB
C

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
msg.h
Abstract:
msg definition
Author:
Ahmed Mohamed (ahmedm) 12, 01, 2000
Revision History:
--*/
#ifndef GS_MSG_H
#define GS_MSG_H
#include "type.h"
#define GS_MSG_TYPE_SEQALLOC 0
#define GS_MSG_TYPE_SEQREPLY 1
#define GS_MSG_TYPE_MCAST 2
#define GS_MSG_TYPE_REPLY 3
#define GS_MSG_TYPE_UCAST 4
#define GS_MSG_TYPE_ACK 5
#define GS_MSG_TYPE_INFO 6
#define GS_MSG_TYPE_MM 7
#define GS_MSG_TYPE_JOIN_REQUEST 8
#define GS_MSG_TYPE_JOIN 9
#define GS_MSG_TYPE_UP 10
#define GS_MSG_TYPE_EVICT_REQUEST 11
#define GS_MSG_TYPE_EVICT 12
#define GS_MSG_TYPE_RECOVERY 13
#define GS_MSG_TYPE_SYNC 14
#define GS_MSG_TYPE_ABORT 244
#define GS_MSG_TYPE_SKIP 255
#define GS_MSG_STATE_FREE 0
#define GS_MSG_STATE_NEW 1
#define GS_MSG_STATE_READY 2
#define GS_MSG_STATE_DELIVERED 3
#define GS_MSG_STATE_DONE 4
typedef struct gs_msg_hdr {
UINT16 h_len; // payload size
UINT16 h_type; // msg type
UINT16 h_flags; // msg flags
UINT16 h_viewnum; // generation number, drop this msg if no match
UINT16 h_rlen; // for delivered msgs, how big can sender accept reply
gs_cookie_t h_cid; // sender cookie for reply packets
gs_gid_t h_gid; // group id
gs_sequence_t h_mseq; // global sequence
gs_sequence_t h_bnum; // this msg batch number
gs_sequence_t h_lseq; // sender sequence number
gs_memberid_t h_mid; // master member id
gs_memberid_t h_sid; // sender member id
char h_tag[64];
}gs_msg_hdr_t;
#define MSG_TYPE_HDR 1
#define MSG_TYPE_DATA 2
typedef struct gs_msg {
struct gs_msg *m_next; // next msg in queue
UINT8 m_type; // type
UINT8 m_refcnt; // refcnt
UINT16 m_buflen; // length of buffer
gs_msg_hdr_t m_hdr; // msg header
char *m_buf;
}gs_msg_t;
int
WINAPI
msg_addnode(int id, char *n, char *a);
gs_msg_t * msg_alloc(const char *buf, int len);
int msg_send(gs_memberid_t, gs_msg_hdr_t *, const char *, int);
void msg_mcast(ULONG, gs_msg_hdr_t *, const char *, int);
void msg_smcast(ULONG, gs_msg_hdr_t *, const char *, int);
void msg_free(gs_msg_t *);
int msg_init();
void msg_exit();
int msg_getsize();
typedef void(*gs_msg_handler_t)(gs_msg_t *);
typedef enum {
MSG_NODE_ID,
MSG_NODE_JOIN,
MSG_NODE_UP,
MSG_NODE_DOWN
}gs_node_event_t;
typedef void(*gs_node_handler_t)(int);
void
msg_set_uport(int uport);
void
msg_set_mport(int mport);
void
msg_set_uipaddr(char *addr);
void
msg_set_mipaddr(char *addr);
void
msg_set_bufcount(int count);
void
msg_set_bufsize(int size);
void
msg_start(ULONG mask);
#endif