[Asterisk-code-review] res rtp asterisk: add control frame for when dtls is establi... (asterisk[master])

Kevin Harwell asteriskteam at digium.com
Thu Jun 29 15:09:50 CDT 2017


Kevin Harwell has uploaded this change for review. ( https://gerrit.asterisk.org/5934


Change subject: res_rtp_asterisk: add control frame for when dtls is established
......................................................................

res_rtp_asterisk: add control frame for when dtls is established

Once DTLS has been established there needed to be a way to notify
processes upstream. This patch adds a new control frame subclass
AST_CONTROL_DTLS_ESTABLISHED that gets created  and set whenever
a dtls has been established.

ASTERISK-27096 #close

Change-Id: I27ff344f5a8c691a1890dfe3254a4b1a49e7f4a0
---
M channels/chan_iax2.c
M funcs/func_frame_trace.c
M include/asterisk/frame.h
M main/channel.c
M res/res_rtp_asterisk.c
5 files changed, 31 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/34/5934/1

diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index d15b55d..0f2b914 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -1444,6 +1444,7 @@
 	case AST_CONTROL_RECORD_STOP:
 	case AST_CONTROL_RECORD_SUSPEND:
 	case AST_CONTROL_RECORD_MUTE:
+	default:
 		/* None of these media recording control frames should go across the link. */
 		break;
 	}
diff --git a/funcs/func_frame_trace.c b/funcs/func_frame_trace.c
index 49abfdf..2e20b33 100644
--- a/funcs/func_frame_trace.c
+++ b/funcs/func_frame_trace.c
@@ -369,6 +369,9 @@
 		case AST_CONTROL_RECORD_MUTE:
 			ast_verbose("SubClass: RECORD_MUTE\n");
 			break;
+		case AST_CONTROL_DTLS_ESTABLISHED:
+			ast_verbose("SubClass: DTLS_ESTABLISHED\n");
+			break;
 		}
 
 		if (frame->subclass.integer == -1) {
diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h
index 2f6c365..f35e242 100644
--- a/include/asterisk/frame.h
+++ b/include/asterisk/frame.h
@@ -299,6 +299,7 @@
 	AST_CONTROL_MASQUERADE_NOTIFY = 34,	/*!< A masquerade is about to begin/end. (Never sent as a frame but directly with ast_indicate_data().) */
 	AST_CONTROL_STREAM_TOPOLOGY_REQUEST_CHANGE = 35,    /*!< Channel indication that a stream topology change has been requested */
 	AST_CONTROL_STREAM_TOPOLOGY_CHANGED = 36,           /*!< Channel indication that a stream topology change has occurred */
+	AST_CONTROL_DTLS_ESTABLISHED = 37, /*!< Channel indication that a dtls has been established */
 
 	/*
 	 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
diff --git a/main/channel.c b/main/channel.c
index c7c2b9d..4d2f2e9 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4240,6 +4240,8 @@
 	case AST_CONTROL_UNHOLD:
 		/* This is a special case.  You stop hearing this. */
 		break;
+	default:
+		break;
 	}
 
 	return 0;
@@ -4526,6 +4528,7 @@
 	case AST_CONTROL_RECORD_STOP:
 	case AST_CONTROL_RECORD_SUSPEND:
 	case AST_CONTROL_RECORD_MUTE:
+	case AST_CONTROL_DTLS_ESTABLISHED:
 		/* Nothing left to do for these. */
 		res = 0;
 		break;
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index 600846c..b018125 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -109,6 +109,8 @@
 #define SRTP_MASTER_SALT_LEN 14
 #define SRTP_MASTER_LEN (SRTP_MASTER_KEY_LEN + SRTP_MASTER_SALT_LEN)
 
+#define RTP_DTLS_ESTABLISHED -37
+
 enum strict_rtp_state {
 	STRICT_RTP_OPEN = 0, /*! No RTP packets should be dropped, all sources accepted */
 	STRICT_RTP_LEARN,    /*! Accept next packet as source */
@@ -2477,7 +2479,11 @@
 			/* Any further connections will be existing since this is now established */
 			dtls->connection = AST_RTP_DTLS_CONNECTION_EXISTING;
 			/* Use the keying material to set up key/salt information */
-			res = dtls_srtp_setup(rtp, srtp, instance, rtcp);
+			if ((res = dtls_srtp_setup(rtp, srtp, instance, rtcp))) {
+				return res;
+			}
+			/* Notify that dtls has been established */
+			res = RTP_DTLS_ESTABLISHED;
 		} else {
 			/* Since we've sent additional traffic start the timeout timer for retransmission */
 			dtls_srtp_start_timeout_timer(instance, rtp, rtcp);
@@ -4750,6 +4756,14 @@
 	/* Read in RTCP data from the socket */
 	if ((res = rtcp_recvfrom(instance, read_area, read_area_size,
 				0, &addr)) < 0) {
+		if (res == RTP_DTLS_ESTABLISHED) {
+			struct ast_frame dtls_established = {
+				AST_FRAME_CONTROL,
+				.subclass.integer = AST_CONTROL_DTLS_ESTABLISHED,
+			};
+			return ast_frisolate(&dtls_established);
+		}
+
 		ast_assert(errno != EBADF);
 		if (errno != EAGAIN) {
 			ast_log(LOG_WARNING, "RTCP Read error: %s.  Hanging up.\n",
@@ -4947,6 +4961,14 @@
 	/* Actually read in the data from the socket */
 	if ((res = rtp_recvfrom(instance, read_area, read_area_size, 0,
 				&addr)) < 0) {
+		if (res == RTP_DTLS_ESTABLISHED) {
+			struct ast_frame dtls_established = {
+				AST_FRAME_CONTROL,
+				.subclass.integer = AST_CONTROL_DTLS_ESTABLISHED,
+			};
+			return ast_frisolate(&dtls_established);
+		}
+
 		ast_assert(errno != EBADF);
 		if (errno != EAGAIN) {
 			ast_log(LOG_WARNING, "RTP Read error: %s.  Hanging up.\n",

-- 
To view, visit https://gerrit.asterisk.org/5934
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I27ff344f5a8c691a1890dfe3254a4b1a49e7f4a0
Gerrit-Change-Number: 5934
Gerrit-PatchSet: 1
Gerrit-Owner: Kevin Harwell <kharwell at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20170629/e1a62f5c/attachment-0001.html>


More information about the asterisk-code-review mailing list