[asterisk-commits] branch oej/t38passthrough r12499 -
/team/oej/t38passthrough/channels/chan_sip.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Sat Mar 11 03:48:06 MST 2006
Author: oej
Date: Sat Mar 11 04:48:04 2006
New Revision: 12499
URL: http://svn.digium.com/view/asterisk?rev=12499&view=rev
Log:
- More work on per user/peer T38 support configuration...
Modified:
team/oej/t38passthrough/channels/chan_sip.c
Modified: team/oej/t38passthrough/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/oej/t38passthrough/channels/chan_sip.c?rev=12499&r1=12498&r2=12499&view=diff
==============================================================================
--- team/oej/t38passthrough/channels/chan_sip.c (original)
+++ team/oej/t38passthrough/channels/chan_sip.c Sat Mar 11 04:48:04 2006
@@ -539,6 +539,7 @@
};
struct t38properties {
+ struct ast_flags t38support; /*!< Flag for udptl, rtp or tcp support for this session */
int capability; /*!< Our T38 capability */
int peercapability; /*!< Peers T38 capability */
int jointcapability; /*!< Supported T38 capability at both ends */
@@ -651,9 +652,11 @@
#define SIP_PAGE2_DEBUG_CONSOLE (1 << 6)
#define SIP_PAGE2_DYNAMIC (1 << 7) /*!< Dynamic Peers register with Asterisk */
#define SIP_PAGE2_SELFDESTRUCT (1 << 8) /*!< Automatic peers need to destruct themselves */
-#define SIP_PAGE2_T38SUPPORT_UDPTL (1 << 15) /*!< T38 Fax Passthrough Support */
-#define SIP_PAGE2_T38SUPPORT_RTP (1 << 16) /*!< T38 Fax Passthrough Support */
-#define SIP_PAGE2_T38SUPPORT_TCP (1 << 16) /*!< T38 Fax Passthrough Support */
+/* GAP for other patches in the bug tracker */
+#define SIP_PAGE2_T38SUPPORT (3 << 15) /*!< T38 Fax Passthrough Support */
+#define SIP_PAGE2_T38SUPPORT_UDPTL (0 << 15) /*!< 15: T38 Fax Passthrough Support */
+#define SIP_PAGE2_T38SUPPORT_RTP (1 << 15) /*!< 16: T38 Fax Passthrough Support */
+#define SIP_PAGE2_T38SUPPORT_TCP (2 << 15) /*!< 17: T38 Fax Passthrough Support */
#define SIP_PAGE2_FLAGS_TO_COPY \
(SIP_PAGE2_T38SUPPORT_RTP | SIP_PAGE2_T38SUPPORT_UDPTL | SIP_PAGE2_T38SUPPORT_TCP)
@@ -1996,19 +1999,26 @@
r->capability = peer->capability;
r->prefs = peer->prefs;
#if defined(T38_SUPPORT)
- r->t38.capability = global_t38_capability;
- if (r->udptl) {
- if (ast_udptl_get_error_correction_scheme(r->udptl) == UDPTL_ERROR_CORRECTION_FEC )
- r->t38.capability |= T38FAX_UDP_EC_FEC;
- else if (ast_udptl_get_error_correction_scheme(r->udptl) == UDPTL_ERROR_CORRECTION_REDUNDANCY )
- r->t38.capability |= T38FAX_UDP_EC_REDUNDANCY;
- else if (ast_udptl_get_error_correction_scheme(r->udptl) == UDPTL_ERROR_CORRECTION_NONE )
- r->t38.capability |= T38FAX_UDP_EC_NONE;
- r->t38.capability |= T38FAX_RATE_MANAGEMENT_TRANSFERED_TCF;
- if (option_debug > 1)
- ast_log(LOG_DEBUG,"Our T38 capability (%d)\n", r->t38.capability);
- }
- r->t38.jointcapability = r->t38.capability;
+ if (ast_test_flag(&peer->flags_page2, SIP_PAGE2_T38SUPPORT)) {
+ ast_copy_flags(&r->t38.t38support, &peer->flags_page2, SIP_PAGE2_T38SUPPORT);
+ r->t38.capability = global_t38_capability;
+ if (r->udptl) {
+ if (ast_udptl_get_error_correction_scheme(r->udptl) == UDPTL_ERROR_CORRECTION_FEC )
+ r->t38.capability |= T38FAX_UDP_EC_FEC;
+ else if (ast_udptl_get_error_correction_scheme(r->udptl) == UDPTL_ERROR_CORRECTION_REDUNDANCY )
+ r->t38.capability |= T38FAX_UDP_EC_REDUNDANCY;
+ else if (ast_udptl_get_error_correction_scheme(r->udptl) == UDPTL_ERROR_CORRECTION_NONE )
+ r->t38.capability |= T38FAX_UDP_EC_NONE;
+ r->t38.capability |= T38FAX_RATE_MANAGEMENT_TRANSFERED_TCF;
+ if (option_debug > 1)
+ ast_log(LOG_DEBUG,"Our T38 capability (%d)\n", r->t38.capability);
+ }
+ r->t38.jointcapability = r->t38.capability;
+ } else {
+ /* Destroy udptl stream handle since it's no longer needed */
+ if (r->udptl)
+ ast_udptl_destroy(r->udptl);
+ }
#endif
if (r->rtp) {
if (option_debug)
@@ -2993,10 +3003,11 @@
t38 support is enabled - not good, but working.
XXX: It would be better to have user/peer configuration flag for t38support. :XXX
*/
-static int sip_bridge(struct ast_channel *c0, struct ast_channel *c1, int flags, struct ast_frame **fo,struct ast_channel **rc, int timeoutms) {
-
+static int sip_bridge(struct ast_channel *c0, struct ast_channel *c1, int flags, struct ast_frame **fo, struct ast_channel **rc, int timeoutms) {
+
+ /* OEJ: We need to check for peer support here */
if (!global_t38udptl_support) {
- return ast_rtp_bridge(c0,c1,flags,fo,rc,timeoutms);
+ return ast_rtp_bridge(c0, c1, flags, fo, rc, timeoutms);
} else {
ast_log(LOG_NOTICE, "T38 UDPTL support enabled, native RTP bridging disabled\n");
return AST_BRIDGE_FAILED_NOWARN;
@@ -4931,23 +4942,19 @@
p->sessionversion++;
/* Our T.38 end is */
- if (p->udptl)
- ast_udptl_get_us(p->udptl, &udptlsin);
+ ast_udptl_get_us(p->udptl, &udptlsin);
/* Determine T.38 UDPTL destination */
- if (p->udptl) {
- if (p->udptlredirip.sin_addr.s_addr) {
- udptldest.sin_port = p->udptlredirip.sin_port;
- udptldest.sin_addr = p->udptlredirip.sin_addr;
- } else {
- udptldest.sin_addr = p->ourip;
- udptldest.sin_port = udptlsin.sin_port;
- }
+ if (p->udptlredirip.sin_addr.s_addr) {
+ udptldest.sin_port = p->udptlredirip.sin_port;
+ udptldest.sin_addr = p->udptlredirip.sin_addr;
+ } else {
+ udptldest.sin_addr = p->ourip;
+ udptldest.sin_port = udptlsin.sin_port;
}
if (debug) {
- if (p->udptl && debug)
- ast_log(LOG_DEBUG, "T.38 UDPTL is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(udptlsin.sin_port));
+ ast_log(LOG_DEBUG, "T.38 UDPTL is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(udptlsin.sin_port));
}
/* We break with the "recommendation" and send our IP, in order that our
@@ -12793,6 +12800,15 @@
oldha = user->ha;
user->ha = NULL;
ast_copy_flags(user, &global_flags, SIP_FLAGS_TO_COPY);
+
+#ifdef T38_SUPPORT
+ if(global_t38udptl_support)
+ ast_set_flag(&user->flags_page2, SIP_PAGE2_T38SUPPORT_UDPTL);
+ if(global_t38rtp_support)
+ ast_set_flag(&user->flags_page2, SIP_PAGE2_T38SUPPORT_RTP);
+ if(global_t38tcp_support)
+ ast_set_flag(&user->flags_page2, SIP_PAGE2_T38SUPPORT_TCP);
+#endif
user->capability = global_capability;
user->prefs = default_prefs;
/* set default context */
@@ -12899,6 +12915,15 @@
peer->pickupgroup = 0;
peer->maxms = default_qualify;
peer->prefs = default_prefs;
+#ifdef T38_SUPPORT
+ /* This needs to move completely into flags... */
+ if(global_t38udptl_support)
+ ast_set_flag(&peer->flags_page2, SIP_PAGE2_T38SUPPORT_UDPTL);
+ if(global_t38rtp_support)
+ ast_set_flag(&peer->flags_page2, SIP_PAGE2_T38SUPPORT_RTP);
+ if(global_t38tcp_support)
+ ast_set_flag(&peer->flags_page2, SIP_PAGE2_T38SUPPORT_TCP);
+#endif
}
/*! \brief Create temporary peer (used in autocreatepeer mode) */
More information about the asterisk-commits
mailing list