Merged revisions 339626 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/10

................
  r339626 | rmudgett | 2011-10-06 12:53:00 -0500 (Thu, 06 Oct 2011) | 25 lines
  
  Merged revisions 339625 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.8
  
  ........
    r339625 | rmudgett | 2011-10-06 12:49:38 -0500 (Thu, 06 Oct 2011) | 18 lines
    
    Fix debugging messages generated by 'udptl debug'.
    
    * Makes chan_sip set the tag to the channel name.
    
    * Fixes received debug message sequence number.
    
    * Removed tx/rx debug message type since it was hard coded to 0.
    
    * Made udptl.c logged message header consistent if possible: "UDPTL (%s): ".
    
    * Removed unused rx_expected_seq_no from struct ast_udptl.
    
    (closes issue ASTERISK-18401)
    Reported by: Kevin P. Fleming
    Patches:
          jira_asterisk_18401_v1.8.patch (license #5621) patch uploaded by rmudgett
    Tested by: Matthew Nicholson
  ........
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@339627 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett
2011-10-06 17:54:42 +00:00
parent 7b75de509b
commit 2f82296096
2 changed files with 34 additions and 24 deletions

View File

@@ -5014,13 +5014,13 @@ static void change_t38_state(struct sip_pvt *p, int state)
parameters = p->t38.their_parms; parameters = p->t38.their_parms;
parameters.max_ifp = ast_udptl_get_far_max_ifp(p->udptl); parameters.max_ifp = ast_udptl_get_far_max_ifp(p->udptl);
parameters.request_response = AST_T38_REQUEST_NEGOTIATE; parameters.request_response = AST_T38_REQUEST_NEGOTIATE;
ast_udptl_set_tag(p->udptl, "SIP/%s", p->username); ast_udptl_set_tag(p->udptl, "%s", chan->name);
break; break;
case T38_ENABLED: case T38_ENABLED:
parameters = p->t38.their_parms; parameters = p->t38.their_parms;
parameters.max_ifp = ast_udptl_get_far_max_ifp(p->udptl); parameters.max_ifp = ast_udptl_get_far_max_ifp(p->udptl);
parameters.request_response = AST_T38_NEGOTIATED; parameters.request_response = AST_T38_NEGOTIATED;
ast_udptl_set_tag(p->udptl, "SIP/%s", p->username); ast_udptl_set_tag(p->udptl, "%s", chan->name);
break; break;
case T38_REJECTED: case T38_REJECTED:
case T38_DISABLED: case T38_DISABLED:

View File

@@ -172,7 +172,6 @@ struct ast_udptl {
unsigned int tx_seq_no; unsigned int tx_seq_no;
unsigned int rx_seq_no; unsigned int rx_seq_no;
unsigned int rx_expected_seq_no;
udptl_fec_tx_buffer_t tx[UDPTL_BUF_MASK + 1]; udptl_fec_tx_buffer_t tx[UDPTL_BUF_MASK + 1];
udptl_fec_rx_buffer_t rx[UDPTL_BUF_MASK + 1]; udptl_fec_rx_buffer_t rx[UDPTL_BUF_MASK + 1];
@@ -289,7 +288,7 @@ static int encode_open_type(const struct ast_udptl *udptl, uint8_t *buf, unsigne
if ((enclen = encode_length(buf, len, num_octets)) < 0) if ((enclen = encode_length(buf, len, num_octets)) < 0)
return -1; return -1;
if (enclen + *len > buflen) { if (enclen + *len > buflen) {
ast_log(LOG_ERROR, "(%s): Buffer overflow detected (%d + %d > %d)\n", ast_log(LOG_ERROR, "UDPTL (%s): Buffer overflow detected (%d + %d > %d)\n",
LOG_TAG(udptl), enclen, *len, buflen); LOG_TAG(udptl), enclen, *len, buflen);
return -1; return -1;
} }
@@ -577,7 +576,7 @@ static int udptl_build_packet(struct ast_udptl *s, uint8_t *buf, unsigned int bu
for (i = 0; i < entries; i++) { for (i = 0; i < entries; i++) {
j = (entry - i - 1) & UDPTL_BUF_MASK; j = (entry - i - 1) & UDPTL_BUF_MASK;
if (encode_open_type(s, buf, buflen, &len, s->tx[j].buf, s->tx[j].buf_len) < 0) { if (encode_open_type(s, buf, buflen, &len, s->tx[j].buf, s->tx[j].buf_len) < 0) {
ast_debug(1, "(%s): Encoding failed at i=%d, j=%d\n", ast_debug(1, "UDPTL (%s): Encoding failed at i=%d, j=%d\n",
LOG_TAG(s), i, j); LOG_TAG(s), i, j);
return -1; return -1;
} }
@@ -663,17 +662,19 @@ struct ast_frame *ast_udptl_read(struct ast_udptl *udptl)
{ {
int res; int res;
struct ast_sockaddr addr; struct ast_sockaddr addr;
uint16_t seqno = 0; uint8_t *buf;
buf = udptl->rawdata + AST_FRIENDLY_OFFSET;
/* Cache where the header will go */ /* Cache where the header will go */
res = ast_recvfrom(udptl->fd, res = ast_recvfrom(udptl->fd,
udptl->rawdata + AST_FRIENDLY_OFFSET, buf,
sizeof(udptl->rawdata) - AST_FRIENDLY_OFFSET, sizeof(udptl->rawdata) - AST_FRIENDLY_OFFSET,
0, 0,
&addr); &addr);
if (res < 0) { if (res < 0) {
if (errno != EAGAIN) if (errno != EAGAIN)
ast_log(LOG_WARNING, "(%s): UDPTL read error: %s\n", ast_log(LOG_WARNING, "UDPTL (%s): read error: %s\n",
LOG_TAG(udptl), strerror(errno)); LOG_TAG(udptl), strerror(errno));
ast_assert(errno != EBADF); ast_assert(errno != EBADF);
return &ast_null_frame; return &ast_null_frame;
@@ -688,17 +689,28 @@ struct ast_frame *ast_udptl_read(struct ast_udptl *udptl)
/* Send to whoever sent to us */ /* Send to whoever sent to us */
if (ast_sockaddr_cmp(&udptl->them, &addr)) { if (ast_sockaddr_cmp(&udptl->them, &addr)) {
ast_sockaddr_copy(&udptl->them, &addr); ast_sockaddr_copy(&udptl->them, &addr);
ast_debug(1, "UDPTL NAT (%s): Using address %s\n", ast_debug(1, "UDPTL (%s): NAT, Using address %s\n",
LOG_TAG(udptl), ast_sockaddr_stringify(&udptl->them)); LOG_TAG(udptl), ast_sockaddr_stringify(&udptl->them));
} }
} }
if (udptl_debug_test_addr(&addr)) { if (udptl_debug_test_addr(&addr)) {
ast_verb(1, "UDPTL (%s): packet from %s (type %d, seq %d, len %d)\n", int seq_no;
LOG_TAG(udptl), ast_sockaddr_stringify(&addr), 0, seqno, res);
/* Decode sequence number just for verbose message. */
if (res < 2) {
/* Short packet. */
seq_no = -1;
} else {
seq_no = (buf[0] << 8) | buf[1];
} }
if (udptl_rx_packet(udptl, udptl->rawdata + AST_FRIENDLY_OFFSET, res) < 1)
ast_verb(1, "UDPTL (%s): packet from %s (seq %d, len %d)\n",
LOG_TAG(udptl), ast_sockaddr_stringify(&addr), seq_no, res);
}
if (udptl_rx_packet(udptl, buf, res) < 1) {
return &ast_null_frame; return &ast_null_frame;
}
return &udptl->f[0]; return &udptl->f[0];
} }
@@ -708,7 +720,7 @@ static void calculate_local_max_datagram(struct ast_udptl *udptl)
unsigned int new_max = 0; unsigned int new_max = 0;
if (udptl->local_max_ifp == -1) { if (udptl->local_max_ifp == -1) {
ast_log(LOG_WARNING, "(%s): Cannot calculate local_max_datagram before local_max_ifp has been set.\n", ast_log(LOG_WARNING, "UDPTL (%s): Cannot calculate local_max_datagram before local_max_ifp has been set.\n",
LOG_TAG(udptl)); LOG_TAG(udptl));
udptl->local_max_datagram = -1; udptl->local_max_datagram = -1;
return; return;
@@ -749,7 +761,7 @@ static void calculate_far_max_ifp(struct ast_udptl *udptl)
unsigned new_max = 0; unsigned new_max = 0;
if (udptl->far_max_datagram == -1) { if (udptl->far_max_datagram == -1) {
ast_log(LOG_WARNING, "(%s): Cannot calculate far_max_ifp before far_max_datagram has been set.\n", ast_log(LOG_WARNING, "UDPTL (%s): Cannot calculate far_max_ifp before far_max_datagram has been set.\n",
LOG_TAG(udptl)); LOG_TAG(udptl));
udptl->far_max_ifp = -1; udptl->far_max_ifp = -1;
return; return;
@@ -981,10 +993,8 @@ void ast_udptl_set_tag(struct ast_udptl *udptl, const char *format, ...)
{ {
va_list ap; va_list ap;
if (udptl->tag) {
ast_free(udptl->tag); ast_free(udptl->tag);
udptl->tag = NULL; udptl->tag = NULL;
}
va_start(ap, format); va_start(ap, format);
if (ast_vasprintf(&udptl->tag, format, ap) == -1) { if (ast_vasprintf(&udptl->tag, format, ap) == -1) {
udptl->tag = NULL; udptl->tag = NULL;
@@ -1050,14 +1060,14 @@ int ast_udptl_write(struct ast_udptl *s, struct ast_frame *f)
if ((f->frametype != AST_FRAME_MODEM) || if ((f->frametype != AST_FRAME_MODEM) ||
(f->subclass.integer != AST_MODEM_T38)) { (f->subclass.integer != AST_MODEM_T38)) {
ast_log(LOG_WARNING, "(%s): UDPTL can only send T.38 data.\n", ast_log(LOG_WARNING, "UDPTL (%s): UDPTL can only send T.38 data.\n",
LOG_TAG(s)); LOG_TAG(s));
return -1; return -1;
} }
if (len > s->far_max_ifp) { if (len > s->far_max_ifp) {
ast_log(LOG_WARNING, ast_log(LOG_WARNING,
"(%s): UDPTL asked to send %d bytes of IFP when far end only prepared to accept %d bytes; data loss will occur." "UDPTL (%s): UDPTL asked to send %d bytes of IFP when far end only prepared to accept %d bytes; data loss will occur."
"You may need to override the T38FaxMaxDatagram value for this endpoint in the channel driver configuration.\n", "You may need to override the T38FaxMaxDatagram value for this endpoint in the channel driver configuration.\n",
LOG_TAG(s), len, s->far_max_ifp); LOG_TAG(s), len, s->far_max_ifp);
len = s->far_max_ifp; len = s->far_max_ifp;
@@ -1071,11 +1081,11 @@ int ast_udptl_write(struct ast_udptl *s, struct ast_frame *f)
if ((signed int) len > 0 && !ast_sockaddr_isnull(&s->them)) { if ((signed int) len > 0 && !ast_sockaddr_isnull(&s->them)) {
if ((res = ast_sendto(s->fd, buf, len, 0, &s->them)) < 0) if ((res = ast_sendto(s->fd, buf, len, 0, &s->them)) < 0)
ast_log(LOG_NOTICE, "(%s): UDPTL Transmission error to %s: %s\n", ast_log(LOG_NOTICE, "UDPTL (%s): Transmission error to %s: %s\n",
LOG_TAG(s), ast_sockaddr_stringify(&s->them), strerror(errno)); LOG_TAG(s), ast_sockaddr_stringify(&s->them), strerror(errno));
if (udptl_debug_test_addr(&s->them)) if (udptl_debug_test_addr(&s->them))
ast_verb(1, "UDPTL (%s): packet to %s (type %d, seq %d, len %d)\n", ast_verb(1, "UDPTL (%s): packet to %s (seq %d, len %d)\n",
LOG_TAG(s), ast_sockaddr_stringify(&s->them), 0, seq, len); LOG_TAG(s), ast_sockaddr_stringify(&s->them), seq, len);
} }
return 0; return 0;