关闭

ROHC协议库测试与改造(二)

481人阅读 评论(0) 收藏 举报
分类:

前言

这次我们继续深入剖析ROHC的协议库。
我们这次选择深入到代码里面去看。
我们选择的路径是

../rohc-1.7.0/app/performance/

其中,app路径表示的是,此路径下存放的是官方做出来的一些成熟的应用程序,app路径下有以下几个文件夹
这里写图片描述
之所以选择performance文件夹,是因为performance功能没有任何多余的添加,比较好下手。
在performance文件夹下执行make命令,编译生成项目执行文件。
然后我们就可以开始了~。

正文

在命令行下,我们发现有两个可执行文件:
rohc_gen_stream
rohc_test_performance
很明显,我们需要先利用rohc_gen_stream生成出数据流,然后放到rohc_test_performance里测试。
我们先执行
./rohc_gen_stream
./rohc_test_performance
看看应该怎么使用这两个程序
(其实要用的话很简单啦。。。)
然后我们发现一些问题→_→

  • rohc_gen_stream生成的文件有两种:压缩后 / 未压缩。但是数据完全是随机的。。。没有输入文件。。。(后来发现每一次生成出来的都是一样的)
  • rohc_test_performance的入口参数可以是 压缩 / 未压缩的文件,它会执行 压缩/解压 功能。但是,它没有文件输出!

所以我们想啊,如果能把rohc_gen_stream里生成文件的代码,移植到rohc_test_performance里,那该多好啊→_→

于是,我们打开test_performance.c
找到执行压缩的那段。
这里写图片描述
很明显,其实所谓压缩,就是调用了 rohc_compress4() 函数。

rohc_compress4() 函数的定义在comp.h里,是官方给的函数,后缀的4代表这是第4版本。因为这个库在不断修改,更新,所以之前的函数有些漏洞被填上了,为了兼容使用旧函数的工程,所以命名里加了数字。

然后,我们打开rohc_gen_stream.c,找到生成压缩后的数据文件的那段。
这里写图片描述
很明显,下面红色方框的部分就是输出文件的代码了。
然后欢天喜地地复制粘贴到performance程序里,make,运行。
然后报错。
执行rohc_buf_push时,出现offset错误,大意是offset不满足头文件某个assert的不等式要求。
为什么会这样呢?
我们看看gen程序在压缩前都对后面要处理的变量做了什么。
这里写图片描述
→_→。。。所以说,在push之前,需要先拓展包的长度,然后pull,难怪当时会出现offset不足的错误,因为长度没拓展,根本不够放。
改完之后保存。
解压那边也对应修改,不过rohc_packet就要换成ip_packet了。
然后重新make,运行,成功~。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:99418次
    • 积分:342
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:4篇
    • 译文:0篇
    • 评论:34条
    文章分类
    最新评论