So to answer my own question, yes it does seem to be broken, the following patch fixes it but I'm not sure if this is the right thing to do: diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index b76a804..29f233d 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -6532,15 +6532,20 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status switch_channel_clear_flag(channel, CF_REQ_MEDIA); if (status < 200) { - if (switch_core_session_get_partner(session, &other_session) == SWITCH_STATUS_SUCCESS) { - if(switch_core_session_compare(session, other_session)) { - private_object_t *other_tech_pvt = switch_core_session_get_private(other_session); - if (sofia_test_flag(other_tech_pvt, TFLAG_3PCC)) { - sofia_set_flag_locked(tech_pvt, TFLAG_SKIP_EARLY); - } - } - switch_core_session_rwunlock(other_session); - } +// +// **AlanE** +// The following code sets TFLAG_SKIP_EARLY for the b-leg of a call with a 3PCC on the a-leg +// this then later on causes the call to fail with no write codec error +// Just commenting the code out seems to fix the issue +// if (switch_core_session_get_partner(session, &other_session) == SWITCH_STATUS_SUCCESS) { +// if(switch_core_session_compare(session, other_session)) { +// private_object_t *other_tech_pvt = switch_core_session_get_private(other_session); +// if (sofia_test_flag(other_tech_pvt, TFLAG_3PCC)) { +// sofia_set_flag_locked(tech_pvt, TFLAG_SKIP_EARLY); +// } +// } +// switch_core_session_rwunlock(other_session); +// } if (sofia_test_flag(tech_pvt, TFLAG_SKIP_EARLY)) { return;