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

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Thu Apr 3 19:18:56 BST 2008


Author: piers
Date: Thu Apr  3 19:18:54 2008
New Revision: 4134

Modified:
   rat/trunk/main_control.c
   rat/trunk/main_engine.c
   rat/trunk/main_ui.c

Log:
RAT now issues an error dialogue and quits when there are problems on startup (mbus rendezvous).

RAT now uses a timeout on [updated] rendezvous calls when RAT starts up and attempts rendezvous  between ratmedia and ratui. If the timeout is exceeded it is assumed that there is a problem - it usually indicates firewall/VPN problems. This also means that non-functioning ratmedia/ratui processes don't hang about after a failed startup. However it doesn't guarantee that rat processes won't hang around if other error conditions occur but this does mean the user is more aware of problems caused at startup - as opposed to being met with a silent exit.

Modified: rat/trunk/main_control.c
==============================================================================
--- rat/trunk/main_control.c	(original)
+++ rat/trunk/main_control.c	Thu Apr  3 19:18:54 2008
@@ -511,7 +511,10 @@
 	if (ui_enabled) {
 		token_u[0] = generate_token();
 		fork_process(UI_NAME, c_addr, &pid_ui, 1, token_u);
-		u_addr = mbus_rendezvous_waiting(m, "()", token_u[0], m);
+                if ((u_addr = mbus_rendezvous_waiting(m, "()", token_u[0], m, 300000000)) == NULL) {
+                    fatal_error("RAT v" RAT_VERSION, "MBUS Failed to rendezvous with UI - Likely firewall/VPN issue");
+                    return FALSE;
+                }
 	}
 
 	token_e[0] = generate_token();
@@ -520,7 +523,10 @@
         should_exit = FALSE;
 	for (i = 0; i < num_sessions; i++) {
 		debug_msg("Waiting for %s from media engine...\n", token_e[i]);
-		e_addr[i] = mbus_rendezvous_waiting(m, "()", token_e[i], m);
+                if ((e_addr[i] = mbus_rendezvous_waiting(m, "()", token_e[i], m, 200000000)) == NULL ) {
+                    fatal_error("RAT v" RAT_VERSION, "Failed to rendezvous with UI - Likely firewall/VPN issue");
+                    return FALSE;
+                }
 		debug_msg("...got it (%s)\n",e_addr[i]);
 	}
 
@@ -528,12 +534,18 @@
 		char	*peer;
 
 		if (ui_enabled) {
-			peer = mbus_rendezvous_go(m, token_u[0], (void *) m);
-			debug_msg("User interface is %s\n", peer);
+                    if ((peer = mbus_rendezvous_go(m, token_u[0], (void *) m, 200000000)) == NULL) {
+                               fatal_error("RAT v" RAT_VERSION, "Failed to rendezvous with UI - Likely firewall/VPN issue");
+                               return FALSE;
+                    }
+                    debug_msg("User interface is %s\n", peer);
 		}
 		for (i = 0; i < num_sessions; i++) {
-			peer = mbus_rendezvous_go(m, token_e[i], (void *) m);
-			debug_msg("Media engine %d is %s\n", i, peer);
+                    if ((peer = mbus_rendezvous_go(m, token_e[i], (void *) m, 200000000)) == NULL) {
+                               fatal_error("RAT v" RAT_VERSION, "Failed to rendezvous with UI - Likely firewall/VPN issue");
+                               return FALSE;
+                    }
+                    debug_msg("Media engine %d is %s\n", i, peer);
 		}
 		debug_msg("Parsing options\n");
 		for (i = 0; i < num_sessions; i++) {

Modified: rat/trunk/main_engine.c
==============================================================================
--- rat/trunk/main_engine.c	(original)
+++ rat/trunk/main_engine.c	Thu Apr  3 19:18:54 2008
@@ -125,9 +125,9 @@
         /* Ignore error we're closing down anyway */
 }
 
-static void rendezvous_with_controller(session_t *sp[2])
+int rendezvous_with_controller(session_t *sp[2])
 {
-	int		i, j, done;
+	int		i, j, done, waiting_limitcount=0;
 	struct timeval	timeout;
 
 	/* Signal to the controller that we are ready to go. It should be sending us an     */
@@ -153,6 +153,9 @@
 				debug_msg("Sending mbus.go(%s) to controller...\n", token[j]);
 				mbus_qmsgf(sp[j]->mbus_engine, c_addr, TRUE, "mbus.go", "%s", token_e[j]);
 			}
+                        /* Wait till 3000*10000 (20secs) - otherwise it is an error */
+                        if (waiting_limitcount++>2000)
+                                return FALSE;
 		}
 	} while (!done);
 	debug_msg("Got all needed mbus.waiting() messages from controller\n");
@@ -199,6 +202,7 @@
 	for (i = 0; i < num_sessions; i++) {
 		assert(sp[i]->rtp_session[0] != NULL);
 	}
+        return TRUE;
 }
 
 int main(int argc, char *argv[])
@@ -209,6 +213,10 @@
 	struct timeval	 timeout;
         uint8_t		 i, j;
 
+        debug_msg("Ratmedia started\n");
+
+        Sleep(10000);
+
 #ifdef WIN32
 	SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
 #else
@@ -250,7 +258,10 @@
 		sp[1]->other_session = sp[0];
 	}
 
-	rendezvous_with_controller(sp);
+        if (rendezvous_with_controller(sp)==NULL) {
+		fatal_error("RAT v" RAT_VERSION, "RATmedia could not rendezvous_with_controller - Firewall/VPN problem");
+                return FALSE;
+        }
 
         /* Moved session[0] setup to rx_rtp_addr so one may change addr
            binding dynamically */

Modified: rat/trunk/main_ui.c
==============================================================================
--- rat/trunk/main_ui.c	(original)
+++ rat/trunk/main_ui.c	Thu Apr  3 19:18:54 2008
@@ -127,16 +127,23 @@
 	/* us an mbus.waiting(foo) where "foo" is the same as the "-token" argument we were */
 	/* passed on startup. We respond with mbus.go(foo) sent reliably to the controller. */
 	debug_msg("Waiting for mbus.waiting(%s) from controller...\n", token);
-	mbus_rendezvous_go(m, token, (void *) m);
-	debug_msg("...got it\n");
+        if (mbus_rendezvous_go(m, token, (void *) m, 200000000) == NULL) {
+            fatal_error("RAT v" RAT_VERSION, "UI failed mbus.waiting rendezvous with controller");
+            return FALSE;
+        }
+
+        debug_msg("...got it\n");
 
 	/* At this point we know the mbus address of our controller, and have conducted   */
 	/* a successful rendezvous with it. It will now send us configuration commands.   */
 	/* We do mbus.waiting(foo) where "foo" is the original token. The controller will */
 	/* eventually respond with mbus.go(foo) when it has finished sending us commands. */
 	debug_msg("Waiting for mbus.go(%s) from controller...\n", token);
-	mbus_rendezvous_waiting(m, c_addr, token, (void *) m);
-	debug_msg("...got it\n");
+        if ((mbus_rendezvous_waiting(m, c_addr, token, (void *) m, 200000000)) == NULL) {
+            fatal_error("RAT v" RAT_VERSION, "UI failed mbus.go rendezvous with controller");
+            return FALSE;
+        }
+        debug_msg("...got it\n");
 
 	/* Okay, we wait for the media engine to solicit for a user interface... */
 	debug_msg("Waiting for mbus.waiting(rat-ui-requested) from media engine...\n");



More information about the Sumover-dev mailing list