- Disable RTP hold timers while T.38 fax transmission happens

- Encapsulate RTP timers in the rtp structure so we have one for video and one for audio
   The video one is not used in 1.4, really. Will be used for RTP keepalives when we can send
   something that video phones support in the RTP stream.
   I now this is a big architectual change at this stage for 1.4, but decided it was needed
   to avoid future bug reports.
- Document the RTP NAT keepalive option in sip.conf.sample

Issue 7679 in the bug tracker. Please test.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@48199 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Olle Johansson
2006-12-02 11:32:51 +00:00
parent 1298cf0ea6
commit f89143bd13
4 changed files with 117 additions and 29 deletions

View File

@@ -128,6 +128,11 @@ struct ast_rtp {
double rxtransit; /*!< Relative transit time for previous packet */
int lasttxformat;
int lastrxformat;
int rtptimeout; /*!< RTP timeout time (negative or zero means disabled, negative value means temporarily disabled) */
int rtpholdtimeout; /*!< RTP timeout when on hold (negative or zero means disabled, negative value means temporarily disabled). */
int rtpkeepalive; /*!< Send RTP comfort noice packets for keepalive */
/* DTMF Reception Variables */
char resp;
unsigned int lasteventendseqn;
@@ -521,6 +526,53 @@ unsigned int ast_rtcp_calc_interval(struct ast_rtp *rtp)
return interval;
}
/* \brief Put RTP timeout timers on hold during another transaction, like T.38 */
void ast_rtp_set_rtptimers_onhold(struct ast_rtp *rtp)
{
rtp->rtptimeout = (-1) * rtp->rtptimeout;
rtp->rtpholdtimeout = (-1) * rtp->rtpholdtimeout;
}
/*! \brief Set rtp timeout */
void ast_rtp_set_rtptimeout(struct ast_rtp *rtp, int timeout)
{
rtp->rtptimeout = timeout;
}
/*! \brief Set rtp hold timeout */
void ast_rtp_set_rtpholdtimeout(struct ast_rtp *rtp, int timeout)
{
rtp->rtpholdtimeout = timeout;
}
/*! \brief set RTP keepalive interval */
void ast_rtp_set_rtpkeepalive(struct ast_rtp *rtp, int period)
{
rtp->rtpkeepalive = period;
}
/*! \brief Get rtp timeout */
int ast_rtp_get_rtptimeout(struct ast_rtp *rtp)
{
if (rtp->rtptimeout < 0) /* We're not checking, but remembering the setting (during T.38 transmission) */
return 0;
return rtp->rtptimeout;
}
/*! \brief Get rtp hold timeout */
int ast_rtp_get_rtpholdtimeout(struct ast_rtp *rtp)
{
if (rtp->rtptimeout < 0) /* We're not checking, but remembering the setting (during T.38 transmission) */
return 0;
return rtp->rtpholdtimeout;
}
/*! \brief Get RTP keepalive interval */
int ast_rtp_get_rtpkeepalive(struct ast_rtp *rtp)
{
return rtp->rtpkeepalive;
}
void ast_rtp_set_data(struct ast_rtp *rtp, void *data)
{
rtp->data = data;