[asterisk-commits] bbryant: branch bbryant/iax2_rotation r115354 - /team/bbryant/iax2_rotation/c...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue May 6 12:35:57 CDT 2008


Author: bbryant
Date: Tue May  6 12:35:56 2008
New Revision: 115354

URL: http://svn.digium.com/view/asterisk?view=rev&rev=115354
Log:
Update iax rotation branch.

Modified:
    team/bbryant/iax2_rotation/channels/chan_iax2.c

Modified: team/bbryant/iax2_rotation/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/team/bbryant/iax2_rotation/channels/chan_iax2.c?view=diff&rev=115354&r1=115353&r2=115354
==============================================================================
--- team/bbryant/iax2_rotation/channels/chan_iax2.c (original)
+++ team/bbryant/iax2_rotation/channels/chan_iax2.c Tue May  6 12:35:56 2008
@@ -543,11 +543,8 @@
 	unsigned char iseqno;
 	/*! Last incoming sequence number we have acknowledged */
 	unsigned char aseqno;
-	/*! time_t when RENEW is sent to change encryption key ... 
-	 * XXX (document more)
-	 * TODO: figure out a way to calculate time based on
-	 * something other than time() / time_t */
-	time_t rotatetimer;
+	/*! TODO explain */
+	int rotateid;
 
 	AST_DECLARE_STRING_FIELDS(
 		/*! Peer name */
@@ -4596,8 +4593,9 @@
 	return 0;
 }
 
-static int iax2_send_rotate(struct chan_iax2_pvt *pvt) 
-{
+static int iax2_send_rotate(const void *p)
+{
+	struct chan_iax2_pvt *pvt = (struct chan_iax2_pvt *)p;
 	struct iax_ie_data ied;
 	struct MD5Context md5;
 	char challenge[11] = "";
@@ -4622,6 +4620,8 @@
 	ast_log(LOG_NOTICE, "iax2_send_rotate: sending new ecx key '%s'", dgststr);
 
 	ast_aes_encrypt_key(digest, &pvt->ecx);
+
+	pvt->rotateid = iax2_sched_add(sched, ((ast_random() % 4) + 2) * 3600000, iax2_send_rotate, pvt);
 
 	return res;
 }
@@ -4692,6 +4692,11 @@
 			sendmini = 0;
 		}
 		pvt->lastvsent = fts;
+	}
+
+	if ( f->frametype == AST_FRAME_VOICE &&  ast_test_flag(pvt, IAX_ENCRYPTED) &&
+		 ast_test_flag(pvt, IAX_KEYPOPULATED) && !pvt->rotateid) {
+		iax2_send_rotate(pvt);
 	}
 	/* Allocate an iax_frame */
 	if (now) {
@@ -4752,14 +4757,9 @@
 		else if (f->frametype == AST_FRAME_VOICE)
 			pvt->svoiceformat = f->subclass;
 		else if (f->frametype == AST_FRAME_VIDEO)
-			pvt->svideoformat = f->subclass & ~0x1;
+			pvt->svideoformat = f->subclass & ~0x1;		
 		if (ast_test_flag(pvt, IAX_ENCRYPTED)) {
 			if (ast_test_flag(pvt, IAX_KEYPOPULATED)) {
-				if (!pvt->rotatetimer <= time(NULL)) {
-					pvt->rotatetimer += ((pvt->rotatetimer) ? 0 : time(NULL)) + ((ast_random() % 3) + 2) * 3600;
-					iax2_send_rotate(pvt);
-				}
-
 				if (iaxdebug) {
 					if (fr->transfer)
 						iax_showframe(fr, NULL, 2, &pvt->transfer, fr->datalen - sizeof(struct ast_iax2_full_hdr));




More information about the asterisk-commits mailing list