///< 加密会话密钥函数
///< @param cert_entity_id:证书主体ID
///< @param key:会话密钥
///< @param out,outlen:加密形式的会话密钥缓冲区和长度
int EncryptKeyMsg(unsigned long cert_entity_id,unsigned char *key,unsigned char **out,unsigned long &out_len) {
return 0;
}
///< 解密会话密钥函数
int DecryptKeyMsg(unsigned long cert_entity_id,unsigned char *in,unsigned long in_len,unsigned char **out,unsigned long &out_len) {
return 0;
}
/// 设置UMX-T使用的会话密钥加/解密函数
int init() {
CUMXT::SetEncryptFunc(EncryptKeyMsg);
CUMXT::SetDecryptFunc(DecryptKeyMsg);
return 0;
}
/// UMXT封包示例
/// @param msg: 需要封装的应用消息包
int Pack(CMsg *msg) {
CUMXT *tmsg = CUMXT::New(msg); ///< 传输封包
tmsg->SetReliable(true); ///< 设置是否可靠传输 默认true
tmsg->SetAck2(true);///< 设置是否需要送达确认 默认false
tmsg->SetFwdFlag(RL_STRICT); ///< 设置存储转发属性 等同SF_ACK
tmsg->SetRefKey("0,100,1050,10008,S0001"); ///< 分别表示域,单据,订单,10008机构的S0001订单
tmsg->SetEncrypt(); ///< 加密应用消息
MQ_LOC_KEY lk;
lk.node_type_ = 1; ///< 机构
lk.node_id_ = 10008; ///< 机构ID
lk.record_id_ = 1l; ///< 记录ID
tmsg->AddLocKey(&lk); ///< 增加定位键
CUMXHelper helper;
helper.Attach(tmsg);
helper.Serialize();
unsigned char *buffer = helper.GetBuffer();
unsigned long len = helper.GetLength();
helper.Detach();
///< @note 可发送buffer的内容
tmsg->Release();
return 0;
}
///< 解析消息还原应用消息示例
int UnPack(unsigned char *buf,unsigned long len) {
CUMXHelper helper;
helper.Structuralize(buf,len);
CMsg *msg = helper.PopMsg();
if (msg->IsUMXT()) { ///< 传输层包
///< 如果到达目标,则可还原应用消息包
CUMXT *tmsg = (CUMXT*)msg;
tmsg->RecoverMsg();
msg->Release();
msg = tmsg->GetAppMsg(); ///< msg为应用消息包
}
return 0;
}