IPA_Emulation: Support keeping server alive after first client disconnects

Change-Id: I4c133a889df0a5a060b5c52a1ca40fa9b8695c2e
diff --git a/library/IPA_Emulation.ttcnpp b/library/IPA_Emulation.ttcnpp
index 60c6061..906664f 100644
--- a/library/IPA_Emulation.ttcnpp
+++ b/library/IPA_Emulation.ttcnpp
@@ -240,6 +240,9 @@
 	var IpaMode g_mode;
 	var boolean g_ccm_enabled;
 	var IpaInitBehavior g_init_behavior;
+	/* Shall we stop the component once the client disconnects, or keep
+	 * running to let next user in ? */
+	var boolean g_server_stop_on_ipa_ev_down := true;
 	var IPA_CCM_Parameters	g_ccm_pars := c_IPA_default_ccm_pars;
 }
 
@@ -549,11 +552,13 @@
 /* main function to use for a server-side IPA implementation */
 function main_server(charstring local_host, IPL4asp_Types.PortNumber local_port,
 		     boolean ccm_enabled := true,
-		     IpaInitBehavior init_behavior := IPA_INIT_SEND_IPA_ID_GET)
+		     IpaInitBehavior init_behavior := IPA_INIT_SEND_IPA_ID_GET,
+		     boolean server_stop_on_ipa_ev_down := true)
 runs on IPA_Emulation_CT {
 	g_mode := IPA_MODE_SERVER;
 	g_ccm_enabled := ccm_enabled;
 	g_init_behavior := init_behavior;
+	g_server_stop_on_ipa_ev_down := server_stop_on_ipa_ev_down;
 	f_bind(local_host, local_port);
 	ScanEvents();
 }
@@ -761,7 +766,9 @@
 			log("IPA: Closed");
 			g_self_conn_id := -1;
 			f_send_IPA_EVT(ts_ASP_IPA_EV(ASP_IPA_EVENT_DOWN, asp_evt.connClosed.connId));
-			self.stop;
+			if (g_mode != IPA_MODE_SERVER or g_server_stop_on_ipa_ev_down) {
+				self.stop;
+			}
 		}
 
 		[] IPA_PORT.receive(Socket_API_Definitions.PortEvent:{result:={errorCode:=ERROR_SOCKET, connId:=?, os_error_code:=?, os_error_text:=?}}) -> value port_evt {