Index: main/udptl.c =================================================================== --- main/udptl.c (revision 89277) +++ main/udptl.c (working copy) @@ -131,7 +131,6 @@ struct sockaddr_in us; struct sockaddr_in them; int *ioid; - uint16_t seqno; struct sched_context *sched; struct io_context *io; void *data; @@ -369,7 +368,7 @@ s->f[ifp_no].subclass = AST_MODEM_T38; s->f[ifp_no].mallocd = 0; - //s->f[ifp_no].???seq_no = seq_no - i; + s->f[ifp_no].seqno = seq_no - i; s->f[ifp_no].datalen = lengths[i - 1]; s->f[ifp_no].data = (uint8_t *) bufs[i - 1]; s->f[ifp_no].offset = 0; @@ -381,23 +380,6 @@ } } } - /* If packets are received out of sequence, we may have already processed this packet from the error - recovery information in a packet already received. */ - if (seq_no >= s->rx_seq_no) { - /* Decode the primary IFP packet */ - s->f[ifp_no].frametype = AST_FRAME_MODEM; - s->f[ifp_no].subclass = AST_MODEM_T38; - - s->f[ifp_no].mallocd = 0; - //s->f[ifp_no].???seq_no = seq_no; - s->f[ifp_no].datalen = ifp_len; - s->f[ifp_no].data = (uint8_t *) ifp; - s->f[ifp_no].offset = 0; - s->f[ifp_no].src = "UDPTL"; - if (ifp_no > 0) - AST_LIST_NEXT(&s->f[ifp_no - 1], frame_list) = &s->f[ifp_no]; - AST_LIST_NEXT(&s->f[ifp_no], frame_list) = NULL; - } } else { @@ -488,7 +470,7 @@ s->f[ifp_no].subclass = AST_MODEM_T38; s->f[ifp_no].mallocd = 0; - //s->f[ifp_no].???seq_no = j; + s->f[ifp_no].seqno = j; s->f[ifp_no].datalen = s->rx[l].buf_len; s->f[ifp_no].data = s->rx[l].buf; s->f[ifp_no].offset = 0; @@ -499,12 +481,17 @@ ifp_no++; } } + } + + /* If packets are received out of sequence, we may have already processed this packet from the error + recovery information in a packet already received. */ + if (seq_no >= s->rx_seq_no) { /* Decode the primary IFP packet */ s->f[ifp_no].frametype = AST_FRAME_MODEM; s->f[ifp_no].subclass = AST_MODEM_T38; - + s->f[ifp_no].mallocd = 0; - //s->f[ifp_no].???seq_no = j; + s->f[ifp_no].seqno = seq_no; s->f[ifp_no].datalen = ifp_len; s->f[ifp_no].data = (uint8_t *) ifp; s->f[ifp_no].offset = 0; @@ -817,7 +804,6 @@ udptl->tx[i].buf_len = -1; } - udptl->seqno = ast_random() & 0xffff; udptl->them.sin_family = AF_INET; udptl->us.sin_family = AF_INET; @@ -911,6 +897,7 @@ int ast_udptl_write(struct ast_udptl *s, struct ast_frame *f) { + int seq; int len; int res; uint8_t buf[LOCAL_FAX_MAX_DATAGRAM]; @@ -928,6 +915,9 @@ return -1; } + /* Save seq_no for debug output because udptl_build_packet increments it */ + seq = s->tx_seq_no & 0xFFFF; + /* Cook up the UDPTL packet, with the relevant EC info. */ len = udptl_build_packet(s, buf, f->data, f->datalen); @@ -938,9 +928,9 @@ printf("Sent %d bytes of UDPTL data to %s:%d\n", res, ast_inet_ntoa(udptl->them.sin_addr), ntohs(udptl->them.sin_port)); #endif if (udptl_debug_test_addr(&s->them)) - ast_verbose("Sent UDPTL packet to %s:%d (type %d, seq %d, len %d)\n", + ast_verb(1, "Sent UDPTL packet to %s:%d (type %d, seq %d, len %d)\n", ast_inet_ntoa(s->them.sin_addr), - ntohs(s->them.sin_port), 0, s->seqno, len); + ntohs(s->them.sin_port), 0, seq, len); } return 0;