Initial commit

Signed-off-by: Gabor Szalai <gabor.szalai@ericsson.com>
diff --git a/5G_system_TS29508_Nsmf_CNL113884.tpd b/5G_system_TS29508_Nsmf_CNL113884.tpd
new file mode 100644
index 0000000..a23ebe6
--- /dev/null
+++ b/5G_system_TS29508_Nsmf_CNL113884.tpd
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>5G_system_TS29508_Nsmf_CNL113884</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="5G_system_TS29571_CommonData_CNL113880" projectLocationURI="../5G_system_TS29571_CommonData_CNL113880/5G_system_TS29571_CommonData_CNL113880.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/TS29508_Nsmf_EventExposure.ttcn" relativeURI="src/TS29508_Nsmf_EventExposure.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/5G_system_TS29508_Nsmf_CNL113884</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
\ No newline at end of file
diff --git a/doc/5G_system_TS29508_Nsmf_Description.adoc b/doc/5G_system_TS29508_Nsmf_Description.adoc
new file mode 100644
index 0000000..580b49a
--- /dev/null
+++ b/doc/5G_system_TS29508_Nsmf_Description.adoc
@@ -0,0 +1,72 @@
+= 5G system TS29508 Nsmf Protocol Modules for TTCN-3 Toolset with TITAN, Description
+:author: Gábor Szalai
+:toc: left
+
+== About This Document
+
+This is the description for the 5G system TS29508 Nsmf protocol module. The 5G system TS29508 Nsmf protocol modules are developed for the TTCN-3 Toolset with Titan. 
+
+== Functionality
+
+The 5G system TS29508 Nsmf protocol module implements the object structures of the 3GPP TS 29508 v15.1.0<<_5, [5]>> in a formalized way, using the standard specification language TTCN-3. This allows defining of test data (templates) in the TTCN-3 language and correctly encoding/decoding messages when executing test suites using the Titan TTCN-3 test environment.
+The 5G system TS29508 Nsmf protocol module uses Titan’s JSON encoding <<_3, [3]>> and hence is usable with the Titan test toolset only.
+
+=== System Requirements
+Protocol modules are a set of TTCN-3 source code files that can be used as part of TTCN-3 test suites only. Hence, protocol modules alone do not put specific requirements on the system used. However, in order to compile and execute a TTCN-3 test suite using the set of protocol modules the following system requirements must be satisfied:
+
+* Titan TTCN-3 Test Executor version CRL 113 200/6 R5A (6.5.pl0) or higher installed. For Installation Guide see <<_2, [2]>>. Please note: This version of the test port is not compatible with Titan releases earlier than CRL 113 200/6 R5A.
+
+===	Installation
+The set of protocol modules can be used in developing TTCN-3 test suites using any text editor. Since the 5G system TS29508 Nsmf protocol is used as a part of a TTCN-3 test suite, this requires TTCN-3 Test Executor be installed before the module can be compiled and executed together with other parts of the test suite. For more details on the installation of TTCN-3 Test Executor see the relevant section of <<_2, [2]>>.
+
+== Interface description
+
+=== Encoding/decoding and other related functions
+This product also contains encoding/decoding functions, which assure correct encoding of messages when sent from Titan and correct decoding of messages when received by Titan. 
+
+==== Implemented encoding and decoding functions
+
+[source]
+----
+Name	Type of formal parameters	Type of return value
+f_enc_Nsmf_EventExposure(in Nsmf_EventExposure pdu) return octetstring 
+f_dec_Nsmf_EventExposure(in octetstring stream, out Nsmf_EventExposure pdu) return integer 
+f_enc_Nsmf_EventExposureNotification(in Nsmf_EventExposureNotification pdu) return octetstring 
+f_dec_Nsmf_EventExposureNotification(in octetstring stream, out Nsmf_EventExposureNotification pdu) return integer 
+----
+
+== Usage
+
+The protocol module provides abstract data types for JSON objects used by the services defined in the standard <<_5, [5]>>. The protocol module provides encoder and decoder functions for the JSON objects. The decoder validates the received JSON object based on the JSON schema as well. Only the validated JSON value is decoded.
+
+== Terminology	
+
+=== Abbreviations
+
+JSON:: JavaScript Object Notation
+
+PDU:: Protocol Data Unit
+
+TTCN-3:: Testing and Test Control Notation version 3
+
+== References
+
+[[_1]]
+[1]	ETSI ES 201 873-1 v4.4.1 (2012-04) +
+The Testing and Test Control Notation version 3. Part 1: Core Language
+
+[[_2]]
+[2]	1/ 198 17-CRL 113 200/6 Uen +
+Installation Guide for the TITAN TTCN-3 Test Executor
+
+[[_3]]
+[3]	2/198 17-CRL 113 200/6 Uen +
+Programmer's Technical Reference for Titan TTCN-3 Test Executor
+
+[[_4]]
+[4]	https://www.json.org
+
+[[_5]]
+[5] 3GPP TS 29508 v15.1.0+
+5G System; Session Management Services; Stage 3
+
diff --git a/doc/change.log b/doc/change.log
new file mode 100644
index 0000000..c4c7d49
--- /dev/null
+++ b/doc/change.log
@@ -0,0 +1,9 @@
+= 5G system TS29508 Nsmf Protocol Modules for TTCN-3 Toolset with TITAN, Change log

+:author: Gábor Szalai

+:toc: left

+

+== Changes

+

+=== R1A

+

+Initial revision
\ No newline at end of file
diff --git a/src/TS29508_Nsmf_EventExposure.ttcn b/src/TS29508_Nsmf_EventExposure.ttcn
new file mode 100644
index 0000000..38f32d6
--- /dev/null
+++ b/src/TS29508_Nsmf_EventExposure.ttcn
@@ -0,0 +1,111 @@
+/******************************************************************************
+* Copyright (c) 2000-2019  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+*   Gabor Szalai - initial implementation and initial documentation
+******************************************************************************/
+//
+//  File:               TS29508_Nsmf_EventExposure.ttcn
+//  Description:	      Type definitions for 3GPP TS29508
+/////////////////////////////////////////////// 
+module TS29508_Nsmf_EventExposure {
+
+  import from TS29571_CommonData all
+
+  external function f_enc_Nsmf_EventExposure(in Nsmf_EventExposure pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_Nsmf_EventExposure(in octetstring stream, out Nsmf_EventExposure pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+  external function f_enc_Nsmf_EventExposureNotification(in Nsmf_EventExposureNotification pdu) return octetstring 
+  with { extension "prototype(convert) encode(JSON)" }
+
+  external function f_dec_Nsmf_EventExposureNotification(in octetstring stream, out Nsmf_EventExposureNotification pdu) return integer 
+  with { extension "prototype(backtrack) decode(JSON)" }
+
+
+  type set Nsmf_EventExposure {
+    TS29571_CommonData.Supi    supi optional,
+    TS29571_CommonData.Dnn    dnn optional,
+    TS29571_CommonData.GroupId    groupId optional,
+    TS29571_CommonData.PduSessionId    pduSeId optional,
+    SubId    subId optional,
+    charstring notifId,
+    TS29571_CommonData.Uri    notifUri,
+    set of       TS29571_CommonData.Ipv4Addr    altNotifIpv4Addrs optional,
+    set of       TS29571_CommonData.Ipv6Addr    altNotifIpv6Addrs optional,
+    set of       EventSubscription    eventSubs,
+    TS29571_CommonData.Guami    guami optional,
+    charstring serviveName optional,
+    TS29571_CommonData.SupportedFeatures    supportedFeatures optional
+  }
+
+  type set Nsmf_EventExposureNotification {
+    charstring notifId,
+    set of       EventNotification    eventNotifs
+  }
+
+  type set EventSubscription {
+    SmfEvent    event,
+    NotificationMethod    notifMethod optional,
+    TS29571_CommonData.Uinteger    maxReportNbr optional,
+    TS29571_CommonData.DurationSec    monDur optional,
+    TS29571_CommonData.DurationSec    repPeriod optional,
+    TS29571_CommonData.DnaiChangeType    dnaiChgType optional
+  }
+
+  type set EventNotification {
+    SmfEvent    event,
+    TS29571_CommonData.DateTime    timeStamp,
+    TS29571_CommonData.Dnai    sourceDnai optional,
+    TS29571_CommonData.Dnai    targetDnai optional,
+    TS29571_CommonData.DnaiChangeType    dnaiChgType optional,
+    TS29571_CommonData.Ipv4Addr    sourceUeIpv4Addr optional,
+    TS29571_CommonData.Ipv6Prefix    sourceUeIpv6Prefix optional,
+    TS29571_CommonData.Ipv4Addr    targetUeIpv4Addr optional,
+    TS29571_CommonData.Ipv6Prefix    targetUeIpv6Prefix optional,
+    TS29571_CommonData.RouteToLocation    sourceTraRouting optional,
+    TS29571_CommonData.RouteToLocation    targetTraRouting optional,
+    TS29571_CommonData.Ipv4Addr    adIpv4Addr optional,
+    TS29571_CommonData.Ipv6Prefix    adIpv6Prefix optional,
+    TS29571_CommonData.Ipv4Addr    reIpv4Addr optional,
+    TS29571_CommonData.Ipv6Prefix    reIpv6Prefix optional,
+    TS29571_CommonData.PlmnId    plmnId optional,
+    TS29571_CommonData.AccessType    accType optional,
+    TS29571_CommonData.PduSessionId    pduSeId optional
+  }
+
+  type charstring SubId
+
+  type enumerated SmfEvent_enum { AC_TY_CH, TRA_ROUT_CH, DNAI_CH, PDU_SES_REL, PLMN_CH, UE_IP_CH}
+
+  type union SmfEvent {
+    SmfEvent_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+  type enumerated NotificationMethod_enum { PERIODIC, ONE_TIME, ON_EVENT_DETECTION}
+
+  type union NotificationMethod {
+    NotificationMethod_enum  enum_val,
+    charstring           other_val
+  } with {
+    variant "JSON: as value"
+  }
+
+
+
+
+
+
+} with {
+  encode "JSON"
+}