Branch: master

cd13be07 2015-09-24 21:27:20 Timothy Pearson
Reuse existing reserved session if present on card insertion
M tdm/cryptocardwatcher/watcher.cc
diff --git a/tdm/cryptocardwatcher/watcher.cc b/tdm/cryptocardwatcher/watcher.cc
index e258211..021f599 100644
--- a/tdm/cryptocardwatcher/watcher.cc
+++ b/tdm/cryptocardwatcher/watcher.cc
@@ -56,6 +56,9 @@
 		DM dm;
 		SessList sess;
 		bool user_active = false;
+		bool unused_session_available = false;
+		bool unused_session_active = false;
+		int unused_session_vt_number = -1;
 		if (dm.localSessions(sess)) {
 			TQString user, loc;
 			for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) {
@@ -63,18 +66,30 @@
 				if (user.startsWith(login_name + ": ")) {
 					// Found active session
 					user_active = true;
+					break;
 				}
 				if (user == "Unused") {
+					// Found active unused session
+					unused_session_available = true;
+					unused_session_vt_number = (*it).vt;
 					if ((*it).vt == dm.activeVT()) {
-						// Found active unused session
-						user_active = true;
+						unused_session_active = true;
+						break;
 					}
 				}
 			}
 		}
-		if (!user_active) {
-			// Activate new VT
-			DM().startReserve();
+		if (!user_active || unused_session_available) {
+			if (unused_session_available) {
+				if (!unused_session_active) {
+					// Switch to unused VT
+					DM().switchVT(unused_session_vt_number);
+				}
+			}
+			else {
+				// Activate new VT
+				DM().startReserve();
+			}
 		}
 	}
 }