laforge has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40980?usp=email )
Change subject: es2p_Types_JSON: add ES2p JSON encoder/decoder
......................................................................
es2p_Types_JSON: add ES2p JSON encoder/decoder
This patch adds ES2p encoder/decoder functions.
Change-Id: Ic6e230bdd0b2c43a5183cd1f53b930e6f3c53e66
Related: SYS#7339
---
A library/euicc/es2p_Types_JSON.ttcn
1 file changed, 453 insertions(+), 0 deletions(-)
Approvals:
laforge: Looks good to me, approved
Jenkins Builder: Verified
pespin: Looks good to me, but someone else must approve
diff --git a/library/euicc/es2p_Types_JSON.ttcn b/library/euicc/es2p_Types_JSON.ttcn
new file mode 100644
index 0000000..6a29aed
--- /dev/null
+++ b/library/euicc/es2p_Types_JSON.ttcn
@@ -0,0 +1,453 @@
+/* JSON message definitions for ES2+
+ *
+ * Author: Philipp Maier <pmaier(a)sysmocom.de> / sysmocom - s.f.m.c. GmbH
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+module es2p_Types_JSON {
+
+import from esx_header_Types_JSON all;
+
+/* GSMA SGP.22, section 6.5.2.1 (MNO to SMDP+) */
+type record JSON_ES2p_DownloadOrderRequest {
+ JSON_ESx_RequestHeader header,
+ charstring eid optional,
+ charstring iccid optional,
+ charstring profileType optional
+};
+
+
+/* GSMA SGP.22, section 6.5.2.1 (SMDP+ to MNO) */
+type record JSON_ES2p_DownloadOrderResponse {
+ JSON_ESx_ResponseHeader header,
+ charstring iccid
+};
+private external function dec_JSON_ES2p_DownloadOrderRequest(in octetstring stream)
+ return JSON_ES2p_DownloadOrderRequest
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+private external function dec_JSON_ES2p_DownloadOrderResponse(in octetstring stream)
+ return JSON_ES2p_DownloadOrderResponse
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+
+
+/* GSMA SGP.22, section 6.5.2.2 (MNO to SMDP+) */
+type record JSON_ES2p_ConfirmOrderRequest {
+ JSON_ESx_RequestHeader header,
+ charstring iccid,
+ charstring eid optional,
+ charstring matchingId optional,
+ charstring confirmationCode optional,
+ charstring smdsAddress optional,
+ boolean releaseFlag
+};
+
+
+/* GSMA SGP.22, section 6.5.2.2 (SMDP+ to MNO) */
+type record JSON_ES2p_ConfirmOrderResponse {
+ JSON_ESx_ResponseHeader header,
+ charstring eid optional,
+ charstring matchingId optional,
+ charstring smdpAddress optional
+};
+private external function dec_JSON_ES2p_ConfirmOrderRequest(in octetstring stream)
+ return JSON_ES2p_ConfirmOrderRequest
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+private external function dec_JSON_ES2p_ConfirmOrderResponse(in octetstring stream)
+ return JSON_ES2p_ConfirmOrderResponse
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+
+
+/* GSMA SGP.22, section 6.5.2.3 (MNO to SMDP+) */
+type record JSON_ES2p_CancelOrderRequest {
+ JSON_ESx_RequestHeader header,
+ charstring iccid,
+ charstring eid optional,
+ charstring matchingId optional,
+ charstring finalProfileStatusIndicator optional
+};
+
+
+/* GSMA SGP.22, section 6.5.2.3 (SMDP+ to MNO) */
+type record JSON_ES2p_CancelOrderResponse {
+ JSON_ESx_ResponseHeader header,
+ charstring iccid
+};
+private external function dec_JSON_ES2p_CancelOrderRequest(in octetstring stream)
+ return JSON_ES2p_CancelOrderRequest
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+private external function dec_JSON_ES2p_CancelOrderResponse(in octetstring stream)
+ return JSON_ES2p_CancelOrderResponse
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+
+
+/* GSMA SGP.22, section 6.5.2.4 (MNO to SMDP+) */
+type record JSON_ES2p_ReleaseProfileRequest {
+ JSON_ESx_RequestHeader header,
+ charstring iccid
+};
+
+
+/* GSMA SGP.22, section 6.5.2.4 (SMDP+ to MNO) */
+type record JSON_ES2p_ReleaseProfileResponse {
+ JSON_ESx_ResponseHeader header
+};
+private external function dec_JSON_ES2p_ReleaseProfileRequest(in octetstring stream)
+ return JSON_ES2p_ReleaseProfileRequest
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+private external function dec_JSON_ES2p_ReleaseProfileResponse(in octetstring stream)
+ return JSON_ES2p_ReleaseProfileResponse
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+
+
+/* GSMA SGP.22, section 6.5.2.5 (SMDP+ to MNO) */
+type record JSON_ES2p_HandleDownloadProgressInfoRequest {
+ JSON_ESx_RequestHeader header,
+ charstring eid optional,
+ charstring iccid,
+ charstring profileType,
+ charstring timestamp,
+ integer notificationPointId,
+ record {
+ charstring status,
+ record {
+ charstring subjectCode,
+ charstring reasonCode,
+ charstring subjectIdentifier optional,
+ charstring message_ optional
+ } statusCodeData optional
+ } notificationPointStatus,
+ charstring resultData optional
+};
+external function enc_JSON_ES2p_HandleDownloadProgressInfoRequest(in
JSON_ES2p_HandleDownloadProgressInfoRequest msg)
+ return octetstring
+with {
+ extension "prototype (convert) encode(JSON)";
+ extension "printing(pretty)";
+ extension "errorbehavior(ALL:ERROR)"
+}
+external function dec_JSON_ES2p_HandleDownloadProgressInfoRequest(in octetstring stream)
+ return JSON_ES2p_HandleDownloadProgressInfoRequest
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+
+
+/* GSMA SGP.22, section 6.5.2.5 (MNO+ to SMDP+) */
+type record JSON_ES2p_HandleDownloadProgressInfoResponse {
+ JSON_ESx_ResponseHeader header
+};
+
+external function enc_JSON_ES2p_HandleDownloadProgressInfoResponse(in
JSON_ES2p_HandleDownloadProgressInfoResponse msg)
+ return octetstring
+with {
+ extension "prototype (convert) encode(JSON)";
+ extension "printing(pretty)";
+ extension "errorbehavior(ALL:ERROR)"
+}
+external function dec_JSON_ES2p_HandleDownloadProgressInfoResponse(in octetstring
stream)
+ return JSON_ES2p_HandleDownloadProgressInfoResponse
+with {
+ extension "prototype (convert) decode(JSON)"
+ extension "errorbehavior(ALL:ERROR)"
+}
+
+
+/* Definition for JSON ES2+ requests (MNO to SMDP+) */
+type union JSON_ES2p_Request {
+ JSON_ES2p_DownloadOrderRequest downloadOrderRequest,
+ JSON_ES2p_ConfirmOrderRequest confirmOrderRequest,
+ JSON_ES2p_CancelOrderRequest cancelOrderRequest,
+ JSON_ES2p_ReleaseProfileRequest releaseProfileRequest
+} with {
+ variant "JSON : as value"
+}
+external function enc_JSON_ES2p_Request(in JSON_ES2p_Request msg) return octetstring
+with {
+ extension "prototype (convert) encode(JSON)";
+ extension "printing(pretty)";
+ extension "errorbehavior(ALL:ERROR)"
+}
+function dec_JSON_ES2p_Request(in octetstring stream, charstring functionName) return
JSON_ES2p_Request
+{
+ /* Unfortunately the ES2p message definitions are ambiguous, so that it is not possible
to reliably detect
+ * the message type without knowing further context (funtionName). */
+
+ var JSON_ES2p_Request request;
+
+ if (functionName == "downloadOrder") {
+ request.downloadOrderRequest := dec_JSON_ES2p_DownloadOrderRequest(stream);
+ } else if (functionName == "confirmOrder") {
+ request.confirmOrderRequest := dec_JSON_ES2p_ConfirmOrderRequest(stream);
+ } else if (functionName == "cancelOrder") {
+ request.cancelOrderRequest := dec_JSON_ES2p_CancelOrderRequest(stream);
+ } else if (functionName == "releaseProfile") {
+ request.releaseProfileRequest := dec_JSON_ES2p_ReleaseProfileRequest(stream);
+ } else {
+ setverdict(fail, "unknown JSON ES2+ function selected for decoding!");
+ }
+
+ return request;
+}
+
+
+/* Definition for JSON ES2+ responses (SMDP+ to MNO) */
+type union JSON_ES2p_Response
+{
+ JSON_ES2p_DownloadOrderResponse downloadOrderResponse,
+ JSON_ES2p_ConfirmOrderResponse confirmOrderResponse,
+ JSON_ES2p_CancelOrderResponse cancelOrderResponse,
+ JSON_ES2p_ReleaseProfileResponse releaseProfileResponse
+} with {
+ variant "JSON : as value"
+}
+external function enc_JSON_ES2p_Response(in JSON_ES2p_Response msg) return octetstring
+with {
+ extension "prototype (convert) encode(JSON)";
+ extension "printing(pretty)";
+ extension "errorbehavior(ALL:ERROR)"
+}
+function dec_JSON_ES2p_Response(in octetstring stream, charstring functionName) return
JSON_ES2p_Response
+{
+ /* Unfortunately the ES2p message definitions are ambiguous, so that it is not possible
to reliably detect
+ * the message type without knowing further context (funtionName). */
+
+ var JSON_ES2p_Response response;
+
+ if (functionName == "downloadOrder") {
+ response.downloadOrderResponse := dec_JSON_ES2p_DownloadOrderResponse(stream);
+ } else if (functionName == "confirmOrder") {
+ response.confirmOrderResponse := dec_JSON_ES2p_ConfirmOrderResponse(stream);
+ } else if (functionName == "cancelOrder") {
+ response.cancelOrderResponse := dec_JSON_ES2p_CancelOrderResponse(stream);
+ } else if (functionName == "releaseProfile") {
+ response.releaseProfileResponse := dec_JSON_ES2p_ReleaseProfileResponse(stream);
+ } else {
+ setverdict(fail, "unknown JSON ES2+ function selected for decoding!");
+ }
+
+ return response;
+}
+
+
+/* GSMA SGP.22, section 6.5.2.1 */
+template (value) JSON_ES2p_Request
+ts_downloadOrderRequest := {
+ downloadOrderRequest := {
+ header := ts_requestHeader,
+ eid := omit,
+ iccid := "123456789ABCDEFFAAAA",
+ profileType := omit
+ }
+}
+template (present) JSON_ES2p_Request
+tr_downloadOrderRequest := {
+ downloadOrderRequest := {
+ header := tr_requestHeader,
+ eid := *,
+ iccid := *,
+ profileType := *
+ }
+}
+
+template (value) JSON_ES2p_Response
+ts_downloadOrderResponse := {
+ downloadOrderResponse := {
+ header := ts_responseHeader,
+ iccid := "123456789012345"
+ }
+}
+template (present) JSON_ES2p_Response
+tr_downloadOrderResponse := {
+ downloadOrderResponse := {
+ header := tr_responseHeader,
+ iccid := ?
+ }
+}
+
+
+/* GSMA SGP.22, section 6.5.2.2 */
+template (value) JSON_ES2p_Request
+ts_confirmOrderRequest := {
+ confirmOrderRequest := {
+ header := ts_requestHeader,
+ iccid := "123456789ABCDEFFAAAA",
+ eid := omit,
+ matchingId := omit,
+ confirmationCode := omit,
+ smdsAddress := omit,
+ releaseFlag := false
+ }
+}
+template (present) JSON_ES2p_Request
+tr_confirmOrderRequest := {
+ confirmOrderRequest := {
+ header := tr_requestHeader,
+ iccid := ?,
+ eid := *,
+ matchingId := *,
+ confirmationCode := *,
+ smdsAddress := *,
+ releaseFlag := ?
+ }
+}
+
+template (value) JSON_ES2p_Response
+ts_confirmOrderResponse := {
+ confirmOrderResponse := {
+ header := ts_responseHeader,
+ eid := omit,
+ matchingId := omit,
+ smdpAddress := omit
+ }
+}
+template (present) JSON_ES2p_Response
+tr_confirmOrderResponse := {
+ confirmOrderResponse := {
+ header := tr_responseHeader,
+ eid := *,
+ matchingId := *,
+ smdpAddress := *
+ }
+}
+
+
+/* GSMA SGP.22, section 6.5.2.3 */
+template (value) JSON_ES2p_Request
+ts_cancelOrderRequest := {
+ cancelOrderRequest := {
+ header := ts_requestHeader,
+ iccid := "123456789ABCDEFFAAAA",
+ eid := omit,
+ matchingId := omit,
+ finalProfileStatusIndicator := omit
+ }
+}
+template (present) JSON_ES2p_Request
+tr_cancelOrderRequest := {
+ cancelOrderRequest := {
+ header := tr_requestHeader,
+ iccid := ?,
+ eid := *,
+ matchingId := *,
+ finalProfileStatusIndicator := *
+ }
+}
+
+template (value) JSON_ES2p_Response
+ts_cancelOrderResponse := {
+ cancelOrderResponse := {
+ header := ts_responseHeader,
+ iccid := "123456789012345"
+ }
+}
+template (present) JSON_ES2p_Response
+tr_cancelOrderResponse := {
+ cancelOrderResponse := {
+ header := tr_responseHeader,
+ iccid := ?
+ }
+}
+
+
+/* GSMA SGP.22, section 6.5.2.4 */
+template (value) JSON_ES2p_Request
+ts_releaseProfileRequest := {
+ releaseProfileRequest := {
+ header := ts_requestHeader,
+ iccid := "123456789012345"
+ }
+}
+template (present) JSON_ES2p_Request
+tr_releaseProfileRequest := {
+ releaseProfileRequest := {
+ header := tr_requestHeader,
+ iccid := ?
+ }
+}
+
+template (value) JSON_ES2p_Response
+ts_releaseProfileResponse := {
+ releaseProfileResponse := {
+ header := ts_responseHeader
+ }
+}
+template (present) JSON_ES2p_Response
+tr_releaseProfileResponse := {
+ releaseProfileResponse := {
+ header := tr_responseHeader
+ }
+}
+
+
+/* GSMA SGP.22, section 6.5.2.5 */
+template (value) JSON_ES2p_HandleDownloadProgressInfoRequest
+ts_handleDownloadProgressInfoRequest := {
+ header := ts_requestHeader,
+ eid := omit,
+ iccid := "123456789012345",
+ profileType := "THIS_IS_A_PROFILE_TYPE",
+ timestamp := "1970-01-01T00:00:00.511Z",
+ notificationPointId := 1,
+ notificationPointStatus := {
+ status := "Executed-Success",
+ statusCodeData := omit
+ },
+ resultData := omit
+}
+template (present) JSON_ES2p_HandleDownloadProgressInfoRequest
+tr_handleDownloadProgressInfoRequest := {
+ header := tr_requestHeader,
+ eid := *,
+ iccid := ?,
+ profileType := ?,
+ timestamp := ?,
+ notificationPointId := ?,
+ notificationPointStatus := {
+ status := ?,
+ statusCodeData := *
+ },
+ resultData := *
+}
+
+template (value) JSON_ES2p_HandleDownloadProgressInfoResponse
+ts_handleDownloadProgressInfoResponse := {
+ header := ts_responseHeader
+}
+template (present) JSON_ES2p_HandleDownloadProgressInfoResponse
+tr_handleDownloadProgressInfoResponse := {
+ header := tr_responseHeader
+}
+
+
+} with {
+ encode "JSON";
+}
--
To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40980?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ic6e230bdd0b2c43a5183cd1f53b930e6f3c53e66
Gerrit-Change-Number: 40980
Gerrit-PatchSet: 3
Gerrit-Owner: Hoernchen <ewild(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>