用freeDiameter封装Diameter消息
来源:互联网 发布:linux route 修改 编辑:程序博客网 时间:2024/05/16 14:52
一、Diameter消息头的构建
1、在库中查找所要构建消息的消息头样例对象
函数1:int fd_dict_search(struct dictionary*dict,enum dict_object_type type,int criteria,const void*what,struct dict_object**result,int retval);
参数1,是一个指向存储样例对象库的指针;
参数2,是所要查找样例对象的类型,对于msg消息头填选DICT_COMMAND,对于avp填选DICT_AVP,(如下为enum dict_object_type定义);
/* Types of object in the dictionary. */
enum dict_object_type {
DICT_VENDOR = 1,
DICT_APPLICATION,
DICT_TYPE,
DICT_ENUMVAL,
DICT_AVP,
DICT_COMMAND,
DICT_RULE };
参数3,是查找样例对象所用的方式,不同的参数2对应不同的方式;
参数4,是根据参数3,查找所用的具体数据;
参数5,传出参数,指向查找得到的样例对象地址的指针;
参数6,查找样例对象失败所定义的返回值。
2、根据查找得到的样例对象构建消息实例
函数2:fd_msg_new(struct dict_object*model,int flags,struct msg**msg);
参数1,指向样例对象的指针;
参数2,标志位,一般为0;
参数3,指向构建完成的空消息实例地址的指针。
二、不同类型avp的构建
不同类型的avp构建,具体构建流程大致相同,可归纳为:
查找avp样例对象—构建avp实例—根据avp类型填充数据—把avp添加到msg中
不同类型avp的构建,除了数据填充有所差异,其他三个流程所用函数相同。
函数1:int fd_dict_search(struct dictionary*dict,enum dict_object_type type,int criteria,const void*what,struct dict_object**result,int retval);
函数1的介绍见上.
函数3:int fd_msg_avp_new(struct dict_object*model,int flags,struct avp**avp);
函数3的介绍类函数2.
函数4:int fd_msg_avp_add(msg_or_avp*reference,enum msg_brw_dir dir,struct avp*avp);
函数4的作用是把构建好的avp实例添加到创建好的msg消息实例中,参数1是构建好的msg消息实例,参数2是把avp添加进msg中的方式,参数3是构建好的avp实例。
1、存储的数据类型是ip的avp数据填充
2、类型为octetstring的avp数据填充
3、类型是时间的avp数据填充
函数5:fd_msg_avp_value_encode(void*data,struct avp*avp);
该函数的作用是,利用事先定义好的回调函数,用格式化的数据初始化avp实例。参数1是指向数据的指针,参数2是指向需要填充数据的avp的指针。对于以上3中类型的avp都可以使用该函数填充数据(octetstring的回调函数请自行实现)。
4、类型为enumval的avp数据填充
函数6:int fd_dict_getval(struct dict_object* object,void* val);
该函数的作用是,把object中的数据存储在val中。参数1,是指向vap实例的指针;参数2,是指向存储数据的指针。
函数7:int fd_msg_avp_setvalue(struct avp*avp,union avp_value*value);
该函数的做用是把value的数据填充进avp中去。参数1,是指向待填充数据的avp的指针;参数2,是指向未被填充数据的指针。
5、类型是整形的avp数据填充
整形数据类型,包括unsigned32、unsigned64、integer32、integer64都可以使用这样的方式填充avp。
(对于avp类型为grouped本文未列出)
0 0
- 用freeDiameter封装Diameter消息
- freeDiameter
- Diameter消息格式分析
- freeDiameter源码阅读之消息路由
- freeDiameter源码阅读之消息队列和消息处理流程
- 使用Wireshark识别Diameter消息
- diameter
- Diameter消息应用层的路由
- freeDiameter源码阅读之 dictionary树和消息的合法性检查(rule)
- Gx接口diameter信令CER消息结构分析
- freeDiameter 安装配置过程
- 练习 for freediameter
- freediameter部分源码分析
- 封装消息处理
- 网络消息的封装
- 消息封装与解析
- Vue.prototype封装消息
- Diameter协议
- Git整理与秘技
- MTK串口通信调试
- Servlet实现文件上传
- 浏览器打开pdf乱码
- 关于IOS UINavigationBar 界面切换颜色变换的问题
- 用freeDiameter封装Diameter消息
- c# 添加ssk皮肤
- 无题
- 使用Vuforia和Unity开发AR小游戏(一)
- SQL资料总结
- 421. Maximum XOR of Two Numbers in an Array
- android studio极简版freeline0.8.4配置指南
- APM:添加数据采集代理到目标监控APP
- leetcode--Python正则表达式解析Valid Phone nums