[svn-commits] file: branch file/gulp_fax r394550 - /team/file/gulp_fax/res/res_sip_t38.c
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Wed Jul 17 10:17:27 CDT 2013
Author: file
Date: Wed Jul 17 10:17:25 2013
New Revision: 394550
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=394550
Log:
React to failure responses for outgoing T.38 re-invites.
Modified:
team/file/gulp_fax/res/res_sip_t38.c
Modified: team/file/gulp_fax/res/res_sip_t38.c
URL: http://svnview.digium.com/svn/asterisk/team/file/gulp_fax/res/res_sip_t38.c?view=diff&rev=394550&r1=394549&r2=394550
==============================================================================
--- team/file/gulp_fax/res/res_sip_t38.c (original)
+++ team/file/gulp_fax/res/res_sip_t38.c Wed Jul 17 10:17:25 2013
@@ -289,6 +289,29 @@
break;
}
}
+
+ return 0;
+}
+
+/*! \brief Callback for when a response is received for a T.38 re-invite */
+static int t38_reinvite_response_cb(struct ast_sip_session *session, pjsip_rx_data *rdata)
+{
+ struct pjsip_status_line status = rdata->msg_info.msg->line.status;
+ struct t38_state *state;
+ RAII_VAR(struct ast_sip_session_media *, session_media, NULL, ao2_cleanup);
+
+ if (status.code == 100) {
+ return 0;
+ }
+
+ if (!(state = t38_state_get_or_alloc(session)) ||
+ !(session_media = ao2_find(session->media, "image", OBJ_KEY))) {
+ ast_log(LOG_WARNING, "Received response to T.38 re-invite on '%s' but state unavailable\n",
+ ast_channel_name(session->channel));
+ return 0;
+ }
+
+ t38_change_state(session, session_media, state, (status.code == 200) ? T38_ENABLED : T38_REJECTED);
return 0;
}
@@ -342,7 +365,8 @@
state->our_parms = *parameters;
ast_udptl_set_local_max_ifp(session_media->udptl, state->our_parms.max_ifp);
t38_change_state(data->session, session_media, state, T38_LOCAL_REINVITE);
- ast_sip_session_refresh(data->session, NULL, t38_reinvite_sdp_cb, NULL, AST_SIP_SESSION_REFRESH_METHOD_INVITE, 1);
+ ast_sip_session_refresh(data->session, NULL, t38_reinvite_sdp_cb, t38_reinvite_response_cb,
+ AST_SIP_SESSION_REFRESH_METHOD_INVITE, 1);
}
break;
case AST_T38_TERMINATED:
@@ -747,10 +771,7 @@
ast_sockaddr_set_port(addrs, remote_stream->desc.port);
ast_udptl_set_peer(session_media->udptl, addrs);
- if (session->t38state == T38_LOCAL_REINVITE) {
- t38_interpret_sdp(state, session, session_media, remote_stream);
- t38_change_state(session, session_media, state, T38_ENABLED);
- }
+ t38_interpret_sdp(state, session, session_media, remote_stream);
return 0;
}
More information about the svn-commits
mailing list