I found the actual source of the problem, still related to SDP.
When Yate responds to the reinvite it stops the stream and replies in the SIP 200 message with
m=audio 0 RTP/AVP 0 3 101
Setting the port to 0 indicates rejection of the media type. This is what causes the client to hang up the call. It is appropriate to leave the port at its original value and set the connection line c=IN IP4 0.0.0.0 as it does.
So this is the actual bug, but it would also be nice if the SDP responded with a=inactive/sendonly/recvonly attributes also.
On May 25, 2015, at 10:57 AM, Bill Simon wrote:
> I have found a problem with Yate's handling of SDP and cannot determine a fix.
> If a caller issues a re-invite to put the call on hold, his SDP includes either "a=sendonly" or "a=inactive" to indicate that the media stream is muted.
> Yate responds with a SIP 200 OK which does not echo the attribute back.
> Most clients don't seem to care but at least one client I am using (Zoiper) then hangs up the call with the error "not implemented."
> Other servers echo the attribute back to the client in the SIP 200 message, so I believe this is is the expected behavior. Unfortunately the RFC is not clear.