aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2009-08-07 13:08:57 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2009-08-07 13:08:57 +0000
commit22406191096963ee62bc6b26147b4bcdd84e5dba (patch)
tree56bd327b0c8177abdeb10cb560089fdf23bb3434 /main
parent96f19b6d17a15bdbb6ecfb40a94d9c3394245fb8 (diff)
Merged revisions 210992 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r210992 | kpfleming | 2009-08-07 08:08:00 -0500 (Fri, 07 Aug 2009) | 13 lines Workaround broken T.38 endpoints that offer tiny MaxDatagram sizes. Some T.38 endpoints treat T38FaxMaxDatagram as the maximum IFP size that should be sent to them, rather than the maximum packet payload size. If such an endpoint also requests UDPRedundancy as the error correction mode, we'll end up calculating a tiny maximum IFP size, so small as to be unusable. This patch sets a lower bound on what we'll consider the remote's maximum IFP size to be, assuming that endpoints that do this really can accept larger packets than they've offered to accept. (closes issue #15649) Reported by: dazza76 ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@210993 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/udptl.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/main/udptl.c b/main/udptl.c
index 3079da223..1e24e99a9 100644
--- a/main/udptl.c
+++ b/main/udptl.c
@@ -742,28 +742,32 @@ static void calculate_local_max_datagram(struct ast_udptl *udptl)
static void calculate_far_max_ifp(struct ast_udptl *udptl)
{
- unsigned new_max = 40;
+ unsigned new_max = 60;
/* calculate the maximum IFP the local endpoint should
* generate based on the far end's maximum datagram size
- * and the current error correction mode
+ * and the current error correction mode. some endpoints
+ * bogus 'max datagram' values that would result in unusable
+ * (too small) maximum IFP values, so we have a a reasonable
+ * minimum value to ensure that we can actually construct
+ * UDPTL packets.
*/
switch (udptl->error_correction_scheme) {
case UDPTL_ERROR_CORRECTION_NONE:
/* only need room for sequence number and length indicators */
- new_max = udptl->far_max_datagram - 6;
+ new_max = MAX(new_max, udptl->far_max_datagram - 6);
break;
case UDPTL_ERROR_CORRECTION_REDUNDANCY:
/* need room for sequence number, length indicators and the
* configured number of redundant packets
*/
- new_max = (udptl->far_max_datagram - 8) / (udptl->error_correction_entries + 1);
+ new_max = MAX(new_max, (udptl->far_max_datagram - 8) / (udptl->error_correction_entries + 1));
break;
case UDPTL_ERROR_CORRECTION_FEC:
/* need room for sequence number, length indicators and a
* a single IFP of the maximum size expected
*/
- new_max = (udptl->far_max_datagram - 10) / 2;
+ new_max = MAX(new_max, (udptl->far_max_datagram - 10) / 2);
break;
}
/* subtract 25% of space for insurance */