[Sumover-dev] [svn commit] r3825 - rat/trunk

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Fri Sep 8 19:46:24 BST 2006


Author: piers
Date: Fri Sep  8 19:45:32 2006
New Revision: 3825

Modified:
   rat/trunk/main_engine.c
   rat/trunk/mbus_engine.c
   rat/trunk/ui_audiotool.tcl

Log:
Two changes added:
1) New "security icon" (a padlock ala firefox) - which indicates when encryption is
activated. This is activated when an mbus message is recieved, or thru the UI. Also
fixed the key handling in rx_security_encryption_key() which wasn't setting the key
in the session_t *sp before calling the ui_send_encryption_key() which was leading to
spurious behaviour when the user changed the encryption state in the UI.

2) Modified rx_rtp_addr() so that it can be used to dynamically change the
address/port/ttl that RAT listens to - this is not possible thru a modified UI - 
which isn't unlike a web browser style. Some of the code is little nasty but it seems
to do the job - it should also be useful for AccessGrid to be able change session
address without having to restart RAT every time. Also in the next release RAT will
just start when 'double clicked' - like most applications these days and user can 
type in a new address once its started.


Modified: rat/trunk/main_engine.c
==============================================================================
--- rat/trunk/main_engine.c	(original)
+++ rat/trunk/main_engine.c	Fri Sep  8 19:45:32 2006
@@ -252,23 +252,26 @@
 
 	rendezvous_with_controller(sp);
 
-	/* Load saved settings, and create the participant database... */
-	/* FIXME: probably needs updating for the transcoder so we can */
-	/*        have different saved settings for each domain.       */
-	/* FIXME: this gets the wrong device name for the transcoder.  */
-	for (i = 0; i < num_sessions; i++) {
-		if (pdb_create(&sp[i]->pdb) == FALSE) {
-			debug_msg("Failed to create participant database\n");
-			abort();
-		}
-		pdb_item_create(sp[i]->pdb, (uint16_t)ts_get_freq(sp[i]->cur_ts), rtp_my_ssrc(sp[i]->rtp_session[0]));
-		settings_load_late(sp[i]);
-		session_validate(sp[i]);
-	}
+        /* Moved session[0] setup to rx_rtp_addr so one may change addr
+           binding dynamically */
+        /* Load saved settings, and create the participant database... */
+        /* FIXME: probably needs updating for the transcoder so we can */
+        /*        have different saved settings for each domain.       */
+        /* FIXME: this gets the wrong device name for the transcoder.  */
+        for (i = 0; i < num_sessions; i++) {
+                if (pdb_create(&sp[i]->pdb) == FALSE) {
+                        debug_msg("Failed to create participant database\n");
+                        abort();
+                }
+                pdb_item_create(sp[i]->pdb, (uint16_t)ts_get_freq(sp[i]->cur_ts), rtp_my_ssrc(sp[i]->rtp_session[0]));
+                settings_load_late(sp[i]);
+                session_validate(sp[i]);
+        }
 
 	xmemchk();
 	xdoneinit();
 
+	debug_msg("Entering media engine main loop\n");
 	while (!should_exit) {
 		for (i = 0; i < num_sessions; i++) {
 			elapsed_time = 0;
@@ -450,9 +453,10 @@
 		tx_stop(sp[i]->tb);
 
 		for (j = 0; j < sp[i]->rtp_session_count; j++) {
+	                debug_msg("Media engine exiting session: %d\n", j);
 			rtp_send_bye(sp[i]->rtp_session[j]);
-			rtp_done(sp[i]->rtp_session[j]);
 			rtp_callback_exit(sp[i]->rtp_session[j]);
+			rtp_done(sp[i]->rtp_session[j]);
 		}
 
 		/* Inform other processes that we're about to quit... */

Modified: rat/trunk/mbus_engine.c
==============================================================================
--- rat/trunk/mbus_engine.c	(original)
+++ rat/trunk/mbus_engine.c	Fri Sep  8 19:45:32 2006
@@ -524,16 +524,17 @@
 
 	mp = mbus_parse_init(args);
 	if (mbus_parse_str(mp, &key)) {
+		debug_msg("rx_security_encryption_key: key: %s\n",key);
                 key = mbus_decode_str(key);
                 for(i = 0; i < sp->rtp_session_count; i++) {
 			if (strlen(key) == 0) {
                         	rtp_set_encryption_key(sp->rtp_session[i], NULL);
-				ui_send_encryption_key(sp, sp->mbus_ui_addr);
 				sp->encrkey = NULL;
+				ui_send_encryption_key(sp, sp->mbus_ui_addr);
 			} else {
                         	rtp_set_encryption_key(sp->rtp_session[i], key);
-				ui_send_encryption_key(sp, sp->mbus_ui_addr);
 				sp->encrkey = xstrdup(key);
+				ui_send_encryption_key(sp, sp->mbus_ui_addr);
 			}
                 }
 	} else {
@@ -902,6 +903,7 @@
 	struct s_source	*s;
 
 	UNUSED(args);
+	debug_msg("mbus: rx_rtp_query\n");
 	ui_send_rtp_ssrc(sp, srce);
 	pdb_get_first_id(sp->pdb, &ssrc);
         my_ssrc = rtp_my_ssrc(sp->rtp_session[0]);
@@ -935,58 +937,6 @@
 	ui_send_rtp_addr(sp, srce);
 }
 
-static void rx_rtp_addr(char *srce, char *args, session_t *sp)
-{
-	/* rtp.addr ("224.1.2.3" 1234 1234 16) */
-	char	*addr;
-	int	 rx_port, tx_port, ttl;
-	struct mbus_parser	*mp;
-
-	UNUSED(srce);
-
-	mp = mbus_parse_init(args);
-	mbus_parse_str(mp, &addr); addr = mbus_decode_str(addr);
-	mbus_parse_int(mp, &rx_port);
-	mbus_parse_int(mp, &tx_port);
-	mbus_parse_int(mp, &ttl);
-	mbus_parse_done(mp);
-
-	sp->rtp_session[sp->rtp_session_count] = rtp_init(addr, (uint16_t)rx_port, (uint16_t)tx_port, ttl, 64000, rtp_callback_proc, NULL);
-    rtp_set_option(sp->rtp_session[sp->rtp_session_count], RTP_OPT_PROMISC, sp->rtp_promiscuous_mode);
-
-    rtp_callback_init(sp->rtp_session[0], sp);
-	if(sp->rtp_session_count < sp->layers && sp->rtp_session_count > 0) {
-	       rtp_set_my_ssrc(sp->rtp_session[sp->rtp_session_count], rtp_my_ssrc(sp->rtp_session[0]));
-	}
-	sp->rtp_session_count++;
-}
-
-
-static void rx_rtp_source_name(char *srce, char *args, session_t *sp)
-{
-	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_NAME);
-}
-
-static void rx_rtp_source_email(char *srce, char *args, session_t *sp)
-{
-	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_EMAIL);
-}
-
-static void rx_rtp_source_phone(char *srce, char *args, session_t *sp)
-{
-	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_PHONE);
-}
-
-static void rx_rtp_source_loc(char *srce, char *args, session_t *sp)
-{
-	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_LOC);
-}
-
-static void rx_rtp_source_note(char *srce, char *args, session_t *sp)
-{
-	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_NOTE);
-}
-
 static void rx_rtp_source_mute(char *srce, char *args, session_t *sp)
 {
 	/* Sources are active whilst packets are arriving and maintaining      */
@@ -1042,6 +992,107 @@
 	mbus_parse_done(mp);
 }
 
+static void rx_rtp_addr(char *srce, char *args, session_t *sp)
+{
+	/* rtp.addr ("224.1.2.3" 1234 1234 16) */
+	char	*addr;
+	int	 rx_port, tx_port, ttl;
+	struct mbus_parser	*mp;
+        char buf[50];
+        uint32_t           ssrc;
+
+	UNUSED(srce);
+
+	mp = mbus_parse_init(args);
+	mbus_parse_str(mp, &addr); addr = mbus_decode_str(addr);
+	mbus_parse_int(mp, &rx_port);
+	mbus_parse_int(mp, &tx_port);
+	mbus_parse_int(mp, &ttl);
+	mbus_parse_done(mp);
+        debug_msg("rx_rtp_addr: New Addr:%d,rx_port:%d,tx_port:%d,ttl:%d\n",addr, rx_port, tx_port, ttl);
+
+	if (sp->rtp_session_count) {
+	  /* Existing session present - delete and recreate with new params */
+          sp->rtp_session_count--;
+          settings_save(sp);
+          rx_audio_input_mute(srce, "1", sp);
+          rtp_callback_exit(sp->rtp_session[sp->rtp_session_count]);
+	  /* Remove existing sources from DB and UI , then destory DB and RTP sess */
+	  pdb_get_first_id(sp->pdb, &ssrc);
+	  do {
+	      struct s_source *s = source_get_by_ssrc(sp->active_sources, ssrc);
+	      if (s != NULL) {
+		source_remove(sp->active_sources, s);
+	      }
+	      ui_send_rtp_remove(sp, sp->mbus_ui_addr, ssrc);
+	  } while (pdb_get_next_id(sp->pdb, ssrc, &ssrc));
+          pdb_destroy(&sp->pdb);
+          rtp_done(sp->rtp_session[sp->rtp_session_count]);
+
+          /* Perform rtp session re-creation */
+          sp->rtp_session[sp->rtp_session_count] = rtp_init(addr, (uint16_t)rx_port, (uint16_t)tx_port, ttl, 64000, rtp_callback_proc, NULL);
+          
+          rtp_set_option(sp->rtp_session[sp->rtp_session_count], RTP_OPT_PROMISC, sp->rtp_promiscuous_mode);
+          rtp_callback_init(sp->rtp_session[0], sp);
+
+          if(sp->rtp_session_count < sp->layers && sp->rtp_session_count > 0) {
+                 rtp_set_my_ssrc(sp->rtp_session[sp->rtp_session_count], rtp_my_ssrc(sp->rtp_session[0]));
+          }
+          sp->rtp_session_count++;
+          /* Load saved settings, and create the participant database... */
+          /* FIXME: probably needs updating for the transcoder so we can */
+          /*        have different saved settings for each domain.       */
+          /* FIXME: this gets the wrong device name for the transcoder.  */
+          if (pdb_create(&sp->pdb) == FALSE) {
+                    debug_msg("Failed to re-create new participant database\n");
+                    abort();
+          }
+          pdb_item_create(sp->pdb, (uint16_t)ts_get_freq(sp->cur_ts), rtp_my_ssrc(sp->rtp_session[0]));
+          settings_load_late(sp);
+          session_validate(sp);
+
+          // Update src in UI
+          rx_rtp_query(srce, args, sp);
+        } else {
+          sp->rtp_session[sp->rtp_session_count] = rtp_init(addr, (uint16_t)rx_port, (uint16_t)tx_port, ttl, 64000, rtp_callback_proc, NULL);
+          
+          rtp_set_option(sp->rtp_session[sp->rtp_session_count], RTP_OPT_PROMISC, sp->rtp_promiscuous_mode);
+          rtp_callback_init(sp->rtp_session[0], sp);
+
+          if(sp->rtp_session_count < sp->layers && sp->rtp_session_count > 0) {
+                 rtp_set_my_ssrc(sp->rtp_session[sp->rtp_session_count], rtp_my_ssrc(sp->rtp_session[0]));
+          }
+          sp->rtp_session_count++;
+        }
+}
+
+
+static void rx_rtp_source_name(char *srce, char *args, session_t *sp)
+{
+	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_NAME);
+}
+
+static void rx_rtp_source_email(char *srce, char *args, session_t *sp)
+{
+	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_EMAIL);
+}
+
+static void rx_rtp_source_phone(char *srce, char *args, session_t *sp)
+{
+	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_PHONE);
+}
+
+static void rx_rtp_source_loc(char *srce, char *args, session_t *sp)
+{
+	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_LOC);
+}
+
+static void rx_rtp_source_note(char *srce, char *args, session_t *sp)
+{
+	rx_rtp_source_sdes(srce, args, sp, RTCP_SDES_NOTE);
+}
+
+
 static void rx_rtp_source_gain(char *srce, char *args, session_t *sp)
 {
 	pdb_entry_t	*pdbe;

Modified: rat/trunk/ui_audiotool.tcl
==============================================================================
--- rat/trunk/ui_audiotool.tcl	(original)
+++ rat/trunk/ui_audiotool.tcl	Fri Sep  8 19:45:32 2006
@@ -667,9 +667,15 @@
 }
 
 proc mbus_recv_security.encryption.key {new_key} {
-	global key_var key
+      global key_var key
+      if { [string length $key]!=0 } {
 	set key_var 1
 	set key     $new_key
+      } else {
+	set key_var 0
+	set key     $new_key
+      }
+      update_security_indicator
 }
 
 proc mbus_recv_tool.rat.format.in {arg} {
@@ -791,9 +797,12 @@
 }
 
 proc mbus_recv_rtp.addr {addr rx_port tx_port ttl} {
-    global session_address group_addr
+    global session_address group_addr g_rx_port g_tx_port g_ttl
+    set g_rx_port $rx_port
+    set g_tx_port $tx_port
+    set g_ttl $ttl
     set group_addr $addr
-    set session_address "Address: $addr Port: $rx_port TTL: $ttl"
+    set session_address "$addr/$rx_port/$ttl"
 }
 
 proc mbus_recv_tool.rat.lecture.mode {mode} {
@@ -1044,9 +1053,9 @@
     catch {after cancel $loss_to_me_timer($ssrc)}
     catch {after cancel $loss_from_me_timer($ssrc)}
 
-    set pvars [list CNAME NAME EMAIL LOC PHONE TOOL NOTE PRIV CODEC DURATION PCKTS_RECV    \
-	    PCKTS_LOST PCKTS_MISO PCKTS_DUP JITTER BUFFER_SIZE PLAYOUT_DELAY  \
-	    LOSS_TO_ME LOSS_FROM_ME INDEX JIT_TOGED loss_to_me_timer \
+    set pvars [list CNAME NAME EMAIL LOC PHONE TOOL NOTE PRIV CODEC DURATION \
+	    PCKTS_RECV PCKTS_LOST PCKTS_MISO PCKTS_DUP JITTER BUFFER_SIZE \
+	    PLAYOUT_DELAY LOSS_TO_ME LOSS_FROM_ME INDEX JIT_TOGED loss_to_me_timer \
 	    loss_from_me_timer GAIN MUTE HEARD_LOSS_TO_ME HEARD_LOSS_FROM_ME  \
 	    SKEW SPIKE_EVENTS SPIKE_TOGED RTT]
 
@@ -1517,6 +1526,71 @@
 	}
 }
 
+proc update_security_indicator {} {
+ global key_var key icons
+
+ if {$key_var == 1 && [string length $key]!=0 } {
+    .r.f.f.padlock configure -image $icons(padlock) -bg lightyellow
+    .r.f.f.pad configure -bg lightyellow
+    .r.f.f.addr configure -bg lightyellow
+  } else {
+    .r.f.f.padlock configure -image "" -bg gray70
+    .r.f.f.pad configure -bg gray70
+    .r.f.f.addr configure -bg gray70 
+  }
+}
+
+proc valid_rtp_addr {addr rx_port tx_port ttl} {
+  global group_addr g_rx_port g_tx_port g_ttl
+
+  if { [string match \[0-9\]* $rx_port] && [string match \[0-9\]* $tx_port] } {
+      if { $rx_port < 65536 && $tx_port < 65536} {
+        set addrl [split $addr .]
+        if { [llength $addrl] == 4 } {
+          foreach i $addrl {
+            if {[string match \[0-9\]* $i]} {
+              if { $i < 0 || $i > 255 } { 
+return "\"$group_addr\" $g_rx_port $g_tx_port $g_ttl" }
+            }
+          }
+          return "\"$addr\" $rx_port $tx_port $ttl"
+        }
+      }
+  }
+  return "\"$group_addr\" $g_rx_port $g_tx_port $g_ttl"
+}
+
+proc change_rtp_addr {session_address} {
+  global in_mute_var my_ssrc
+  global group_addr g_rx_port g_tx_port g_ttl
+
+  focus .
+
+  # Return if session_address unchanged
+  if { $session_address == "$group_addr/$g_rx_port/$g_ttl" } return
+
+  # Create new rtp_addr string to signal to mbus_engine
+  set rtp_addrl [ split $session_address /]
+  switch  [llength $rtp_addrl]  {
+    1 
+	{ set rtp_addr [valid_rtp_addr [lindex $rtp_addrl 0] $g_rx_port $g_tx_port $g_ttl]}
+    2 
+	{ set rtp_addr [valid_rtp_addr [lindex $rtp_addrl 0] [lindex $rtp_addrl 1] [lindex $rtp_addrl 1] $g_ttl]}
+    3 
+	{ set rtp_addr [valid_rtp_addr [lindex $rtp_addrl 0] [lindex $rtp_addrl 1] [lindex $rtp_addrl 1] [lindex $rtp_addrl 2]] }
+    4 
+	{ set rtp_addr [valid_rtp_addr [lindex $rtp_addrl 0] [lindex $rtp_addrl 1] [lindex $rtp_addrl 2] [lindex $rtp_addrl 3]] }
+    default 
+	{ set rtp_addr "\"$group_addr\" $g_rx_port $g_tx_port $g_ttl"}
+  }
+  # required "rtp.addr": "\"addr\" src_port dst_port ttl" 
+  # Check if new address is valid
+  # e.g rtp.addr "224.1.2.3" 1234    1234    16
+  #               mcast      rx_port tx_port ttl
+  mbus_send "R" "rtp.addr" "$rtp_addr"
+}
+
+
 # Initialise RAT MAIN window
 frame .r
 frame .l
@@ -1526,17 +1600,27 @@
 frame .l.t.list.f -highlightthickness 0 -bd 0
 .l.t.list create window 0 0 -anchor nw -window .l.t.list.f
 
-frame .l.f -relief groove -bd 2
-label .l.f.title -bd 0 -textvariable session_title -justify center
-label .l.f.addr  -bd 0 -textvariable session_address
+set icons(file_open) [image create photo -format gif  -data { R0lGODlhEgASAPIAAAAAAICAAMDAwPj8APj8+AAAAAAAAAAAACH5BAEAAAIALAAAAAASABIAAAM7KLrc/jAKQCUDC2N7t6JeA2YDMYDoA5hsWYZk28LfjN4b4AJB7/ue1elHDOl4RKAImQzQcDeOdEp1JAAAO///}]
+
+set icons(file_save) [image create photo -data { R0lGODlhEgASAPEAAAAAAICAAMDAwAAAACH5BAEAAAIALAAAAAASABIAAAI3lI+pywYPY0QgAHbvqVpBamHhNnqlwIkdeoJrZUlPcML0jde0DOnxxHrtJA6frLhC8YiNpnNRAAA7////}]
+
+set icons(padlock) [image create photo -format gif -data { R0lGODlhCgAMAMZaAJRpAJRtAJRtCJRxAJxtAJxxAJx1AKV1AJx9AKV5AKV9AKV9CKWCAK2GAK2GCK2KALWGAHuKjISGjK2OAISKjISKlLWOAISKnISOlLWSCIySnIyWpZSapZyelKWqlKWmraWqnK26xrW+vbW+xr2+tbXDxr3DtefLIb3Dzu/PKcbLtcbPrcbL1s7Xpe/bQtbXpc7T1u/fQt7frffnSvfnUt7jrf/rWvfrc97j597j7+frtf/va//zY/f3a/fzhPf3e//ze+/vvf/zhP/3c+fv7//7c+/3vffzvf/7hPf7nP/3nPf3vff3xv/7nPf/pf//nP/7tf//pf/7vf//tf//xv//zv//1v//3v//5///7////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEKAH8ALAAAAAAKAAwAAAd0gEuCKiIhJEGCgiY5REQ4HzpHSyssIxURIzAgiBwoFC01EiUaNUwbGB0yRh4XGi8ZFhMQDQwKCggLFlBZvFhYV1IGD0lWTUI+UlVKBQ9AVD88NEpTNwMNNlM7MzE9TS4EDClOUU9IRUMnAA62CQcDAQEAAoEAOw==}]
+
+
+frame .r.f -relief groove -bd 2 -width $iwd
+frame .r.f.f -relief sunk
+label .r.f.f.padlock -image "" -relief flat -bg gray70
+label .r.f.f.pad -text "" -relief flat -bg gray70
+label .r.f.addrlab -text "Addr/port/ttl: " -relief flat 
+entry .r.f.f.addr  -bd 1 -textvariable session_address -relief flat -bg gray70
+bind .r.f.f.addr <KeyPress-Return> { change_rtp_addr $session_address }
 
 frame       .st -bd 0
 
-checkbutton .st.file -bitmap disk      -indicatoron 0 -variable files_on  -command file_show
-checkbutton .st.recp -bitmap reception -indicatoron 0 -variable matrix_on -command toggle_chart
-checkbutton .st.help -bitmap balloon   -indicatoron 0 -variable help_on
+checkbutton .st.file -image $icons(file_save) -indicatoron 0 -variable files_on  -command file_show
+checkbutton .st.recp -bd 1 -bitmap reception -indicatoron 0 -variable matrix_on -command toggle_chart
+checkbutton .st.help -bitmap balloon   -indicatoron 0 -variable help_on 
 
-#-onvalue 1 -offvalue 0 -variable help_on -font $compfont -anchor w -padx 4
 button      .st.opts  -text "Options..." -pady 2 -command {wm deiconify .prefs; update_user_panel; raise .prefs}
 button      .st.about -text "About..."   -pady 2 -command {jiggle_credits; wm deiconify .about}
 button      .st.quit  -text "Quit"       -pady 2 -command do_quit
@@ -1545,19 +1629,28 @@
 frame .r.c.rx -relief groove -bd 2
 frame .r.c.tx -relief groove -bd 2
 
+#frame .s -relief groove -bd 2 -width $iwd
+#label .s.status -text "Status: " -relief flat 
+
+#pack .s -side bottom -fill x -padx 2 -pady 0
+#pack .s.status -side left -anchor e -padx 2 -pady 2
+
 pack .st -side bottom -fill x -padx 2 -pady 0
 pack .st.file .st.recp .st.help -side left -anchor e -padx 2 -pady 2
 
+
 pack .st.quit .st.about .st.opts -side right -anchor w -padx 2 -pady 2
 
 pack .r -side top -fill x -padx 2
+pack .r.f -side top -fill x -padx 0 -pady 2
+pack .r.f.addrlab .r.f.f -side left 
+pack .r.f.f.addr .r.f.f.pad .r.f.f.padlock -side left -pady 2 -anchor n -fill x
 pack .r.c -side top -fill x -expand 1
 pack .r.c.rx -side left -fill x -expand 1
 pack .r.c.tx -side left -fill x -expand 1
 
 pack .l -side top -fill both -expand 1
-pack .l.f -side bottom -fill x -padx 2 -pady 2
-pack .l.f.title .l.f.addr -side top -pady 2 -anchor w -fill x
+#pack .l.f.title -side top -pady 2 -anchor w -fill x
 pack .l.t  -side top -fill both -expand 1 -padx 2
 pack .l.t.scr -side left -fill y
 pack .l.t.list -side left -fill both -expand 1
@@ -2122,12 +2215,12 @@
 frame $i.a -rel fl
 frame $i.a.f
 frame $i.a.f.f
-label $i.a.f.f.l -anchor w -justify left -text "Your communication can be secured with\nDES encryption.  Only conference participants\nwith the same key can receive audio data when\nencryption is enabled."
+label $i.a.f.f.l -anchor w -justify left -text "Your communication can be secured with\nDES or AES encryption.  Only conference participants\nwith the same key can receive audio data when\nencryption is enabled."
 pack $i.a.f.f.l
 pack $i.a -side top -fill both -expand 1
 label $i.a.f.f.lbl -text "Key:"
 entry $i.a.f.f.e -width 28 -textvariable key
-checkbutton $i.a.f.f.cb -text "Enabled" -variable key_var
+checkbutton $i.a.f.f.cb -text "Enabled" -variable key_var -command update_security_indicator
 pack $i.a.f -fill x -side left -expand 1
 pack $i.a.f.f
 pack $i.a.f.f.lbl $i.a.f.f.e $i.a.f.f.cb -side left -pady 4 -padx 2 -fill x
@@ -2327,8 +2420,9 @@
     mbus_send "R" "tool.rat.settings" ""
 }
 
+
 proc sync_engine_to_ui {} {
-    # make audio engine concur with ui
+    # make audio engine concur with ui - called when "Apply" button clicked
     global my_ssrc rtcp_name rtcp_email rtcp_phone rtcp_loc rtcp_note
     global prenc upp channel_var secenc layerenc red_off int_gap int_units
     global agc_var audio_loop_var echo_var
@@ -2379,8 +2473,10 @@
     #Security
     if {$key_var==1 && [string length $key]!=0} {
 	mbus_send "R" "security.encryption.key" [mbus_encode_str $key]
+	update_security_indicator 
     } else {
 	mbus_send "R" "security.encryption.key" [mbus_encode_str ""]
+	update_security_indicator 
     }
 
     #Interface
@@ -2692,7 +2788,7 @@
 help::add .r.c.rx.net.on  	"If pushed in, reception is muted." "rx_mute.au"
 help::add .r.c.rx.au.pow.bar  	"Indicates the loudness of the\nsound you are hearing." "rx_powermeter.au"
 
-help::add .l.f		"Name of the session, and the IP address, port\n&\
+help::add .r.f		"Name of the session, and the IP address, port\n&\
 		 	 TTL used to transmit the audio data." "session_title.au"
 help::add .l.t		"The participants in this session with you at the top.\nClick on a name\
                          with the left mouse button to display\ninformation on that participant,\



More information about the Sumover-dev mailing list