BSSMAP_Emulation: Fix handling of userData

We cannot pass an unbound octetstring record member into a template
argument of a function :/
diff --git a/library/BSSMAP_Emulation.ttcn b/library/BSSMAP_Emulation.ttcn
index 9e4d5c3..5cf5342 100644
--- a/library/BSSMAP_Emulation.ttcn
+++ b/library/BSSMAP_Emulation.ttcn
@@ -145,12 +145,8 @@
 }
 
 /* handle (optional) userData portion of various primitives and dispatch it to the client */
-private function f_handle_userData(BSSAP_ConnHdlr client, template octetstring userdata)
+private function f_handle_userData(BSSAP_ConnHdlr client, octetstring userdata)
 runs on BSSMAP_Emulation_CT {
-	if (not isvalue(userdata)) {
-		return;
-	}
-
 	/* decode + send decoded BSSAP to client */
 	var PDU_BSSAP bssap := dec_PDU_BSSAP(valueof(userdata));
 	CLIENT.send(bssap) to client;
@@ -212,13 +208,17 @@
 		/* SCCP -> Client: connection-oriented data in existing connection */
 		[] SCCP.receive(ASP_SCCP_N_DATA_ind:?) -> value data_ind {
 			vc_conn := f_comp_by_conn_id(data_ind.connectionId);
-			f_handle_userData(vc_conn, conn_ind.userData);
+			if (ispresent(data_ind.userData)) {
+				f_handle_userData(vc_conn, data_ind.userData);
+			}
 			}
 
 		/* SCCP -> Client: disconnect of an existing connection */
 		[] SCCP.receive(ASP_SCCP_N_DISCONNECT_ind:?) -> value disc_ind {
 			vc_conn := f_comp_by_conn_id(disc_ind.connectionId);
-			f_handle_userData(vc_conn, disc_ind.userData);
+			if (ispresent(disc_ind.userData)) {
+				f_handle_userData(vc_conn, disc_ind.userData);
+			}
 			/* notify client about termination */
 			var BSSAP_Conn_Prim prim := MSC_CONN_PRIM_DISC_IND;
 			CLIENT.send(prim) to vc_conn;
@@ -229,7 +229,9 @@
 		/* SCCP -> Client: connection confirm for outbound connection */
 		[] SCCP.receive(ASP_SCCP_N_CONNECT_cfm:?) -> value conn_cfm {
 			/* handle user payload */
-			f_handle_userData(vc_conn, conn_cfm.userData);
+			if (ispresent(conn_cfm.userData)) {
+				f_handle_userData(vc_conn, conn_cfm.userData);
+			}
 			}
 
 		/* Disconnect request client -> SCCP */