UMXT协议封包/解包示例


///< 加密会话密钥函数
///< @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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值