}
switch (status.code) {
- case 180:
- ast_trace(-1, "%s: Queueing RINGING\n", ast_sip_session_get_name(session));
- ast_queue_control(session->channel, AST_CONTROL_RINGING);
+ case 180: {
+ pjsip_rdata_sdp_info *sdp = pjsip_rdata_get_sdp_info(rdata);
+ if (sdp && sdp->body.ptr) {
+ ast_trace(-1, "%s: Queueing PROGRESS\n", ast_sip_session_get_name(session));
+ ast_queue_control(session->channel, AST_CONTROL_PROGRESS);
+ } else {
+ ast_trace(-1, "%s: Queueing RINGING\n", ast_sip_session_get_name(session));
+ ast_queue_control(session->channel, AST_CONTROL_RINGING);
+ }
+
ast_channel_lock(session->channel);
if (ast_channel_state(session->channel) != AST_STATE_UP) {
ast_setstate(session->channel, AST_STATE_RINGING);
}
ast_channel_unlock(session->channel);
break;
+ }
case 183:
ast_trace(-1, "%s: Queueing PROGRESS\n", ast_sip_session_get_name(session));
if (session->endpoint->ignore_183_without_sdp) {