FreeSwitch默认收到A-leg的UPDATE消息后不会发送给B-leg,通过修改代码的方式增加一个update_passthrough变量字段来控制UPDATE消息A到B腿转发的功能。
如果是在早期媒体阶段也需要转发UPDATE消息,可以通过update_passthrough_on_early来控制是否在早期媒体阶段转发UPDATE消息。
由于A腿和B腿之间使用消息队列进行通信,UPDATE消息一般使用SWITCH_MESSAGE_INDICATE_DISPLAY消息进行传输,即A腿向B腿发送一个SWITCH_MESSAGE_INDICATE_DISPLAY消息,B腿收到后根据情况进行UPDATE操作,但FreeSwitch内部也有很多功能对消息队列进行了SWITCH_MESSAGE_INDICATE_DISPLAY消息发送,如果贸然改动可能导致A腿并没有收到UPDATE消息,B腿却发出去一个UPDATE消息,这时需要在A腿发往B腿消息中增加一个变量来证明此消息使来源于A腿。
本文章改动是从freeswitch的1.10.6版本上进行的改动,过早的版本,或者过于未来的版本可能有改动,如果时间不长应该大同小异。
1.首先处理A腿接收UPDATE消息的部分:
进入freeswitch源码的src/mod/endpoints/mod_sofia/sofia.c里面的sofia_update_callee_id函数,找到其中的如下代码