@ -343,26 +343,31 @@ static int retrans_pkt(void *data)
structsip_pkt*pkt=data;
intres=0;
ast_pthread_mutex_lock(&pkt->owner->lock);
if(pkt->retrans<MAX_RETRANS){
pkt->retrans++;
if(sipdebug){
if(pkt->owner->nat)
ast_verbose("Retransmitting #%d (NAT):\n%s\n to %s:%d\n",pkt->retrans,pkt->data,inet_ntoa(pkt->owner->recv.sin_addr),ntohs(pkt->owner->recv.sin_port));
else
ast_verbose("Retransmitting #%d (no NAT):\n%s\n to %s:%d\n",pkt->retrans,pkt->data,inet_ntoa(pkt->owner->sa.sin_addr),ntohs(pkt->owner->sa.sin_port));
if(!pkt->owner->needdestroy){
if(pkt->retrans<MAX_RETRANS){
pkt->retrans++;
if(sipdebug){
if(pkt->owner->nat)
ast_verbose("Retransmitting #%d (NAT):\n%s\n to %s:%d\n",pkt->retrans,pkt->data,inet_ntoa(pkt->owner->recv.sin_addr),ntohs(pkt->owner->recv.sin_port));
else
ast_verbose("Retransmitting #%d (no NAT):\n%s\n to %s:%d\n",pkt->retrans,pkt->data,inet_ntoa(pkt->owner->sa.sin_addr),ntohs(pkt->owner->sa.sin_port));
}
__sip_xmit(pkt->owner,pkt->data,pkt->packetlen);
res=1;
}else{
ast_log(LOG_WARNING,"Maximum retries exceeded on call %s for seqno %d (%s)\n",pkt->owner->callid,pkt->seqno,pkt->resp?"Response":"Request");
pkt->retransid=-1;
if(pkt->owner->owner){
/* XXX Potential deadlocK?? XXX */
ast_queue_hangup(pkt->owner->owner,1);
}else{
/* If no owner, destroy now */
sip_destroy(pkt->owner);
}
}
__sip_xmit(pkt->owner,pkt->data,pkt->packetlen);
res=1;
}else{
ast_log(LOG_WARNING,"Maximum retries exceeded on call %s for seqno %d (%s)\n",pkt->owner->callid,pkt->seqno,pkt->resp?"Response":"Request");
/* Don't bother retransmitting. It's about to be killed anyway */