熟悉h323协议的读者都清楚,在h323协议中网守间的关系通常为相邻或上下级关系。相邻网守间的定位请求都用LRQ信令(这么描述也许不太准确,简单地说,如果A终端通过网守G1呼叫B终端,而B终端是注册在另外一个网守G2上,如果这两个网守配置成互为信任的网守),那么 G1将通过LRQ请求G2来进行地址转换工作)。上下级关系一般是一个网守充当网关或终端。而且这必须是上级网守允许的情况下。
笔者开发的这个桥接服务器的工作情形是这样:一个是硬件网守,一个是联通宝视通网守服务器。当时客户已经有了一个硬件网守,又有大量的宝视通电话卡,宝视通网守不允许网守注册为网关,而且一个终端(可以理解为一个电话卡/或号码)只能同时一路通话。为了让这两个都用上,笔者采取了如下设计:
采用gnugk作为服务器原型(这样就不用去花费大量时间去找或写h323协议栈了,而且也省略了服务器的架构编码,呵呵,比较省事了)。将gnugk中的gkclient类作为一个终端注册到宝视通网守(一个gkclient位一个终端,那么n张宝视通卡不就可以有n个gkclient吗),这样在呼叫时只需更改呼叫信令的路由和E164及iP地址的转换就可以了。注意最后要将改服务器和硬件网守设为相邻关系。
在实际环境中,通过改写E164,基本实现了通过自己的网守和桥接服务器(也可称为网守)加上宝视通网守实现了voip和pstn的双向通话。
作者注:第一次写,可能写得不太清楚,欢迎交流msn:hzcheng@msn.com,请注明:csdn。欢迎发表改进意见,但不欢迎问候我的家人。