osip库的扩展--头域解析机制的缺陷解决
在对osip进行扩展的过程中,发现一些缺陷(其实这也不能完全称之为缺陷,主要是由于osip采用的数据结构太简单,所以扩展时容易出错);
1. osip对头域的支持(osip_parser_cfg.c),是通过一个数组来保存每个头域注册的解析属性及回调函数,以头域名称的哈希值作为在数组中的索引;
但是在扩展头域的过程中,很容易出现哈希冲突,而osip对于这种现象的处理是将该头域作为默认的处理(即无法识别的头域);
有以下方法来优化:
1. 采用一个能解决哈希冲突的哈希表,不过这样一来会引入资源销毁问题,因为这里只有一个接口parser_init,osip库这里都是采用静态存储,没有资源销毁的操作
2. 优化哈希算法,使得所有支持的头域的哈希值都不一样,因为sip支持的头域有限,而且这里主要是一个静态的存储、查询,只要避免的冲突就可以了
3. 对现有的数组存储进行优化,解决掉哈希冲突即可,比如可以在冲突时顺序后延找一个可用的位置来存放;查询时也采用同样的方法来处理;原因跟[2]一样
4. 由于这里主要用于静态存储和查询,采用一个排序的二分查找的数据即可