/
/// 消息队列定位键
struct MQ_LOC_KEY {
unsigned short node_type_; ///< 节点类型
unsigned long node_id_; ///< 节点ID
unsigned short mq_id_; ///< 消息队列实例ID
unsigned short mq_db_id_; ///< 消息队列存储ID
unsigned __int64 record_id_; ///< 消息队列记录ID
public:
MQ_LOC_KEY():mq_id_(1),mq_db_id_(1) {
}
};
/
///< 会话密钥加密函数指针类型
typedef int (*EncryptKeyFuncPtr)(unsigned long cert_entity_id,unsigned char *key,unsigned char **out,unsigned long &out_len);
///< 会话密钥解密函数指针类型
typedef int (*DecryptKeyFuncPtr)(unsigned long cert_entity_id,unsigned char *in,unsigned long in_len,unsigned char **out,unsigned long &out_len);
/// UMX传输层:UMX-T协议
enum {
SF_NONE=1,SF_SAVE_FWD,SF_ACK,
RL_DISCARDABLE=1,///< 目标不在线时丢弃
RL_NODISCARDABLE,///< 目标不在线时保存在待发送消息队列中
RL_STRICT,///< 消息队列负责传输成功,获取确认
};
class UMX_DLL_API CUMXT : public CMsg {
// enum { SF_NONE=1,SF_SAVE_FWD,SF_ACK }; ///< 1:不存储转发 2:存储转发 3:需要确认
public:
static EncryptKeyFuncPtr encrypt_func_; ///< 加密会话函数指针
static DecryptKeyFuncPtr decrypt_func_; ///< 解密会话函数指针
private:
CMsg *app_msg_; ///< 应用消息
bool encrypt_flag_; ///< 是否加密
unsigned long cert_entity_id_; ///< 证书主体ID
bool reliable_; ///< 是否可靠
bool ack2_; ///< 是否送达确认
bool fixed_post_; ///< 固定投递
short fwd_flag_; ///< 存储转发属性
string ref_key_; ///< 应用关联键
// CAutoVector<MQ_LOC_KEY*> loc_keys_; ///< 定位键
vector<MQ_LOC_KEY*> loc_keys_; ///< 定位键
public:
CUMXT();
CUMXT(CMsg *msg);
~CUMXT();
static CUMXT* New(CMsg *msg);
static SetEncryptFunc(EncryptKeyFuncPtr fp) {
encrypt_func_ = fp;
}
static SetDecryptFunc(DecryptKeyFuncPtr fp) {
decrypt_func_ = fp;
}
void Attach(CMsg *msg); ///< 关联应用消息
void SetReliable(bool val); ///< 设置是否可靠
void SetFwdFlag(unsigned short val); ///< 设置存储转发
void SetAck2(bool val); ///< 设置是否送达确认
void SetFixedPost(bool val); ///< 设置固定投递
void SetEncrypt(); ///< 是否加密应用消息
void SetCertEntity(unsigned long cert_entity_id); ///< 设置证书主体
void SetRefKey(const char *rk); ///< 设置关联键
void AddLocKey(MQ_LOC_KEY *lk); ///< 设置定位键
virtual bool IsReliable() const ; ///< 是否可靠传输
virtual bool IsAck2() const; ///< 是否要送达确认
virtual unsigned short GetFwdFlag() const; ///< 取存储转发属性
const char* GetRefKey(); ///< 取应用关联键
unsigned short GetLocKeyCount() ; ///< 定位键个数
MQ_LOC_KEY* GetLocKey(short index); ///< 取index指示的定位键
virtual CMsg* GetAppMsg(); ///< 获取应用消息对象
virtual int RecoverMsg(); ///< 还原应用消息
virtual bool IsUMXT() const { return true; }
virtual int Stream(unsigned char **buf,unsigned long &bufsize,unsigned long &datasize);
virtual int Parse(unsigned char *buf,unsigned long datasize);
virtual bool IsTrusted() { return fwd_flag_>RL_DISCARDABLE; }
virtual bool IsFixedPost() { return fixed_post_; }
virtual bool IsAutoAck() { return fwd_flag_==RL_STRICT; }
};