[asterisk-commits] kmoore: branch kmoore/pimp_sip_srtp r386531 - in /team/kmoore/pimp_sip_srtp: ...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Apr 25 12:18:01 CDT 2013
Author: kmoore
Date: Thu Apr 25 12:17:57 2013
New Revision: 386531
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=386531
Log:
Add AVPF handling and associated configuration option
Modified:
team/kmoore/pimp_sip_srtp/include/asterisk/res_sip.h
team/kmoore/pimp_sip_srtp/res/res_sip/sip_configuration.c
team/kmoore/pimp_sip_srtp/res/res_sip_sdp_rtp.c
Modified: team/kmoore/pimp_sip_srtp/include/asterisk/res_sip.h
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pimp_sip_srtp/include/asterisk/res_sip.h?view=diff&rev=386531&r1=386530&r2=386531
==============================================================================
--- team/kmoore/pimp_sip_srtp/include/asterisk/res_sip.h (original)
+++ team/kmoore/pimp_sip_srtp/include/asterisk/res_sip.h Thu Apr 25 12:17:57 2013
@@ -251,7 +251,7 @@
enum ast_sip_session_media_encryption {
/*! Invalid media encryption configuration */
- AST_SIP_MEDIA_ENCRYPT_INVALID = 0,
+ AST_SIP_MEDIA_TRANSPORT_INVALID = 0,
/*! Do not allow any encryption of session media */
AST_SIP_MEDIA_ENCRYPT_DENY,
/*! Do not offer media encryption, but accept it if offered */
@@ -343,6 +343,8 @@
unsigned int send_rpid;
/*! Do we use media encryption? what type? */
enum ast_sip_session_media_encryption media_encryption;
+ /*! Do we use AVPF exclusively for this endpoint? */
+ unsigned int use_avpf;
};
/*!
Modified: team/kmoore/pimp_sip_srtp/res/res_sip/sip_configuration.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pimp_sip_srtp/res/res_sip/sip_configuration.c?view=diff&rev=386531&r1=386530&r2=386531
==============================================================================
--- team/kmoore/pimp_sip_srtp/res/res_sip/sip_configuration.c (original)
+++ team/kmoore/pimp_sip_srtp/res/res_sip/sip_configuration.c Thu Apr 25 12:17:57 2013
@@ -369,6 +369,7 @@
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_pai", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, send_pai));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_rpid", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, send_rpid));
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "media_encryption", "no", media_encryption_handler, NULL, 0, 0);
+ ast_sorcery_object_field_register(sip_sorcery, "endpoint", "use_avpf", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, use_avpf));
if (ast_sip_initialize_sorcery_transport(sip_sorcery)) {
ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");
Modified: team/kmoore/pimp_sip_srtp/res/res_sip_sdp_rtp.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/pimp_sip_srtp/res/res_sip_sdp_rtp.c?view=diff&rev=386531&r1=386530&r2=386531
==============================================================================
--- team/kmoore/pimp_sip_srtp/res/res_sip_sdp_rtp.c (original)
+++ team/kmoore/pimp_sip_srtp/res/res_sip_sdp_rtp.c Thu Apr 25 12:17:57 2013
@@ -475,47 +475,54 @@
* \param endpoint_encryption Media encryption configured for the endpoint
* \param stream pjmedia_sdp_media stream description
*
- * \retval AST_SIP_MEDIA_ENCRYPT_INVALID on encryption mismatch
+ * \retval AST_SIP_MEDIA_TRANSPORT_INVALID on encryption mismatch
* \retval The encryption requested in the SDP
*/
-static enum ast_sip_session_media_encryption check_endpoint_media_encryption(
- enum ast_sip_session_media_encryption endpoint_encryption,
+static enum ast_sip_session_media_encryption check_endpoint_media_transport(
+ struct ast_sip_endpoint *endpoint,
const struct pjmedia_sdp_media *stream)
{
enum ast_sip_session_media_encryption incoming_encryption;
+
+ if (endpoint->use_avpf) {
+ char transport_end = stream->desc.transport.ptr[stream->desc.transport.slen - 1];
+ if (transport_end != 'F') {
+ return AST_SIP_MEDIA_TRANSPORT_INVALID;
+ }
+ }
incoming_encryption = get_media_encryption_type(stream->desc.transport);
if (incoming_encryption == AST_SIP_MEDIA_ENCRYPT_DTLS) {
/* DTLS not yet supported */
- return AST_SIP_MEDIA_ENCRYPT_INVALID;
- }
-
- if (incoming_encryption == endpoint_encryption) {
+ return AST_SIP_MEDIA_TRANSPORT_INVALID;
+ }
+
+ if (incoming_encryption == endpoint->media_encryption) {
return incoming_encryption;
}
- switch (endpoint_encryption) {
+ switch (endpoint->media_encryption) {
case AST_SIP_MEDIA_ENCRYPT_DENY:
if (incoming_encryption != AST_SIP_MEDIA_ENCRYPT_NONE) {
/* Encryption offered, but not allowed */
- return AST_SIP_MEDIA_ENCRYPT_INVALID;
+ return AST_SIP_MEDIA_TRANSPORT_INVALID;
}
break;
case AST_SIP_MEDIA_ENCRYPT_NONE:
if (incoming_encryption != AST_SIP_MEDIA_ENCRYPT_SDES) {
/* Can only silently upgrade to SDES from no encryption */
- return AST_SIP_MEDIA_ENCRYPT_INVALID;
+ return AST_SIP_MEDIA_TRANSPORT_INVALID;
}
break;
case AST_SIP_MEDIA_ENCRYPT_SDES:
/* Can't silently upgrade or downgrade from SDES */
- return AST_SIP_MEDIA_ENCRYPT_INVALID;
+ return AST_SIP_MEDIA_TRANSPORT_INVALID;
case AST_SIP_MEDIA_ENCRYPT_DTLS:
/* Can't silently upgrade or downgrade from DTLS */
- return AST_SIP_MEDIA_ENCRYPT_INVALID;
- case AST_SIP_MEDIA_ENCRYPT_INVALID:
+ return AST_SIP_MEDIA_TRANSPORT_INVALID;
+ case AST_SIP_MEDIA_TRANSPORT_INVALID:
/* This shouldn't ever happen */
- return AST_SIP_MEDIA_ENCRYPT_INVALID;
+ return AST_SIP_MEDIA_TRANSPORT_INVALID;
}
return incoming_encryption;
@@ -559,9 +566,9 @@
return 0;
}
- /* Ensure incoming encryption is compatible with the endpoint's configuration */
- incoming_encryption = check_endpoint_media_encryption(session->endpoint->media_encryption, stream);
- if (incoming_encryption == AST_SIP_MEDIA_ENCRYPT_INVALID) {
+ /* Ensure incoming transport is compatible with the endpoint's configuration */
+ incoming_encryption = check_endpoint_media_transport(session->endpoint, stream);
+ if (incoming_encryption == AST_SIP_MEDIA_TRANSPORT_INVALID) {
return -1;
}
@@ -647,7 +654,7 @@
media->desc.media = pj_str(session_media->stream_type);
media->desc.transport = pj_str(ast_sdp_get_rtp_profile(
- !crypto_res, session_media->rtp, 0 /* not using AVPF */));
+ !crypto_res, session_media->rtp, session->endpoint->use_avpf));
/* Add connection level details */
if (direct_media_enabled) {
More information about the asterisk-commits
mailing list