[asterisk-commits] mjordan: branch mjordan/udptl r350360 - /team/mjordan/udptl/channels/chan_sip.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Jan 11 09:14:58 CST 2012
Author: mjordan
Date: Wed Jan 11 09:14:52 2012
New Revision: 350360
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=350360
Log:
Moved T38 initialization to SDP parsing. We'll see how that goes.
Modified:
team/mjordan/udptl/channels/chan_sip.c
Modified: team/mjordan/udptl/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/udptl/channels/chan_sip.c?view=diff&rev=350360&r1=350359&r2=350360
==============================================================================
--- team/mjordan/udptl/channels/chan_sip.c (original)
+++ team/mjordan/udptl/channels/chan_sip.c Wed Jan 11 09:14:52 2012
@@ -8648,6 +8648,35 @@
return ast_sockaddr_isnull(addr) || ast_sockaddr_is_any(addr);
}
+static int initialize_udptl(struct sip_pvt *p)
+{
+ if (!ast_test_flag(&p->flags[1], SIP_PAGE2_T38SUPPORT)) {
+ return 1;
+ }
+
+ /* If we've already initialized T38, don't take any further action */
+ if (p->udptl) {
+ return 0;
+ }
+
+ /* If T38 could be supported by this dialog, create it now */
+ if ((p->udptl = ast_udptl_new_with_bindaddr(sched, io, 0, &bindaddr))) {
+ ast_udptl_setqos(p->udptl, global_tos_audio, global_cos_audio);
+ /* Since the udptl session probably didn't exist when check_user_full was called,
+ * apply the peer's T38 information here if one exists
+ */
+ p->t38_maxdatagram = p->relatedpeer ? p->relatedpeer->t38_maxdatagram : global_t38_maxdatagram;
+ set_t38_capabilities(p);
+ } else {
+ /* udptl creation failed, T38 can not be supported on this dialog */
+ ast_log(AST_LOG_WARNING, "UDPTL creation failed - disabling T38 for this dialog\n");
+ ast_clear_flag(&p->flags[1], SIP_PAGE2_T38SUPPORT);
+ return 1;
+ }
+
+ return 0;
+}
+
/*! \brief Process SIP SDP offer, select formats and activate RTP channels
If offer is rejected, we will not change any properties of the call
Return 0 on success, a negative value on errors.
@@ -8891,8 +8920,12 @@
ast_rtp_codecs_payloads_set_m_type(&newtextrtp, NULL, codec);
}
/* Search for image media definition */
- } else if (p->udptl && ((sscanf(m, "image %30u udptl t38%n", &x, &len) == 1 && len > 0 && x) ||
+ } else if (((sscanf(m, "image %30u udptl t38%n", &x, &len) == 1 && len > 0 && x) ||
(sscanf(m, "image %30u UDPTL t38%n", &x, &len) == 1 && len > 0 && x) )) {
+ if (initialize_udptl(p)) {
+ continue;
+ }
+
if (p->offered_media[SDP_IMAGE].order_offered) {
ast_log(LOG_WARNING, "Multiple T.38 streams are not supported\n");
return -3;
@@ -9569,6 +9602,10 @@
int found = FALSE;
char s[256];
unsigned int x;
+
+ if (initialize_udptl(p)) {
+ return found;
+ }
if ((sscanf(a, "T38FaxMaxBuffer:%30u", &x) == 1)) {
ast_debug(3, "MaxBufferSize:%d\n", x);
@@ -22379,21 +22416,6 @@
}
if (authpeer) {
p->relatedpeer = ref_peer(authpeer, "setting dialog's relatedpeer pointer");
- }
- /* If T38 could be supported by this dialog, create it now */
- if (ast_test_flag(&p->flags[1], SIP_PAGE2_T38SUPPORT) && !p->udptl) {
- if ((p->udptl = ast_udptl_new_with_bindaddr(sched, io, 0, &bindaddr))) {
- ast_udptl_setqos(p->udptl, global_tos_audio, global_cos_audio);
- /* Since the udptl session probably didn't exist when check_user_full was called,
- * apply the peer's T38 information here if one exists
- */
- p->t38_maxdatagram = authpeer ? authpeer->t38_maxdatagram : global_t38_maxdatagram;
- set_t38_capabilities(p);
- } else {
- /* udptl creation failed, T38 can not be supported on this dialog */
- ast_log(AST_LOG_WARNING, "UDPTL creation failed - disabling T38 for this dialog\n");
- ast_clear_flag(&p->flags[1], SIP_PAGE2_T38SUPPORT);
- }
}
req->authenticated = 1;
More information about the asterisk-commits
mailing list