osip2现在定义使用的header是33个,包括了大部分常用的header,一般来说都够用。但是需要做一些试验或实现一些还没成为标准的业务时,要用到一些新的header时,那就要自己动一下手le
当然首先要写好关于新header的一系列处理和接口函数,这个不用说,跟需要增加的header有关,这里说的是由于osip2里的header look-up机制而带来的一些注意事项。因为新版的osip2改变了header look-up机制,那么这里就分别来描述一下。
旧版的header look-up机制:osip2 parser初始化时,把header按名字(小写字母)组织成一从小到大的有序字符串数组。在做look-up的时候,采用二分查找。那么,在添加新的header时就不能破坏这个有序的header字符串数组,而必须根据这个header的名字按字符串比较规则插入到相应的数组中。如要添加一个叫join的header,那么
#define JOIN “join”
然后在parser_init函数里,
pconfig[i].hname = CALL_ID_SHORT; /* "i" */
pconfig[i++].setheader = (&osip_message_set_call_id);
pconfig[i++].hname = JOIN; /* "j" */
pconfig[i++].setheader = (&osip_message_set_join); /* 你定义的处理函数 */
pconfig[i].hname = CONTENT_LENGTH_SHORT; /* "l" */
pconfig[i++].setheader = (&osip_message_set_content_length);
新版的header look-up机制:osip2 parser初始化时,使用osip_hash函数根据header的名字(小写字母)构建了一张hash表。在做look-up的时候,把字符串统一成小写字符串,再做一下osip_hash就找到对应的header了。这样在添加新的header时不需要管header在数组中的次序问题。但是由于它采用的hash机制跟header的个数有关,所以在添加新的header时,就需要修改相关的hash参数了。在不改变osip_hash函数的前提下,一般的做法是修改HASH_TABLE_SIZE的值。如我我把header数加到55个时,HASH_TABLE_SIZE的值是296。
阅读(3138) | 评论(1) | 转发(0) |