mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-25 07:01:09 +00:00
move 'struct ast_rtp' back to rtp.c where it belongs
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@33133 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -4112,7 +4112,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
int sendonly = 0;
|
||||
int numberofports;
|
||||
struct ast_channel *bridgepeer = NULL;
|
||||
struct ast_rtp newaudiortp, newvideortp; /* Buffers for codec handling */
|
||||
struct ast_rtp *newaudiortp, *newvideortp; /* Buffers for codec handling */
|
||||
int newjointcapability; /* Negotiated capability */
|
||||
int newpeercapability;
|
||||
int newnoncodeccapability;
|
||||
@@ -4125,10 +4125,13 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
}
|
||||
|
||||
/* Initialize the temporary RTP structures we use to evaluate the offer from the peer */
|
||||
memset(&newaudiortp, 0, sizeof(newaudiortp));
|
||||
memset(&newvideortp, 0, sizeof(newvideortp));
|
||||
ast_rtp_pt_default(&newaudiortp);
|
||||
ast_rtp_pt_default(&newvideortp);
|
||||
newaudiortp = alloca(ast_rtp_alloc_size());
|
||||
memset(newaudiortp, 0, ast_rtp_alloc_size());
|
||||
ast_rtp_pt_default(newaudiortp);
|
||||
|
||||
newvideortp = alloca(ast_rtp_alloc_size());
|
||||
memset(newvideortp, 0, ast_rtp_alloc_size());
|
||||
ast_rtp_pt_default(newvideortp);
|
||||
|
||||
/* Update our last rtprx when we receive an SDP, too */
|
||||
p->lastrtprx = p->lastrtptx = time(NULL); /* XXX why both ? */
|
||||
@@ -4168,7 +4171,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
numberofmediastreams++;
|
||||
|
||||
if (p->vrtp)
|
||||
ast_rtp_pt_clear(&newvideortp); /* Must be cleared in case no m=video line exists */
|
||||
ast_rtp_pt_clear(newvideortp); /* Must be cleared in case no m=video line exists */
|
||||
numberofports = 1;
|
||||
if ((sscanf(m, "audio %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2) ||
|
||||
(sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1)) {
|
||||
@@ -4176,7 +4179,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
/* Found audio stream in this media definition */
|
||||
portno = x;
|
||||
/* Scan through the RTP payload types specified in a "m=" line: */
|
||||
ast_rtp_pt_clear(&newaudiortp);
|
||||
ast_rtp_pt_clear(newaudiortp);
|
||||
for (codecs = m + len; !ast_strlen_zero(codecs); codecs = ast_skip_blanks(codecs + len)) {
|
||||
if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
|
||||
ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
|
||||
@@ -4184,7 +4187,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
}
|
||||
if (debug)
|
||||
ast_verbose("Found RTP audio format %d\n", codec);
|
||||
ast_rtp_set_m_type(&newaudiortp, codec);
|
||||
ast_rtp_set_m_type(newaudiortp, codec);
|
||||
}
|
||||
} else if ((sscanf(m, "video %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2) ||
|
||||
(sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
|
||||
@@ -4199,7 +4202,7 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
}
|
||||
if (debug)
|
||||
ast_verbose("Found RTP video format %d\n", codec);
|
||||
ast_rtp_set_m_type(&newvideortp, codec);
|
||||
ast_rtp_set_m_type(newvideortp, codec);
|
||||
}
|
||||
} else
|
||||
ast_log(LOG_WARNING, "Unsupported SDP media type in offer: %s\n", m);
|
||||
@@ -4305,14 +4308,14 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
ast_verbose("Found description format %s for ID %d\n", mimeSubtype, codec);
|
||||
|
||||
/* Note: should really look at the 'freq' and '#chans' params too */
|
||||
ast_rtp_set_rtpmap_type(&newaudiortp, codec, "audio", mimeSubtype);
|
||||
ast_rtp_set_rtpmap_type(newaudiortp, codec, "audio", mimeSubtype);
|
||||
if (p->vrtp)
|
||||
ast_rtp_set_rtpmap_type(&newvideortp, codec, "video", mimeSubtype);
|
||||
ast_rtp_set_rtpmap_type(newvideortp, codec, "video", mimeSubtype);
|
||||
}
|
||||
|
||||
/* Now gather all of the codecs that we are asked for: */
|
||||
ast_rtp_get_current_formats(&newaudiortp, &peercapability, &peernoncodeccapability);
|
||||
ast_rtp_get_current_formats(&newvideortp, &vpeercapability, &vpeernoncodeccapability);
|
||||
ast_rtp_get_current_formats(newaudiortp, &peercapability, &peernoncodeccapability);
|
||||
ast_rtp_get_current_formats(newvideortp, &vpeercapability, &vpeernoncodeccapability);
|
||||
|
||||
newjointcapability = p->capability & (peercapability | vpeercapability);
|
||||
newpeercapability = (peercapability | vpeercapability);
|
||||
@@ -4346,15 +4349,9 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
p->peercapability = newpeercapability; /* The other sides capability in latest offer */
|
||||
p->noncodeccapability = newnoncodeccapability; /* DTMF capabilities */
|
||||
|
||||
{
|
||||
int i;
|
||||
/* Copy payload types from source to destination */
|
||||
for (i=0; i < MAX_RTP_PT; ++i) {
|
||||
p->rtp->current_RTP_PT[i]= newaudiortp.current_RTP_PT[i];
|
||||
if (p->vrtp)
|
||||
p->vrtp->current_RTP_PT[i]= newvideortp.current_RTP_PT[i];
|
||||
}
|
||||
}
|
||||
ast_rtp_pt_copy(p->rtp, newaudiortp);
|
||||
if (p->vrtp)
|
||||
ast_rtp_pt_copy(p->vrtp, newvideortp);
|
||||
|
||||
if (ast_test_flag(&p->flags[0], SIP_DTMF) == SIP_DTMF_AUTO) {
|
||||
ast_clear_flag(&p->flags[0], SIP_DTMF);
|
||||
|
@@ -80,59 +80,11 @@ struct rtpPayloadType {
|
||||
int code;
|
||||
};
|
||||
|
||||
/*! \brief RTP session description */
|
||||
struct ast_rtp {
|
||||
int s;
|
||||
char resp;
|
||||
struct ast_frame f;
|
||||
unsigned char rawdata[8192 + AST_FRIENDLY_OFFSET];
|
||||
unsigned int ssrc; /*!< Synchronization source, RFC 3550, page 10. */
|
||||
unsigned int themssrc; /*!< Their SSRC */
|
||||
unsigned int rxssrc;
|
||||
unsigned int lastts;
|
||||
unsigned int lastdigitts;
|
||||
unsigned int lastrxts;
|
||||
unsigned int lastividtimestamp;
|
||||
unsigned int lastovidtimestamp;
|
||||
unsigned int lasteventseqn;
|
||||
int lastrxseqno; /*!< Last received sequence number */
|
||||
unsigned short seedrxseqno; /*!< What sequence number did they start with?*/
|
||||
unsigned int seedrxts; /*!< What RTP timestamp did they start with? */
|
||||
unsigned int rxcount; /*!< How many packets have we received? */
|
||||
unsigned int rxoctetcount; /*!< How many octets have we received? should be rxcount *160*/
|
||||
unsigned int txcount; /*!< How many packets have we sent? */
|
||||
unsigned int txoctetcount; /*!< How many octets have we sent? (txcount*160)*/
|
||||
unsigned int cycles; /*!< Shifted count of sequence number cycles */
|
||||
double rxjitter; /*!< Interarrival jitter at the moment */
|
||||
double rxtransit; /*!< Relative transit time for previous packet */
|
||||
unsigned int lasteventendseqn;
|
||||
int lasttxformat;
|
||||
int lastrxformat;
|
||||
int dtmfcount;
|
||||
unsigned int dtmfduration;
|
||||
int nat;
|
||||
unsigned int flags;
|
||||
struct sockaddr_in us; /*!< Socket representation of the local endpoint. */
|
||||
struct sockaddr_in them; /*!< Socket representation of the remote endpoint. */
|
||||
struct timeval rxcore;
|
||||
struct timeval txcore;
|
||||
double drxcore; /*!< The double representation of the first received packet */
|
||||
struct timeval lastrx; /*!< timeval when we last received a packet */
|
||||
struct timeval dtmfmute;
|
||||
struct ast_smoother *smoother;
|
||||
int *ioid;
|
||||
unsigned short seqno; /*!< Sequence number, RFC 3550, page 13. */
|
||||
unsigned short rxseqno;
|
||||
struct sched_context *sched;
|
||||
struct io_context *io;
|
||||
void *data;
|
||||
ast_rtp_callback callback;
|
||||
struct rtpPayloadType current_RTP_PT[MAX_RTP_PT];
|
||||
int rtp_lookup_code_cache_isAstFormat; /*!< a cache for the result of rtp_lookup_code(): */
|
||||
int rtp_lookup_code_cache_code;
|
||||
int rtp_lookup_code_cache_result;
|
||||
struct ast_rtcp *rtcp;
|
||||
};
|
||||
/*!
|
||||
* \brief Get the amount of space required to hold an RTP session
|
||||
* \return number of bytes required
|
||||
*/
|
||||
size_t ast_rtp_alloc_size(void);
|
||||
|
||||
/*!
|
||||
* \brief Initializate a RTP session.
|
||||
@@ -196,6 +148,10 @@ int ast_rtp_settos(struct ast_rtp *rtp, int tos);
|
||||
void ast_rtp_pt_clear(struct ast_rtp* rtp);
|
||||
/*! \brief Set payload types to defaults */
|
||||
void ast_rtp_pt_default(struct ast_rtp* rtp);
|
||||
|
||||
/*! \brief Copy payload types between RTP structures */
|
||||
void ast_rtp_pt_copy(struct ast_rtp *dest, const struct ast_rtp *src);
|
||||
|
||||
void ast_rtp_set_m_type(struct ast_rtp* rtp, int pt);
|
||||
void ast_rtp_set_rtpmap_type(struct ast_rtp* rtp, int pt,
|
||||
char* mimeType, char* mimeSubtype);
|
||||
|
65
rtp.c
65
rtp.c
@@ -90,6 +90,60 @@ static struct sockaddr_in rtcpdebugaddr; /*!< Debug RTCP packets to/from this ho
|
||||
static int nochecksums = 0;
|
||||
#endif
|
||||
|
||||
/*! \brief RTP session description */
|
||||
struct ast_rtp {
|
||||
int s;
|
||||
char resp;
|
||||
struct ast_frame f;
|
||||
unsigned char rawdata[8192 + AST_FRIENDLY_OFFSET];
|
||||
unsigned int ssrc; /*!< Synchronization source, RFC 3550, page 10. */
|
||||
unsigned int themssrc; /*!< Their SSRC */
|
||||
unsigned int rxssrc;
|
||||
unsigned int lastts;
|
||||
unsigned int lastdigitts;
|
||||
unsigned int lastrxts;
|
||||
unsigned int lastividtimestamp;
|
||||
unsigned int lastovidtimestamp;
|
||||
unsigned int lasteventseqn;
|
||||
int lastrxseqno; /*!< Last received sequence number */
|
||||
unsigned short seedrxseqno; /*!< What sequence number did they start with?*/
|
||||
unsigned int seedrxts; /*!< What RTP timestamp did they start with? */
|
||||
unsigned int rxcount; /*!< How many packets have we received? */
|
||||
unsigned int rxoctetcount; /*!< How many octets have we received? should be rxcount *160*/
|
||||
unsigned int txcount; /*!< How many packets have we sent? */
|
||||
unsigned int txoctetcount; /*!< How many octets have we sent? (txcount*160)*/
|
||||
unsigned int cycles; /*!< Shifted count of sequence number cycles */
|
||||
double rxjitter; /*!< Interarrival jitter at the moment */
|
||||
double rxtransit; /*!< Relative transit time for previous packet */
|
||||
unsigned int lasteventendseqn;
|
||||
int lasttxformat;
|
||||
int lastrxformat;
|
||||
int dtmfcount;
|
||||
unsigned int dtmfduration;
|
||||
int nat;
|
||||
unsigned int flags;
|
||||
struct sockaddr_in us; /*!< Socket representation of the local endpoint. */
|
||||
struct sockaddr_in them; /*!< Socket representation of the remote endpoint. */
|
||||
struct timeval rxcore;
|
||||
struct timeval txcore;
|
||||
double drxcore; /*!< The double representation of the first received packet */
|
||||
struct timeval lastrx; /*!< timeval when we last received a packet */
|
||||
struct timeval dtmfmute;
|
||||
struct ast_smoother *smoother;
|
||||
int *ioid;
|
||||
unsigned short seqno; /*!< Sequence number, RFC 3550, page 13. */
|
||||
unsigned short rxseqno;
|
||||
struct sched_context *sched;
|
||||
struct io_context *io;
|
||||
void *data;
|
||||
ast_rtp_callback callback;
|
||||
struct rtpPayloadType current_RTP_PT[MAX_RTP_PT];
|
||||
int rtp_lookup_code_cache_isAstFormat; /*!< a cache for the result of rtp_lookup_code(): */
|
||||
int rtp_lookup_code_cache_code;
|
||||
int rtp_lookup_code_cache_result;
|
||||
struct ast_rtcp *rtcp;
|
||||
};
|
||||
|
||||
/* Forward declarations */
|
||||
static int ast_rtcp_write(void *data);
|
||||
static void timeval2ntp(struct timeval tv, unsigned int *msw, unsigned int *lsw);
|
||||
@@ -303,6 +357,11 @@ static void stun_req_id(struct stun_header *req)
|
||||
req->id.id[x] = ast_random();
|
||||
}
|
||||
|
||||
size_t ast_rtp_alloc_size(void)
|
||||
{
|
||||
return sizeof(struct ast_rtp);
|
||||
}
|
||||
|
||||
void ast_rtp_stun_request(struct ast_rtp *rtp, struct sockaddr_in *suggestion, const char *username)
|
||||
{
|
||||
struct stun_header *req;
|
||||
@@ -1185,10 +1244,10 @@ void ast_rtp_pt_default(struct ast_rtp* rtp)
|
||||
rtp->rtp_lookup_code_cache_result = 0;
|
||||
}
|
||||
|
||||
static void ast_rtp_pt_copy(struct ast_rtp *dest, struct ast_rtp *src)
|
||||
void ast_rtp_pt_copy(struct ast_rtp *dest, const struct ast_rtp *src)
|
||||
{
|
||||
int i;
|
||||
/* Copy payload types from source to destination */
|
||||
unsigned int i;
|
||||
|
||||
for (i=0; i < MAX_RTP_PT; ++i) {
|
||||
dest->current_RTP_PT[i].isAstFormat =
|
||||
src->current_RTP_PT[i].isAstFormat;
|
||||
|
Reference in New Issue
Block a user