为支持通话过程中双方按键的接受及处理,asterisk 通过 其提供的call features 特性实现此功能,1.4,1.6 1.中是在res_feartures.c中, 1.6.2 ,1.8后此文件放到main中并改名为features.c
当通过queue, dial, fallowme 等app 桥接主被叫时,双方接听后即转向ast_bridge_call, 此函数内部是一个无限循环,不断监听双侧通道上的事件,循环内部首先调用 ast_channel_bridge,对于第一次调用则产生link事件,然后进入另一个循环,调用协议栈提供的brigdge 回调,如,sip_bridge ,检测挂机事件并发射unlink事件,然后调用ast_generic_bridge 检测双方通道上的事件,ast_generic_bridge 具体又调用ast_waitfor_n 轮询 fd, 实际过程为读取rtp 流(ast_read)通过判断帧数据类型做不同动作,这里帧数据是处理过的rtp包,如 帧数据类型为 onhold则说明为保持动作,还有dtmf等,这里还处理了jitibuf 问题(抖动)。