UMX-T协议定义

来源:互联网 发布:南京大学网络本科报名 编辑:程序博客网 时间:2024/04/30 04:17

/////////////////////////////////////////////////////////////////////
/// 消息队列定位键
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; }

};

原创粉丝点击