summaryrefslogtreecommitdiff
path: root/res/res_pjsip_session.c
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2017-09-22 11:10:11 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2017-09-22 11:10:11 -0500
commitfeadd654affac301c11f7888f53e5204e5206d7a (patch)
tree1e59023415233682b518f286423eb777f5b988d5 /res/res_pjsip_session.c
parent63a3d17f0b9fb8d6c4b332bed931bcdbbbc93ca1 (diff)
parent971548405bd82746229cad4958b10707e759816e (diff)
Merge "res_pjsip_session: Change some asserts to warning/debug messages"
Diffstat (limited to 'res/res_pjsip_session.c')
-rw-r--r--res/res_pjsip_session.c41
1 files changed, 29 insertions, 12 deletions
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index 163c2b868..b5874574e 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -277,7 +277,11 @@ int ast_sip_session_is_pending_stream_default(const struct ast_sip_session *sess
{
int index;
- ast_assert(session->pending_media_state->topology != NULL);
+ if (!session->pending_media_state->topology) {
+ ast_log(LOG_WARNING, "Pending topology was NULL for channel '%s'\n",
+ session->channel ? ast_channel_name(session->channel) : "unknown");
+ return 0;
+ }
if (ast_stream_get_state(stream) == AST_STREAM_STATE_REMOVED) {
return 0;
@@ -767,6 +771,30 @@ static int handle_negotiated_sdp(struct ast_sip_session *session, const pjmedia_
struct ast_stream_topology *topology;
unsigned int changed = 0;
+ /* This situation can legitimately happen when an SDP is received in a
+ * 183 Session Progress message. In that case, everything's been done
+ * by the time this function is called and there are no more pending
+ * streams.
+ */
+ if (!session->pending_media_state->topology) {
+ ast_debug(1, "Pending topology was NULL for channel '%s'\n",
+ session->channel ? ast_channel_name(session->channel) : "unknown");
+ return 0;
+ }
+
+ /* If we're handling negotiated streams, then we should already have set
+ * up session media instances (and Asterisk streams) that correspond to
+ * the local SDP, and there should be the same number of session medias
+ * and streams as there are local SDP streams
+ */
+ if (ast_stream_topology_get_count(session->pending_media_state->topology) != local->media_count
+ || AST_VECTOR_SIZE(&session->pending_media_state->sessions) != local->media_count) {
+ ast_log(LOG_WARNING, "Local SDP for channel '%s' contains %d media streams while we expected it to contain %u\n",
+ session->channel ? ast_channel_name(session->channel) : "unknown",
+ ast_stream_topology_get_count(session->pending_media_state->topology), local->media_count);
+ return -1;
+ }
+
for (i = 0; i < local->media_count; ++i) {
struct ast_sip_session_media *session_media;
struct ast_stream *stream;
@@ -775,14 +803,6 @@ static int handle_negotiated_sdp(struct ast_sip_session *session, const pjmedia_
continue;
}
- /* If we're handling negotiated streams, then we should already have set
- * up session media instances (and Asterisk streams) that correspond to
- * the local SDP, and there should be the same number of session medias
- * and streams as there are local SDP streams
- */
- ast_assert(i < AST_VECTOR_SIZE(&session->pending_media_state->sessions));
- ast_assert(i < ast_stream_topology_get_count(session->pending_media_state->topology));
-
session_media = AST_VECTOR_GET(&session->pending_media_state->sessions, i);
stream = ast_stream_topology_get_stream(session->pending_media_state->topology, i);
@@ -820,9 +840,6 @@ static int handle_negotiated_sdp(struct ast_sip_session *session, const pjmedia_
continue;
}
- ast_assert(i < AST_VECTOR_SIZE(&session->pending_media_state->sessions));
- ast_assert(i < ast_stream_topology_get_count(session->pending_media_state->topology));
-
session_media = AST_VECTOR_GET(&session->pending_media_state->sessions, i);
stream = ast_stream_topology_get_stream(session->pending_media_state->topology, i);