[asterisk-commits] branch oej/securertp-trunk r33172 - in
/team/oej/securertp-trunk: ./ channels...
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Fri Jun 9 02:19:50 MST 2006
Author: oej
Date: Fri Jun 9 04:19:50 2006
New Revision: 33172
URL: http://svn.digium.com/view/asterisk?rev=33172&view=rev
Log:
Update to trunk
Modified:
team/oej/securertp-trunk/ (props changed)
team/oej/securertp-trunk/channels/chan_sip.c
team/oej/securertp-trunk/include/asterisk.h
team/oej/securertp-trunk/include/asterisk/rtp.h
team/oej/securertp-trunk/rtp.c
Propchange: team/oej/securertp-trunk/
------------------------------------------------------------------------------
automerge = http://edvina.net/training/
Propchange: team/oej/securertp-trunk/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Jun 9 04:19:50 2006
@@ -1,1 +1,1 @@
-/trunk:1-33127
+/trunk:1-33169
Modified: team/oej/securertp-trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/oej/securertp-trunk/channels/chan_sip.c?rev=33172&r1=33171&r2=33172&view=diff
==============================================================================
--- team/oej/securertp-trunk/channels/chan_sip.c (original)
+++ team/oej/securertp-trunk/channels/chan_sip.c Fri Jun 9 04:19:50 2006
@@ -4155,7 +4155,7 @@
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;
@@ -4170,10 +4170,13 @@
}
/* 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 ? */
@@ -4216,7 +4219,7 @@
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/%4s %n", &x, &numberofports, protocol, &len) == 3) ||
(sscanf(m, "audio %d RTP/%4s %n", &x, protocol, &len) == 2)) {
@@ -4234,7 +4237,7 @@
/* 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);
@@ -4242,7 +4245,7 @@
}
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/%4s %n", &x, &numberofports, protocol, &len) == 3) ||
(sscanf(m, "video %d RTP/%4s %n", &x, protocol, &len) == 2)) {
@@ -4267,7 +4270,7 @@
}
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);
@@ -4371,9 +4374,9 @@
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);
if (secure_audio && !(p->srtp && p->srtp->a_crypto)) {
ast_log(LOG_WARNING, "Can't provide secure audio requested in SDP offer\n");
@@ -4386,8 +4389,8 @@
}
/* 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);
@@ -4421,15 +4424,9 @@
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);
Modified: team/oej/securertp-trunk/include/asterisk.h
URL: http://svn.digium.com/view/asterisk/team/oej/securertp-trunk/include/asterisk.h?rev=33172&r1=33171&r2=33172&view=diff
==============================================================================
--- team/oej/securertp-trunk/include/asterisk.h (original)
+++ team/oej/securertp-trunk/include/asterisk.h Fri Jun 9 04:19:50 2006
@@ -53,8 +53,8 @@
int ast_set_priority(int); /*!< Provided by asterisk.c */
int load_modules(const int preload_only); /*!< Provided by module.c */
int load_pbx(void); /*!< Provided by pbx.c */
-int init_logger(void) /*!< Provided by logger.c */;
-void close_logger(void) /*!< Provided by logger.c */;
+int init_logger(void); /*!< Provided by logger.c */
+void close_logger(void); /*!< Provided by logger.c */
int reload_logger(int); /*!< Provided by logger.c */
int init_framer(void); /*!< Provided by frame.c */
int term_init(void); /*!< Provided by term.c */
Modified: team/oej/securertp-trunk/include/asterisk/rtp.h
URL: http://svn.digium.com/view/asterisk/team/oej/securertp-trunk/include/asterisk/rtp.h?rev=33172&r1=33171&r2=33172&view=diff
==============================================================================
--- team/oej/securertp-trunk/include/asterisk/rtp.h (original)
+++ team/oej/securertp-trunk/include/asterisk/rtp.h Fri Jun 9 04:19:50 2006
@@ -139,60 +139,11 @@
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;
- struct ast_srtp *srtp; /*!< Secure RTP data */
-};
+/*!
+ * \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.
@@ -256,6 +207,10 @@
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);
Modified: team/oej/securertp-trunk/rtp.c
URL: http://svn.digium.com/view/asterisk/team/oej/securertp-trunk/rtp.c?rev=33172&r1=33171&r2=33172&view=diff
==============================================================================
--- team/oej/securertp-trunk/rtp.c (original)
+++ team/oej/securertp-trunk/rtp.c Fri Jun 9 04:19:50 2006
@@ -92,6 +92,61 @@
struct ast_srtp_res *g_srtp_res;
struct ast_srtp_policy_res *g_policy_res;
+
+/*! \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;
+ struct ast_srtp *srtp; /*!< Secure RTP data */
+};
/* Forward declarations */
static int ast_rtcp_write(void *data);
@@ -304,6 +359,11 @@
int x;
for (x=0;x<4;x++)
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)
@@ -1406,10 +1466,10 @@
rtp->rtp_lookup_code_cache_result = 0;
}
-static void ast_rtp_pt_copy(struct ast_rtp *dest, struct ast_rtp *src)
-{
- int i;
- /* Copy payload types from source to destination */
+void ast_rtp_pt_copy(struct ast_rtp *dest, const struct ast_rtp *src)
+{
+ unsigned int i;
+
for (i=0; i < MAX_RTP_PT; ++i) {
dest->current_RTP_PT[i].isAstFormat =
src->current_RTP_PT[i].isAstFormat;
More information about the asterisk-commits
mailing list