struct sockaddr_in us;
struct sockaddr_in them;
int *ioid;
- uint16_t seqno;
struct sched_context *sched;
struct io_context *io;
void *data;
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;
}
}
}
- /* 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
{
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;
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;
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;
+
+ ifp_no++;
}
s->rx_seq_no = seq_no + 1;
- return 0;
+ return ifp_no;
}
/*- End of function --------------------------------------------------------*/
#if 0
printf("Got UDPTL packet from %s:%d (seq %d, len = %d)\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), seqno, res);
#endif
- udptl_rx_packet(udptl, udptl->rawdata + AST_FRIENDLY_OFFSET, res);
+ if (udptl_rx_packet(udptl, udptl->rawdata + AST_FRIENDLY_OFFSET, res) < 1)
+ return &ast_null_frame;
return &udptl->f[0];
}
udptl->tx[i].buf_len = -1;
}
- udptl->seqno = ast_random() & 0xffff;
udptl->them.sin_family = AF_INET;
udptl->us.sin_family = AF_INET;
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];
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);
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;