diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index d841aca04eb103a297b308e3729a13774725cd2e..48741f8bb50cbcb9aec3c7140d9d37f3dccd4455 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -2283,7 +2283,14 @@ static int sip_session_refresh(struct ast_sip_session *session, ast_sip_session_get_name(session)); } - if (active_media_state && active_media_state->topology) { + /* + * Attempt to resolve only if objects are available, and it's not + * switching to or from an image type. + */ + if (active_media_state && active_media_state->topology && + (!active_media_state->default_session[AST_MEDIA_TYPE_IMAGE] == + !pending_media_state->default_session[AST_MEDIA_TYPE_IMAGE])) { + struct ast_sip_session_media_state *new_pending_state; /* * We need to check if the passed in active and pending states are equal diff --git a/res/res_pjsip_t38.c b/res/res_pjsip_t38.c index 9c9569b4f233a1217e5677c86e9c8b6019bd16a0..63abce5abf836a27b9db9e766e5374798f9e313c 100644 --- a/res/res_pjsip_t38.c +++ b/res/res_pjsip_t38.c @@ -320,6 +320,15 @@ static int t38_reinvite_response_cb(struct ast_sip_session *session, pjsip_rx_da int index; session_media = session->active_media_state->default_session[AST_MEDIA_TYPE_IMAGE]; + + /* + * If there is a session_media object, but no udptl object available + * then it's assumed the stream was declined. + */ + if (!session_media->udptl) { + session_media = NULL; + } + if (!session_media) { ast_log(LOG_WARNING, "Received %d response to T.38 re-invite on '%s' but no active session media\n", status.code, session->channel ? ast_channel_name(session->channel) : "unknown channel");