由于找不到MusicServer,所以比如呼叫等待/呼叫保持之类的需要MusicServer的SDP消息,都直接在服务器中写入到SipServletMessage中去,但是这个SDP中具体需要哪些header呢?参考http://tech-invite.com/Ti-sip-service-3.html#fig6,最简只需要v,o,s,c,t,m,a.查了一下RFC4566,RFC2327,确定了其中的内容格式,修补一下添加SDP的方法.
doAck(),这里存在一个BUG,就是ACK有的时候能够发送到客户端,有的时候不行,花了很多时间检查,有的时候重启服务器就可以了,但是有的时候重启几次都不会成功一次...后来仔细检查服务器上的信令包,发现每个ACK的Router头都相当的长~于是把怀疑重点放在这上面,这ACK是TestAgent自动生成的,定然是复制200OK中的相关信息来create这个request,于是再看200OK,发现其recordRouter头也长得不得了,于是再向上,检查Invite,在Alice这边的客户端上,router头没问题,但是在Bob这边的Router就巨长了~最后突然想起,在doInvite()中,有一句:
proxy.setRecordRoute(true);
可以让后续的所有消息都先到达这个服务器,注释掉之后,搞定!!!
NND,搞了半天,问题出在doInvite()中
B2BUAServlet,没什么好说的...主要就处理两个doInvite()和doSuccessResponse()
doInvite()也很简单,主要是B2B需要用的API不是很熟悉...感觉很奇怪,最后还是copy了sun上的示例代码,做了一些修改
doSuccessResponse()更简单了...
只是B2BUA的功能还没进一步测试...理论上可行,今天的时间都花在ProxyServlet的Bug上了...哎